# 意图管理
意图指用户在对话流中可能的请求或目的。如:作为餐厅的客服技能,用户可能要订位,排号,点餐,开发票等。
# 常用表达
用户在完成某一意图时,可能会有很多种表达方式, 以“根据单号查快递”这个意图为例,开发者应当尽可能完善用户所有的表达方式:
- 帮我查询顺丰快递88888888到哪里了
- 单号是88888888的快件到哪里了
- 顺丰单号88888888,这个快递到哪里了
- 我要查顺丰快递88888888的物流状态
- 我什么时候才可以收到单号88888888的顺丰快递
- 查一下88888888快递到哪里了
- 我要查顺丰快递
- 我要查快递
- 查一下快递
- ……
我们将这些表述统称为常用表达,一个技能中,每个意图下可能存在几十条到几千条不等的常用表达,为了保证技能语义理解的结果,我们建议开发者尽可能完善所有的常用表达。
# 例句常用表达
如果将上述纯文本直接填入控制台,我们称之为「例句常用表达」,添加后引擎会自动判断其中的槽位,如果存在错误,开发者可以进行手动更正。
# 模版常用表达
在下面的常用表达中,有两个关键槽位,星座
和时间
。我们称之为词典,词典在常用表达中用花括号{
}
代替。
* {time}{constellation}的幸运数字是什么
* {constellation}{time}的幸运数字是什么
以上将纯文本抽象过后的语句我们称之为「模版常用表达」
模版模式的更多写法
为了方便开发者快速编写相似的常用表达,模版常用表达提供了可选符的写法。
常用表达中的花括号{}代表词典,中括号[ ]代表可选符,小括号( )代表必选符。
- 花括号:打电话给{contact}
- 中括号:帮我呼叫张三[的电话|的电话号码|的手机]等同于:帮我呼叫张三、帮我呼叫张三的电话、帮我呼叫张三的电话号码、帮我呼叫张三的手机
- 小括号:帮我(呼叫|拨打)张三的电话号码 等同于:帮我呼叫张三的电话号码、帮我拨打张三的电话
注意 :一句常用表达中允许出现至多五个中括号和小括号。仅「模版常用表达」支持可选符写法
两种常用表达自由使用,开发者可以根据使用习惯进行选择。
# 智能贴弧
为了减少你填写常用表达的工作量,我们上线了智能贴弧功能。在【例句常用表达】模式下,你输入熟料后,系统会自动判断其中的槽位,并匹配对应的词典。如果存在错误,你可以进行手动改正。
注意
智能贴弧功能当前是测试功能,效果可能不够如意,你可以选择关闭智能贴弧功能。
# 参数
# 定义参数
参数是指用户常用表达中可能包含的参数。比如用户要查快递的时候,我们比较关心用户要查的是顺丰快递、圆通快递还是EMS,要查的单号是多少。
我们把常用表达中的参数抽象之后,会变成“我要查{顺丰快递/EMS/圆通快递}的{88888888}到哪里了”。抽象参数之后,我们需要对参数命名,以上常用表达会变为:
- 帮我查询{company}快递{number}到哪里了
- 单号是{number}的快件到哪里了
- {company}单号{number},这个快递到哪里了
- 我要查{company}{number}的物流状态
- 我什么时候才可以收到单号{number}的{company}快递
- 查一下{number}快递到哪里了
- 我要查{company}
- 我要查快递
- 查一下快递
从上面的例子我们可以看出,一条常用表达中可以有多个槽或者没有槽。
除此之外,你也可以把用户表达中的部分词语进行抽象,比如可以定义 {iwant}=(帮我 | 我要 | 我想 | 给我),这样可以降低书写常用表达的工作量。
# 参数对应词典
我们将快递公司名总结为词典 {company},快递单号总结为词典 {number}。
在每个槽中,可能会出现多个取值
company | number |
---|---|
顺丰 | 88888888 |
圆通 | 12345678 |
韵达 | 1234567890 |
EMS | 7777777 |
天天 | 9037646483 |
…… | …… |
我们将这些取值的集合称之为词典。每个参数均需与词典进行绑定。在以上的例子中,我们将参数{company}
与词典【expressCompany】绑定,将参数{number}
与词典【IFLYTEK.number】绑定。
# 开放词典
讯飞有一些开放的词典可以供开发者调用,比如针对快递单号参数 {number}
,使用开放词典 【IFLYTEK.number】 可以很好的解决。
# 自定义词典
但是快递公司的名称,需要开发者自己总结。你可以新建词典「快递公司/expressCompany」,为词典添加词条,建议「词条」填写归一化的词典名,「别名」填词条用户所有的可能表述方式。
在新建词典时,我们建议你确保为词典提供的值列表全面涵盖了用户的预期。有时用户可能说出的值你的技能不支持,但我们希望你依旧可以理解这个词。
例如:如果你制作一个查询国内城市天气的技能,但用户可能会说“帮我查一下洛杉矶的天气”。为了更好的用户体验,我们希望你的技能能够理解“洛杉矶”是一个城市。
更多词典相关的信息,请查看词典
# 参数追问
在配置意图的过程中,难免会遇到用户一次请求没有包含所有我们需要用到的信息的情况。为了方便开发者更加合理的设计多轮对话,对话流支持填槽对话的功能。
我们可以在控制台中设置参数是否必填。在实际的用户场景中,用户可能不会在一次交互中提供所有我们必须需要的信息。所以我们需要在后面的交互中向用户发起追问,让用户提供更多我们需要的信息,以完成后续的操作。
举例
- 用户 :我要查顺丰快递
- 讯飞 :请你告诉我快递单号
- 用户 :88888888
- 讯飞 :你的顺丰快递正在进行派送
在这个对话中,用户第一次交互时,缺少了我们查快递时必须的快递单号,此时需要系统进行追问。
这个操作,可以在控制台的参数引用区域,选择参数是否必填。若参数必填,你可以自定义追问语句,当系统发现用户的表述的信息里缺少必要的参数时,会进行主动进行追问。
# 意图构建和测试
当你配置完成后,你需要将你的配置在讯飞引擎上构建生效。点击【构建按钮】,等待意图完成构建,即可对意图进行测试。
在意图配置右侧的测试框中,你可以尝试输入文本。
- 查看输入的文本是否可以命中意图。若没有命中,一般来说是常用表达未覆盖到这句输入。
- 若输入的文本中缺少必填参数,查看系统是否进行了正确的追问。
- 对系统的追问进行回答后,查看系统是否进行了正确的下一步处理。