fno2010/dsh-web-search-ext:DSH 的多後端 web_search 與 web_fetch 擴展

前言

給 DSH 接入聯網能力時,一個常見的問題是:內置或已有方案可能要求先配置 API key,或者只能依賴單一後端,一旦後端限流,任務就停下來。fno2010/dsh-web-search-ext 解決的是這個問題:它是一個面向 DeepSeek Harness(DSH)的多後端 web_searchweb_fetch provider,可以完全不帶 API key 使用,也可以加入 key 來解鎖更高限額。

下面介紹它的定位、能力、安裝方式和使用時需要注意的點。

這是什麼

fno2010/dsh-web-search-ext 是 DSH 的一個聯網擴展插件,維護者爲 fno2010,許可證爲 MIT。

它提供兩個後端:ExaFirecrawl,用於 web_searchweb_fetch。它的核心賣點是:

  • 無需 API key 即可工作;
  • 可選配置 API key,以提升限額;
  • 在後端失敗時自動切換後端;
  • 對結果做存活校驗,並在結果中展示來源、耗時、結果數和限制說明。

該插件要求 Node.js 版本爲 >=22。它是 plain ESM JavaScript,沒有 build step,也沒有 postinstall / prepare 安裝腳本。

核心能力

雙後端與 keyless 路徑

該插件同時使用 ExaFirecrawl 兩個後端。

對於 web_fetch,它提供 keyless 路徑:先通過 Firecrawl scrape 抓取 URL,失敗時回退到 Exa 的 anonymous MCP web_fetch_exa

key 是可選的。配置優先級爲:

  1. settings literal
  2. credentials service
  3. launch environment variable

這裏有兩個使用上的區別需要注意:

  • keyless Exa MCP 是文檔中公開的 fallback,但有限額,可能返回 HTTP 429
  • Firecrawl keyless mode 是非官方模式,可能被限流或移除。

自動 failover 與 429 cooldown

當某個後端出現以下情況時,插件會自動切換到下一個後端:

  • 429
  • 401 / 402 / 403
  • 5xx
  • network error
  • malformed body

對於 429,插件會按後端做 cooldown。cooldown 時間會參考後端返回的 Retry-Afterretry_after_seconds,並受 maxCooldownSec 限制。

結果校驗與來源說明

默認啓用 L0 liveness 校驗。每個返回結果會被標記爲以下狀態之一:

alive
dead
blocked
timeout
unreachable
skipped

插件還提供實驗性的 L1 content verification,可通過配置項開啓:

"verifyLevel": "content"

搜索結果還會附帶 provenance receipt,展示實際響應後端、耗時、結果數量,以及當前路徑的限制說明。

插件支持 freshness window:

24h
7d
30d

只有當前端或後端支持時纔會發送。

安裝與啓用

先安裝插件:

dsh plugin --profile web add @fno2010/dsh-web-search-ext

如果你使用本地 checkout,也可以這樣安裝:

dsh plugin --profile web add ./path/to/dsh-web-search-ext

安裝插件後,需要重啓正在運行的 dsh web 進程。重啓之後,再修改配置是 hot 的,不需要再次重啓。

安裝後,插件的 bundle selection 會設置:

web.searchProvider: web-search-ext
web.fetchProvider: web-search-ext

也就是說,web_searchweb_fetch 都會指向 web-search-ext 這個 provider。

典型用法

經過上面的安裝和重啓,可以在 Web 端使用插件提供的配置入口。

使用 Web settings card

在 Web 的插件配置卡片中,可以配置六個核心配置字段,以及兩個 API key。

注意 freshness window 仍然只在 settings.yaml 中配置,不在這個卡片中配置。

查看 Session Health

Session Health tab 使用這個接口:

GET /web-search-ext/health

health payload 只包含 counters,不包含 credentials、URLs 或 query text。

運行 connectivity probe

connectivity probe 使用這個接口:

POST /web-search-ext/probe

probe payload 只包含 plan literals 和 closed codes,不包含 vendor messages、URLs 或 keys。

使用 slash command

插件提供 /search-engine slash command,用於切換 preferred backend、查看 live status,並運行 connectivity test。

如果 /search-engine 已經被佔用,插件會回退到:

/web-search-engine

適用場景與注意

這個插件適合以下場景:

  • 你想在 DSH 中給 web_searchweb_fetch 增加多後端能力;
  • 你希望先不配置 API key 跑通鏈路;
  • 你希望在某個後端限流或失敗時,自動切到另一個後端;
  • 你希望在結果中看到實際後端、耗時、結果數量和限制說明;
  • 你希望在 Web 端通過 settings card、health tab 和 slash command 管理該 provider。

使用前注意以下幾點:

  • 該插件運行在當前 dsh 進程權限下,安裝前應檢查源碼和許可證;
  • keyless 路徑可能有限額;
  • Firecrawl keyless mode 是非官方模式,可能被限流或移除;
  • 如果當前 web seam 沒有 pin 到這個 provider,插件會優雅降級,不會聲稱其他 provider 的結果。

獲取信息

社區目錄頁:

https://www.skillhub.cn/plugins/fno2010/dsh-web-search-ext

GitHub 倉庫:

https://github.com/fno2010/dsh-web-search-ext
羽毛球分组比赛记分
小程序二维码

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

小夜