说明
由于大模型底层架构升级,知识库同步兼容适配,search_and_generate API 用法和影响如下:
1、若原本使用公共接入点调用 Doubao 模型,无影响
2、若原本使用私有接入点调用 Doubao 模型,需要额外上传 API key 参数,否则会自动调度到公共 EP 上(此时计费项和折扣会走知识库商品)
本节将说明如何基于一个已创建的知识库做在线检索,并使用大语言模型整合生成回答。
说明
/api/knowledge/collection/search_and_generate 接口用于对知识库进行检索,并将检索到的文本片和用户问题组装到 prompt 当中,调用大语言模型生成问题的回答。
URI | /api/knowledge/collection/search_and_generate | 统一资源标识符 |
---|---|---|
请求方法 | POST | 客户端对向量数据库服务器请求的操作类型 |
请求头 | Content-Type: application/json | 请求消息类型 |
Authorization: HMAC-SHA256 *** | 鉴权 |
参数 | 子参数 | 类型 | 必选 | 默认值 | 备注 |
---|---|---|---|---|---|
name | -- | string | 否 | -- | 知识库名称
|
project | -- | string | 否 | default | 知识库所属项目 |
resource_id | -- | string | 否 | -- | 知识库唯一 id |
query | -- | string | 是 | -- | 检索文本,最大可输入长度为 8000:
|
stream | -- | bool | 否 | False | 响应内容是否流式返回
|
query_param | json | 否 | -- | 检索的过滤和返回设置 | |
doc_filter | map | 否 | -- | 检索过滤条件,支持对 doc 的 meta 信息过滤
| |
retrieve_param | map | 否 | 检索召回参数配置 | ||
rerank_switch | bool | 否 | False | 自动对结果做 rerank | |
retrieve_count | int | 否 | 25 | 进入重排的切片数量,默认为 25 | |
limit | int | 否 | 10 | 最终返回的文本片数量,取值范围 [1, 200] | |
dense_weight | float | 否 | 0.5 | 混合检索中稠密向量的权重 | |
chunk_diffusion_count | int | 否 | 0 | **检索阶段返回命中文本片上下几片文本片。**默认为 0,表示不进行 chunk diffusion。范围 [0, 5] | |
rerank_model | string | 否 | "m3-v2-rerank" | rerank 模型选择
| |
rerank_only_chunk | bool | 否 | False | 是否仅根据 chunk 内容计算重排分数
| |
get_attachment_link | bool | 否 | False | 是否获取 attachment 的临时下载链接 | |
llm_param | map | 否 | 大语言模型参数配置 | ||
model | string | 否 | "Doubao-pro-32k" | 生成使用的大语言模型
| |
model_version | string | 否 | Doubao-pro-32k可选的模型版本
Doubao-pro-128k可选的模型版本
Doubao-pro-256k可选的模型版本
Doubao-lite-32k可选的模型版本
Doubao-lite-128k可选的模型版本
| ||
max_new_tokens | int | 否 | 2000 | 最多生成多少个新 token | |
temperature | float | 否 | 0.7 | 生成温度 | |
top_p | float | 否 | 0.9 | 用于控制输出 tokens 的多样性 | |
top_k | int | 否 | 0 | 选择预测值最大的 k 个 token 进行采样 | |
prompt | string | 否 | "使用以下的信息作为你学习到的知识,这些信息在 | {{ .retrieved_chunks }}和{{ .user_query }}是占位符,由后端传入检索到的文本片和用户的问题。 | |
prompt_extra_context | map | 否 | -- | 组装模型 prompt 时,检索到的文本片包含哪些信息
| |
endpoint_id | string | 否 | -- | 大语言模型私有接入点 | |
api_key | string | 否 | -- | 接入点 API Key |
参数 | 参数说明 |
---|---|
code | 状态码 |
message | 返回信息 |
request_id | 标识每个请求的唯一标识符 |
data | 检索及流式生成内容 |
data 返回值
字段 | 子字段 | 字段类型 | 说明 |
---|---|---|---|
collection_name | -- | string | 检索知识库名字 |
count | -- | int | 检索返回的结果数量 |
result_list | list | 检索返回切片列表 | |
id | string | 索引的 primary_key | |
content | string | 切片内容,当文档类型为faq时,content为问题对应的答案 | |
score | float | 检索召回得分 | |
point_id | string | 知识点 id | |
chunk_title | string | 切片标题 | |
chunk_id | int | 切片 id,代表切片在对应文档里的位序,不同文档可能重复 | |
process_time | int | 知识处理完成时间 | |
rerank_score | float | rerank 得分,仅当 "rerank_switch" == True时出现 | |
doc_info | list |
| |
recall_position | int | 召回位次,整数,从 1 开始,仅当 "rerank_switch" == True时出现 | |
chunk_type | string | 切片所属类型, "text", "table", "image" 等 | |
table_chunk_fields | list | 结构化数据检索返回单行全量数据 | |
chunk_attachment |
| 检索召回附件(原始图片等)的临时下载链接,chunk_type 为 image 时有效 | |
generate_answer | -- | string | 生成回答,"stream" == True 时为空 |
usage | -- | string | 大模型输入输出消耗 token 量,"stream" == True 时为空 |
prompt | -- | string | 组装系统 prompt 和检索到的文本片后最终调用 LLM 时的完整 prompt |
chunk_attachment 返回值
字段 | 字段类型 | 说明 |
---|---|---|
link | string | type 为 image 时表示图片的临时下载链接,有效期 10 分钟 |
type | string | image 等 |
流式生成 data
字段 | 类型 | 说明 |
---|---|---|
generated_answer | string | 流式生成回答 |
流式结束标识 data
字段 | 类型 | 说明 |
---|---|---|
generated_answer | string | 为空 |
usage | string | "completion_tokens":大模型生成消耗 tokens |
end | bool | "end" == True,表示流式返回结束 |
参数 | 参数说明 |
---|---|
code | 状态码 |
message | 返回信息 |
request_id | 标识每个请求的唯一标识符 |
data | 检索及非流式生成内容 |
非流式生成 data
字段 | 子字段 | 说明 |
---|---|---|
collection_name | -- | 检索知识库名字 |
count | -- | 检索返回的结果数量 |
result_list | 检索返回切片列表 | |
id | 索引的 primary_key | |
content | 切片内容 | |
score | 检索召回得分 | |
point_id | 知识点 id:doc_id 拼接 chunk_id,唯一 | |
chunk_title | 切片标题 | |
chunk_id | 切片 id,不同文档可能重复 | |
process_time | 知识处理完成时间 | |
rerank_score | rerank 得分 | |
doc_info |
| |
recall_position | 召回位次,整数,从 1 开始 | |
chunk_type | 切片所属类型, "text", "table", "image" | |
generate_answer | -- | 生成回答 |
usage | -- | 大模型输入输出消耗 token 量 |
prompt | -- | 组装系统 prompt 和检索到的文本片后最终调用 LLM 时的完整 prompt |
状态码 | http状态码 | 返回信息 | 状态码说明 |
---|---|---|---|
0 | 200 | success | 成功 |
1000001 | 401 | unauthorized | 缺乏鉴权信息 |
1000002 | 403 | no permission | 权限不足 |
1000003 | 400 | invalid request:%s | 非法参数 |
1000005 | 400 | collection not exist | collection 不存在 |
curl -i -X POST \ -H 'Content-Type: application/json' \ -H 'Authorization: HMAC-SHA256 ***' \ https://api-knowledgebase.mlp.cn-beijing.volces.com/api/knowledge/collection/search_and_generate \ -d '{ "name": "我的知识库", "project": "", "query": "首次创建知识库要配置哪些参数?", "stream": True, #开启流式返回 "query_param": { }, "retrieve_param": { "rerank_switch": true, "retrieve_count": 30, "dense_weight": 0.7, "limit": 15 "chunk_diffusion_count": 1 }, "llm_param": { "model": "Doubao-pro-32k", "max_new_tokens": 2500, "min_new_tokens": 5, "temperature": 0.8, "top_p": 0.95, "top_k": 10, "prompt": "使用以下的信息作为你学习到的知识,这些信息在 <context></context> XML tags 之内.\n\n<context>\n{{.retrieved_chunks}}\n</context>\n\n回答用户的问题,用户的问题在<query></query> XML tags 之内\n回答问题时,如果你不知道,请直接说明你不知道。\n\n<query>\n{{.user_query}}\n</query> ", "prompt_extra_context": { "self_define_fields": ["自定义元数据1", "自定义元数据2"], "system_fields": ["doc_name", "title", "chunk_title", "content"] } } }'
执行成功返回:
HTTP/1.1 200 OK Content-Length: 209 Content-Type: application/json { "code": 0, "data": { "collection_name": "knowledge_base_instruction", #检索知识库名字 "count": 2, #检索返回的结果数量 "result_list": [ { "id": "help-1", #索引的 primary_key "content": "在**创建知识库**页面填写相关参数。在配置知识库页面下可以设置知识库使用的切片规则与使用的向量化模型,以及知识库的元信息定义和索引 CPU 限额等信息。展开高级设置,可以设置知识库的索引算法和量化方式。", #原始文本加工后的知识内容 "score": 0.71294925212860107 , #检索得分 "chunk_title": "首次创建知识库", #该 chunk 的父标题 "chunk_id": 5, #该 chunk 在所属文档中的排序位置 "process_time": 1720773416, #知识处理完成的时间 "rerank_score": 0.71294925212860107 , #rerank得分 "doc_info": { "doc_id": "help", #文档id "doc_name": "知识库帮助中心.docx", #文档名字 "create_time": 1720773416, #文档的创建时间 "doc_type": "docx", #知识所属原始文档的类型 "source": "tos", #知识来源, "tos","url" "title": "创建知识库", #知识所属文档的标题 }, "recall_position": 13,#召回位次,整数,从 1 开始 "rerank_position": 2, #重排后在结果列表的位次,整数,从 1 开始 "chunk_type": "text", #切片所属类型, "text","table","image"等 }, {...}, ], "generated_answer": "", #使用大模型生成的内容,仅非流式下有返回 "usage": "", #大模型输入输出消耗 token 量,仅非流式下有返回 "prompt": "\n使用以下的信息作为你学习到的知识,这些信息在 <context></context> XML tags 之内.\n\n<context>\n\ndoc_name:知识库帮助中心.docx\n", #组装系统 prompt 和检索到的文本片后最终调用 LLM 时的完整 prompt }, "message":"success", "request_id":"02172182782007500000000000000000000ffff0a0040acf7106c" } {"code":0,"data":{"generated_answer":"知识库页面下设置知识库使用的切片规则与使用的"},"message":"success","request_id":"02172182782007500000000000000000000ffff0a0040acf7106c"} {...} {"code":0,"data":{"generated_answer":"","usage":"{\"completion_tokens\":2,\"prompt_tokens\":939,\"total_tokens\":941}\n","end":true},"message":"success","request_id":"02172182782007500000000000000000000ffff0a0040acf7106c"}
执行失败返回:
HTTP/1.1 400 OK Content-Length: 43 Content-Type: application/json {"code":1000003, "message":"invalid request:%s", "request_id": "021695029757920fd001de6666600000000000000000002569b8f"}