dsh-search-failover:DSH 的 provider 级搜索与抓取池

前言

在 DSH 插件体系里,搜索和抓取通常会依赖具体后端。如果只使用一个后端,或者一个后端只绑定一个 Key,遇到额度耗尽、网络抖动、后端不可用时,上层调用会直接受影响。

dsh-search-failover 是 Walvez 维护的 DSH 插件,用于在 provider 级接管 ctx.web 的搜索与抓取,把多个搜索 / 抓取后端放进同一个池里调度。

这是什么

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

它保持原生 web_searchweb_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。

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

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

小夜