最近开始主要会负责公司IM、机器人会话相关平台的开发,目的是开发属于自己的机器人,主要解决当前的教育智能会话等核心功能,也为后面一系列的接线做前期准备,经过技术选型的调研,最终我们选择的是百度大脑,本篇文章主要是记录一下百度的 智能会话定制与服务平台的UNIT的相关核心内容,同事记录一下整体的的API接入流程。
首先,需要了解一下什么是UNIT,下面是官方的具体介绍:
随着AI技术和理念的兴起,很多产品都希望采用对话式的人机交互方式。然而对话系统的研发对于大多数开发者而言却是一个很困难的工作,对技术和数据的要求都很高。
为此,百度将积累多年的自然语言理解与交互技术对外开放,推出了智能对话定制与服务平台UNIT(Understanding and Interaction Technology),将业界领先的技术能力输出给广大的开发者,以便降低对话系统的研发门槛。
基于UNIT,开发者可以高效、低成本的搭建对话系统,从而为用户提供智能客服、智能家居等场景下的服务咨询、业务办理等服务。
- 官网说明文档:ai.baidu.com/ai-doc/UNIT…
- API文档总览:ai.baidu.com/ai-doc/REFE…
机器人基本概念
机器人
机器人是业务系统中与用户进行对话交互的模块。UNIT支持开发者创建多个机器人,每个机器人中都可以添加不同的技能从而让机器人具备不同场景下的对话能力。
技能
每个技能可以为机器人提供某个场景下的对话服务,比如听音乐、订外卖、询问课程信息等。
UNIT为开发者提供了丰富的预置技能,一键获取即可拥对话能力。同时也支持开发者创建自定义技能,包括:对话技能、FAQ问答技能、对话式文档问答技能、表格问答技能。
机器人和技能的关系
机器人对技能统一调度管理,从而为用户提供多项对话服务。UNIT为开发者提供了两种对话流管理方式:技能分发对话流管理和图形化对话流管理。
对话管理
目前机器人支持两种对话方式:
- 图形化对话流管理
- 技能分发对话流管理
这两种对话方式的主要区别和适用主要是:
图形化对话流管理适用于对话流程长,分支多的对话场景。当您的业务需求需要进行多轮对话才能解决时,建议使用(简单对话);
技能分发对话流管理适用于对话流程短,主要依靠不同的技能回复用户问题的对话场景。当您的业务需求仅需一两轮对话就能解决时,建议使用(复杂对话)。
创建属于自己的机器人
点击云端版-> 免费试用->跳转我的机器人
这里我新建了一个我的首个智能机器人,选择的技能分发的对话方式。
参考:快速搭建对话机器人
将技能赋予机器人
- 先获取预置技能
在【我的技能】页面,点击【获取技能】,获取外卖预置技能。
2. 获取闲聊技能
在【我的技能】页面,点击【获取技能】,获取`增强版闲聊技能。
3. 将技能添加到机器人身上
4. 可以设置技能的优先级(拖到设置,目前是预置技能优先级在最高)
5. 对话测试
6. 对话测试完,部署个人的机器人
测试完成后,点击【发布上线】-> 研发/生产环境 即可接入业务系统,详情见:对话机器人部署
- 部署完之后,机器人如何接入业务系统呢?
UNIT为开发者提供了两种接入方式:对话API接入和一键接入微信公众号。
会话API接入方式接入机器人
对话API接口3.0:ai.baidu.com/ai-doc/UNIT…
API Key/Secret Key:console.bce.baidu.com/ai/#/ai/uni…
对话接口介绍和描述
基于用户输入的文本内容 (语音输入最终也转为文本) ,返回机器人理解与应答的信息。调用本对话API的前提是您已经在 unit.baidu.com 创建了机器人,并添加了至少一个已定义过的技能(新建了对话意图或问答意图、添加了对话模板/对话样本,且最少完成了一次模型的训练),营销线索机器人只支持使用2.0接口调用。
为了企业可以更灵活的使用智能对话的技术,UNIT将网站配置功能封装成API,企业可以通过API将业务系统与UNIT对接,这里我是采用对话API接入的方式。
UNIT说明文档下载地址:ai.baidu.com/ai-doc/UNIT…
目前 Java SDK代码已经公开,github连接:github.com/Baidu-AIP/j… 使用maven依赖,添加以下依赖即可,其中版本号在 maven官网 可查询:
UNIT利用session_id实现多轮对话
session保存了历史会话信息,随着对话的进行,在客户端和UNIT之间来回传递,并且被不断更新。理论上客户端与UNIT双方都可以对session进行更新与修改,然而,多数开发者并没有修改session的需求,而session数据的体量偏大,又对网络传输的流量与延时产生了额外的压力。
为了解决这一矛盾,UNIT支持基于session_id的会话托管:客户端在首轮对话时传入一个空的session_id字段,在应答阶段,UNIT会把会话信息托管在云端并且为其分配一个session_id。就可以基于历史会话信息与机器人进行多轮对话,而无需接触复杂的原始session。
总结起来,开发者可以使用以下方式与机器人对话API进行多轮对话:
- 客户端在首轮会话时以字符串
session_id为key传入一个空串,UNIT会把会话数据托管在云端,在应答中以字符串session_id为key,返回一个用于指代云端的会话数据的ID号。如需进行多轮对话,客户端在后续对话中以字符串session_id为key,继续传送前轮返回的ID号。在这种方式下,开发者没有办法修改会话数据。
注意:只要传入一个空的session_id,即代表不再继承历史会话信息,后续将开始新的对话。