知识库对话体验
POST /studio/rag/chat/v1/completions:chat
请求头(Request Header)
Authorization 可以使用如下两种Header
- 动态生成 Authorization Header, 参考认证(authentication)
-H "X-Date: $xdate" \
-H "Authorization: $auth"
- 直接提供完整的 Authorization Header,可以通过浏览器的开发者工具DevTools查看并复制接口调用的完整信息
-H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6InB...'
请求参数(Request Parameters)
| 名称 | 类型 | 必须 | 描述 |
|---|---|---|---|
| action | integer($enum) | 是 | 对话的动作 |
| content | string | 否 | 用户输入内容 |
| conversation_id | string | 否 | 指定进行对话的对话ID |
| conversation | object | 否 | 对话详情,当conversation_id为空时,需要传递此字段来创建新的对话 |
| stream | boolean | 否 | 控制是否是流式输出,默认false表示非流式输出,true表示流式输出. |
其中,action有如下情况
| 枚举值 | 数值 | 含义 |
|---|---|---|
| CHAT_ACTION_UNSPECIFIED | 0 | 未指定 |
| CHAT_ACTION_NEXT | 1 | 如常进行下一轮对话 |
| CHAT_ACTION_REGENERATION | 2 | 重新生成上一轮对话的新响应 |
其中,conversation的参数如下
| 名称 | 类型 | 必须 | 描述 |
|---|---|---|---|
| conversation_id | string | 否 | 对话ID(只输出). |
| channel_id | string | 否 | 大模型渠道资源ID. |
| display_name | string | 是 | 显示名称,第一次对话后自动更新. |
| create_time | string($date-time) | 否 | 创建时间(只输出). |
| update_time | string($date-time) | 否 | 更新时间(只输出). |
| model | string | 是 | 模型名称. |
| search_config | object | 是 | 知识搜索配置. |
| prompt | string | 否 | 知识库提示,改写用户问题,增加知识库检索到的知识信息. |
| model_config | object | 否 | 模型配置. |
| sys_prompt | string | 否 | 人设提示,大模型所需要扮演的人设信息. |
| conversation_question_prompt_enabled | bool | 否 | 是否提供用户可能想问的三个问题. |
| user | string | 否 | 用户名. |
| chat_times | int32 | 否 | 聊天次数. |
| total_feedback_like | int32 | 否 | 点赞反馈的总数. |
| total_feedback_unlike | int32 | 否 | 差评反馈的总数. |
其中,conversation.search_config的参数如下
| 名称 | 类型 | 必须 | 描述 |
|---|---|---|---|
| dataset_list | array[object] | 是 | 要搜索的知识库列表. |
| top_k | int32 | 否 | 返回结果的Top K值. |
| confidence | float | 否 | 置信度. |
| weight | float | 否 | 权重:表示两种方法之间的比例. |
| open_window | bool | 否 | 是否在提示中包含检索段的前后片段. |
其中,search_config.dataset_list的参数如下
| 名称 | 类型 | 必须 | 描述 |
|---|---|---|---|
| id | string | 是 | 知识库ID. |
| display_name | string | 否 | 知识库显示名称. |
其中,conversation.model_config的参数如下
| 名称 | 类型 | 必须 | 描述 |
|---|---|---|---|
| frequency_penalty | float | 否 | 重复惩罚系数. |
| max_tokens | int32 | 否 | 在聊天补全中生成的最大token数,默认值为102. |
| n | int32 | 否 | 为每条输入消息生成的聊天补全选择数量. |
| temperature | float | 否 | 使用的采样温度,范围在0到2之间. |
| top_p | float | 否 | 采样温度的替代方案,称为核采样. |
请求示例(Request Example)
curl 'https://rag.cn-sh-01.sensecoreapi.cn/studio/rag/chat/v1/completions:chat' \
-H 'Accept: text/event-stream' \
-H "X-Date: $xdate" \
-H "Authorization: $auth" \
-X POST \
--data-raw '{
"conversation_id": "d42034d2-44cb-4777-98f2-853dc6869c02",
"content": "关联问题:\n1. 知识库的主要功能是什么?\n2. 如何有效地利用知识库?\n3. 知识库在哪些领域得到广泛应用?",
"action": 1,
"stream": true,
"conversation": {
"display_name": "关联问题:\n1. 知识库的主要功能是什么?\n2. 如何有效地利用知识库?\n3. 知识库在哪些领域得到广泛应用?",
"search_config": {
"dataset_list": [
{
"id": "1431194b72344e88a4df1af91a710ca1",
"display_name": "testywj06141431"
}
],
"top_k": 3,
"confidence": 0.5,
"open_window": false,
"weight": 0.5
},
"model_config": {
"temperature": 0.8,
"top_p": 0.7,
"frequency_penalty": 1.05,
"max_tokens": 1024
},
"model": "SenseChat",
"prompt": "使用如下知识的内容作为你的**知识库数据**。\n 知识:\n {{ .Knowledge }}\n\n 回答时请遵循以下规则:\n - 尽量使用**知识库数据**的内容来回答。\n - 如果**知识库数据**中未提及,就用自身知识回答并且告诉用户该信息不是来自知识库。\n - 如果不确定时,请求用户澄清问题。\n\n 请回答问题: \n {{ .Question }}",
"sys_prompt": "#角色设定\n 作为一个智能问答助手,你的任务是为用户提供专业、准确的建议。 \n #组件能力\n 你能够理解和分析用户输入,提供相关且有用的答案。\n 你具备丰富的领域知识,可以回答广泛的问题。 \n #要求与限制\n 1.输出内容的风格要求:保持友好和专业的语气。\n 2.输出内容的字数限制:尽量控制在200字以内,除非问题需要更详细的解释。\n 3. 语言处理:根据用户问题的语言进行回答。",
"conversation_question_prompt_enabled": true
}
}'
响应(Response)
| 名称 | 类型 | 描述 |
|---|---|---|
| conversation_id | string | 对话ID. |
| seq | int32 | 对话中的序列号. |
| message | string | 非流式请求生成的响应内容. |
| delta | string | 流式请求生成的响应内容. |
| finish_reason | integer($enum) | 停止生成的原因. |
| knowledge_base_results | array[object] | 知识检索的中间结果. |
| history_id | string | 聊天历史ID. |
| prompt_questions | array[string] | 用户下一个问题的提示. |
其中,finish_reason有如下情况
| 枚举值 | 数值 | 含义 |
|---|---|---|
| FINISH_REASON_UNSPECIFIED | 0 | 未指定 |
| FINISH_REASON_STOP | 1 | 因为到达终止标记而停止生成 |
| FINISH_REASON_LENGTH | 2 | 因为达到最大长度而停止生成 |
| FINISH_REASON_SENSITIVE | 3 | 因为触发敏感词而停止生成 |
| FINISH_REASON_CONTEXT | 4 | 因为达到模型上下文长度限制而停止 |
其中,knowledge_base_results的参数如下
| 名称 | 类型 | 描述 |
|---|---|---|
| page_content | string | 页面内容. |
| document | object | 相关知识文档. |
| confidence | float | 结果置信度. |
| token_count | int64 | 内容的token数量. |
| segment_number | int32 | 段落数量. |
| words | int32 | 段落的字数. |
| type | integer($enum) | 段落类型. |
| display_type | integer($enum) | 显示类型. |
| table_content | string | 表格内容. |
| image_uri | string | 图片URI. |
| image_key | string | 图片键. |
| image_keys | array[string] | 图片键集合. |
| display_content | string | 显示内容. |
其中,knowledge_base_results.document的参数如下
| 名称 | 类型 | 描述 |
|---|---|---|
| document_id | string | 知识文档的ID. |
| display_name | string | 知识文档的名称. |
| type | integer($enum) | 知识文档的类型. |
| document_size | int64 | 知识文档的大小. |
| token_count | int64 | 知识文档的令牌计数. |
| segment_count | int64 | 知识文档的段落计数. |
| dataset_id | string | 知识文档所属知识库的ID. |
| dataset_display | string | 知识文档所属知识库的显示名称. |
| p_id | string | 父知识文档的ID. |
| data_source_type | integer($enum) | 知识文档的数据源类型. |
| creator | string | 知识文档的创建者. |
| create_time | string($date-time) | 知识文档的创建时间. |
| update_time | string($date-time) | 知识文档的更新时间. |
| segments | array[object] | 知识文档的段落详细信息列表. |
| uri | string | 知识文档在OSS中的预签名URI. |
其中,document.type有如下情况
| 枚举值 | 数值 | 含义 |
|---|---|---|
| DOCUMENT_TYPE_UNSPECIFIED | 0 | 未指定 |
| WEBPAGE | 1 | 网页 |
| FOLDER | 2 | 文件夹 |
| TXT | 3 | 文本文件 |
| 4 | PDF文件 | |
| HTML | 5 | HTML文件 |
| XLSX | 6 | XLSX文件 |
| XLS | 7 | XLS文件 |
| DOCX | 8 | DOCX文件 |
| CSV | 9 | CSV文件 |
| PPTX | 10 | PPTX文件 |
| PPT | 11 | PPT文件,暂不支持 |
| XML | 12 | XML文件 |
| MARKDOWN | 13 | Markdown文件 |
| MD | 14 | MD文件 |
| JSON | 15 | Json文件 |
其中,document.data_source_type有如下情况
| 枚举值 | 数值 | 含义 |
|---|---|---|
| DATA_SOURCE_TYPE_UNSPECIFIED | 0 | 开始,默认 |
| LOCAL_FILE | 1 | 本地知识 |
| WEB | 2 | 网络知识 |
| NOTION | 3 | Notion知识 |
其中,document.segments的参数如下
| 名称 | 类型 | 描述 |
|---|---|---|
| segment_id | string | 段ID. |
| dataset_id | string | 知识库ID |
| document_id | string | 文档ID |
| content | string | 段落内容 |
| token_count | int32 | 词元数量 |
| number | int32 | 段落编号 |
| metadata | object | 元数据 |
| words | int32 | 单词数量 |
| segment_type | integer($enum) | 段落类型 |
| table_content | string | 表格内容 |
| image_key | string | 图片键值 |
| image_uri | string | 图片URI |
| display_type | integer($enum) | 显示类型 |
| image_keys | array[string] | 图片键值列表 |
| display_content | string | 展示内容 |
其中,segments.metadata的参数如下
| 名称 | 类型 | 描述 |
|---|---|---|
| key_words | array[string] | 关键词 |
| image_name_value | string | 图片名称 |
| image_size | int32 | 图片大小 |
| table_name_value | string | 表格名称 |
| table_rows | int32 | 表格行数 |
| table_columns | array[string] | 表格列 |
| score | float | 分数 |
其中,knowledge_base_results.type和segments.segment_type有如下情况
| 枚举值 | 数值 | 含义 |
|---|---|---|
| SEGMENT_TYPE_UNSPECIFIED | 0 | 未指定状态 |
| SEGMENT_TYPE_TEXT | 1 | 文字 |
| SEGMENT_TYPE_IMAGE | 2 | 图片 |
| SEGMENT_TYPE_TABLE | 3 | 表格 |
| SEGMENT_TYPE_WEB_IMAGE | 4 | 网页图片 |
其中,knowledge_base_results.display_type和segments.display_type有如下情况
| 枚举值 | 数值 | 含义 |
|---|---|---|
| DISPLAY_TYPE_UNSPECIFIED | 0 | 未指定状态 |
| DISPLAY_TYPE_TEXT | 1 | 文字 |
| DISPLAY_TYPE_MARKDOWN | 2 | Markdown |
响应示例(Response Example)
{"result":{"conversation_id":"","seq":0,"message":"","delta":" ","finish_reason":0,"knowledge_base_results":[],"history_id":"","prompt_questions":[]}},
{"result":{"conversation_id":"3ba7b7ef-ff9d-4d9d-b7ad-4079107f7f3f","seq":1,"message":"","delta":"","finish_reason":1,"knowledge_base_results":[],"history_id":"32f3d69e-f82a-4907-9e9c-9200860b2923","prompt_questions":[" 关联问题:\n1. 在哪些国家或地区,男性和女性的法定结婚年龄不同?\n2. 有没有国家或地区允许未成年人在特定条件下合法结婚?\n3. 历史上,法定结婚年龄的变化趋势是怎样的?"]}}