# 自定义技能
自定义技能又称任务型技能,在知识问答的基础上,增加了槽位、接口调用等功能,开发者可以通过配置自定义技能,来实现对话流、信息查询甚至简单的游戏等较为复杂的对话功能,具体案例请参见【案例分析】小节。
# 问法配置
自定义技能通过创建意图实现明确用户真实需求,一个技能由一个或多个意图组成。
# 新建意图
意图指的是用户在和机器人的对话交互中,发出的主要请求或动作。每个意图对应着用户一个真实需求。
# 用户问法
用户问法则是用户对于意图的常见表达。用户对于一个意图,可能存在多种不同表达。开发者在配置问答时,最好能够尽可能全面地填写用户问法,覆盖多种不同的句式。
为了方便开发者快速编写用户问法,平台支持通过使用「正则符号」、「词典」与「语义槽」的方式添加用户问法。
例如:
「我想查询北京的天气」和「我想查询上海的天气」
以上两句可以使用词典 {城市} ,合并为:
我想查询{城市}的天气
而
「我想查询{城市}的天气」和「{城市}天气怎么样」
是两个不同句式的句子,需要分为两种用户问法来添加。
# 规则&样例
目前自定义技能的问法有两种配置方式,分别是:
问法规则:
具有“精准可控”但“不够灵活”的特点
问法样例:
具有“撰写简单”、“泛化能力强”、“相对不可控”的特点
单个意图的问法配置,可根据实际情况来选择,且可同时使用两种方式。
# 问法规则
问法规则是用户撰写句子时可能使用一些正则符号,撰写的句子是严格匹配的。后台、逻辑上用户问的问题必须和撰写的规则句式基本保持一致,才能命中此意图。规则撰写方式则能够满足一些特殊需求,例如需要进行更精细的匹配或者处理复杂的表达。命中逻辑是严格匹配。总结特点:“准”、“可控”、但“撰写不够灵活,无同义词泛化能力,需要把规则配置的特别全面”。
平台支持开发者在用户问法中加入“()”、“|”、“&&”
三种规则符号。
"()": 括号,代表必选条件,前后有序。必须成对出现,不允许嵌套;
“|” : 或,仅允许出现在括号内;
“&&”:连接符,前后条件无序;
注:以上正则符号均必须为英文符号;
例如:(打开|想看|)&&(视频)({节目名称})
表示当前规则有三个条件:(打开|想看|)、(视频)、({节目名称})
其中(打开|想看|)条件最后的“|”表示的是可选条件,“想看”和“打开”出现一个即可; (视频)({节目名称})是必选条件,即用户问法中“视频”和“{节目名称}”必须都出现才能命中。
&&表示前后两个条件是无序的,即“想看视频…”、“视频打开…”均可以命中;
(视频)({节目名称})表示这两个条件是有序的,必须连续出现才能命中,即“视频xxx”可命中,“xxx视频”不可命中。
如果你想让这个规则能够有一定的灵活性,可以通过调整句子的阈值来扩展或者收敛命中的概率。如正常我们默认的问法相似度阈值是0.8,如果你设置成1,则“我想看视频郭德纲相声”,因为多了“我”字就无法命中。如果你设置成了0.6, 则用户说"我想看视频郭德纲相声"即可命中。同时设置的阈值越低,也可能引入一些误命中,如”别给我打开郭德纲相声“也有可能命中。所以,这个相似度默认为0.8,实际还是根据具体需求去调节,建议没有特殊需求,保持默认0.8是较合理的。同时注意,用户问法里中间如果多字少字是无法命中的。
# 问法样例
问法样例具有语义泛化能力,能够降低用户的撰写难度。比如用户问的问题和你配置的问题近似或者意思大体相同,有可能会命中此意图。其中问法样例也可以使用部分规则符号。简单理解,如果你写了一句话,可能和这句话类似的表达都有可能命中。 优点是:增加了一定的泛化能力,但与此同时泛化的也可能是无法控制的。比如算法认为某个句子相似,就会命中,但实际用户表达的不是这个意思,当然这种情况也会比较小,只是有一定概率会出现这种情况。
问法样例同样可以使用部分规则:
可以使用:“()”、“|”
两种符号(最多出现 4 个),不可使用”&“
符号。
用户问法最多一句话引用三个词典或槽位,即一句话里词典或槽位的使用不能超过3个。
例如: 我们想配置一个用户查询天气的问题,如果使用纯问法规则,可能需要输入:
(你查一下|我想看一下|你知道|搜索一下|播一下|直播|我想知道|查询|给我查询|给我查询|给我查询一下|查询|查询一下|预告|预告|报一下|看一下|查看|你好|我问一下|帮我查一下|)({from_loc})(的|)(气温|温度|天气|天气预报)({日期})(怎么|怎么|怎么|怎么|咋样|是怎么|是什么样|是什么样的|是什么|什么样|)
但使用问法样例配置,我们可以简单配置三个句子:
(播报|查询)({from_loc}|)({日期}|)(天气|天气预报)
(告诉我|我想知道)({from_loc}|)({日期}|)天气
({from_loc}|)({日期}|)(适合|)(怎么样|)
同样,句子示例也可以通过调整句子的相似度阈值,来扩展或者收敛命中的概率。阈值越低,就约束越低,越容易命中。
附:规则符号说明:
插入元素 | 符号样式 | 示意 | 注意事项 |
---|---|---|---|
规则符号 | () | 必选符号 | 前后有序,必须成对出现,不能嵌套 |
| | “或”符 | 前后有一个出现就能命中 | |
&& | “连接”符 | 前后两个条件没有顺序区别 |