意图对话
包括 意图 和 词典 两部分内容。
我的机器人
页面,点击机器人卡片的配置
,就可以进入技能配置页面了意图对话
卡片的小开关,确保技能处于激活状态意图
键进入意图对话的界面我的技能
页面,点击技能卡片的意图
,可以直接进入意图对话界面两种进入的途径都能对问答对进行操作,它们的差别在于
途径一是在机器人的层面上对技能进行操作,操作完毕后,训练机器人然后与机器人进行对话测试
途径二是在技能对层面上对技能进行操作;操作完毕后,训练技能然后与技能进行对话测试
它们本质上是没有差别的。前期我们推荐您使用途径一,后续的文档也是基于途径一进行操作的
意图
用于处理较复杂的意图、问题模板、回答意图
页面中编辑自定义的意图对话内容添加意图
,并输入名称和描述,即可添加一个新的意图对话模版保存
模版
是用来模拟用户可能输入的对话
- 用户可以通过对话意图为机器人编写对话模版。对话模版包括问题模版和答案模版
- 通过
输入模板
框输入新的模板问题,按 enter,即可添加新的模板- 通过
输入模板回答
框可添加新的回答,按 enter,即可添加新的模板- 再次点击模版中的问题/回答可以编辑此问题/回答(需按 enter 保存)
模版回答
是机器人对模版的回复语句模版
和模版回答
语句中的词进行标注
- 用户可以在
槽位
表格中输入新的槽位名称、其基于的词典(为必选项)并点击添加标志(或输入名称后按 enter)即可添加一个新的槽位
输入槽位类型
栏中可选择/重选此槽位基于的词典模板
/模板回答
的句子中的一个片段,槽位选项会立即弹出,此时只需点击想选的槽位
- 每一个模版可以添加多个槽位。
用户可以对槽位进行删除
被删除的槽位在模版中将自动失效
训练
意图对话
可以由用户自定义的回答服务对模版问题进行回复在对话技能中,如果您需要自己设定自定义脚本,脚本回答可以完成您的需求。
意图技能可以启用回答服务。默认情况下,回答服务及脚本回答都处于禁用状态,技能会返回正常的模板回复。当回答服务启用时,脚本及模本回复是失效的。当脚本回答开启时,模板和回答服务将会失效。如下图所示:
目前脚本编辑支持 groovy 及 python 两种语言,用户可自行选择
以 python 脚本为例,用户可以自由编写自定义脚本从而获得相应的回复
参数名称 | 类型 | 说明 |
---|---|---|
question | String | question 为用户输入的问题 |
lastQuestion | String | lastQuestion 存有上一轮回答的问题 |
lastDialogAnswer | String | lastDialogAnswer 存有上一轮回答的答案 |
添加文字回复public void addText(String text)添加错误信息public void addErrorText(String text)添加信息列表public void addText(List<String> textList)添加错误信息列表public void addErrorText(List<String> textList)通过url添加图片public void addImage(String url)通过url添加图片并设置标题和别名public void addImage(String url, String title, String alt)通过url添加视频public void addVideo(String url)通过url添加视屏并设置标题和别名public void addVideo(String url, String title, String alt)通过url添加音频public void addAudio(String url)通过url添加音频并设置标题和别名public void addAudio(String url, String title, String alt)通过url添加下载链接public void addDownloadable(String url)通过url添加下载链接并设置标题public void addDownloadable(String url, String title)添加卡片回复(需求格式为json String)public void addCards(String cardsJson)添加快速回复public void addQuickReplies(String quickRepliesJson)转译json String为DialogAnswerpublic static DialogAnswer parserJsonString(String json)获取主题public String getTopic()设置主题public void setTopic(String topic)获取前缀public String getPrefix()设置前缀public void setPrefix(String prefix)获取问答状态public ArrayList<DialogStage> getStage()设置问答状态public void setStage(ArrayList<DialogStage> stage)添加问答状态public void addStage(DialogStage d)添加问答状态到指定位置public void addStage(DialogStage d, int index)获取后缀public String getSuffix()设置后缀public void setSuffix(String suffix)获取状态public int getStatus()设置状态public void setStatus(int status)获取表情包public String getEmotion()设置表情包public void setEmotion(String emotion)获取情形public String getState()设置情形public void setState(String state)获取消耗时长public String getTimeCost()设置细节消耗时长public void setTimeCost(String timeCost)获取细节消耗时长public JSONObject getDetailTimeCost()设置时间消耗时长public void setDetailTimeCost(JSONObject detailTimeCost)获取超时时间public String getTimeout()设置超时时间public void setTimeout(String timeout)通过key obj 添加键值对参数public void addParams(String key, Object obj)获取参数mappublic Map<String, Object> getParams()设置参数mappublic void setParams(Map<String, Object> params)转译为json String并返回public String toJsonString()
import jsonfrom ai.rsvp.datatype.dialog import DialogAnswerfrom ai.rsvp.datatype.dialog import DialogStage# question为用户输入的问题def getAns():if question == u'北京':ans = u'北京天气晴,西南风3级'elif question == u'上海':ans = u'上海天气多云,东南风5级'else:ans = u'找不到所在城市的信息:' + questionreturn ans# 获得回复def modifyResponse():response = DialogAnswer()# 增加图片回复response.addImage(u'https://dev.rsvp.ai/weather_forcast.jpg','','')# 增加文字回复response.addText([u'你本次查询天气的城市为:' + question, u'正在查询以下城市的天气...' + question])response.addText([u'本次为您查询到的结果:' + getAns()])# 增加卡片回复(仅用于展示用法)response.addCards(u'{\"type\":\"horizontal\",\"cards\":[{\"title\":\"卡片标题\",\"buttons\":[{\"text\":\"按钮1\",\"postback\":\"https://qingyu.rsvp.ai/\"},{\"text\":\"按钮2\",\"postback\":\"sendbacktext\"}]}]}')# 增加快速回复按钮(仅用于展示用法)response.addQuickReplies(u'{\"quickReplies\":[{\"text\":\"快速回复1\",\"postback\":\"https://qingyu.rsvp.ai/\"},{\"text\":\"快速回复2\",\"postback\":\"Sendbacktext\"}]}')# response变量作为最后的返回输出response = response.toJsonString()return responseresponse = modifyResponse()
# 获得回复def modifyResponse():response = DialogAnswer()# lastQuestion变量存有为上一轮回答中的问题# lastDialogAnswer变量存有为上一轮回答中的答案response = DialogAnswer()if lastQuestion is not None:response.addText(u'您上一次查询天气的城市为:' + lastQuestion)lastDialogAnswer = DialogAnswer.parserJsonString(lastAnswer)if lastDialogAnswer is not None:stageList = lastDialogAnswer.getStage()if stageList.size() == 7:lastDialogStageJson = stageList[stageList.size()-3].toJsonString()else:lastDialogStageJson = stageList[stageList.size()-1].toJsonString()lastDialogStage = json.loads(lastDialogStageJson)['text']['text'][0]if lastDialogStage is not None:response.addText(u'您上一次查询天气的结果为:' + lastDialogStage)# 增加图片回复response.addImage(u'https://dev.rsvp.ai/weather_forcast.jpg','','')# 增加文字回复response.addText([u'你本次查询天气的城市为:' + question, u'正在查询以下城市的天气...' + question])response.addText([u'本次为您查询到的结果:' + getAns()])# 增加卡片回复(仅用于展示用法)response.addCards(u'{\"type\":\"horizontal\",\"cards\":[{\"title\":\"卡片标题\",\"buttons\":[{\"text\":\"按钮1\",\"postback\":\"https://qingyu.rsvp.ai/\"},{\"text\":\"按钮2\",\"postback\":\"sendbacktext\"}]}]}')# 增加快速回复按钮(仅用于展示用法)response.addQuickReplies(u'{\"quickReplies\":[{\"text\":\"快速回复1\",\"postback\":\"https://qingyu.rsvp.ai/\"},{\"text\":\"快速回复2\",\"postback\":\"Sendbacktext\"}]}')# response变量作为最后的返回输出response = response.toJsonString()return responseresponse = modifyResponse()
导入
意图对话数据,导入的数据将覆盖用户在平台中添加的意图对话内容查看示例
可查看用于上传的示例文件导出
将出现确认框;输入文件名并点击导出即可把当前意图对话技能下载为 json 文件词典
可以轻松解决这一问题
词典
用于定义和描述槽位词的类型与内容
当用户设置槽位时,除了要填写槽位名称之外,还需要选择被创建词槽所基于的词典
添加词典
以添加自定义词典用户可以在词典
页面添加一系列自定义词典,同时可以编辑和删除自定义词典中的每一条内容
现在回到“意图”界面使用它。用户自定义的词典
将在用户添加槽位时显示在槽位类型中的userdef列表下