# 用户问法

用户问法是指在对话交互过程中用户的指令、请求,也是用户对于意图的常用表达。开发者最好能提供不同的用户说法,覆盖用户的不同语法形式。建议开发者尽可能多的填写用户说法,但是不需要填写所有的槽位值。

例如:我想查询北京的天气;我想查询上海的天气。以上两句可以使用槽位合并为:我想查询{城市}的天气 但是:“我想查询{城市}的天气”和“{城市}天气怎么样”是两个不同的句式,需要分开填写。

为了方便开发者快速编写句式相同的用户问法,平台支持按照问法规则、词典与语义槽的方式添加

# 1. 问法规则

平台支持开发者在用户问法中加入“()”、“|”、“&&”三种规则符号。其中:

"()": 必选符号,必须成对出现,不允许嵌套;

“|”: 或,仅出现在括号内;

“&&”:连接符;

注:以上正则符号均必须为英文符号; 使用方式: 用“()”将用户问法分割为多个条件;条件之间用“&&”定义无序、有序;用“|”定义条件可选等。

TIP

例如:(打开|想看|)&&(视频)({节目名称})

  • 表示当前规则有三个条件:(打开|想看|)、(视频)、({节目名称})
  • 其中(打开|想看|)条件最后的“|”表示的是可选条件,“想看”和“打开”出现一个即可; (视频)({节目名称})是必选条件,即用户问法中“视频”和“{节目名称}”必须都出现才能命中。
  • &&表示前后两个条件是无序的,即“想看视频…”、“视频打开…”均可以命中;
  • (视频)({节目名称})表示这两个条件是有序的,必须连续出现才能命中,即“视频xxx”可命中,“xxx视频”不可命中。

# 2. 引用词典

开发者可在用户问法中插入词典,用一个词典来覆盖这句话中的某个关键词可能变化的内容。

TIP

例如:“商场8点开门吗”和“商场9点开门吗”,这两句用户问法中,时间点就是可以不断变化的关键词,我们就可以用一个系统词典 sys.具体时间点 来代替用户可能询问的所有时间点,即可写成:“商场 sys.具体时间点 开门吗”,这样用户再问 商场任一时间点开门吗 都能匹配到。

# 3. 引用语义槽

用户问法也支持引用语义槽,开发者可以将用户问法中的相似关键词用一个语义槽来代替。在引用语义槽时,开发者既可以使用系统已有的语义槽,也可根据对话需要添加自定义语义槽。

使用方式:语义槽用{}符号包裹起来,开发者无需自己书写,在语义槽编辑器中填写语义槽名称即可添加。

例如,在查询星座幸运数字时,不同星座的用户可能会问:“处女座的幸运数字是多少”、也可能问“白羊座的幸运数字是多少”,这个时候我们就可以将星座类型这个关键词提取出来,用一个{星座}语义槽来代替,合并写成“{星座}的幸运数字是多少”,并在语义槽设置中将其与包含12个星座的词典关联起来,就能实现12种不同星座的用户问法需求。