本文为您介绍 MultiSearch 统一问答接口。该接口用于从指定知识库中检索内容,支持文本问答和表格问答两种查询方式,您可以通过一个接口同时完成对结构化表格和非结构化文档的智能问答。
前提条件
注意事项
使用统一问答接口时,请注意以下事项:
-
如果存在用户自定义表,则先进行表格问答,否则直接进行文本问答。
-
如果存在一张用户自定义表,则只对该表进行问答;如果存在多张用户自定义表,则会自动匹配与用户最相关的表,并基于此表进行问答。
-
如果表格问答没有结果,则进行文本问答。
-
如果使用该接口,并存在多张自定义表,则尽量保证表之间有较高的区分度,否则可能会出现问答错误的情况。
接口信息
|
请求方法 |
请求协议 |
请求数据格式 |
|
POST |
HTTP |
JSON |
请求URL
{host}/v3/openapi/apps/[app_group_identity]/actions/multi-search
-
{host}:调用服务的地址,支持通过公网和VPC两种方式调用API服务,可参见获取服务调用地址。 -
{app_group_identity}:应用名称,需要登录OpenSearch-LLM智能问答版控制台,在实例管理中查看对应实例的应用名称。
请求参数
Header参数
|
参数 |
类型 |
是否必填 |
描述 |
示例值 |
|
Content-Type |
string |
是 |
请求的数据格式,"application/json"。 |
application/json |
|
Authorization |
string |
是 |
请求鉴权的API Key,Bearer开头。 |
Bearer OS-d1**2a |
|
accept |
String |
否 |
SSE请求填写"text/event-stream" |
text/event-stream |
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.enable_deep_search |
boolean |
否 |
是否打开深度搜索。
|
false |
|
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 Assistant。 |
AI Assistant |
|
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.rich_text_strategy |
string |
否 |
富文本LLM输出后处理方式(如果不存在这个配置或者为空则不开富文本,默认行为):
|
inside_response |
|
options.chat.agent |
map |
否 |
设置RAG工具能力的选项,当开启时,模型会根据已有的内容,输出决定是否要执行对应的工具。目前支持该功能大模型有:
|
|
|
options.chat.agent.think_process |
boolean |
否 |
是否返回思考过程。 |
true |
|
options.chat.agent.max_think_round |
integer |
否 |
思考轮数(最大不超过20)。 |
10 |
|
options.chat.agent.language |
string |
否 |
思考过程及回答语言。 AUTO:根据用户query判断使用中文还是英文。 CN:中文。 EN:英文。 |
AUTO |
|
options.chat.agent.tools |
list of string |
否 |
设置使用的RAG工具名字,目前可用的工具:
|
["knowledge_search"] |
|
options.retrieve |
map |
否 |
用来设置额外的请求参数,用户控制召回、模型、prompt等。 |
|
|
options.retrieve.web_search.enable |
boolean |
否 |
是否打开联网搜索。
|
false |
|
doc |
map |
否 |
用来设置控制召回相关的参数。 |
|
|
options.retrieve.doc.disable |
boolean |
否 |
是否关闭知识库召回。
|
false |
|
options.retrieve.doc.filter |
string |
否 |
从知识库中召回筛选条件的数据时,需要明确指定相应的字段及满足的条件。默认为空。filter使用示例可参考:filter参数。 支持的字段:
示例格式:
|
category=\"value1\" |
|
options.retrieve.doc.sf |
float |
否 |
控制向量召回的向量分的阈值。
|
0.35 |
|
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": "什么是阿里云OpenSearch?",
"session": "session_001",
"type": "TEXT"
},
"options": {
"chat": {
"disable": false,
"stream": false,
"model": "Qwen",
"history_max": 20,
"link": false,
"agent": {
"tools": ["knowledge_search"]
}
},
"retrieve": {
"doc": {
"disable": false,
"filter": "category=\"type\"",
"sf": 0.35,
"top_n": 5,
"operator": "OR"
},
"web_search": { "enable": false },
"entry": { "disable": false, "sf": 0.3 },
"image": { "disable": false, "sf": 1.0 },
"rerank": {
"enable": true,
"model": "ops-bge-reranker-larger"
},
"return_hits": false
}
}
}
关键参数说明:
-
question.session:设置后启用多轮对话上下文。 -
options.chat.disable:设为true可跳过LLM,直接返回召回结果。 -
options.retrieve.doc.top_n:控制召回文档数量(默认5)。 -
options.retrieve.return_hits:设为true时返回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 |
文档内容分。 |
|
event |
string |
思考事件。 THINK+ACTION+ANSWER为一轮思考过程(THINK不保证一定返回)。THINK表示思考,ACTION表示执行的动作,ANSWER表示本轮思考结论。SUMMARY为最终回答结果,文本类型的只有一个。 |
|
event_status |
string |
该结果是否完成。 PROCESSING:回答中; FINISHED:回答结束。 |
|
code |
string |
返回的错误码(若无报错则不返回)。 |
|
message |
string |
返回的错误信息(若无报错则不返回)。 |
响应体示例
成功响应
{
"request_id": "6859E98D-D885-4AEF-B61C-9683A0184744",
"status": "OK",
"latency": 6684.41,
"result": {
"data": [
{
"answer": "阿里云OpenSearch是一款结构化数据搜索托管服务...",
"type": "TEXT",
"reference": [
{"url": "https://www.alibabacloud.com/help/document_detail/463469.html", "title": "OpenSearch产品介绍"}
]
}
],
"search_hits": [
{
"fields": {"content": "OpenSearch相关文档内容...", "title": "OpenSearch介绍"},
"scores": ["0.9778"],
"type": "DOC"
}
]
}
}
错误响应
{
"request_id": "e579a090bf99dc787d29d878b40c8367",
"status": "FAIL",
"errors": [
{"code": 3005, "message": "topN[51] is not in (0, 50]"}
]
}
常见错误码
-
2001:应用不存在 -
3005:参数校验失败(如top_n超范围) -
4016:请求头缺失认证信息