dsh-search-failover:DSH 的 provider 級搜索與抓取池

前言

在 DSH 插件體系裏,搜索和抓取通常會依賴具體後端。如果只使用一個後端,或者一個後端只綁定一個 Key,遇到額度耗盡、網絡抖動、後端不可用時,上層調用會直接受影響。

dsh-search-failover 是 Walvez 維護的 DSH 插件,用於在 provider 級接管 ctx.web 的搜索與抓取,把多個搜索 / 抓取後端放進同一個池裏調度。

這是什麼

dsh-search-failover 是 DeepSeek Harness(DSH)原生 provider 級智能搜索 / 抓取池。

它保持原生 web_search 與 web_fetch 工具簽名不變,在底層替換搜索與抓取的實際 provider。插件使用 MIT 許可證,要求:

Node.js >=22

核心功能

下面介紹已覈實的能力。

Provider 級透明替換

插件無侵入接管 DSH ctx.web 的搜索 + 抓取,保持原生工具簽名不變:

web_search
web_fetch

雙重路由策略

插件提供兩種路由策略:

  1. 優先順序 Failover
    按優先級順序嘗試後端,前一個後端失敗或熔斷後,下探下一個後端。

  2. 加權輪詢 Weighted Rotate
    按權重將搜索流量分配給不同後端。

智能額度感知與熔斷器

熔斷器用於處理額度耗盡和瞬時錯誤:

額度耗盡:長冷卻 1h
瞬時錯誤:短冷卻 60s
冷卻到期:半開探活

AI 自主換源技能

插件提供 web_search_from 技能。AI 可自主選擇以下引擎重新搜索並對比:

exa
serper
tavily
jina
firecrawl

Web GUI 設置面板

插件提供現代卡片流 Web GUI 設置面板,可用於:

  • 填寫 / 修改 API Key
  • 切換策略
  • 拖拽排序
  • 測試連通性

保存即即時生效,無需重啓進程。

單引擎多 Key 輪換

同一後端可填寫多個 Key。某個 Key 額度耗盡時,先切下一個 Key。

搜索後端支持

已覈實的搜索後端支持:

Exa
Serper
Tavily
Jina
SerpApi
Firecrawl
SearXNG
DuckDuckGo
Brave

抓取支持

已覈實的抓取支持:

Jina Reader
Exa Contents
Tavily Extract
Firecrawl Scrape

密鑰本地保存

密鑰安全保存在本地路徑:

~/.dsh/settings.yaml

README 標註絕不上報。

安裝與啓用

先安裝插件,再修改配置,最後啓動 DSH Web。

安裝插件

在 DSH 項目或 Web Profile 下執行:

dsh plugin --profile web add dsh-search-failover

聲明掛載與默認後端配置

在 cordis.patch.yml 中聲明掛載與默認後端配置。下面示例設置策略、返回條數上限、超時、後端列表和熔斷參數:

- id: search-pool
  name: dsh-search-failover
  config:
    strategy: failover
    maxResults: 8
    timeoutMs: 15000
    backends:
      - id: exa
        kind: exa
        apiKeyEnv: EXA_API_KEY
        priority: 1
      - id: serper
        kind: serper
        apiKeyEnv: SERPER_API_KEY
        priority: 2
      - id: tavily
        kind: tavily
        apiKeyEnv: TAVILY_API_KEY
        priority: 3
      - id: jina
        kind: jina
        apiKeyEnv: JINA_API_KEY
        priority: 4
      - id: firecrawl
        kind: firecrawl
        apiKeyEnv: FIRECRAWL_API_KEY
        priority: 5
      - id: serpapi
        kind: serpapi
        apiKeyEnv: SERPAPI_API_KEY
        priority: 6
      - id: searxng
        kind: searxng
        baseURL: http://127.0.0.1:8080
        priority: 7
    circuit:
      threshold: 3
      burstWindowMs: 300000
      cooldownMs: 60000
      quotaCooldownMs: 3600000

配置項說明:

strategy: failover / rotate
maxResults: 默認返回條數上限
timeoutMs: 單個請求超時時間
backends: 後端列表
circuit: 熔斷參數

啓動 DSH Web

執行:

dsh web

打開 Web GUI,默認地址:

http://127.0.0.1:3080

進入「設置 → 搜索池」,即可在界面直接管理所有 Key。

本地調試

如果需要本地克隆軟鏈調試,先克隆倉庫,再掛載當前目錄:

git clone https://github.com/Walvez/dsh-search-failover.git
dsh plugin --profile web add link:$(pwd)/dsh-search-failover

適用場景與注意

適合以下情況:

  • 需要同時配置多個搜索後端
  • 需要同一引擎多 Key 輪換
  • 需要搜索和抓取共用一套調度與熔斷
  • 需要在 Agent 側顯式選擇不同搜索引擎
  • 需要接入自託管 SearXNG

注意:

  1. 插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。
  2. Node.js 要求:
   >=22
  1. 部分後端需要 API Key;Tavily 支持無 key 匿名檔;SearXNG 爲自託管實例。
  2. 部分後端僅支持搜索,不支持抓取,如 Serper 與 SerpApi。
  3. opencodex sidecar 可選且默認不啓用,需要時本機運行 opencodex。
  4. 已覈實資料中的額度參考表不完整,本文不展開具體額度。

結尾

經過上面的步驟,dsh-search-failover 可以把 DSH 的搜索與抓取整理成 provider 級池:策略可切換、Key 可輪換、後端可熔斷,GUI 可直接維護。

GitHub:

https://github.com/Walvez/dsh-search-failover

目錄頁:已覈實資料未提供可驗證 URL。

羽毛球分组比赛记分
小程序二维码

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

小夜