文本问答主要用于从知识库中获取内容并进行文本问答查询。支持多轮对话,可以设置会话ID来保持对话上下文。此外,还可以选择不同的大语言模型(LLM)来生成回答,并对生成的内容进行定制。
前提条件
接口信息
请求方法  | 请求协议  | 请求数据格式  | 
POST  | HTTP  | JSON  | 
请求URL
{host}/v3/openapi/apps/{app_group_identity}/actions/knowledge-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小助手。  | 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.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  | 否  | 控制向量召回的向量分的阈值。 
  | 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, # 是否关闭大模型的访问,直接返回文档召回结果,默认为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
            },
            "web_search":{
                      "enable": false # 是否打开联网搜索,默认关闭
            },
            "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  | 文档内容分。  | 
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.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" : "如果有错误,这里填错误信息"
    }
  ]
}