DeepSeek-R1系列模型是一款專註於複雜推理任務的大語言模型,在複雜指令理解、推理結果準確性、效能穩定性等方面相比其他大語言模型,有一定優勢。OpenSearch LLM智能問答版已整合DeepSeek-R1系列模型,進一步提升企業級RAG效果,本文向您介紹使用步驟。
執行個體購買與配置
建立OpenSearch LLM智能問答版執行個體,當前僅上海地區的執行個體(包括標準版與專業版)支援DeepSeek-R1系列模型,如何建立執行個體請參見建立執行個體,計費規則請參見產品計費。
說明標準版執行個體不支援定製訓練LLM大語言模型,而專業版執行個體支援部分LLM的訓練,但目前DeepSeek-R1模型尚不支援訓練。

匯入知識庫資料
執行個體建立成功後,系統自動產生知識庫資料表,支援通過檔案匯入結構化和非結構化資料,也支援批量從URL地址中匯入資料。
在執行個體列表頁面,單擊目標執行個體操作列的管理,選擇,根據需要選擇通過檔案匯入或者網頁連結匯入,詳情請參見資料配置。

資料狀態為完成時,表示當前資料已完成向量化儲存,通過查看content查看解析後的文檔。|

效果測試
進入問答測試頁,模型選擇DeepSeek-R1系列,通過調整Prompt模板、文檔召回過濾欄位(filter )、文檔召回數(top_n)、重排模型等參數,測試不同參數下的問答效果。
以下表格列出關鍵參數,詳細參數使用請參見參數說明。
參數 | 說明 |
Prompt | Prompt(提示詞)是您輸入大模型的指令,用於明確需求並引導其產生精準、相關的回答或內容,詳情請參見Prompt管理。 |
多輪對話 | 設定是否開啟多輪對話,如果開啟,需要設定使用者請求ID,通過ID判斷提問者是否為同一個使用者,基於同一使用者提問進行多輪對話。 |
流式輸出 | 建議開啟流式輸出,即時輸出中間結果,減少等待時間。 |
filter | 召迴文檔時根據filter指定的欄位進行過濾,如設定timestamp>1356969600,表示僅從時間戳記大於2013年1月1日的文檔中擷取資料。 |
top_n | 設定召回的文檔數,預設為5。 |

通過SDK進行RAG問答
完成效果測試後,在應用系統中通過SDK進行RAG問答。如需更新知識庫,可通過控制台快速匯入文件,也可以通過SDK匯入結構化文檔和非結構化文檔。
擷取訪問憑證
在安裝和使用SDK前,請確保您已擷取存取金鑰(AccessKey,簡稱AK)。通過SDK調用阿里雲服務時,發起的請求會攜帶AccessKey ID和AccessKey Secret加密請求內容產生的簽名,進行身分識別驗證及請求合法性校正。
將滑鼠懸浮在控制台右上方的帳號表徵圖上,單擊AccessKey管理。

在AccessKey頁面,查看AccessKey資訊。

如果AccessKey列表為空白或者沒有已啟用的AccessKey,前往建立AccessKey。
若您使用RAM使用者調用,請確保您的RAM使用者帳號被授予AliyunOpenSearchFullAccess許可權。
選擇開發語言
Java
步驟 1:配置Java環境
步驟 2:擷取調用參數
SDK調用依賴以下關鍵參數:
AppName:應用程式名稱。
host:應用的API訪問地址。
步驟 3:調用介面
運行以下代碼調用樣本:
package com.aliyun.opensearch;
import com.aliyun.opensearch.OpenSearchClient;
import com.aliyun.opensearch.sdk.generated.OpenSearch;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchClientException;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchException;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchResult;
import java.util.HashMap;
import java.util.Map;
public class LLMSearch {
private static String appName = "替換為應用程式名稱";
private static String host = "替換應用的API訪問地址";
private static String accesskey = "替換accesskey";
private static String secret = "替換secret";
private static String path = "/apps/%s/actions/knowledge-search";
public static void main(String[] args) {
String appPath = String.format(path, appName);
//ApiReadTimeOut
OpenSearch openSearch = new OpenSearch(accesskey, secret, host);
openSearch.setTimeout(90000);
OpenSearchClient openSearchClient = new OpenSearchClient(openSearch);
Map<String, String> params = new HashMap<String, String>() {{
put("format", "full_json");
put("_POST_BODY", "{\"question\":{\"text\":\"怎麼充電\",\"type\":\"TEXT\",\"session\":\"\"},\"options\":{\"retrieve\":{\"doc\":{\"filter\":\"\",\"top_n\":5,\"sf\":\"\",\"dense_weight\":\"0.7\",\"formula\":\"\",\"operator\":\"AND\"},\"entry\":{\"sf\":\"\"},\"image\":{\"sf\":\"\",\"dense_weight\":\"0.7\"},\"qp\":{\"query_extend\":false,\"query_extend_num\":5},\"return_hits\":false,\"rerank\":{\"enable\":true,\"model\":\"ops-bge-reranker-larger\"}},\"chat\":{\"stream\":true,\"prompt_config\":{\"attitude\":\"normal\",\"rule\":\"detailed\",\"noanswer\":\"sorry\",\"language\":\"Chinese\",\"role\":false,\"role_name\":\"AI小助手\",\"out_format\":\"text\"},\"agent\":{\"tools\":[]},\"csi_level\":\"strict\",\"history_max\":\"\",\"link\":\"false\",\"model\":\"deepseek-r1\",\"model_generation\":\"\"}}}");
}};
try {
OpenSearchResult openSearchResult = openSearchClient
.callAndDecodeResult(appPath, params, "POST");
System.out.println("RequestID=" + openSearchResult.getTraceInfo().getRequestId());
System.out.println(openSearchResult.getResult());
} catch (
OpenSearchException e) {
System.out.println("RequestID=" + e.getRequestId());
System.out.println("ErrorCode=" + e.getCode());
System.out.println("ErrorMessage=" + e.getMessage());
} catch (
OpenSearchClientException e) {
System.out.println("ErrorMessage=" + e.getMessage());
}
}
}Python
步驟 1:配置 Python 環境
配置虛擬環境(可選)
步驟 2:擷取參數
SDK調用依賴以下關鍵參數:
app_name:應用程式名稱。
endpoint:應用的API訪問地址。
步驟 3:調用介面
BaseRequest參考:Python client 樣本。
# -*- coding: utf-8 -*-
import time, os
from typing import Dict, Any
from Tea.exceptions import TeaException
from Tea.request import TeaRequest
from alibabacloud_tea_util import models as util_models
from BaseRequest import Config, Client
class LLMSearch:
def __init__(self, config: Config):
self.Clients = Client(config=config)
self.runtime = util_models.RuntimeOptions(
connect_timeout=10000,
read_timeout=90000,
autoretry=False,
ignore_ssl=False,
max_idle_conns=50,
max_attempts=3
)
self.header = {}
def searchDoc(self, app_name: str,body:Dict, query_params: dict={}) -> Dict[str, Any]:
try:
response = self.Clients._request(method="POST", pathname=f'/v3/openapi/apps/{app_name}/actions/knowledge-search',
query=query_params, headers=self.header, body=body, runtime=self.runtime)
return response
except TeaException as e:
print(e)
if __name__ == "__main__":
# 配置統一的請求入口和 需要去掉http://
endpoint = "<endpoint>"
# 支援 protocol 配置 HTTPS/HTTP
endpoint_protocol = "HTTP"
# 使用者識別資訊
# 從環境變數讀取配置的AccessKey ID和AccessKey Secret,
# 運行程式碼範例前必須先配置環境變數,參考文檔上面“配置環境變數”步驟
access_key_id = os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID")
access_key_secret = os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
# 支援 type 配置 sts/access_key 鑒權. 其中 type 預設為 access_key 鑒權. 使用 sts 可配置 RAM-STS 鑒權.
# 備選參數為: sts 或者 access_key
auth_type = "access_key"
# 如果使用 RAM-STS 鑒權, 請配置 security_token, 可使用 阿里雲 AssumeRole 擷取 相關 STS 鑒權結構.
security_token = "<security_token>"
# 配置請求使用的通用資訊.
# type和security_token 參數如果不是子帳號,需要省略
Configs = Config(endpoint=endpoint, access_key_id=access_key_id, access_key_secret=access_key_secret,
security_token=security_token, type=auth_type, protocol=endpoint_protocol)
# 建立 opensearch 執行個體
# 請將<應用程式名稱>替換為您建立的智能問答版執行個體名稱
ops = LLMSearch(Configs)
app_name = "<應用程式名稱>"
# --------------- 文檔搜尋 ---------------
docQuery = {"question": {"text": "搜尋", "type": "TEXT"}, "options": {"chat": {"model": "deepseek-r1"}}}
res1 = ops.searchDoc(app_name=app_name, body=docQuery)
print(res1)