-+首页
技能和意图的创建
技能分析
目标: 开发查快递技能
交互场景分析: 场景1- 用户 :查一下顺丰快递的8888快件到哪里了?
- 讯飞 :8888正在配送中
- 用户 :我要查快递
- 讯飞 :请问是哪家快递公司?
- 用户 :顺丰
- 讯飞 :请告诉我单号
- 用户 :8888
- 讯飞 :你的快递正在配送中
- 根据单号查快递
- 根据用户查快递
创建技能
在技能工作室中点击【+创建技能】,选择技能类别,输入技能名称即可创建技能。技能类型
- 创建技能
当你创建了技能,该技能在测试通过后可提交审核,审核通过该技能将发布到技能商店,供C端用户自由调用。
- 技能标识不可修改,不可删除技能。
- 技能类型不可修改。
新建意图
创建技能后,可在交互模型页中创建意图。创建意图时需要填写意图的英文名和中文名。admin 2023年4月4日 15:01 转发文档 收藏文档
意图配置
语料
以“根据单号查快递”意图为例,有多种说法,统称为语料:- 帮我查询顺丰快递8888
- 顺丰单号8888到哪里了
- 我什么时候才可以收到单号8888的顺丰快递
- ……
例句语料:纯文本语料
模板语料:包含{}的语料
智能贴弧
系统自动判断例句语料的槽位,并匹配实体。如果错误,你可以手动改正。定义语义槽
语义槽指语料中的参数。 用户说法:查{顺丰快递/EMS/圆通快递}抽象语义槽并命名为company:查{company}
定义辅助词
辅助词:语料中经常出现,又不改变句式含义的词,如我要、查询、帮我。
语义槽绑定实体
将快递公司名总结为 实体{company} 每个语义槽可能有多个取值,例如{company}包含顺丰快递、圆通快递、EMS,将这些取值的集合称之为实体。每个语义槽均需与实体绑定。在以上的例子中,我们将语义槽{company}与实体expressCompany绑定。新建实体
讯飞有一些开放的实体可以供开发者调用,比如针对快递单号语义槽 {number} ,使用官方开放实体 IFLYTEK.number 可以很好的解决。 但是快递公司的名称,需要开发者自己总结。新建静态实体快递公司/expressCompany如下图。 词条名仅支持中英文、数字、空格、.、_、-、‘、%、`、(、)、*、+ 如下图为实体添加词条,建议词条填写归一化的实体名,别名填词条用户所有的可能表述方式。 新建实体时,建议实体提供的值列表全面涵盖了用户的预期。有时你的技能无法支持对用户可能说出的值,但我们希望你依旧可以理解这个词。 例如:如果你制作一个查询国内城市天气的技能,但用户可能会说“帮我查一下洛杉矶的天气”。为了更好的用户体验,我们希望你的技能能够理解“洛杉矶”是一个城市。填槽对话
以下用户说法缺失了信息,填槽对话用于追问用户,补充信息。可在控制台中设置语义槽是否必填。 举例- 用户 :查顺丰快递
- 讯飞 :请告诉我快递单号 (填槽对话:追问单号信息)
- 用户 :88888888
- 关闭云函数时,系统会按照你在页面上的配置,依次引导用户填写必选槽位
- 开启云函数时,你应当每次请求到来时,你都应当根据你的业务逻辑,判断此时此刻是否需要进行槽追问,槽确认,意图确认。如果你不想处理,可以使用 DelegateDirective(托管)指令,此时系统会根据当前的槽位状态以及你在平台上的配置,自动的去触发槽追问(ElicitSlot) 或者意图确认(ConfirmIntent)。
技能回复
可按需添加,如不添加,“模拟测试”和端侧测试可能无法命中技能。意图确认
前提:勾选对话必须 你可以选择开启意图确认(ConfirmIntent)并填写意图确认语句。批量导入
批量导入格式说明
批量导出
导出技能
对某一个技能进行批量导出操作。你可以导出后进行本地修改,修改完成后导入进行覆盖,也可以导出后再导入另一个技能,达到技能复制的目的。导出实体
对某一个实体的所有词条和别名进行导出操作。你可以导出后进行本地修改,修改完成后导入进行覆盖,也可以导出后再导入另一个实体,达到实体复制的目的。技能导入
文件包说明
- 上传.zip文件即可导入技能。导入的.zip包中包含一个config.json文件,和意图文件意图英文名.json
- 上传后,系统会对上传的文件进行校验。请确保:.zip文件包中,所有json文件都在一个文件目录下,不包含多余的文件夹。 1. 意图英文名.json文件中不存在重复的语料。
config.json说明
config.json已升级为v2.1版本,请注意导入时将version字段修改为2.1。 2.1版本与2.0版本除版本号外,其他信息未做修改。示例
Copy
{
"version": "2.1",//本次更新
"intents": {
"queryWeather": {
"chineseName": "查询",
"entranceIntent": true,
"confirmation": {
"required": true,
"prompts": [
"确认查询吗",
"确定吗"
]
},
"assistWords": {
"how": "IFLYTEK.Modal",
"please": "IFLYTEK.Please"
},
"slots": {
"city": {
"order": 1,
"entity": "IFLYTEK.ChinaCity",
"elicitation": {
"required": true,
"prompts": [
"您想问哪个城市",
"哪个城市"
]
}
},
"time": {
"order": 2,
"entity": "IFLYTEK.Datetime",
"elicitation": {
"required": false
}
}
},
"intent2的英文名": {
//intent2的信息
}
}
}
{
"version": "2.0",//保持不变
"intents": {
}
}
字段说明
字段 | 说明 | 数据类型 | 是否必需 |
---|---|---|---|
version | 导入的协议版本,当前取值:2.1。 | String | 是 |
intents | 该技能下的所有意图信息。 | Object | 是 |
intent[i] | 该技能下的某一个意图的信息,技能下至少有一个意图。该字段取值为意图的英文名。 | Object | 是 |
intent[i].chineseName | 该意图的中文名,若该字段留空,则将取值为意图英文名 | String | 是 |
intent[i].entranceIntent | 该意图为入口意图。取值:true(入口意图),false(对话意图)。 请注意,在商店技能中,所有意图均为对话意图,导入时该字段将不会被处理 | Boolean | 否 |
intent[i].confirmation | 该意图的意图确认信息。 | Object | 是 |
intent[i].confirmation. required | 该意图是否需要确认。取值:false(不需要确认),true(需要确认) | Boolean | 是 |
intent[i].confirmation. prompts | 进行意图确认时的确认话术,这是一个string的list | List | 是 |
intent[i].assistWords | 该意图的语料中包含的辅助词。若意图没有辅助词,该字段留空。 | Map | 是 |
intent[i].assistWords.* | 辅助词的key-value键值对。格式为:“key”: “辅助词英文名” 若使用的是官方辅助词,则需要带上IFLYTEK.的前缀。 若使用的是自定义辅助词,则填写自定义实体的英文名。 | ||
intent[i].slots | 该意图的语料中包含的词槽。若意图没有词槽,该字段留空。 | Map | 是 |
intent[i].slots.*slots[i] | 该意图的语料中包含的某一个词槽信息。 | Object | 否 |
intent[i].slots.*slots[i]. order | 该词槽的顺序 | Integer | 是 |
intent[i].slots.*slots[i]. entity | 该词槽对应的实体的英文名。 若使用的是官方实体,则需要带上IFLYTEK.的前缀。 若使用的是自定义实体,则填写自定义实体的英文名。 | String | 是 |
intent[i].slots.*slots[i]. elicitation | 该词槽的追问信息 | Object | 是 |
intent[i].slots.*slots[i]. elicitation.required | 该词槽是否必须,若词槽必填,当用户语料中缺少该槽时,将会进行追问。取值:true(必填槽),false(非必填槽) | Boolean | 是 |
intent[i].slots.*slots[i]. elicitation.prompts | 必填槽缺槽时的追问话术 | List | 是 |
请确保
- intent[i]的取值为意图的英文名,在.zip文件夹中有对应的意图存在。
- config.json文件中的意图信息,与意图英文名.json的意图信息完全相等,不存在多于或少于的情况。
- config.json文件中包含的实体、辅助词信息,与语料文件中引用的实体、辅助词信息一致,不存在多于或少于的情况。
意图英文名.json说明
config.json版本为2.0时,意图文件为.txt格式,2.1升级为.json格式,后续将支持更多字段。示例
Copy
[
{
"text": "{time}{city}天气怎么样"
},
{
"text": "{今天:time}{广州:city}热不热"
},
{
"text": "天气怎么样"
}
]
字段说明
整个文件为一个List,每一句语料为一个Object,每个Object中可能包含以下字段字段 | 说明 | 类型 | 是否必需 |
---|---|---|---|
text | 语料文本。 | String | 是 |
语料写法
语料的3种写法:- 模板:{time}{city}天气怎么样。其中花括号中的内容为词槽。
- 贴弧:{今天:time}{广州:city}热不热。其中花括号中为显示的文本今天和对应的词槽time。
- 纯文本:今天广州热不热。
{}代表词槽
[ ]代表可选,语料不包含可选内容也能命中。例:呼叫张三[的电话|的手机]
- 呼叫张三
- 呼叫张三的电话
- 呼叫张三的手机
- 呼叫张三
- 联系张三
注意
- 一句语料至多有5个中括号和小括号。
- 仅「模版语料」支持可选符写法**
实体导入
实体导入可选择批量覆盖和批量追加。支持excel、txt格式excel格式
示例
词条名 | 别名 | |||
---|---|---|---|---|
北京 | 帝都 | 首都 | 京城 | 皇城 |
合肥 | 霸都 | 安徽省省会 | 安徽省会 |
说明
在excel的第一列填写词条名,后面的列中填写该词条名对应的别名。txt格式
示例
北京
帝都 北京
首都 北京
合肥
霸都 合肥
安徽省省会 合肥
庐州 合肥
说明
在txt的第一行填写词条名,回车后填写别名。别名TAB符分隔后填写对应的词条名。审核发布
发布私有技能
技能发布前,保存并体验 只能在页面上的 快速体验 中验证效果,如果想要在AIUI应用中生效,必须点击 私有发布 按钮。 说明- 私有技能,可在AIUI引用该技能。应用引用技能后才生效。
- 技能更新后,应用不会自动更新。通过移除后再次添加技能更新官方技能。通过在应用中生效来更新私有技能。更新后要测试
技能测试
在线测试
技能和实体的配置保存并构建完成后,在页面右侧的测试窗,输入“查询顺丰的12345”,可查看结构化数据结果。测试返回
用户的语音输入经过语音识别后将会通过交互模型进行语义理解和后处理进行逻辑处理。 在测试时你会遇到以下几种情况:- 测试窗正常返回了你预期的回复。
- 测试窗对话中未返回你预期的回复,但语义理解结果正确。
- 测试窗对话中未返回你预期的回复,且语义理解结果不正确。
错误码 | 说明 | 处理方式 |
---|---|---|
204 | 技能没有正常返回 | 1. 请检查输入的文本,是否被该技能中的常用表达所覆盖 2. 请检查是否打开了技能后处理 3. 请检查技能后处理是否按照2.1技能协议 正确返回 |
206 | 服务超时,一般是服务调用超时 | 查看你的服务收到的request,确定超时的服务 |
400 | 无效输入 | 查看你的服务收到的request,检查入参格式与取值是否合法 |
admin 2022年11月9日 14:21 转发文档 收藏文档