前言¶
DeepSeek Harness (DSH) 在使用原生 web-search 工具時,若存在多個 provider,會觸發 WEB_PROVIDER_AMBIGUOUS 錯誤。240xu/dsh-websearch 作爲一個原生插件,向 ctx.web 註冊了唯一的 provider unified。它聚合了 11 個後端,併發執行搜索請求,合併結果並進行 URL 去重。即使部分後端宕機,只要有一個可用,搜索即可繼續。
安裝與啓用¶
- 進入插件的 profile 目錄:
cd ~/.dsh/profiles/web
- 在
package.json的dependencies中加入:
"@240xu/dsh-websearch": "file:/path/to/@240xu/dsh-websearch"
- 安裝依賴:
pnpm install
- 修改
~/.dsh/profiles/web/cordis.patch.yml,將dsh-web的searchProvider指向unified:
- id: web
name: '@deepseek-ai/dsh-web'
config:
searchProvider: unified
重啓 dsh web 即可生效。
核心功能¶
- 唯一 Provider 註冊:註冊 id 爲
unified的 provider,確保dsh-web選擇規則不會觸發WEB_PROVIDER_AMBIGUOUS。 - 併發 Fan-out 與合併:向所有啓用的後端發起併發請求,使用
Promise.allSettled機制,單個後端失敗不會阻塞整體搜索。 - URL 去重:在結果合併階段進行 URL 去重,可選開啓 URL+Title 聚合。
- 零配置後端:Exa、Parallel、DuckDuckGo、SearXNG 四個後端無需 API Key 即可使用。
- API Key 後端自動激活:在 DSH 設置面板或環境變量中配置 DeepSeek、Anthropic、OpenAI、Brave、Tavily、Serper、Mojeek 的 Key 後,對應後端自動激活。
後端列表¶
插件內置 11 個後端,分爲無需 Key 和需 Key 兩種:
- 無需 Key:
exa:流式 HTTP MCP,無 key。parallel:流式 HTTP MCP,無 key。ddg:HTML 抓取,零依賴。searxng:REST JSON 搜索,默認實例https://searx.be。
- 需 Key:
deepseek:使用 DeepSeek API。anthropic:使用 Anthropic API。openai:使用 OpenAI API。brave:使用 Brave API。tavily:使用 Tavily API。serper:使用 Serper API。mojeek:使用 Mojeek API。
配置與使用¶
- 全局設置:在
Settings → Unified Search中可配置併發數(默認 6)、單後端超時(默認 30s)、結果數(默認 8)等。 - 去重策略:支持
url(僅去重鏈接)和url+title(額外合併同標題轉載)兩種策略。 - 結果健康度:每次搜索結果尾部會附上
[websearch backends] ...日誌,包含各後端的響應時間與狀態,用於診斷。 - 環境變量:API Key 可通過環境變量讀取,格式如
DEEPSEEK_API_KEY,也可通過 DSH 憑證服務配置。
注意事項¶
- 密鑰缺失軟失敗:如果後端所需的 Key 缺失,該後端會以明確錯誤碼軟失敗,不會阻塞其他後端。
- 本地可用性檢查:
available()方法僅做本地配置檢查(如 Key 是否存在),不聯網探測後端可達性。 - SearXNG 實例:默認使用
https://searx.be,公共實例可用性隨網絡波動,可在設置中切換或自託管。 - 日誌路由:每個後端通過
lib/util/log.js將請求和結果路由到主機的日誌器,便於調試。