【对话API】用工具调用对话API并实现多轮对话
TroubleMaker源 发布于2019-05 浏览:13738 回复:22
11
收藏
最后编辑于2022-04

本帖帮助初级开发者在零代码情况下体验和调用对话API进行对话,共设置了3个任务及其教程,大家可按需浏览。

  • 任务一、成功调用一次技能对话API
  • 任务二、使用 技能对话API 实现多轮对话
  • 任务三、使用 机器人对话API 实现多轮对话

 

阅读前,需要开发者对以下内容有初步的了解:

  • 技能对话API:https://ai.baidu.com/docs#/UNIT-v2-API/top
  • 机器人对话API :https://ai.baidu.com/docs#/UNIT-v2-service-API/top

 

一、成功调用一次技能对话API

初次调用对话API我们需要完成3步(1.在百度智能云“产品服务 / 理解与交互技术UNIT”中创建应用、2.利用这个应用的API Key和Secret Key获取请求技能的Access Token、3.携带Access Token请求技能对话API)

1.首先下载并安装测试API 测试工具-postman( https://www.getpostman.com/downloads/ )

2.接着创建应用:进入百度智能云“产品服务 / 理解与交互技术UNIT”( https://console.bce.baidu.com/ai/?_=0&fromai=1#/ai/unit/app/list ),点击“创建应用”,输入应用名称并完成创建,获得应用的API Key和Secret Key。

3.然后获取Access Token:打开安装好的postman,设置请求方式为POST,并输入以下请求链接:

https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=API Key&client_secret=Secret Key& 
(API Key和Secret Key的值来源于第2步创建好的应用)

点击蓝色的“Send”按钮,发送请求后会收到响应,响应中有我们需要的access_token的值。

4.最后调用技能对话API:在postman中新建一个页面,设置请求方式为POST,并输入以下请求链接:

https://aip.baidubce.com/rpc/2.0/unit/bot/chat?access_token=access_token
(access_token的值来源于第3步获取到的值)

点击蓝色的“Send”按钮,发送请求后会收到响应,响应中如果出现282008错误(非法请求内容错误类型),表明我们成功调用了技能对话API,接着提供您在unit平台已经训练成功的技能ID,然后在postman中填写如下请求Body:

{
  "bot_session": "",
  "log_id": "1234567890",
  "request": {
    "bernard_level": 1,
    "query": "预订火车票",  
    "query_info": {
      "asr_candidates": [],
      "source": "KEYBOARD",
      "type": "TEXT"
    },
    "updates": "",
    "user_id": "1234567890"
  },
  "bot_id": "52708",
  "version": "2.0"
}
(query是用于测试的语句,bot_id是您用于测试的技能ID)

再次点击蓝色的“Send”按钮,发送请求后会收到响应,如果响应中出现了模型解析结果,表明我们成功请求了技能模型。

以上,我们成功调用了技能对话API,接着我们利用技能对话API的session_id字段实现多轮对话。

 

二、使用 技能对话API 实现多轮对话

历史会话信息bot_session会在平台中保留2小时,当前请求中的bot_session.session_id的值与保留中的某个会话相同时,当前会话将继承历史会话的意图和词槽信息以及对话状态,来实现多轮对话。

下面举例说明:要实现以下的多轮对话效果,需要请求2和请求3中session_id的值来源于响应1。

  • 请求1:预订火车票    
  • 响应1:你想什么时间出发
  • 请求2:明天早上
  • 响应2:请告诉我您的目的地
  • 请求3:北京西站
  • 响应3:正在为您预订车票

可以使用以下两种方式传入session_id值:

  • 您可以单独上轮响应的session_id值,由于bot_session字段的类型是string,传入K-V结构的数据需要先转化成json字符串,然后需要对该json字符串转义成string类型后传入该字段,例如:"bot_session": "{\"session_id\":\"value\"}"
  • 也可以传入上轮响应完整的bot_session值,上轮响应的bot_session值已经是转义好的数据,不需要开发者再次进行转义。

 

二、使用 机器人对话API 实现多轮对话

1.调用技能对话API:在postman中新建一个页面,设置请求方式为POST,并输入以下请求链接:

https://aip.baidubce.com/rpc/2.0/unit/service/chat?access_token=access_token
(access_token的值来源于 任务一 第3步 获取到的值)

接着提供您在unit平台创建好的机器人ID(机器人需要添加已经训练成功的技能),然后在postman中填写如下请求Body:

{
    "log_id":"1234567890",
    "version":"2.0",
    "service_id":"S17842",
    "session_id":"",
    "request":{
        "query":"预订火车票",
        "user_id":"1234567890"
    },
    "dialog_state":{
        "contexts":{
            "SYS_REMEMBERED_SKILLS":[
                ""
            ]
        }
    }
}
(service_id是您用于测试的机器人,query是用于测试的语句,)

点击蓝色的“Send”按钮,发送请求后会收到响应,如果响应中出现了解析结果,表明我们成功调用机器人API并成功请求了技能模型。

2.实现对轮对话:要实现以下的多轮对话效果,需要请求2和请求3中session_id的值来源于响应1,且dialog_state.contexts["SYS_REMEMBERED_SKILLS"]的值为需要进行多轮对话的技能ID,避免对应技能session被清空,导致无法完成多轮对话。

  • 请求1:预订火车票    
  • 响应1:你想什么时间出发
  • 请求2:明天早上
  • 响应2:请告诉我您的目的地
  • 请求3:北京西站
  • 响应3:正在为您预订车票

收藏
点赞
11
个赞
共22条回复 最后由用户已被禁言回复于2022-04
#23你不会明白315回复于2021-04

闲聊API的多轮是不是和这个实现的不一样?我看有个"SYS_PRESUMED_HIST"参数,不过我传了之后貌似没起什么作用?

0
#22凌烟阁主人回复于2021-04

版本更新后 这个是不是不能这么操作了

0
#21凌烟阁主人回复于2021-03

收藏了 很有用

0
#20hncnbot回复于2021-03

请问生产环境的多轮技能和预制技能怎么同时访问呢?

0
#19风轻U云淡回复于2020-07

一直提示这个

{'error_code': 282004, 'error_msg': 'Parameter[skill_id] invalid or missing'}

SYS_REMEMBERED_SKILLS我填的是空list 这是怎么回事

1
#18wangwei8638回复于2020-06

收藏了

0
#17果断叫小黑回复于2019-12

怎么知道多轮对话中已命中所有词槽从而进行下一次操作呢?

0
#16果断叫小黑回复于2019-12
#13 zcyliuxu回复
{     "error_code": 292002,     "error_msg": "未找到相应的技能" } 不能成功调用技能对话API,这种情况是啥原因
展开

估计你的技能id传错了吧?

0
#15TroubleMaker源回复于2019-12
#14 zrb19930623回复
音乐技能,回复“好的,正在为您播放”,就没有后续了?  要怎么播放音乐?
展开

当前音乐预置技能只有理解和解析能力,暂时无法提供音乐资源,后续会支持。

0
#14zrb19930623回复于2019-12

音乐技能,回复“好的,正在为您播放”,就没有后续了?  要怎么播放音乐?

1
#13zcyliuxu回复于2019-12

{
    "error_code": 292002,
    "error_msg": "未找到相应的技能"
}

不能成功调用技能对话API,这种情况是啥原因

0
#12TroubleMaker源回复于2019-11
#11 佩奇的幸福之旅回复
这个应用创建好了,直接通过http post交互就行?那有个场景是手机app语音控制智能家居,是不是可以应用?
展开

是的

0
#11佩奇的幸福之旅回复于2019-11

这个应用创建好了,直接通过http post交互就行?那有个场景是手机app语音控制智能家居,是不是可以应用?

0
#10果断叫小黑回复于2019-09

有没有实际实现的代码的例子。。我这边还是出现了{"error_code":282008,"error_msg":"The request content type is illegal."}错误

0
#9TroubleMaker源回复于2019-09
#8 风清扬意回复
你好,请问android可以实现多轮对话吗?  

可以,调用对话API并没有限制操作系统

0
#8风清扬意回复于2019-09

你好,请问android可以实现多轮对话吗?

 

0
#7wangwei8638回复于2019-08
#5 177******01回复
是否可以作为咨询流程

当然可以

0
#6TroubleMaker源回复于2019-05
#5 177******01回复
是否可以作为咨询流程

可以应用于咨询场景

0
#5177******01回复于2019-05

是否可以作为咨询流程

0
#4177******01回复于2019-05

多轮对话挺好的,期待应用到实际场景中

0
TOP
切换版块