深度搜尋(Deep Search)是一款基於 Multi-Agent 架構的專業知識問答系統,專註於為使用者提供精準、聚焦且內容詳盡的深度解答。它不僅能夠高效檢索資料,還具備理解使用者意圖、整合多來源資料並產生全面且結構化的答案的能力。相較於傳統搜尋引擎,深度搜尋在複雜問題的拆解、多來源資料的深度融合以及跨領域知識的關聯方面表現更為出色。
能力對比
下表展示了深度搜尋和傳統AI搜尋的對比:
維度 | 深度搜尋 | 傳統AI搜尋 |
理解能力 | 上下文推理,意圖識別。 | 語義檢索、關鍵詞檢索。 |
響應模式 | 主動追問上下文細節(如時間範圍、地區限制等)。 | 被動接受原始提問。 |
資料來源 | 支援跨平台彙總(私域、連網、資料庫等)。 | 依賴某個單一資料來源。 |
知識密度 | 單次輸出多篇參考文獻標註,直到準確回答問題。 | 僅提供固定的3-5個相關資料區段。 |
互動深度 | 支援連續多輪的專業對話。 | 會話輪數對效果影響較大。 |
適用問題 | 複雜、開放性問題(如分析、對比等)。 | 簡單、事實型問題。 |
技術架構
深度搜尋是基於Multi-Agent架構的系統,由以下Single-Agent組成:
Query理解Agent:對使用者原始Query的理解和改寫。
自主規劃Agent:用於對使用者Query的意圖識別、執行路徑規劃和調整、答案校正等。
搜尋Agent:用於本輪知識檢索和總結。
閑聊Agent:用於對使用者閑聊情境的回答,如“你好”等。
澄清Agent:反問問題的產生,用於明確使用者模糊的問題。
總結Agent:用於最終回答使用者問題。
能力體驗
控制台
1、登入OpenSearch控制台選擇LLM智能問答版,點擊左側導覽列執行個體管理,選擇對應的執行個體點擊管理。

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

3、問答測試效果展示。

API調用
深度搜尋相關請求參數
參數 | 類型 | 必須 | 預設值 | 描述 |
options.chat.enable_deep_search | Boolean | 否 | true | 是否開啟深度搜尋。
|
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 | 請求的處理狀態。
|
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_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運,具體操作,請參見建立RAM使用者。
建立AccessKey ID和AccessKey Secret,請參考建立AccessKey。
如果您使用的是RAM使用者的AccessKey,請確保您的RAM使用者帳號被授予AliyunOpenSearchFullAccess許可權。
請不要將AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
Linux和macOS系統配置方法:
執行以下命令,其中,
<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系統配置方法
建立環境變數檔案,添加環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET,並寫入已準備好的AccessKey ID和AccessKey Secret。
重啟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());
}
}
}