# 意图配置

# 语料

刚才我们已经总结了两个意图:根据单号查快递,根据用户查快递。 以“根据单号查快递”这个意图为例,用户实际的表述可能有很多:

  • 帮我查询顺丰快递88888888到哪里了
  • 单号是88888888的快件到哪里了
  • 顺丰单号88888888,这个快递到哪里了
  • 我要查顺丰快递88888888的物流状态
  • 我什么时候才可以收到单号88888888的顺丰快递
  • 查一下88888888快递到哪里了
  • 我要查顺丰快递
  • 我要查快递
  • 查一下快递
  • ……

我们将这些表述统称为语料,一个技能中,每个意图下可能存在几十条到几千条不等的语料,为了保证技能语义理解的结果,我们建议开发者尽可能完善所有的语料。

TIP

在实际语料编写中,可通过以下方式压缩语料数量:

  • 对于相似度非常高的语料,可以通过技能工作室的模糊匹配进行覆盖。
  • 对于句式类似的语料,可以使用可选符进行合并。

我们将这些提问方式添加进入控制台,如下图。

在技能工作室中允许两种方式添加语料:

  • 以纯文本形式添加的语料称之为「例句语料」。
  • 以花括号形式添加的语料称之为「模板语料」,两种语料可以自由选择。

# 智能贴弧

为了减少你填写语料的工作量,我们上线了智能贴弧功能。在【例句语料】模式下,你输入熟料后,系统会自动判断其中的槽位,并匹配对应的实体。如果存在错误,你可以进行手动改正。

注意

智能贴弧功能当前是测试功能,效果可能不够如意,你可以选择关闭智能贴弧功能。

# 定义语义槽

语义槽是指用户语料中可能包含的参数。比如用户要查快递的时候,我们比较关心用户要查的是顺丰快递、圆通快递还是EMS,要查的单号是多少。

我们把语料中的语义槽抽象之后,会变成“我要查{顺丰快递/EMS/圆通快递}的{88888888}到哪里了”。抽象语义槽之后,我们需要对语义槽命名,以上语料会变为:

  • 帮我查询{company}快递{number}到哪里了
  • 单号是{number}的快件到哪里了
  • {company}单号{number},这个快递到哪里了
  • 我要查{company}{number}的物流状态
  • 我什么时候才可以收到单号{number}的{company}快递
  • 查一下{number}快递到哪里了
  • 我要查{company}
  • 我要查快递
  • 查一下快递

从上面的例子我们可以看出,一条语料中可以有多个槽或者没有槽。

在你添加语料后,技能工作室会将添加的语料自动解析匹配上合理的语义槽,你也可以自己选中对应的词组指定语义槽。(该功能正在测试中,如你发现问题,欢迎在开发论坛 (opens new window)进行反馈)

# 定义辅助词

在语料中,对于开发者关心的槽位我们称之为语义槽,如「快递公司」、「快递单号」,对于开发者不关心,但是在用户的常用表述中又经常会出现的一类词汇我们称之为辅助词,如「我要」、「查询」、「帮我查」等。

# 槽绑定实体

我们将快递公司名总结为实体 {company},快递单号总结为实体 {number}

在每个槽中,可能会出现多个取值

company number
顺丰 88888888
圆通 12345678
韵达 1234567890
EMS 7777777
天天 9037646483
…… ……

我们将这些取值的集合称之为实体。每个语义槽均需与实体进行绑定。在以上的例子中,我们将语义槽{company}与实体【expressCompany】绑定,将语义槽{number}与实体【IFLYTEK.number】绑定。

# 新建实体

讯飞有一些开放的实体可以供开发者调用,比如针对快递单号语义槽 {number} ,使用开放实体 【IFLYTEK.number】 可以很好的解决。

但是快递公司的名称,需要开发者自己总结。新建静态实体「快递公司/expressCompany」如下图。

如下图为实体添加词条,建议「词条」填写归一化的实体名,「别名」填词条用户所有的可能表述方式。

在新建实体时,我们建议你确保为实体提供的值列表全面涵盖了用户的预期。有时用户可能说出的值你的技能不支持,但我们希望你依旧可以理解这个词。

例如:如果你制作一个查询国内城市天气的技能,但用户可能会说“帮我查一下洛杉矶的天气”。为了更好的用户体验,我们希望你的技能能够理解“洛杉矶”是一个城市。

# 填槽对话

在开发技能的过程中,难免会遇到单轮对话难以准确理解用户需求的时候,为了方便开发者更加合理的设计多轮对话,技能工作室推出了填槽对话的功能。

我们可以在控制台中设置语义槽是否必填。在实际的用户场景中,用户可能不会在一次交互中提供所有我们必须需要的信息。所以我们需要在后面的交互中向用户发起追问,让用户提供更多我们需要的信息,以完成后续的操作。

举例

  • 用户 :我要查顺丰快递
  • 讯飞 :请你告诉我快递单号
  • 用户 :88888888
  • 讯飞 :你的顺丰快递正在进行派送

在这个对话中,用户第一次交互时,缺少了我们查快递时必须的快递单号,此时需要系统进行追问。

这个操作,可以在控制台的实体区域,选择语义槽是否必填。若语义槽必填,你可以自定义追问语句(ElicitSlot)。

开发者可以在「意图编辑页-实体」中将实体勾选为「对话必须」,当系统发现用户的表述的信息里缺少必要的实体时,会进行主动的追问,开发者可以进行如下图的设置。

TIP

平台暂不支持可视化的配置槽位确认(ConfirmSlot)

  • 当你不开启云函数时,系统会按照你在页面上的配置,依次去引导用户填写必选槽位
  • 当你开启云函数时,你应当每次请求到来时,你都应当根据你的业务逻辑,判断此时此刻是否需要进行槽追问,槽确认,意图确认。如果你不想处理,可以使用 DelegateDirective(托管)指令,此时系统会根据当前的槽位状态以及你在平台上的配置,自动的去触发槽追问(ElicitSlot) 或者意图确认(ConfirmIntent)

填槽对话是收集程序所需必要信息的一种手段,是意图内的多轮对话,填槽对话的详细概念可以参考填槽对话章节。

# 意图确认

你可以选择开启意图确认(ConfirmIntent)并填写意图确认语句。