Tavily Search + Firecrawl Fetch:为 DSH 联网缝接替换搜索与抓取后端

前言

DeepSeek Harness(DSH)里,智能体若要查资料、打开网页,通常依赖 ctx.web 上的搜索与抓取 provider,再由预设里的 tool-web 暴露 web_search、web_fetch。默认组合未必满足「专用搜索 API + 结构化 Markdown 抓取」或「多 Key 轮询、429/额度冷却」这类运维需求。@skillre/dsh-plugin-tavily-firecrawl 向 @deepseek-ai/dsh-web 注册 Tavily 搜索与 Firecrawl 抓取两个 provider,并在 bundle 里把 Cordis 的 searchProvider / fetchProvider 分别钉到 tavily / firecrawl,同时禁用自带的 web-search-deepseek,避免两个搜索 provider 争抢。包状态为 experimental,维护者为 skillre,分类属于联网工具。

这是什么

一句话:把 DSH 的联网能力换成 Tavily 搜索 + Firecrawl 抓取,并支持多 API Key 轮询;一个 bundle 包含 Host 侧两个 ctx.web provider 与一张浏览器配置页,Key 可在 设置 → 插件 填写。

本包不注册工具本身:web_search / web_fetch 由 agent 预设里的 tool-web(fetch: true)决定,本包只提供 provider。不 fork 官方预设、不写入 $DSH_HOME/.agent-presets/,不修改 DSH 本体;凭据由 DSH 凭据服务写入,插件不直接写文件系统。

对接接口(资料原文):

  • 搜索:POST https://api.tavily.com/search → web_search
  • 抓取:POST https://api.firecrawl.dev/v1/scrape(返回 markdown)→ web_fetch

npm 包名:@skillre/dsh-plugin-tavily-firecrawl(当前版本 0.1.0)。Cordis 行 id:skillre-tavily-firecrawl。engines.dsh 声明范围外,资料中实际挂载验证过的 DSH 版本为 0.1.7-rc.2(2026-09-28)与 0.2.0-rc.2(2026-09-30)。

核心功能

Provider 与 bundle 行为

随包 cordis.patch.yml(经 package.json#dsh.bundle.patch 发布)会:

  1. 插入插件行 skillre-tavily-firecrawl,并把 search.searchDepth 显式设为 basic;
  2. 将 web 行的 searchProvider / fetchProvider 设为 tavily / firecrawl;
  3. 禁用 web-search-deepseek。web-fetch-http 仍注册,但 fetchProvider 已钉住,不会被选中。

多 Key 轮询与凭据

搜索侧、抓取侧各自维护 Key 池。一次调用可在配置的上限内轮换 Key;遇到 429 或额度类错误会进入可配置的冷却(含指数退避上限)。凭据解析顺序(每侧独立,资料原文):

  1. 插件行 config 中的 search.apiKeys / fetch.apiKeys(显式最高)
  2. 单 Key 写法 search.apiKey / fetch.apiKey(仍兼容)
  3. 凭据引用 TAVILY_API_KEYS / FIRECRAWL_API_KEYS(配置页保存即写入此类引用)
  4. 单 Key 引用 TAVILY_API_KEY / FIRECRAWL_API_KEY

多 Key 可用逗号、分号或空白(含换行)分隔;配置页保存后会规范为一行逗号分隔列表。配置页保存后无需重启,下一次搜索/抓取即生效;「清除已保存的密钥」只删存储值,环境变量里若仍有 Key 会继续生效。

浏览器侧 UI

仅注册 设置 → 插件 → 本 bundle 一张配置页(platform: web,槽位 plugins.bundle.config),用于填写或清除 Tavily / Firecrawl API Key。无聊天内装饰、无额外浏览器代码。

可配置项(节选)

未在 patch 里写的键沿用默认值;拼写错误或 schema 不允许的键会在加载时抛错,整行不会挂载。下表为资料中的默认值摘要:

键 默认值 说明
search.baseURL https://api.tavily.com 请求路径追加 /search
search.searchDepth basic advanced 为 2 credits
search.includeAnswer true Tavily 摘要进入结果的 content
search.timeoutMs 30000 每次尝试
fetch.baseURL https://api.firecrawl.dev 追加 /v1/scrape
fetch.maxBodyChars 200000 超出截断并标记 truncated
fetch.onlyMainContent true 只取正文
searchEnabled / fetchEnabled true false 则不注册该侧 provider

更完整的 YAML 示例与冷却、maxAttempts 等字段见 GitHub README「配置」一节。

安装与启用

交付与兼容性确认后,由用户在 DSH Desktop Client 或 Web UI 的 Plugins/插件管理 中选择来源、安装/更新并启用;不应由 agent 在用户 profile 代装。

发布且目标版本兼容、管理器确认可安装时,可输入 npm 包名:

@skillre/dsh-plugin-tavily-firecrawl@<version>

GitHub 仓库是本包支持的安装来源:git 树内带有构建产物 lib/(含 lib/client.js),从 GitHub 安装不执行构建脚本。未发布 npm 时,若管理器支持,也可提供已构建、验证可用的本地包目录或 .tgz 绝对路径。安装解析到的是某个提交 SHA;要新功能需对应提交已在 GitHub 上。

下列命令仅用于开发者自有、可丢弃的非 Desktop profile 的内环测试(须打包 tarball,不要用 dsh plugin ... add . 链源码目录):

npm install
npm run check
npm pack
dsh plugin --profile <dev-profile> add ./skillre-dsh-plugin-tavily-firecrawl-<version>.tgz
dsh --profile <dev-profile> --dump-config

测试结束须按 README 清理:停止进程,卸载本次 bundle/依赖或隔离 profile,并核验无残留。用户真实 Desktop/Web profile 的试验须事先同意,且只撤销测试新增状态。

典型用法

推荐:插件配置页填 Key

  1. 在插件管理界面安装并启用本 bundle。
  2. 打开 设置 → 插件,进入本 bundle 配置页。
  3. 在 Tavily、Firecrawl 输入框粘贴一个或多个 Key(逗号、分号或换行分隔),点「保存」。
  4. 在已启用 tool-web 的 agent 预设下,由模型调用 web_search、web_fetch;Host 会走 Tavily / Firecrawl provider。

Key 写入 DSH 凭据存储,不出现在 dsh --dump-config 的 profile 配置里。

备选:环境变量(需重启对应 DSH 进程)

进程启动时读取一次;改环境变量后需重启。下列 dsh web 仅为独立 Web UI 启动示例,Desktop Client 须核实其实际环境变量入口:

# 任选:进程环境、<调用目录>/.env、$DSH_HOME/.env
TAVILY_API_KEY=tvly-xxxx
FIRECRAWL_API_KEY=fc-xxxx
dsh web

更新:在同一 Plugins/插件管理 中选择经验证兼容的新版本。卸载与回滚见仓库 UNINSTALL.md。

适用场景与注意

适合谁:已在 DSH 中使用或计划使用 web_search / web_fetch,希望搜索走 Tavily、页面抓取走 Firecrawl(Markdown、正文裁剪),并需要用多 Key 分担限流与额度的开发者或团队。

权限与安全:插件以当前 DSH 进程权限运行;安装前应阅读源码与 MIT 许可证,并理解会向 Tavily、Firecrawl 官方 API 发送请求与 Key。本包不提供 install.sh,也不使用 --patch 叠加层。

非目标(资料原文):不提供会话级 UI;不覆盖官方预设;不修改 DSH 本体。

元数据:插件卡片标题为 Tavily Search + Firecrawl Fetch;随包 locale 目前仅 locale/en.json,卡片标题/描述在界面可能仍为英文。GitHub 仓库星标数为 0(目录页线索,以站点为准)。

结尾

@skillre/dsh-plugin-tavily-firecrawl 把 DSH ctx.web 的搜索与抓取后端替换为 Tavily + Firecrawl,并用 bundle patch 固定 provider 选择;凭据可在设置页维护且保存后即时生效。进一步了解与 issue 见 GitHub;社区目录页:

  • 目录:https://www.skillhub.cn/plugins/skillre/dsh-plugin-tavily-firecrawl
  • 仓库:https://github.com/skillre/dsh-plugin-tavily-firecrawl
羽毛球分组比赛记分
小程序二维码

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

Xiaoye