全部产品
Search
文档中心

智能开放搜索 OpenSearch:统一问答接口

更新时间:Mar 10, 2026

本文为您介绍 MultiSearch 统一问答接口。该接口用于从指定知识库中检索内容,支持文本问答和表格问答两种查询方式,您可以通过一个接口同时完成对结构化表格和非结构化文档的智能问答。

前提条件

  • 获取身份鉴权API Key:调用OpenSearch-LLM智能问答版服务时,需要对调用者身份进行鉴权,具体请参见管理API Key

  • 获取服务调用地址:调用OpenSearch-LLM智能问答版服务时,需要提供服务的调用地址,具体请参见获取服务调用地址

注意事项

使用统一问答接口时,请注意以下事项:

  • 如果存在用户自定义表,则先进行表格问答,否则直接进行文本问答。

  • 如果存在一张用户自定义表,则只对该表进行问答;如果存在多张用户自定义表,则会自动匹配与用户最相关的表,并基于此表进行问答。

  • 如果表格问答没有结果,则进行文本问答。

  • 如果使用该接口,并存在多张自定义表,则尽量保证表之间有较高的区分度,否则可能会出现问答错误的情况。

接口信息

请求方法

请求协议

请求数据格式

POST

HTTP

JSON

请求URL

{host}/v3/openapi/apps/[app_group_identity]/actions/multi-search

请求参数

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,用于标识多轮对话上下文。取值:

  • 不设或者为空,则表示不开启多轮对话。

  • 如设置非空的值,则表示开启多轮对话,并且系统会将相同的session的对话进行保留,作为多轮对话的上下文。

1725530408586

question.type

string

输入问题的类型,这里指定为文本类型TEXT

TEXT

options

map

用来设置额外的请求参数,用户控制召回、模型、prompt等。

options.chat

map

用来设置访问大模型相关的参数。

options.chat.disable

boolean

是否关闭大模型的访问。

  • false:访问大模型,对结果进行总结生成,默认为false。

  • true:不访问大模型。

false

options.chat.stream

boolean

是否启用流式返回结果。

  • true: 流式返回,默认为true。

  • false:非流式返回。

true

options.chat.model

string

选择的LLM(大语言模型)。可选:

新加坡区域

  • opensearch-llama2-13b

  • opensearch-falcon-7b

  • qwen-turbo

  • qwen-plus

  • qwen-max

  • qwen2-72b-instruct

opensearch-llama2-13b

options.chat.enable_deep_search

boolean

是否打开深度搜索

  • true:打开深度搜索,需要多轮推理综合数据返回结果,单次对话消耗的时间和计算资源相对较多。

  • false:关闭深度搜索。

false

options.chat.model_generation

integer

使用产品定制模型时,需要设置对应的模型版本,默认使用最老的版本进行访问。

20

options.chat.prompt_template

string

设置用户自定义的prompt模板名称。默认为空,使用系统内置的prompt模板。

user_defined_prompt_name

options.chat.prompt_config

object

用户自定义prompt中配置的键值对,参数格式为:

{
  "String_key": "value",
  "Integer_key" : 1
}
{
  "attitude": "normal",
  "rule" : "detailed",
  "noanswer": "sorry",
  "language": "Chinese",
  "role": false,
  "role_name": "AI小助手",
}

options.chat.prompt_config.attitude

string

系统内置模板的参数,用来控制对话内容的语气,默认为normal。

  • normal:无。

  • polite:使用和蔼和礼貌的语气。

  • patience:使用委婉和耐心的语气。

normal

options.chat.prompt_config.rule

string

对话内容的详细程度,默认为detailed。

  • detailed:详细和专业。

  • stepbystep:详细且按步骤。

detailed

options.chat.prompt_config.noanswer

string

无法回答问题时的回复,默认为sorry。

  • sorry:抱歉,根据已知信息无法回答该问题。

  • uncertain:我不知道。

sorry

options.chat.prompt_config.language

string

回答问题使用的语言,默认为Chinese。

  • Chinese:中文。

  • English:英语。

  • Thai:泰语。

  • Korean:韩语。

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:文本。

  • table:表格。

  • list:列项。

  • markdown:markdown。

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

是否返回链接。控制模型生成的内容是否标识内容引用的来源。取值:

  • true: 内容包含来源。

  • false: 不包含。默认为false。

包含内容的返回信息实例如下:

可以通过在线扩容和离线扩容两种方式扩容ECS云盘容量[^1^]。在线扩容无需重启实例,离线扩容需要重启实例[^1^]。具体操作步骤为:在ECS控制台上选择待扩容的云盘,在操作列选择扩容,然后根据需要选择扩容方式[^1^]。如果需要扩容分区和文件系统,可以通过控制台获取或者通过控制台获取[^2^]。扩容云盘容量后,新容量生效后无法再缩小,建议合理规划存储空间[^3^]。

其中被[^^]包起来的数字表示引用结果中reference里的第几个文档。例如[^1^]表示应用reference中的第一个文档。

false

options.chat.rich_text_strategy

string

富文本LLM输出后处理方式(如果不存在这个配置或者为空则不开富文本,默认行为):

  • inside_response: 回答中的tag直接还原到原文里,markdown格式(注意表格直接以html形式插入markdown)。

  • extend_response: 回答中存在富文本tag,每个tag实际内容单独在rich_text_ref返回:图片内容url,表格内容html格式,代码文本格式。

inside_response

options.chat.agent

map

设置RAG工具能力的选项,当开启时,模型会根据已有的内容,输出决定是否要执行对应的工具。目前支持该功能大模型有:

  • qwen-plus

  • qwen-max

  • qwen2-72b-instruct

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:知识库检索

["knowledge_search"]

options.retrieve

map

用来设置额外的请求参数,用户控制召回、模型、prompt等。

options.retrieve.web_search.enable

boolean

是否打开联网搜索。

  • true:打开联网搜索,将根据联网搜索数据返回结果,单次对话消耗的时间和计算资源相对较多。

  • false:关闭联网搜索。

false

doc

map

用来设置控制召回相关的参数。

options.retrieve.doc.disable

boolean

是否关闭知识库召回。

  • false:不关闭,默认为false。

  • true:关闭。

false

options.retrieve.doc.filter

string

从知识库中召回筛选条件的数据时,需要明确指定相应的字段及满足的条件。默认为空。filter使用示例可参考:filter参数

支持的字段:

  • table:文档所在表。

  • raw_pk:文档主键。

  • category:文档分类。

  • score:文档分数。

  • timestamp:文档时间。

示例格式:

"filter" : "raw_pk=\"123\""   # 只从id为123的doc中获取数据
"filter" : "category=\"value1\""   # 只从category为value1的doc中获取数据
"filter" : "category=\"value1\" OR category=\"value2\"" #只从category为value1和value2的doc中获取数据
"filter" : "score>1.0"   # 只从score大于1.0的doc中获取数据
"filter" : "timestamp>1356969600"   # 只从timestamp大于2013-1-1的doc中获取数据

category=\"value1\"

options.retrieve.doc.sf

float

控制向量召回的向量分的阈值。

  • 当没有开启稀疏向量时,取值范围为[0, 2.0],默认值是1.3,该值越小,结果越相关,但结果数会越少;反之,可能会召回不太相关的结果。

  • 当开启了稀疏向量时,默认值是0.35。其值越大,召回的结果越相关,结果数会越少;反之,结果可能会不太相关。

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:表示所有term都需要出现才能被召回。默认为AND。

  • OR:表示只要有一个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:不关闭,默认为false。

  • true:关闭。

false

options.retrieve.entry.sf

float

控制召回人工干预的向量分阈值。取值范围:[0, 2.0],默认值是0.3,该值越小,结果越相关,但结果数会越少;反之,可能会召回不太相关的结果。

0.3

options.retrieve.image

map

用来控制从知识库中召回图片结果的相关参数。

options.retrieve.image.disable

boolean

是否需要关闭图片数据的召回,默认为false。

  • false:不关闭,默认为false。

  • true:关闭。

false

options.retrieve.image.sf

float

控制向量召回的向量分的阈值。

  • 当没有开启稀疏向量时,取值范围:[0, 2.0],默认值为1.0,该值越小,结果越相关,但结果数会越少;反之,可能会召回不太相关的结果。

  • 当开启了稀疏向量时,默认值为0.5。其值越大,召回的结果越相关,结果数会越少;反之,结果可能会不太相关。

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,和原来逻辑保持一致,即表示不进行query扩展。

  • 如果设置为true,则会多一次与大模型的交互,所以回复速度会变慢。对耗时敏感的应用请勿开启。

false

options.retrieve.qp.query_extend_num

integer

开启相似query扩展时,最多扩展几个query,默认值为5。

5

options.retrieve.rerank

map

用户设置文档召回时重排的选项。

options.retrieve.rerank.enable

boolean

是否对召回的结果用模型进行相关性的重排。取值:

  • true:用模型对召回结果进行重排。

  • false:不用模型对召回结果进行重排。

  • 当options.retrieve.doc.formula不为空时,默认为false,其他情况默认为true。

true

options.retrieve.rerank.model

string

用于重排的大模型名称。

  • ops-bge-reranker-larger:bge-reranker模型(默认)

  • ops-text-reranker-001:自研的reranker模型

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

请求的处理状态。

  • OK:表示请求成功。

  • FAIL:表示请求失败。

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:请求头缺失认证信息