全部產品
Search
文件中心

OpenSearch:基於DeepSeek-R1模型搭建RAG系統

更新時間:Jul 17, 2025

DeepSeek-R1系列模型是一款專註於複雜推理任務的大語言模型,在複雜指令理解、推理結果準確性、效能穩定性等方面相比其他大語言模型,有一定優勢。OpenSearch LLM智能問答版已整合DeepSeek-R1系列模型,進一步提升企業級RAG效果,本文向您介紹使用步驟。

執行個體購買與配置

  1. 建立OpenSearch LLM智能問答版執行個體,當前僅上海地區的執行個體(包括標準版與專業版)支援DeepSeek-R1系列模型,如何建立執行個體請參見建立執行個體,計費規則請參見產品計費

    說明

    標準版執行個體不支援定製訓練LLM大語言模型,而專業版執行個體支援部分LLM的訓練,但目前DeepSeek-R1模型尚不支援訓練。

    image

  2. 匯入知識庫資料

    執行個體建立成功後,系統自動產生知識庫資料表,支援通過檔案匯入結構化和非結構化資料,也支援批量從URL地址中匯入資料。

    在執行個體列表頁面,單擊目標執行個體操作列的管理,選擇配置中心 > 資料配置,根據需要選擇通過檔案匯入或者網頁連結匯入,詳情請參見資料配置

    image.png

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

    image

說明

除可通過控制台上傳文檔外,您還可以通過調用SDK進行結構化非結構化文檔上傳。

效果測試

進入問答測試頁,模型選擇DeepSeek-R1系列,通過調整Prompt模板、文檔召回過濾欄位(filter )、文檔召回數(top_n)、重排模型等參數,測試不同參數下的問答效果。

以下表格列出關鍵參數,詳細參數使用請參見參數說明

參數

說明

Prompt

Prompt(提示詞)是您輸入大模型的指令,用於明確需求並引導其產生精準、相關的回答或內容,詳情請參見Prompt管理

多輪對話

設定是否開啟多輪對話,如果開啟,需要設定使用者請求ID,通過ID判斷提問者是否為同一個使用者,基於同一使用者提問進行多輪對話。

流式輸出

建議開啟流式輸出,即時輸出中間結果,減少等待時間。

filter

召迴文檔時根據filter指定的欄位進行過濾,如設定timestamp>1356969600,表示僅從時間戳記大於2013年1月1日的文檔中擷取資料。

top_n

設定召回的文檔數,預設為5。

image.png

通過SDK進行RAG問答

完成效果測試後,在應用系統中通過SDK進行RAG問答。如需更新知識庫,可通過控制台快速匯入文件,也可以通過SDK匯入結構化文檔非結構化文檔

擷取訪問憑證

在安裝和使用SDK前,請確保您已擷取存取金鑰(AccessKey,簡稱AK)。通過SDK調用阿里雲服務時,發起的請求會攜帶AccessKey ID和AccessKey Secret加密請求內容產生的簽名,進行身分識別驗證及請求合法性校正。

  1. 將滑鼠懸浮在控制台右上方的帳號表徵圖上,單擊AccessKey管理

    image

  2. AccessKey頁面,查看AccessKey資訊。

    image

    如果AccessKey列表為空白或者沒有已啟用的AccessKey,前往建立AccessKey

若您使用RAM使用者調用,請確保您的RAM使用者帳號被授予AliyunOpenSearchFullAccess許可權。

AccessKey配置到環境變數

建議您將AccessKey寫入環境變數,避免在代碼裡顯式地配置AccessKey,降低AccessKey泄漏風險。

Windows系統

在Windows系統中,您可以使用CMD、PowerShell配置環境變數,或者通過系統屬性編輯環境變數。

CMD

添加永久性環境變數

如果您希望環境變數在目前使用者的所有新會話中生效,可以按如下操作。

  1. 在CMD中運行以下命令。

    # <access_key_id>需替換為您的AccessKey ID,<access_key_secret>替換為您的AccessKey Secret。
    setx ALIBABA_CLOUD_ACCESS_KEY_ID <access_key_id>
    setx ALIBABA_CLOUD_ACCESS_KEY_SECRET <access_key_secret>
  2. 開啟一個新的CMD視窗。

  3. 在新的CMD視窗運行以下命令,檢查環境變數是否生效。

    echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
    echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%

添加臨時性環境變數

如果您僅希望在當前會話中使用該環境變數,可以在CMD中運行以下命令。

# <access_key_id>需替換為您的AccessKey ID,<ACCESS_KEY_SECRET>替換為您的AccessKey Secret。
set ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id>
set ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>

您可以在當前會話運行以下命令檢查環境變數是否生效。

echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%
PowerShell

添加永久性環境變數

如果您希望環境變數在目前使用者的所有新會話中生效,可以按如下操作。

  1. 在PowerShell中運行以下命令。

    # <access_key_id>需替換為您的AccessKey ID,<access_key_secret>替換為您的AccessKey Secret。
    [Environment]::SetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID", "<access_key_id>", [EnvironmentVariableTarget]::User)
    [Environment]::SetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "<access_key_secret>", [EnvironmentVariableTarget]::User)
  2. 開啟一個新的PowerShell視窗。

  3. 在新的PowerShell視窗運行以下命令,檢查環境變數是否生效。

    echo $env:ALIBABA_CLOUD_ACCESS_KEY_ID
    echo $env:ALIBABA_CLOUD_ACCESS_KEY_SECRET

添加臨時性環境變數

如果您僅希望在當前會話中使用該環境變數,可以在PowerShell中運行以下命令。

# <access_key_id>需替換為您的AccessKey ID,<access_key_secret>替換為您的AccessKey Secret。
$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "<access_key_id>"
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "<access_key_secret>"

您可以在當前會話運行以下命令檢查環境變數是否生效。

echo $env:ALIBABA_CLOUD_ACCESS_KEY_ID
echo $env:ALIBABA_CLOUD_ACCESS_KEY_SECRET
通過系統屬性編輯環境變數
  • 我的電腦 右鍵,單擊屬性;開啟設定介面,單擊進階系統設定,開啟系統屬性介面。

  • 系統屬性介面,單擊環境變數,開啟環境變數介面。

  • 在介面下方系統變數中,單擊建立,開啟建立系統變數

  • 變數名填入:分別建立您的ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET變數值填入您的<access_key_id><access_key_secret>

填入後,分別點擊三個介面的確定後關閉。至此,環境變數已配置成功。

您可以在終端運行以下命令檢查環境變數是否生效。

echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%

macOS系統

添加永久性環境變數

如果您希望環境變數在目前使用者的所有新會話中生效,可以添加永久性環境變數。

  1. 在終端中執行以下命令,查看預設Shell類型。

    echo $SHELL
  2. 根據預設Shell類型進行操作。

    Zsh

    1. 執行以下命令來將環境變數設定追加到 ~/.zshrc 檔案中。

      # <access_key_id>需替換為您的AccessKey ID,<access_key_secret>替換為您的AccessKey Secret。
      echo "export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id>" >> ~/.zshrc
      echo "export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>" >> ~/.zshrc

      也可以手動修改~/.zshrc 檔案。

      手動修改

      執行以下命令,開啟Shell設定檔。

      nano ~/.zshrc

      在設定檔中添加以下內容。

      # <access_key_id>需替換為您的AccessKey ID,<access_key_secret>替換為您的AccessKey Secret。
      export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> 
      export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>

      在nano編輯器中,按Ctrl + X,接著按Y,再按Enter以儲存並關閉檔案。

    2. 執行以下命令,使變更生效。

      source ~/.zshrc
    3. 重新開啟一個終端視窗,運行以下命令檢查環境變數是否生效。

      echo $ALIBABA_CLOUD_ACCESS_KEY_ID
      echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET

    Bash

    1. 執行以下命令來將環境變數設定追加到 ~/.bash_profile 檔案中。

      # <access_key_id>需替換為您的AccessKey ID,<access_key_secret>替換為您的AccessKey Secret。
      echo "export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id>" >> ~/.bash_profile
      echo "export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>" >> ~/.bash_profile

      也可以手動修改~/.bash_profile 檔案。

      手動修改

      執行以下命令,開啟Shell設定檔。

      nano ~/.bash_profile

      在設定檔中添加以下內容。

      # <access_key_id>需替換為您的AccessKey ID,<access_key_secret>替換為您的AccessKey Secret。
      export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> 
      export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>

      在nano編輯器中,按Ctrl + X,接著按Y,再按Enter以儲存並關閉檔案。

    2. 執行以下命令,使變更生效。

      source ~/.bash_profile
    3. 重新開啟一個終端視窗,運行以下命令檢查環境變數是否生效。

      echo $ALIBABA_CLOUD_ACCESS_KEY_ID
      echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
添加臨時性環境變數

如果您僅希望在當前會話中使用該環境變數,可以添加臨時性環境變數。

  1. 執行以下命令。

    # <access_key_id>需替換為您的AccessKey ID,<access_key_secret>替換為您的AccessKey Secret。
    export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> 
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
  2. 執行以下命令,驗證該環境變數是否生效。

    echo $ALIBABA_CLOUD_ACCESS_KEY_ID
    echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET

Linux系統

添加永久性環境變數

如果您希望環境變數在目前使用者的所有新會話中生效,可以添加永久性環境變數。

  1. 執行以下命令來將環境變數設定追加到~/.bashrc 檔案中。

    # <access_key_id>需替換為您的AccessKey ID,<access_key_secret>替換為您的AccessKey Secret。
    echo "export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id>" >> ~/.bashrc
    echo "export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>" >> ~/.bashrc

    也可以手動修改~/.bashrc 檔案。

    手動修改

    執行以下命令,開啟~/.bashrc 檔案。

    nano ~/.bashrc

    在設定檔中添加以下內容。

    # <access_key_id>需替換為您的AccessKey ID,<access_key_secret>替換為您的AccessKey Secret。
    export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> 
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>

    在nano編輯器中,按Ctrl + X,接著按Y,再按Enter以儲存並關閉檔案。

  2. 執行以下命令,使變更生效。

    source ~/.bashrc
  3. 重新開啟一個終端視窗,運行以下命令檢查環境變數是否生效。

    echo $ALIBABA_CLOUD_ACCESS_KEY_ID
    echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET

添加臨時性環境變數

如果您僅希望在當前會話中使用該環境變數,可以添加臨時性環境變數。

  1. 執行以下命令。

    # <access_key_id>需替換為您的AccessKey ID,<access_key_secret>替換為您的AccessKey Secret。
    export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> 
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
  2. 執行以下命令,驗證該環境變數是否生效。

    echo $ALIBABA_CLOUD_ACCESS_KEY_ID
    echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET

選擇開發語言

Java

步驟 1:配置Java環境

檢查Java環境

在終端中運行以下命令查看當前環境是否安裝了Java:

java -version

通過列印資訊的第一行確認Java版本,例如列印資訊:openjdk version "16.0.1" 2021-04-20表明當前Java版本為Java 16。如果當前環境沒有Java,或版本低於Java 8,請前往Java下載與安裝。

安裝SDK

在Maven工程中使用Java SDK,只需在pom.xml中加入相應依賴即可。以在<dependencies>中加入6.0.0版本的依賴為例:

<dependency>
    <groupId>com.aliyun.opensearch</groupId>
    <artifactId>aliyun-sdk-opensearch</artifactId>
    <version>6.0.0</version>
</dependency>

步驟 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 環境
檢查Python環境

在終端中輸入以下命令,查看當前計算環境是否安裝了Python:

# 如果運行失敗,您可以將python替換成python3再運行
python -V

要求Python 3.0及以上版本。如果您沒有安裝Python,或版本不符合要求,請參考Python進行安裝。

配置虛擬環境(可選)

如果您的Python已安裝完成,可以建立一個虛擬環境來安裝Python SDK,避免與其他專案發生依賴衝突。

  1. 建立虛擬環境

    運行以下命令,建立一個命名為.venv的虛擬環境:

    # 如果運行失敗,您可以將python替換成python3再運行
    python -m venv .venv
  2. 啟用虛擬環境

    如果是Windows系統,運行以下命令啟用虛擬環境:

    .venv\Scripts\activate

    如果是macOS或者Linux系統,運行以下命令啟用虛擬環境:

    source .venv/bin/activate
安裝SDK

執行以下命令安裝Python SDK:

pip install alibabacloud_tea_util 
pip install alibabacloud_opensearch_util
pip install alibabacloud_credentials

步驟 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)