You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GRXML中实现条件逻辑?NUANCE ASR语音识别语法开发需求

区分"Don't Know"与有效保险号的GRXML语法调整方案

我懂你现在的困扰——得在Nuance ASR里精准区分用户给出有效保险号和表示不知道(比如"don't know")的两种场景,触发不同的业务操作。针对你现有的GRXML语法,我来帮你调整实现这个需求:

核心思路

在公共规则_alpha里新增一个分支,专门匹配"don't know"这类表达,同时保留原有的保险号匹配逻辑,这样ASR就能明确区分两种情况,返回不同的语义结果供应用层处理。

修改后的完整GRXML代码

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<grammar xmlns="http://www.w3.org/2001/06/grammar" xml:lang="en-GB" root="_alpha" version="1.0" mode="voice" tag-format="swi-semantics/1.0">
  <rule id="_alpha" scope="public">
    <one-of>
      <!-- 匹配用户表示不知道的情况 -->
      <item>
        <one-of>
          <item>don't know</item>
          <item>i don't know</item>
          <item>no idea</item>
          <item>i have no idea</item>
        </one-of>
        <tag>SWI_meaning = "unknown"</tag>
      </item>
      <!-- 保留原有的保险号匹配逻辑 -->
      <item>
        <ruleref uri="#alpha"/>
        <tag>
          /* Only some letters allowed in prefix and suffix */
          var alpharegex = /^([A-CEGHJ-PR-TW-Z]){1}([A-CEGHJ-NPR-TW-Z]){1}([0-9]){2}([0-9]){2}([0-9]){2}([A-D ]){1}?$/;
          if ( !alpharegex.test(nino.out) ) SWI_disallow = 1;
          SWI_meaning = alpha.out;
        </tag>
      </item>
    </one-of>
  </rule>
  <rule id="alpha">
    <ruleref special="GARBAGE"/>
    <ruleref uri="#prefix"/><tag>out = prefix.out</tag>
    <ruleref uri="#digits"/><tag>out += digits.out</tag>
    <ruleref uri="#suffix"/><tag>out += suffix.out</tag>
  </rule>
  <rule id="prefix">
    <tag>out = '';</tag>
    <item repeat="2">
      <one-of>
        <item><tag>out += 'A'</tag>a</item>
        <item><tag>out += 'B'</tag>b</item>
        <item><tag>out += 'C'</tag>c</item>
        <item><tag>out += 'E'</tag>e</item>
        <item><tag>out += 'G'</tag>g</item>
        <item><tag>out += 'H'</tag>h</item>
        <item><tag>out += 'J'</tag>j</item>
        <item><tag>out += 'K'</tag>k</item>
        <item><tag>out += 'L'</tag>l</item>
        <item><tag>out += 'M'</tag>m</item>
        <item><tag>out += 'N'</tag>n</item>
        <item><tag>out += 'O'</tag>o</item>
        <item><tag>out += 'P'</tag>p</item>
        <item><tag>out += 'R'</tag>r</item>
        <item><tag>out += 'S'</tag>s</item>
        <item><tag>out += 'T'</tag>t</item>
        <item><tag>out += 'W'</tag>w</item>
        <item><tag>out += 'X'</tag>x</item>
        <item><tag>out += 'Y'</tag>y</item>
        <item><tag>out += 'Z'</tag>z</item>
      </one-of>
    </item>
    <tag>
      /* alpha can't start with any of these */
      var badPrefixes = /^(BG|GB|KN|NK|NT|TN|ZZ)/;
      if ( badPrefixes.test(out) ) SWI_disallow = 1;
    </tag>
  </rule>
  <rule id="digits">
    <tag>out = '';</tag>
    <item repeat="6">
      <one-of>
        <item><tag>out += '0'</tag>oh</item>
        <item><tag>out += '0'</tag>zero</item>
        <item><tag>out += '1'</tag>one</item>
        <item><tag>out += '2'</tag>two</item>
        <item><tag>out += '3'</tag>three</item>
        <item><tag>out += '4'</tag>four</item>
        <item><tag>out += '5'</tag>five</item>
        <item><tag>out += '6'</tag>six</item>
        <item><tag>out += '7'</tag>seven</item>
        <item><tag>out += '8'</tag>eight</item>
        <item><tag>out += '9'</tag>nine</item>
      </one-of>
    </item>
  </rule>
  <rule id="suffix">
    <item repeat="0-1">
      <one-of>
        <item><tag>out = 'A'</tag>a</item>
        <item><tag>out = 'B'</tag>b</item>
        <item><tag>out = 'C'</tag>c</item>
        <item><tag>out = 'D'</tag>d</item>
      </one-of>
    </item>
  </rule>
</grammar>

关键修改点说明

  • 在公共根规则_alpha中添加了<one-of>分支,分别处理"不知道"和有效保险号两种情况
  • 针对"不知道"的场景,我添加了几种常见的口语表达(你可以根据实际业务场景补充更多,比如"i can't remember"等),并设置语义标记SWI_meaning = "unknown",应用层拿到这个标记就可以触发对应的特定操作
  • 原有的保险号验证逻辑完全保留,确保有效号码的识别不受影响

后续建议

  • 可以根据用户实际使用的口语习惯,扩展"不知道"的匹配短语,提升识别覆盖率
  • 在应用层处理ASR返回结果时,通过判断SWI_meaning的值是"unknown"还是具体的保险号字符串,来区分执行不同的业务流程

内容的提问来源于stack exchange,提问作者ArcherGilly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:35:15