问答机器人API
功能介绍
用户可通过调用该接口与机器人进行会话。旧版问答机器人API请参见问答会话API(仅支持老用户)。
调试
您可以在API Explorer中调试该接口,支持自动认证鉴权。API Explorer可以自动生成SDK代码示例,并提供SDK代码示例调试功能。
URI
POST https://{endpoint}/v1/{project_id}/qabots/{qabot_id}/chat
参数 | 是否必选 | 参数类型 | 描述 |
|---|---|---|---|
endpoint | 是 | String | 终端节点,即调用API的请求地址。 不同服务不同区域的endpoint不同,您可以从终端节点中获取。 例如,CBS服务在“华北-北京四”区域的“endpoint”为“cbs-ext.cn-north-4.myhuaweicloud.com”。 |
project_id | 是 | String | 项目ID,用于资源隔离。请参见获取项目ID。 |
qabot_id | 是 | String | 机器人标识符,qabot编号,UUID格式。如:303a0a00-c88a-43e3-aa2f-d5b8b9832b02。 获取方法: 登录对话机器人服务控制台,在智能问答机器人列表中查看qabot_id。
|
请求参数
参数 | 是否必选 | 参数类型 | 描述 |
|---|---|---|---|
X-Auth-Token | 是 | String | 用户Token。 用于获取操作API的权限。获取Token接口响应消息头中X-Subject-Token的值即为Token。 |
Content-Type | 是 | String | 消息体的类型(格式),参数值为“application/json”。 |
参数 | 是否必选 | 参数类型 | 描述 |
|---|---|---|---|
extends | 否 | Extends object | 扩展参数。 |
chat_enable | 否 | Boolean | 默认false。 true:使用内部闲聊语料进行兜底。 false:不使用闲聊兜底。 |
user_id | 否 | String | 用户id,在日志中用于标识不同用户,可以为任意String。 |
question | 是 | String | 用户问题。如:查天气。长度为1~512。 |
session_id | 否 | String | 会话标识符,UUID格式。如:c04e6f7b-61d7-4a2d-a0c8-f9ecd2f62359。
|
query_types | 否 | Array of Integers | 指定发送的机器人类型集合。 0 知识库问答。 1 技能问答。 2 闲聊问答。 3 图谱问答。 4 文档问答。 5 表格问答。 非必填字段。如果不填,会使用默认的机器人融合策略。 |
参数 | 是否必选 | 参数类型 | 描述 |
|---|---|---|---|
tag_ids | 否 | Tag object | 待匹配的答案标签信息。 |
domain_ids | 否 | Array of strings | 问题类别id列表。一次最多可以传入10个。 只有属于这些问题类别的知识库问答对才会被匹配到。 获取domain_ids方法: 登录对话机器人服务控制台,在“问答机器人 > 知识库 > 问答管理”界面,鼠标指向问题类别,获取domain_ids。
|
source | 否 | String | 问题来源。 支持用户自定义,最终体现在问答日志里。 |
return_all_answers | 否 | Boolean | 是否返回所有类型的回答。 |
响应参数
状态码: 200
参数 | 参数类型 | 描述 |
|---|---|---|
reply_type | Integer | 回复类型: 0 知识库回复。 1 技能回复。 2 闲聊回复。 3 图谱回复。 4 文档回复。 5 表格回复。 |
qabot_answers | QaBotAnswersNew object | 知识库回复。 |
chat_answers | ChatAnswers object | 闲聊回复。 |
taskbot_answers | TaskBotAnswers object | 技能回复。只有专业版机器人有该回复。 |
docqa_answers | DocqaAnswers object | 文档回复。只有专业版机器人有该回复。 |
tableqa_answers | TableQaAnswers object | 表格回复。只有专业版机器人有该回复。 |
session_id | String | 会话id,每次对话开启,机器人创建会话id,下次请求中传入该id表示继续该对话,从用户最后一次答案开始,会话超时时间为2分钟。 |
kbqa_answers | KbqaAnswers object | 图谱回复。只有专业版机器人有该回复。 |
request_id | String | 请求ID。用来标记调用失败时,用来标记本次问答。 |
参数 | 参数类型 | 描述 |
|---|---|---|
answers | Array of QaBotAnswer objects | 问答机器人回复。 |
recommend_answers | Array of RecomendAnswer objects | 问答机器人推荐回复。 |
参数 | 参数类型 | 描述 |
|---|---|---|
qa_pair_id | String | 问答对ID,UUID格式,如:305cd440-ab4f-4704-9b30-ffa4e82a5606。 |
st_question | String | 标准问题,如:桌面云打不开。 |
answer | String | 答案,如:桌面云打不开了。 |
score | Double | 相似度得分,精确到小数点后3位。 |
domain | String | 问题类别。 |
top_score_question | String | 最高评分的扩展问或标准问。具体见表4。 |
参数 | 参数类型 | 描述 |
|---|---|---|
qa_pair_id | String | 问答对ID,UUID格式,如:305cd440-ab4f-4704-9b30-ffa4e82a5606。 |
st_question | String | 标准问题,如:桌面云打不开。 |
score | Double | 相似度得分,精确到小数点后3位。 |
domain | String | 问题类别。 |
top_score_question | String | 最高评分的扩展问或标准问。具体见表4。 |
参数 | 参数类型 | 描述 |
|---|---|---|
answer | String | 答案, 如:请问您需要查询哪里的天气?(##SPLIT## 标签:多个回复节点分隔符) |
skill_id | String | 技能标识符,UUID格式。如:9eece064-bdb5-43cb-8e0f-8c19a929e25c。 |
skill_responses | Array of SkillResponse objects | 技能回复信息。 |
参数 | 参数类型 | 描述 |
|---|---|---|
skill_id | String | 输入问题,不能为空,UUID格式,如:9eece064-bdb5-43cb-8e0f-8c19a929e25c。 |
skill_version | String | skill的版本。 |
frame | Frame object | 命中意图。 |
candidate | CandidateIntention object | 候选意图。 |
locked | Boolean | 技能是否被锁定,默认是false。 |
related_intenions | Array of RelatedIntention objects | 相关意图信息。 |
参数 | 参数类型 | 描述 |
|---|---|---|
intention | String | 意图。 |
confidence | Double | 命中意图置信度。 |
current_slots | Array of CurrentSlot objects | 当前槽位列表。 |
history_slots | Array of HistorySlot objects | 历史槽位列表。 |
reply | String | 机器人回复。 |
task_complete | Boolean | 任务是否完成。 |
flow_complete | Boolean | 对话流程是否结束。 |
candidate_words | Array of Strings | 候选词。 |
intention_alias | String | 意图名称。 |
参数 | 参数类型 | 描述 |
|---|---|---|
slot_id | String | 槽位ID,UUID格式,如:9eece064-bdb5-43cb-8e0f-8c19a929e25c。 |
slot_name | String | 槽位名称。 |
slot_values | Array of SlotValue objects | 槽位值。 |
slot_identification | String | 用户设置的槽位标识。 |
参数 | 参数类型 | 描述 |
|---|---|---|
word | String | 词。 |
norm_word | String | 通用词。 |
begin_position | Integer | 词的起始位置。 |
end_position | Integer | 词的结束位置。 |
参数 | 参数类型 | 描述 |
|---|---|---|
slot_name | String | 槽位名称。 |
slot_values | Array of HistorySlotWord objects | 槽信息。 |
slot_identification | String | 用户设置的槽位标识。 |
参数 | 参数类型 | 描述 |
|---|---|---|
answer | String | 答案。 |
score | Double | 文档问答回复的得分。 |
question | String | 问题。 |
answer_detail | DocQueryAnswerDetail object | 文档回复的详细信息。 |
details | Array of DocQueryAnswerDetail objects | 文档回复的topN答案。 |
参数 | 参数类型 | 描述 |
|---|---|---|
answer | String | 答案。 |
doc_id | String | 文档ID。 |
end_index | Integer | 答案结束下标。 |
paragraph_score | Double | 段落评分。 |
paragraph_text | String | 段落文字。 |
phrase_score | Double | 文档问答阅读理解评分。 |
start_index | Integer | 答案开始下标。 |
total_score | Double | 文档问答总评分。 |
paragraph_number | Integer | 段落在文档中的编号。 |
状态码: 400
参数 | 参数类型 | 描述 |
|---|---|---|
error_code | String | 调用失败时的错误码。 调用成功时无此字段。 |
error_msg | String | 调用失败时的错误信息。 调用成功时无此字段。 |
请求示例
- 提问“桌面云打不开了”
POST https://{endpoint}/v1/{project_id}/qabots/{qabot_id}/chat Request Header: Content-Type: application/json X-Auth-Token: MIINRwYJKoZIhvcNAQcCoIINODCCDTQCAQExDTALBglghkgBZQMEAgEwgguVBgkqhkiG... Request Body: { "question": "桌面云打不开了" } - Python语言请求代码示例
import requests url = "https://{endpoint}/v1/{project_id}/qabots/{qabot_id}/chat" token = "用户获取得到的实际token值" headers = {'Content-Type': 'application/json', 'X-Auth-Token': token} body = {"question": "用户问"} response = requests.post(url, headers=headers, json=body, verify=False) print(response.text) - Java语言请求代码示例
import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; public class CBSDemo { public void cbsDemo() { try { //endpoint、projectId、qabot_id需要替换成实际信息。 URL url = new URL("https://{endpoint}/v1/{project_id}/qabots/{qabot_id}/chat"); String token = "用户获取得到的实际token值"; HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoInput(true); connection.setDoOutput(true); connection.addRequestProperty("Content-Type", "application/json"); connection.addRequestProperty("X-Auth-Token", token); //输入参数 String body = "{\"question\": \"用户问\"}"; OutputStreamWriter osw = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); osw.append(body); osw.flush(); InputStream is = connection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); while (br.ready()) { System.out.println(br.readLine()); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { CBSDemo CBSDemo = new CBSDemo(); CBSDemo.cbsDemo(); } }
响应示例
状态码:200
成功响应示例
{
"reply_type" : 0,
"qabot_answers" : {
"answers" : [ {
"score" : 1,
"answer" : "桌面云打不开了",
"domain" : "桌面云",
"qa_pair_id" : "305cd440-ab4f-4704-9b30-ffa4e82a5606",
"st_question" : "桌面云打不开"
} ]
}
} 状态码:400
失败响应示例
{
"error_code":"CBS.0011",
"error_msg":"auth failed"
} 状态码
状态码请参见状态码。
错误码
错误码请参见错误码。



