DeepSeek Harness (DSH) 內置的 web_search 工具依賴 DeepSeek 的服務端接口,既需要 DEEPSEEK_API_KEY,又會消耗一個完整的模型輪次。dsh-keyless-search 是一個第三方 Provider 插件,用於替換 ctx.web 的底層搜索後端。它通過本地發起真實瀏覽器請求,實現了免 Key、不消耗模型輪次的檢索功能。
核心功能¶
該插件基於 Node.js 實現,不依賴 DeepSeek 官方包,具備以下能力:
- 免 API Key:不消耗模型輪次,也不依賴環境變量中的 Key。
- 真實瀏覽器渲染:使用本地 Chrome/Edge 渲染 Google,繞過 HTTP 抓取必然遇到的 JS 牆。
- 多引擎併發與降級:默認鏈路爲
google-browser(代理)+bing-global(國際版)+bing(直連)。代理不可用時自動收斂爲直連,google-browser失敗時自動降級。 - 代理自動探測:無需手動配置
proxyUrl,插件會自動掃描本地常見端口(如 7890、1080 等)。 - 語言感知:檢測到中日韓字符時,自動跳過國際版 Bing,避免英文結果污染。
- 多主題拆分:針對“主題1、主題2”的複合查詢,自動拆分爲最多 8 個子查詢,去重後合併返回。
- 瀏覽器實例回收:空閒(默認 5 分鐘)後自動關閉由插件拉起的 Chrome 實例,不佔用系統資源。
- 零 Host 依賴:僅使用
node:內置模塊,不從@deepseek-ai/*import 任何東西。
安裝與啓用¶
安裝該插件需要 DeepSeek Harness 環境。請確保 Node 版本 ≥ 22。
dsh plugin --profile <profile> add github:Wandering233/dsh-keyless-search
安裝後需重啓 DSH 生效。插件通過 dsh.bundle.patch 自動應用配置,無需手動修改 cordis.patch.yml。
配置說明¶
在 profile 的 cordis.patch.yml 中配置 web-search-local:
- insert:
- id: web-search-local
name: 'dsh-keyless-search'
config:
engines: [google-browser, bing-global, bing]
proxyUrl: '' # '' = 自動探測;'off' = 強制直連;或 'http://host:port'
maxSources: 16
browserTimeoutMs: 30000
searchTimeoutMs: 15000
chromePath: '' # 留空自動探測瀏覽器路徑
browserIdleTimeoutMs: 300000 # 5分鐘空閒後回收
關鍵字段說明:
* engines:指定搜索引擎列表。默認爲 [google-browser, bing-global, bing]。
* proxyUrl:留空時自動探測本地端口;設置爲 'off' 時強制直連。
* browserIdleTimeoutMs:設置瀏覽器實例空閒多久後回收,0 表示禁用回收。
已知限制¶
- 冷啓動成本:首次使用瀏覽器引擎需要拉起 Chrome(約 3-6 秒),複用實例約 3-4 秒。
- 結果截斷:工具層默認最多返回 8 條結果(
searchMaxResults),即使插件返回更多,也會被截斷。該上限無法通過配置調整。 - 特定引擎問題:
- DuckDuckGo 已不可用,返回 botnet 頁面。
- Mojeek 實測返回 0 條。
- SearXNG 需要特定配置且依賴 Unix 特有模塊(如
os.uname()),公共實例通常不可用。
- 依賴要求:需要本地安裝 Chrome / Chromium / Edge,且本地目錄安裝時建議顯式安裝
puppeteer-core。
開發與自檢¶
包內提供 selftest.mjs,可在不啓動 DSH 的情況下進行純 Node 自檢:
node selftest.mjs
總結¶
dsh-keyless-search 通過引入本地瀏覽器渲染和智能拆分策略,解決了 DSH 原生搜索需消耗模型輪次的問題。它適合需要高頻、免 Key 搜索能力的場景,但在使用前需留意冷啓動延遲及結果數量上限。