跳转至

自定义意图功能使用样例

一、技能开发

本实例意在开发一个智能诊疗,我们的技能使用时间是在医院初诊阶段,此时分析,病人使用此智能系统时想进行的意图有:诉说疾病痛苦(无需解析槽位)、询问疾病症状(需要获取疾病名称)、询问疾病疗法(需要获取疾病名称)、记录病情描述(截取用户描述并记录)等等。

二、意图梳理

由此分析,我们将建立四个意图,分别是:1、诉说疾病痛苦(sick_tell),2、询问疾病症状(sick_symptom),3、询问疾病疗法(sick_treatment),4、记录病情描述(sick_record)。 其中2、3需要槽位和词典,1无需槽位,4需要槽位无需词典。此处2、3的槽位需要关联疾病字典是因为疾病可以被穷举,医院可以提供,而且如果不是医院在录的疾病则无法查询到其信息,这时可以当做没有命中意图来让用户重新询问。

意图创建 意图创建

三、意图编写

此处开始对各意图进行正例的添加。具体需要加什么正例,需要结合具体的业务以及对场景的理解,句式相同的正例只需要加一个,句式不同的正例每种都要添加一个。下面仅为示例参考:

1、无槽位意图编写(意图1)

意图1无需标注槽位,只需要导入正例即可,当用户对机器人说这些正例时,云端即可以返回用户此时命中的意图。

意图1编写 意图1编写

2、有槽位意图编写(意图2)

意图2、3需要标注槽位和创建词典,同一个句式的正例只需要添加一个即可。词典添加疾病名称时,需要注意正例中的疾病名称也要添加上去。标注的文本不会自动同步到词典中。

意图询问疾病症状示例:

正例导入 正例导入

新建槽位和词典 新建槽位和词典

进行槽位标注 进行槽位标注

去词典管理中增加相应词典的实体值 去词典管理中增加相应词典的实体值

至此,意图2就做完了。意图3同理

3、任意文本槽位意图(意图4)

意图4需要的是获取句式中固定位置的文本,所以直接使用任意文本槽位。

任意文本槽位使用 任意文本槽位使用

标注好后,句式“我现在的病症是XXX”就和意图4绑定了。

四、技能发布和开启

当技能创建好后,需要在技能首页去发布技能,并且记录技能的code。技能发布后才能在机器人的技能后台看到技能。

技能发布 技能发布

发布技能后,技能还未生效,还需要再去机器人技能出将技能开启。

技能开启 技能开启

五、技能测试结果

使用postman测试: 意图1的测试语料:我身体很难受。 返回参数:

{
    "globalId": "90****01",
    "intent": {
        "code": 1000334,
        "intentName": "sick_tell",
        "operateState": 1100
    }
}

测试成功,正确返回技能code和意图sick_tell 意图2的测试语料:得了白血病有什么病症。 返回参数:

{
    "globalId": "90****01",
    "intent": {
        "code": 1000334,
        "intentName": "sick_symptom",
        "operateState": 1100,
        "parameters": {
            "sick_name": "白血病"
        }
    }
}

测试成功,正确返回code、意图sick_symptom和槽位信息“白血病” 意图4的测试语料:我现在的病症是腿疼脖子疼 返回参数:

{
    "globalId": "90****01",
    "intent": {
        "code": 1000334,
        "intentName": "sick_record",
        "operateState": 1100,
        "parameters": {
            "ArbitraryText": "腿疼脖子疼"
        }
    }
}

测试成功,正确返回code、意图和句式中指定位置文本。