dsh-web-searxng-search:用自託管 SearXNG 替代 DSH 內置聯網搜索

前言

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 結果。

插件本身無額外運行時依賴;@deepseek-ai/* 由宿主作爲 peer 提供。要求 Node.js >= 22.19,DeepSeek Harness 側需 @deepseek-ai/dsh-web 0.1.x。

核心功能

README 中列出的能力如下,均圍繞「替換 provider、不改工具面」:

  1. 即插即用:在 ctx.web seam 上註冊 provider,內置 web_search 繼續可用。
  2. 可配置檢索行爲:超時、語言、安全搜索級別、SearXNG categories 與 engines 白名單。
  3. 結果按 URL 去重:元搜索常返回重複條目。
  4. 配置錯誤可區分:實例返回 HTML(未開 JSON)與「無結果」會給出不同提示。
  5. 生命週期:註冊包在 ctx.effect 中,卸載與 HMR 可乾淨回滾。
  6. 離線測試:倉庫含 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜