全部產品
Search
文件中心

OpenSearch:深度搜尋實踐教程

更新時間:Jun 20, 2025

深度搜尋(Deep Search)是一款基於 Multi-Agent 架構的專業知識問答系統,專註於為使用者提供精準、聚焦且內容詳盡的深度解答。它不僅能夠高效檢索資料,還具備理解使用者意圖、整合多來源資料並產生全面且結構化的答案的能力。相較於傳統搜尋引擎,深度搜尋在複雜問題的拆解、多來源資料的深度融合以及跨領域知識的關聯方面表現更為出色。

能力對比

下表展示了深度搜尋和傳統AI搜尋的對比:

維度

深度搜尋

傳統AI搜尋

理解能力

上下文推理,意圖識別。

語義檢索、關鍵詞檢索。

響應模式

主動追問上下文細節(如時間範圍、地區限制等)。

被動接受原始提問。

資料來源

支援跨平台彙總(私域、連網、資料庫等)。

依賴某個單一資料來源。

知識密度

單次輸出多篇參考文獻標註,直到準確回答問題。

僅提供固定的3-5個相關資料區段。

互動深度

支援連續多輪的專業對話。

會話輪數對效果影響較大。

適用問題

複雜、開放性問題(如分析、對比等)。

簡單、事實型問題。

技術架構

深度搜尋是基於Multi-Agent架構的系統,由以下Single-Agent組成:

  • Query理解Agent:對使用者原始Query的理解和改寫。

  • 自主規劃Agent:用於對使用者Query的意圖識別、執行路徑規劃和調整、答案校正等。

  • 搜尋Agent:用於本輪知識檢索和總結。

  • 閑聊Agent:用於對使用者閑聊情境的回答,如“你好”等。

  • 澄清Agent:反問問題的產生,用於明確使用者模糊的問題。

  • 總結Agent:用於最終回答使用者問題。

能力體驗

控制台

1、登入OpenSearch控制台選擇LLM智能問答版,點擊左側導覽列執行個體管理,選擇對應的執行個體點擊管理

image

2、進入執行個體詳情頁面,點擊問答測試,開啟深度搜尋,在對話方塊輸入需要詢問的內容,點擊發送。

2

3、問答測試效果展示。

3

API調用

深度搜尋相關請求參數

參數

類型

必須

預設值

描述

options.chat.enable_deep_search

Boolean

true

是否開啟深度搜尋

  • true:開啟深度搜尋,需要多輪推理綜合資料返回結果,單次對話消耗的時間和計算資源相對較多。

  • false:關閉深度搜尋。

options.chat.agent.think_process

Boolean

true

是否返回思考過程。

options.chat.agent.max_think_round

Integer

10

思考輪數(最大不超過20)。

options.chat.agent.language

String

AUTO

思考過程及回答語言。

AUTO:根據使用者query判斷使用中文還是英文。

CN:中文。

EN:英文。

說明

完整問答測試參數請參見問答參數說明

請求體樣本

{
    "question" : {
        "text" : "推薦3張周杰倫的專輯",
        "type" : "TEXT"
    },
    "options": {
      "retrieve": {
      "web_search": {
        "enable": true
        }
      },
      "chat": {
        "enable_deep_search": true,
        "model": "qwen3-235b-a22b"
      },
      "agent": {
        "think_process": true,
        "max_think_round": 10,
        "language": "AUTO"
      }
    }
  }

返回參數

參數

類型

描述

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": "f1b9*****************2853a",
    "status": "OK",
    "latency": 33967.562031,
    "result": {
        "data": [
            {
                "answer": "使用者要求推薦3張周杰倫的專輯。我需要先瞭解周杰倫有哪些專輯,然後從中挑選3張具有代表性的推薦。",
                "type": "TEXT_MARKDOWN",
                "reference": [],
                "rich_text_ref": [],
                "event": "THINK",
                "event_status": "FINISHED"
            },
            {
                "answer": "周杰倫所有專輯列表",
                "type": "TEXT_MARKDOWN",
                "reference": [],
                "rich_text_ref": [],
                "event": "ACTION",
                "event_status": "FINISHED"
            },
            {
                "answer": "周杰倫的專輯列表如下(按發行年份排序):  \n\n1. **《JAY》**(2000年)  \n2. **《範特西》**(2001年)  \n3. **《八度空間》**(2002年)  \n4. **《葉惠美》**(2003年)  \n5. **《七裡香》**(2004年)  \n6. **《十一月的蕭邦》**(2005年)  \n7. **《依然範特西》**(2006年)  \n8. **《我很忙》**(2007年)  \n9. **《魔杰座》**(2008年)  \n10. **《跨時代》**(2010年)  \n11. **《驚歎號》**(2011年)  \n12. **《十二新作》**(2012年)  \n13. **《哎呦,不錯哦》**(2014年)  \n14. **《周杰倫的床邊故事》**(2016年)  \n15. **《最偉大的作品》**(2022年)  \n\n註:部分搜尋結果中提到的歌曲實際為專輯內曲目,已整理為完整專輯列表。",
                "type": "TEXT_MARKDOWN",
                "reference": [],
                "rich_text_ref": [],
                "event": "ANSWER",
                "event_status": "FINISHED"
            },
            {
                "answer": "\n首先,使用者的問題是:“推薦3張周杰倫的專輯”。我需要基於已知資訊來回答。已知資訊包括多個文檔,描述了周杰倫的專輯。\n\n回顧已知資訊:\n- [文檔01] 列出了周杰倫的專輯和歌曲,但似乎只提到了《JAY》專輯,並列出了一些歌曲,但文檔開頭說“周杰倫的音樂作品包括六張正式個人專輯、四張EP專輯”,但具體專輯名稱沒有完整列出。它列出了歌曲,但專輯名稱只有《JAY》被明確提到。\n- [文檔02] 提到了專輯如《八度空間》、《周杰倫的床邊故事》、《範特西》、《杰倫》等,並給出了年份。\n- [文檔03] 類似[文檔02],提到了專輯如《最偉大的作品》、《周杰倫的床邊故事》、《哎呦, 不錯哦》、《十二新作》、《驚歎號》。\n- [文檔04] 提到了《JAY》和《範特西》,並描述了它們。\n- [文檔05] 類似[文檔02]和[文檔03],提到了相同的專輯。\n\n從這些文檔中,我可以提取出周杰倫的專輯列表:\n- [文檔02] 和 [文檔03] 明確列出了專輯名稱和年份:\n  - 《最偉大的作品》2022年\n  - 《周杰倫的床邊故事》2016年\n  - 《哎呦, 不錯哦》2014年\n  - 《十二新作》2012年\n  - 《驚歎號》2011年\n- 另外,[文檔01] 提到了《JAY》2000年,[文檔04] 也提到了《JAY》和《範特西》。\n- [文檔02] 還提到了《八度空間》2002年、《範特西》2001年、《杰倫》2000年(可能指的是《JAY》)。\n\n綜合所有文檔,周杰倫的專輯包括:\n- 《JAY》2000年 [文檔01][文檔04]\n- 《範特西》2001年 [文檔02][文檔04]\n- 《八度空間》2002年 [文檔02]\n- 《驚歎號》2011年 [文檔02][文檔03]\n- 《十二新作》2012年 [文檔02][文檔03]\n- 《哎呦, 不錯哦》2014年 [文檔02][文檔03]\n- 《周杰倫的床邊故事》2016年 [文檔02][文檔03]\n- 《最偉大的作品》2022年 [文檔02][文檔03]\n\n使用者要求推薦3張專輯。我需要基於已知資訊推薦,並確保每一點都有來源支撐。\n\n推薦標準:我應該選擇一些經典或代表性的專輯。從文檔中:\n- [文檔02] 和 [文檔03] 高度評價了《範特西》,稱其為“周杰倫音樂生涯裡的高峰,也成為無數音樂人相繼模仿,卻難以逾越的時代標杆之作”。[文檔02][文檔03]\n- [文檔01] 提到了《JAY》作為首張專輯。\n- [文檔02] 提到了《八度空間》延續了前兩張專輯的風格,並拿下多項大獎。[文檔02]\n- 其他專輯如《周杰倫的床邊故事》和《最偉大的作品》也被提及。\n\n所以,我可以推薦:\n1. 《範特西》 - 因為它被描述為高峰和標杆。\n2. 《JAY》 - 作為首張專輯,具有歷史意義。\n3. 《八度空間》 - 因為它延續了成功並獲獎。\n\n或者,選擇更近期的,但文檔中強調了早期專輯的重要性。\n\n確保引用來源:每個事實必須用[文檔xx]格式引用。\n\n回答要求:\n- 使用中文。\n- 如果已知資訊能回答問題,必須使用已知資訊,並引用來源。\n- 使用豐富的markdown格式:如列表、表格等。\n- 自然語氣,不生硬。\n- 正確性,不編造資訊。\n\n結構回答:\n- 開頭直接推薦3張專輯。\n- 為每張專輯提供理由,基於文檔。\n- 使用列表或表格組織。\n- 引用來源。\n\n最終推薦:\n1. 《範特西》 (2001年) - 理由:被描述為周杰倫音樂生涯的高峰和時代標杆。[文檔02][文檔03]\n2. 《JAY》 (2000年) - 理由:首張專輯,奠定了他的音樂風格。[文檔01][文檔04]\n3. 《八度空間》 (2002年) - 理由:延續前作風格,拿下多項大獎,給唱片行業帶來希望。[文檔02]\n\n或者,考慮《周杰倫的床邊故事》或《最偉大的作品》,但文檔中對它們的描述較少,而早期專輯有更多評價。\n\n在[文檔02][文檔03]中,有對《範特西》的詳細描述,其他專輯只是列出。\n\n所以,選擇這三張是合理的。\n\n使用markdown:可以用有序列表或表格。\n\n例如:\n- 用### 標題\n- 列表描述\n- 加粗專輯名稱\n\n確保不添加額外資訊:只基於文檔。\n",
                "type": "TEXT_MARKDOWN",
                "reference": [],
                "rich_text_ref": [],
                "event": "THINK",
                "event_status": "FINISHED"
            },
            {
                "answer": "\n以下是基於周杰倫音樂生涯的代表性專輯,我為您推薦三張經典作品。這些專輯不僅展現了周杰倫獨特的音樂風格(融合流行、R&B、搖滾等元素),還因其藝術成就和影響力而廣受讚譽。推薦依據來源於可靠文檔資訊,每張專輯的推薦理由都嚴格基於相關文檔內容,並標註了來源編號(如[文檔xx])。\n\n### 推薦的三張周杰倫專輯\n\n1. **《範特西》(2001年)**  \n   - **推薦理由**:這張專輯被公認為周杰倫音樂生涯的高峰之作,它確立了其創作範式,成為無數音樂人模仿卻難以逾越的時代標杆。專輯中的每首歌都像一顆鏡頭,以聽覺塑造畫面,帶人穿越古今中外,例如《愛在西元前》融合R&B與嘻哈,營造時空漩渦感;《忍者》用單一和弦和日式意象增強臨場感;《威廉古堡》則以管風琴演奏營造詭譎的中世紀氛圍。整體上,它奠定了周杰倫成熟的方法論,並深受全球樂迷喜愛[^2^][^3^]。  \n   - **代表歌曲**:《愛在西元前》《忍者》《威廉古堡》(來源:[^2^][^3^])。\n\n2. **《JAY》(2000年)**  \n   - **推薦理由**:作為周杰倫的首張個人專輯,它標誌著其音樂生涯的起點,收錄了多首經典歌曲如《可愛女人》《完美主義》和《星晴》。這張專輯展現了周杰倫獨特的音樂才華,融合了多種元素,為後續作品奠定了基調,並迅速贏得了樂迷的廣泛認可[^1^][^4^]。  \n   - **代表歌曲**:《可愛女人》《完美主義》《星晴》(來源:[^1^][^4^])。\n\n3. **《八度空間》(2002年)**  \n   - **推薦理由**:這張專輯延續了前兩張作品的編曲基調,個人風格更加成熟,協助周杰倫勢如破竹地拿下多項大獎,締造了華語樂壇新紀錄。同時,它以高銷量為當時受盜版困擾的唱片行業帶來了希望。專輯中的閩南語歌曲《火車叨位去》體現了周杰倫的鄉土情懷,這在後期作品中較為罕見,突顯了其藝術深度[^2^]。  \n   - **代表歌曲**:《火車叨位去》《暗號》(來源:[^2^])。\n\n這三張專輯分別代表了周杰倫早期事業的突破、創新和成熟階段,是瞭解其音樂精髓的絕佳起點。每張都承載著獨特的創作故事,值得您細細品味!",
                "type": "TEXT_MARKDOWN",
                "reference": [
                    {
                        "title": "誰曉得周杰倫的所有專輯的名字",
                        "category": "webSearch",
                        "url": "https://zhidao.baidu.com/question/317142607014917724.html"
                    },
                    {
                        "title": "周杰倫",
                        "category": "webSearch",
                        "url": "https://music.apple.com/cn/artist/300117743"
                    },
                    {
                        "title": "\u200e周杰倫-Apple Music",
                        "category": "webSearch",
                        "url": "https://music.apple.com/cn/artist/a/300117743"
                    },
                    {
                        "title": "周杰倫全專輯名稱匯總",
                        "category": "webSearch",
                        "url": "https://m.xueba5.com/xw/25426.html"
                    },
                    {
                        "title": "周杰倫",
                        "category": "webSearch",
                        "url": "https://music.apple.com/cn/artist/%E5%91%A8%E6%9D%B0%E4%BC%A6/300117743"
                    }
                ],
                "rich_text_ref": [],
                "event": "SUMMARY",
                "event_status": "FINISHED"
            }
        ]
    }
}

SDK調用

配置環境變數

配置環境變數ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET

重要
  • 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運,具體操作,請參見建立RAM使用者

  • 建立AccessKey ID和AccessKey Secret,請參考建立AccessKey

  • 如果您使用的是RAM使用者的AccessKey,請確保您的RAM使用者帳號被授予AliyunOpenSearchFullAccess許可權。

  • 請不要將AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。

  • LinuxmacOS系統配置方法:

    執行以下命令,其中, <access_key_id>需替換為您RAM使用者的AccessKey ID,<access_key_secret>替換為您RAM使用者的AccessKey Secret。

    export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> 
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
  • Windows系統配置方法

    1. 建立環境變數檔案,添加環境變數ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET,並寫入已準備好的AccessKey ID和AccessKey Secret。

    2. 重啟Windows系統生效。

添加依賴

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

調用代碼

您可以參考以下程式碼範例完成調用。

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 accesskey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    private static String secret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    
    private static String appName = "替換為應用程式名稱";
    private static String host = "替換應用的API訪問地址";
    private static String path = "/apps/%s/actions/multi-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\":\"推薦3張周杰倫的專輯\",\"type\":\"TEXT\",\"session\":\"\"},\"options\":{\"chat\":{\"stream\":true,\"enable_deep_search\":true,\"model\":\"opensearch-qwen\"}}}");

        }};
        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());
        }
    }
}