前言¶
DeepSeek Harness(DSH)在 web profile 裏提供 web_search 工具,默認走 DeepSeek API 側的搜索能力:每次查詢會計費,且與 API Key 綁定。若你已有或可部署 SearXNG 元搜索引擎,更希望 Agent 的聯網檢索走自己掌控的基礎設施、且不依賴第三方搜索 API 賬號,就需要在 ctx.web 這條 seam 上註冊另一套 WebSearchProvider。
下面介紹社區插件 dsh-web-searxng-search(維護者 kkgace,分類:聯網工具)。它在 Harness 裏掛接自託管 SearXNG 實例,無需 API Key 與廠商賬號;內置 web_search 的調用方式不變,由配置切換實際後端。
這是什麼¶
dsh-web-searxng-search 是 DSH 的 Cordis 插件:實現 WebSearchProvider 契約,通過 ctx.web.registerSearchProvider 註冊搜索提供者,並由 bundle 自帶的 cordis.patch.yml 將 web.searchProvider 指向 searxng。搜索請求發往你在 baseURL 中配置的 SearXNG 根地址,讀取其 Search API 的 JSON 結果。
- 倉庫:kkgace/dsh-web-searxng-search
- 社區目錄:SkillHub 插件頁
- 許可證:MIT(README 與 package.json 一致)
- 當前 package 版本:0.1.0
插件本身無額外運行時依賴;@deepseek-ai/* 由宿主作爲 peer 提供。要求 Node.js >= 22.19,DeepSeek Harness 側需 @deepseek-ai/dsh-web 0.1.x。
核心功能¶
README 中列出的能力如下,均圍繞「替換 provider、不改工具面」:
- 即插即用:在
ctx.webseam 上註冊 provider,內置web_search繼續可用。 - 可配置檢索行爲:超時、語言、安全搜索級別、SearXNG categories 與 engines 白名單。
- 結果按 URL 去重:元搜索常返回重複條目。
- 配置錯誤可區分:實例返回 HTML(未開 JSON)與「無結果」會給出不同提示。
- 生命週期:註冊包在
ctx.effect中,卸載與 HMR 可乾淨回滾。 - 離線測試:倉庫含 14 個不依賴網絡的單元測試(
npm test)。
失敗以 WebError 拋出,宿主處理;不會靜默回退到其他 provider。
前置條件:SearXNG 開啓 JSON¶
SearXNG 默認不輸出 JSON;未啓用時實例仍可能返回 200 與 HTML 頁面,插件會報配置類錯誤而非「無結果」。在實例的 settings.yml 中啓用 JSON:
# settings.yml
search:
formats:
- html
- json
安裝插件前,用 curl 驗證端點(將地址換成你的實例):
curl -fsS 'http://localhost:8888/search?q=test&format=json' | head -c 120
安裝與啓用¶
在 web profile 下添加插件(命令來自官方 README):
# from npm
dsh plugin --profile web add dsh-web-searxng-search
# from GitHub
dsh plugin --profile web add github:kkgace/dsh-web-searxng-search
# from a local checkout
dsh plugin --profile web add /path/to/dsh-web-searxng-search
然後重啓 web 應用:
dsh web
插件上架後,也可在 Settings → Plugin Market 中安裝。
注意:僅安裝插件不夠。bundle 會通過 patch 將 web.searchProvider 設爲 searxng;若 profile 未生效或仍指向內置 provider,web_search 會繼續走原後端。修改配置後需重啓 dsh web。
配置¶
默認 baseURL 爲 http://localhost:8888。指向自有實例時,在 profile overlay 裏補丁已有條目,不要 insert 新行(否則會與 bundle 重複 id,啓動報 duplicate loader entry id: web-search-searxng):
# ~/.dsh/profiles/web/cordis.patch.yml
- id: web-search-searxng
config:
baseURL: 'https://searxng.example.com'
也可在運行 dsh 的環境中設置 SEARXNG_BASE_URL。
| 選項 | 類型 | 默認 | 說明 |
|---|---|---|---|
baseURL |
string |
http://localhost:8888 |
實例根 URL,不要帶末尾 /search |
timeoutMs |
number |
15000 |
單次請求超時,1000–120000 ms |
language |
string |
— | 傳給實例的 UI 語言,如 en-US |
safeSearch |
0 \| 1 \| 2 |
0 |
關閉 · 適中 · 嚴格 |
categories |
string |
— | 逗號分隔類別,如 general,it |
engines |
string |
— | 逗號分隔引擎名,縮小檢索範圍 |
apiKey |
string |
— | 僅當實例需要 Bearer 時填寫 |
典型用法與排查¶
仍走其他 provider:檢查 web.searchProvider 是否爲 searxng,並確認已執行 dsh web 重啓。
有數據卻顯示無結果:多爲實例未開 JSON format,見上文 settings.yml。
WEB_PROVIDER_CONFIGURED_UNAVAILABLE:available() 爲 false,通常 baseURL 不是合法的 http(s) 絕對 URL。
WEB_PROVIDER_TIMEOUT:在 timeoutMs 內實例未響應,可調大超時或檢查網絡與實例負載。
Agent 側無需改工具名:配置正確後,對話裏照常觸發 web_search,請求由插件轉發到 SearXNG。
適用場景與注意¶
適合:已部署或計劃部署 SearXNG、希望 DSH Agent 聯網檢索自控、避免 DeepSeek 搜索 API 計費與 Key 歸因的團隊或個人。
不適合:沒有可維護的 SearXNG 實例,或不願在元搜索層做引擎與合規配置的場景。
DSH 生態強調「一切皆插件」;SkillHub 等社區目錄獨立於 DeepSeek / 幻方,並非官方應用商店。插件以當前 dsh 進程權限運行,安裝前建議閱讀倉庫源碼與 MIT 許可證,確認 baseURL 與可選 apiKey 符合你的安全策略。
結尾¶
dsh-web-searxng-search 在 ctx.web 上把 web_search 接到自託管 SearXNG,保留工具接口、換掉計費與廠商賬號依賴;前提是實例開啓 JSON API,並通過 patch 正確選中 searxng provider。
- 目錄頁:https://www.skillhub.cn/plugins/kkgace/dsh-web-searxng-search
- GitHub:https://github.com/kkgace/dsh-web-searxng-search