wukong-robot--unit机器人
wukong-robot--unit机器人
前言
刚开始使用这个开源项目的时候,发现这个都有一些自动回复的内容,区分不了什么是UNIT和聊天机器人,后面就上网自己建立了一个UNIT百度的机器人,知道了一些大概。
UNIT机器人
创建过程
- 在 https://ai.baidu.com/unit 里注册创建一个机器人。这个地方会得到一个机器人的ID
- https://console.bce.baidu.com/ai/#/ai/unit/app/list ,创建一个应用就可以得到应用的API key和Secret Key
这里因为百度提供的服务比较多,第一个界面是专门用来维护UNIT机器人,后面的界面是专门用来维护应用开发的,其中UNIT机器人属于智能对话UNIT。
接口API调用
获取token
获取的URL:http://openapi.baidu.com/oauth/2.0/token
URL = 'http://openapi.baidu.com/oauth/2.0/token'
params = {'grant_type': 'client_credentials',
'client_id': api_key,
'client_secret': secret_key}
r = requests.get(URL, params=params)
try:
r.raise_for_status()
token = r.json()['access_token']
return token
except requests.exceptions.HTTPError:
return ''
API使用
url = 'https://aip.baidubce.com/rpc/2.0/unit/service/chat?access_token=' + access_token
request={
"query":query,
"user_id": str(get_mac())[:32],
}
body={
"log_id": str(uuid.uuid1()),
"version":"2.0",
"service_id": service_id,
"session_id": str(uuid.uuid1()),
"request":request
}
try:
headers = {'Content-Type': 'application/json'}
request = requests.post(url, json=body, headers=headers)
print(request.text)
return json.loads(request.text)
except Exception:
return None
HTTP方法:
POST
请求URL:
- 沙盒环境
【不区分机房】https://aip.baidubce.com/rpc/2.0/unit/service/chat - 生产环境
【华北机房】https://unit.bj.baidubce.com/rpc/2.0/unit/service/chat
【华东机房】https://unit.su.baidubce.com/rpc/2.0/unit/service/chat
【华南机房】https://unit.gz.baidubce.com/rpc/2.0/unit/service/chat
【全国域名】https://unit-api.baidu.com/rpc/2.0/unit/service/chat
URL参数:
| 参数 | 值 |
|---|---|
| access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
Header如下:
| 参数 | 值 |
|---|---|
| Content-Type | application/json |
请求参数说明
| 参数 | 类型 | 是否必需 | 说明 |
|---|---|---|---|
| version | string | 必需 | =2.0,当前api版本对应协议版本号为2.0,固定值 |
| service_id | string | 可选 | 机器人ID,service_id 与skill_ids不能同时缺失,至少一个有值。 |
| skill_ids | list |
可选 | 技能ID列表。我们允许开发者指定调起哪些技能。这个列表是有序的——排在越前面的技能,优先级越高。技能优先级体现在response的排序上。具体排序规则参见【应答参数说明】 service_id和skill_ids可以组合使用,详见【请求参数详细说明】 |
| log_id | string | 必需 | 开发者需要在客户端生成的唯一id,用来定位请求,响应中会返回该字段。对话中每轮请求都需要一个log_id |
| session 或 session_id | string(json) 或 string | 必需 | session保存机器人的历史会话信息,由机器人创建,客户端从上轮应答中取出并直接传递,不需要了解其内容。如果为空,则表示清空session(开发者判断用户意图已经切换且下一轮会话不需要继承上一轮会话中的词槽信息时可以把session置空,从而进行新一轮的会话)。 session字段内容较多,开发者可以通过传送session_id的方式节约传输流量。具体操作方式见【请求参数详细说明】 以下为session内部格式,仅供参考了解 |
| +service_id | string | 必需 | 机器人ID,标明该session由哪个机器人产生。 |
| +session_id | string | 必需 | session本身的ID,客户端可以使用session_id代替session,节约传输流量。 |
| +skill_sessions | kvdict of strings | 必需 | 这里存储与当前对话相关的所有技能的session。key为技能ID,value为技能的session(同【UNIT对话API文档】中的bot_session)。 |
| +interactions | list | 必需 | 历史交互序列,即历史 request/response_list 序列,序列的每一个元素称作一次交互(interaction),随交互进行而交替插入,格式与上述不断增长直到发生清空操作。 |
| +interactions[].interaction_id | string | 必需 | 第 i 次交互的唯一标识。 |
| +interactions[].timestamp | string | 必需 | interaction生成的时间(以interaction_id的生成时间为准)。格式:YYYY-MM-DD HH:MM:SS.fff (24小时制,精确到毫秒) |
| +interactions[].request | object | 必需 | 第 i 次交互的 request,结构参考【请求参数说明】中的request |
| +interactions[].response_list | list | 必需 | 第 i 次交互的 response列表,结构参考【应答参数说明】中的response_list |
| dialog_state | object | 可选 | 机器人对话状态。 |
| +skill_states | kvdict of objects | 可选 | 技能的对话状态key为技能ID,value为技能的对话状态数据。具体数据格式后续发布。 |
| +contexts | json object | 可选 | 希望在多技能对话过程中贯穿的全局性上下文. 这里预留了一个key用于控制各技能的session记忆。详见【请求参数详细说明】 |
| request | object | 必需 | 本轮请求体。 |
| +user_id | string | 必需 | 与技能对话的用户id(如果客户端是用户未登录状态情况下对话的,也需要尽量通过其他标识(比如设备id)来唯一区分用户),方便今后在平台的日志分析模块定位分析问题、从用户维度统计分析相关对话情况。详情见【请求参数详细说明】 |
| +query | string | 必需 | 本轮请求query(用户说的话),详情见【请求参数详细说明】 |
| +query_info | object | 可选 | 本轮请求query的附加信息 |
| ++type | string enum | 可选 | 请求信息类型,取值范围:"TEXT","EVENT"。详情见【请求参数详细说明】 |
| ++source | string enum | 可选 | 请求信息来源,可选值:"ASR","KEYBOARD"。ASR为语音输入,KEYBOARD为键盘文本输入。针对ASR输入,UNIT平台内置了纠错机制,会尝试解决语音输入中的一些常见错误 |
| ++asr_candidates | list | 可选 | 请求信息来源若为ASR,该字段为ASR候选信息。(如果调用百度语音的API会有该信息,UNIT会参考该候选信息做综合判断处理。) |
| ++asr_candidates[].text | string | 可选 | 语音输入候选文本 |
| ++asr_candidates[].confidence | float | 可选 | 语音输入候选置信度 |
| +client_session | string(json) | 可选 | 用于在多轮中实现多选一的对话效果,具体内容见【请求参数详细说明】 |
| +hyper_params | kvdict of object | 可选 | key为技能id或机器人id(现在只实现技能id),value为控制相关技能/机器人内部行为的的超参数 |
| +hyper_params{}.bernard_level | int | 可选 | 技能自动发现不置信意图/词槽,并据此主动发起澄清确认的频率。取值范围:0(关闭)、1(低频)、2(高频)。取值越高代表技能对不置信意图/词槽的敏感度就越高,默认值=1 |
| int | 可选 | 参数已废弃 | |
| double | 可选 | 参数已废弃 | |
| +hyper_params{}.slu_tags | list |
可选 | 用于限定slu的解析范围,只在打上了指定tag的意图、或问答对的范围内执行slu |
| +hyper_params{}.dynamic_slots | kvdict of list |
可选 | 针对特定词槽启用『动态词典』机制,key为词槽名(如user_xxx),value为针对该词槽启用的动态词典id(可以同时启用多个动态词典)。 |
常用的关键内容:query和user_id
响应参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| error_code | int | 错误码,为0时表示成功 |
| error_msg | string | 错误信息,errno!= 0 时存在 |
| result | object | 返回数据对象,当errno为0时有效 |
| +version | string | =2.0,当前api版本对应协议版本号为2.0,固定值 |
| +service_id | string | 机器人ID,同请求参数 |
| +log_id | string | 日志唯一ID(用户与机器人的一问一答为一次interaction,其中用户每说一次对应有一个log_id) |
| +session 或 session_id | string 或string(json) | 本轮对话后更新的session信息,具体为哪个字段,与请求数据有关,详情见【请求参数详细说明】 |
| +dialog_state | object | 对话状态数据,外提以方便session托管。 |
| +interaction_id | string | 为本轮请求+应答之组合,生成的id |
| +timestamp | string | interaction生成的时间(以interaction_id的生成时间为准)。格式:YYYY-MM-DD HH:MM:SS.fff (24小时制,精确到毫秒) |
| +response_list | list | 本轮应答列表。由于请求接口支持请求多个技能,因此这里可能有多个应答。应答列表是有序的,其第一个元素是最为推荐采用的一个应答。决定应答列表顺序的规则详见【响应参数详细说明】 |
| +response_list[].status | int | 状态码,0为正常 |
| +response_list[].msg | string | 错误信息,非零时有效 |
| +response_list[].origin | string | 应答来自哪个技能(skill_id)或机器人(service_id),注意有些应答可能是机器人给出的(不来自任何一个技能)。 |
| +response_list[].action_list | list | 动作列表 |
| +response_list[].action_list[].confidence | float | 动作置信度 |
| +response_list[].action_list[].action_id | string | 动作ID |
| +response_list[].action_list[].say | string | 应答话术 |
| +response_list[].action_list[].custom_reply | string(json) | 用户自定义应答,如果action_type为event,对应事件定义在此处。详见【响应参数详细说明】 |
| +response_list[].action_list[].type | string enum | 动作类型,具体有以下几种: clarify(澄清) satisfy(满足) guide(引导到对话意图) faqguide(引导到问答意图) understood(理解达成,注:内部使用) failure(理解失败) chat(聊天话术) event(触发事件,在答复型对话回应 中选择了"执行函数",将返回event类型的action) |
| +response_list[].action_list[].refine_detail | object optional | 澄清与引导(type=clarify/guide/faqguide)时有效,表达澄清或引导的详细信息。 |
| +response_list[].action_list[].refine_detail.interact | string enum | 交互形式。具体有以下几种: select(给出选项供选择) ask(提问) selectandask(给出选项并且追加提问) |
| +response_list[].action_list[].refine_detail.option_list | list | 选项列表。 |
| +response_list[].action_list[].refine_detail.option_list[].option | string | 选项文字 |
| +response_list[].action_list[].refine_detail.option_list[].info | kvdict | 选项细节信息。详见【响应参数详细说明】 |
| +response_list[].action_list[].refine_detail.clarify_reason | string enum optional | 动作类型为clarify时有值,表明起因 |
| +response_list[].schema | object | 解析的schema,解析意图、词槽结果都从这里面获取 |
| +response_list[].schema.confidence | double | schema的总体置信度 |
| +response_list[].schema.intent | string | 意图 |
| +response_list[].schema.intent_confidence | double | 意图置信度 |
| +response_list[].schema.slots | list | 词槽列表 |
| +response_list[].schema.slots[].confidence | double | 词槽置信度 |
| +response_list[].schema.slots[].begin | int | 起始位置 |
| +response_list[].schema.slots[].length | int | 长度 |
| +response_list[].schema.slots[].original_word | string | 词槽值 |
| +response_list[].schema.slots[].normalized_word | string | 归一化词槽值 |
| +response_list[].schema.slots[].word_type | string | 词槽值细化类型[保留字段] |
| +response_list[].schema.slots[].name | string | 词槽名称 |
| +response_list[].schema.slots[].session_offset | int | 词槽是在第几轮对话中引入的 |
| +response_list[].schema.slots[].merge_method | string | 词槽引入的方式 |
| +response_list[].schema.slots[].sub_slots | list | 子词槽list,内部结构同正常词槽。 |
| +response_list[].qu_res | object optional | SLU解析结果,之所以是optional,是因为response不一定是由某个技能产生,因此不一定有SLU结果 |
| +response_list[].qu_res.timestamp | int | query结果时间戳 |
| +response_list[].qu_res.status | int | query结果状态 |
| +response_list[].qu_res.raw_query | string | 原始query |
| +response_list[].qu_res.candidates | list | 意图候选项 |
| +response_list[].qu_res.candidates[].confidence | double | 解析结果整体的(综合意图和词槽)置信度,如果返回结果中无该字段,请重新训练后尝试。 |
| +response_list[].qu_res.candidates[].intent | string | 候选项意图名称 |
| +response_list[].qu_res.candidates[].intent_confidence | double | 候选项意图置信度 |
| +response_list[].qu_res.candidates[].intent_need_clarify | bool | 意图是否需要澄清 |
| +response_list[].qu_res.candidates[].slots | list | 词槽列表 |
| +response_list[].qu_res.candidates[].slots[].confidence | double | 词槽置信度 |
| +response_list[].qu_res.candidates[].slots[].begin | int | 起始位置,注意:单位为字符 |
| +response_list[].qu_res.candidates[].slots[].length | int | 长度,注意:单位为字符 |
| +response_list[].qu_res.candidates[].slots[].original_word | string | 词槽原始值 |
| +response_list[].qu_res.candidates[].slots[].normalized_word | string(json) | 词槽归一化值 |
| +response_list[].qu_res.candidates[].slots[].word_type | string | 细粒度词槽类型(预留字段) |
| +response_list[].qu_res.candidates[].slots[].name | string | 词槽名 |
| +response_list[].qu_res.candidates[].slots[].need_clarify | bool | 词槽是否需要澄清 |
| +response_list[].qu_res.candidates[].slots[].father_idx | int | 父词槽index,非子词槽,取值-1 |
| +response_list[].qu_res.candidates[].from_who | string | 来自哪个qu策略(smart-qu对应对话模板,ml-qu对应对话样本学习) |
| +response_list[].qu_res.candidates[].match_info | string | query匹配信息 |
| +response_list[].qu_res.candidates[].extra_info | kvdict | 候选项附加信息 |
| +response_list[].qu_res.qu_res_chosen | string(json) | 最终qu结果,内部格式同result.response.qu_res.candidates[] |
| +response_list[].qu_res.lexical_analysis | list | query的词法分析结果 |
| +response_list[].qu_res.lexical_analysis[].term | string | 词汇(含命名实体) |
| +response_list[].qu_res.lexical_analysis[].weight | double | 重要性权重 |
| +response_list[].qu_res.lexical_analysis[].type | string | 词性或专名类别 |
| +response_list[].qu_res.lexical_analysis[].etypes | list |
命名实体兼属的所有专名类别 |
| +response_list[].qu_res.lexical_analysis[].basic_word | list |
构成词汇的基本词 |
| +response_list[].qu_res.sentiment_analysis | object | query的情感分析结果 |
| +response_list[].qu_res.sentiment_analysis.label | string enum | 情感标签,取值范围:"0"、"1"、"2",分别代表:负向情感、无情感、正向情感 |
| +response_list[].qu_res.sentiment_analysis.pval | double | 置信度,取值范围0-1 |
关注的内容:
语意
response_list[].schema.intent
词槽
response_list[].qu_res.candidates[].slots
响应内容,文本内容
+response_list[].action_list[].say
备注
uuid 是同一个地方生成的码是独一,不会重复的

浙公网安备 33010602011771号