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
羽毛球分组比赛记分
小程序二维码

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

Xiaoye