獲取知識庫的內容,進行文本問答查詢。
前提條件
接口信息
請求方法
POST
請求協議
HTTP
請求URL
{host}/v3/openapi/apps/{app_group_identity}/actions/knowledge-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" : "如果有錯誤,這里填錯誤信息"
}
]
}