获取知识库的内容,进行文本问答和表格问答查询的统一问答接口。
前提条件
注意事项
如果存在用户自定义表,则先进行表格问答,否则直接进行文本问答。
如果存在一张用户自定义表,则只对该表进行问答;如果存在多张用户自定义表,则会自动匹配与用户最相关的表,并基于此表进行问答。
如果表格问答没有结果,则进行文本问答。
如果使用该接口,并存在多张自定义表,则尽量保证表之间有较高的区分度,否则可能会出现问答错误的情况。
接口信息
请求方法
POST
请求协议
HTTP
请求URL
{host}/v3/openapi/apps/[app_group_identity]/actions/multi-search
{host}
:调用服务的地址,支持通过公网和VPC两种方式调用API服务,可参见获取服务调用地址。{app_group_identity}
:应用名称(需要指定应用名访问,主要针对服务中的应用版本)。需要登录OpenSearch-LLM智能问答版控制台,在实例列表中查看对应实例的应用名称。
请求数据格式
JSON
请求参数
Header参数
参数 | 类型 | 是否必填 | 描述 | 示例值 |
Content-Type | string | 是 | 请求的数据格式,目前仅支持JSON格式,固定填写"application/json"。 | application/json |
Authorization | string | 是 | 请求鉴权的API Key,Bearer开头。 | Bearer OS-d1**2a |
Body参数
参数 | 类型 | 是否必填 | 描述 | 示例值 |
question | map | 是 | 输入的问题。 | { "text":"user question" "type": "TEXT", "session" : "" } |
question.text | string | 是 | 用户输入的问题文本内容。 | user question |
question.session | string | 否 | 多轮对话的会话ID,用于标识多轮对话上下文。取值:
| 1725530408586 |
question.type | string | 否 | 输入问题的类型,这里指定为文本类型 | TEXT |
options | map | 否 | 用来设置额外的请求参数,用户控制召回、模型、prompt等。 | |
options.chat | map | 否 | 用来设置访问大模型相关的参数。 | |
options.chat.disable | boolean | 否 | 是否关闭大模型的访问。
| false |
options.chat.stream | boolean | 否 | 是否启用流式返回结果。
| true |
options.chat.model | string | 否 | 选择的LLM(大语言模型)。可选: 上海区域
新加坡区域
| opensearch-llama2-13b |
options.chat.model_generation | integer | 否 | 使用产品定制模型时,需要设置对应的模型版本,默认使用最老的版本进行访问。 | 20 |
options.chat.prompt_template | string | 否 | 设置用户自定义的prompt模板名称。默认为空,使用系统内置的prompt模板。 | user_defined_prompt_name |
options.chat.prompt_config | object | 否 | 用户自定义prompt中配置的键值对,参数格式为:
|
|
options.chat.prompt_config.attitude | string | 否 | 系统内置模板的参数,用来控制对话内容的语气,默认为normal。
| normal |
options.chat.prompt_config.rule | string | 否 | 对话内容的详细程度,默认为detailed。
| detailed |
options.chat.prompt_config.noanswer | string | 否 | 无法回答问题时的回复,默认为sorry。
| sorry |
options.chat.prompt_config.language | string | 否 | 回答问题使用的语言,默认为Chinese。
| Chinese |
options.chat.prompt_config.role | boolean | 否 | 是否开启回答角色。开启后,将定制回答的角色。 | false |
options.chat.prompt_config.role_name | string | 否 | 定制回答的角色,例如:AI小助手。 | AI小助手 |
options.chat.prompt_config.out_format | string | 否 | 输出内容的形式,默认为text。
| text |
options.chat.generate_config.repetition_penalty | float | 否 | 用于控制模型生成时连续序列中的重复度。提高repetition_penalty时可以降低模型生成的重复度,1.0表示不做惩罚。没有严格的取值范围。 | 1.01 |
options.chat.generate_config.top_k | integer | 否 | 生成时,采样候选集的大小。例如,取值为50时,仅将单次生成中得分最高的50个token组成随机采样的候选集。取值越大,生成的随机性越高;取值越小,生成的确定性越高。默认值为0,表示不启用top_k策略,此时,仅有top_p策略生效。 | 50 |
options.chat.generate_config.top_p | float | 否 | 生成过程中核采样方法概率阈值,例如,取值为0.8时,仅保留概率加起来大于等于0.8的最可能token的最小集合作为候选集。取值范围为(0,1.0),取值越大,生成的随机性越高;取值越低,生成的确定性越高。 | 0.5 |
options.chat.generate_config.temperature | float | 否 | 用于控制随机性和多样性的程度。具体来说,temperature值控制了生成文本时对每个候选词的概率分布进行平滑的程度。较高的temperature值会降低概率分布的峰值,使得更多的低概率词被选择,生成结果更加多样化;而较低的temperature值则会增强概率分布的峰值,使得高概率词更容易被选择,生成结果更加确定。 取值范围:[0, 2),不建议取值为0,无意义。 python version >=1.10.1 java version >= 2.5.1 | 0.7 |
options.chat.history_max | integer | 否 | 多轮对话历史最大轮数,最大20轮,默认是1。 | 20 |
options.chat.link | boolean | 否 | 是否返回链接。控制模型生成的内容是否标识内容引用的来源。取值:
包含内容的返回信息实例如下:
其中被 | false |
options.chat.agent | map | 否 | 设置RAG工具能力的选项,当开启时,模型会根据已有的内容,输出决定是否要执行对应的工具。目前支持该功能大模型有:
| |
options.chat.agent.tools | list of string | 否 | 设置使用的RAG工具名字,目前可用的工具:
| ["knowledge_search"] |
options.retrieve | map | 否 | 用来设置额外的请求参数,用户控制召回、模型、prompt等。 | |
options.retrieve.doc | map | 否 | 用来设置控制召回相关的参数。 | |
options.retrieve.doc.disable | boolean | 否 | 是否关闭知识库召回。
| false |
options.retrieve.doc.filter | string | 否 | 从知识库中召回筛选条件的数据时,需要明确指定相应的字段及满足的条件。默认为空。filter使用示例可参考:filter参数。 支持的字段:
示例格式:
| category=\"value1\" |
options.retrieve.doc.sf | float | 否 | 控制向量召回的向量分的阈值。
| 1.3 |
options.retrieve.doc.top_n | integer | 否 | 召回的文档数量,默认为5个,取值范围:(0, 50]。 | 5 |
options.retrieve.doc.formula | string | 否 | 指定召回时,文档排序的排序公式。 说明 语法请参考业务排序函数,其中的算法相关性和地理位置相关性的特征不支持。 | -timestamp: 按文档的timestamp字段降序 |
options.retrieve.doc.rerank_size | integer | 否 | 开启rerank重排功能时,参与重排的文档数。默认值为30,取值范围:(0,100]。 | 30 |
options.retrieve.doc.operator | string | 否 | 在知识库召回时,question.text分词后的term的关系。该参数只有在没有启用稀疏向量时生效。
| AND |
options.retrieve.doc.dense_weight | float | 否 | 开启稀疏向量后,控制文档召回时,稠密向量的权重。取值范围:(0.0, 1.0),默认值为0.7。 | 0.7 |
options.retrieve.entry | map | 否 | 用来控制从人工干预数据中召回结果的相关参数 | |
options.retrieve.entry.disable | boolean | 否 | 是否关闭人工干预数据的召回。
| false |
options.retrieve.entry.sf | float | 否 | 控制召回人工干预的向量分阈值。取值范围:[0, 2.0],默认值是0.3,该值越小,结果越相关,但结果数会越少;反之,可能会召回不太相关的结果。 | 0.3 |
options.retrieve.image | map | 否 | 用来控制从知识库中召回图片结果的相关参数。 | |
options.retrieve.image.disable | boolean | 否 | 是否需要关闭图片数据的召回,默认为false。
| false |
options.retrieve.image.sf | float | 否 | 控制向量召回的向量分的阈值。
| 1.0 |
options.retrieve.image.dense_weight | float | 否 | 开启稀疏向量后,控制图片召回时,稠密向量的权重。取值范围:(0.0, 1.0),默认值为0.7。 | 0.7 |
options.retrieve.qp | map | 否 | 用户query改写的选项。 | |
options.retrieve.qp.query_extend | boolean | 否 | 是否对用户query进行扩展,扩展query会用来在引擎中召回文档切片。默认为false。
| false |
options.retrieve.qp.query_extend_num | integer | 否 | 开启相似query扩展时,最多扩展几个query,默认值为5。 | 5 |
options.retrieve.rerank | map | 否 | 用户设置文档召回时重排的选项。 | |
options.retrieve.rerank.enable | boolean | 否 | 是否对召回的结果用模型进行相关性的重排。取值:
| true |
options.retrieve.rerank.model | string | 否 | 用于重排的大模型名称。
| ops-bge-reranker-larger |
options.retrieve.return_hits | boolean | 否 | 是否在结果中返回文档召回的结果,即response中的search_hits。 | false |
请求体示例
{
"question" : {
"text" : "user question",
"session" : "对话的session,设置了之后,会有多轮对话的功能",
"type" : "TEXT"
},
"options": {
"chat": {
"disable" : false, # 是否不走chat模型,仅作文档召回,默认为false。
"stream" : false, # 是否流式返回,默认false。
"model" : "Qwen", # 选择的LLM模型
"prompt_template" : "user_defined_prompt_name", # 用户自定的prompt名称
"prompt_config" : { # 自定义prompt配置,可选
"key" : "value" # key和value在实际使用时应替换为具体的键值对
},
"generate_config" : {
"repetition_penalty": 1.01,
"top_k": 50,
"top_p": 0.5,
"temperature": 0.7
},
"history_max": 20, # 多轮对话历史最大轮数,
"link": false, # 返回链接,
"agent":{
"tools":["knowledge_search"]
}
},
"retrieve": {
"doc": {
"disable": false, # 是否需要关闭文档召回,默认false。
"filter": "category=\"type\"", # 召回时根据category字段做过滤,默认为空
"sf": 1.3, # 向量召回阈值,默认1.3;阈值越大,文档可能约不相关
"top_n": 5, # 文档召回多少个文档,默认是5个,取值返回(0, 50],
"formula" : "", #默认为向量相似度
"rerank_size" : 5, #精排文档数,默认不用设置,系统自己决定
"operator":"OR" # 表示文本召回时,文本token之间的关系是OR,默认是AND
},
"entry": {
"disable": false, # 是否需要关闭人工干预数据的召回,默认false。
"sf": 0.3 # 干预数据召回的向量相关性,默认0.3
},
"image": {
"disable": false, # 是否需要关闭图片数据的召回,默认false。
"sf": 1.0 # 图片数据召回的向量相关性,默认1.0
},
"qp": {
"query_extend": false, # 是否需要对用户query进行query扩展
"query_extend_num": 5 # 表示扩展query的数量,默认值为5
},
"rerank" : {
"enable": true # 召回后是否使用大模型进行重排,默认为true,
"model":"model_name" # 实际使用时应替换为具体的模型名称
},
"return_hits": false # 是否在结果中返回文档召回的结果, 即response里面的search_hits
}
}
}
返回参数
参数 | 类型 | 描述 |
request_id | string | 请求ID。 |
status | string | 请求的处理状态。
|
latency | float | 请求成功时,服务器处理请求所花费的时间,单位为毫秒。 |
id | integer | 主键ID。 |
title | string | 文档的标题。 |
category | string | 类目名。 |
url | string | 文档链接。 |
answer | string | 问答结果。 |
type | string | 返回结果类型。 |
scores | array | 文档内容分。 |
code | string | 返回的错误码。 |
message | string | 返回的错误信息。 |
响应体示例
{
"request_id": "6859E98D-D885-4AEF-B61C-9683A0184744",
"status": "OK",
"latency": 6684.410397,
"result" : {
"data" : [
{
"answer" : "answer text",
"type" : "TEXT",
"reference" : [
{"url" : "http://....","title":"doc title"}
]
},
{
"reference": [
{"id": "16","title": "测试标题","category": "测试类目","url": "测试链接"}
],
"answer": "https://ecmb.bdimg.com/tam-ogel/-xxxx.jpg",
"type": "IMAGE"
}
],
"search_hits" : [ // 查询请求中设置了options.retrieve.return_hits才会有
{
"fields" : {
"content" : "...."
"key1" : "value1"
},
"scores" : ["10000.1234"],
"type" : "doc"
},
{
"fields"{
"answer" : "...",
"key1" : "value1"
},
"scores" : ["10000.1234"],
"type" : "entry"
}
]
}
"errors" : [
{
"code" : "如果有错误,这里填错误码",
"message" : "如果有错误,这里填错误信息"
}
]
}