dsh-web-search-tavily:用 Tavily 替换 DSH 内置联网搜索,默认免 key

前言

DeepSeek Harness(DSH)里,智能体要通过 ctx.web 做联网搜索时,默认会走内置的 web-search-deepseek:它调用公网 api.deepseek.com 上的 web_search_20250305 工具,并且必须配置一把有效的公网 DeepSeek API key。实际部署里,对话模型经常走内网网关,公网 key 失效或未配置时,搜索只会返回 HTTP 401,对话里表现为「搜不了网」。社区插件 dsh-web-search-tavily(维护者 liufeicc,分类:联网工具)把 Tavily 接到同一套 web 接缝上,默认 keyless,不注册账号、不写 API key 也能先试;需要稳定用量时再切到官方免费 key,配置不必改代码路径。

这是什么

dsh-web-search-tavily 是 Tavily 的 WebSearchProvider 实现:只负责搜索,网页抓取仍由内置 http 的 fetchProvider 承担。它替换的是依赖公网 DeepSeek API key 的内置搜索 provider,而不是整包重写 ctx.web。

项目 说明
目录页 https://www.skillhub.cn/plugins/liufeicc/dsh-web-search-tavily
源码 https://github.com/liufeicc/dsh-web-search-tavily
包名 @local/dsh-web-search-tavily(本地 link: 引用)
许可证 MIT(见仓库 package.json)

插件在 DSH 进程内以当前 profile 的权限运行;安装前建议自行浏览源码与许可证。

为什么需要它:内置搜索与 keyless 路径

内置 web-search-deepseek 在鉴权失败时典型报错为:

DeepSeek API error (HTTP 401): Authentication Fails

本插件走 Tavily API。官方提供 keyless 通道,请求时加上请求头即可,返回 schema 与带 key 时一致:

X-Tavily-Access-Mode: keyless

官方将 keyless 定位为 exploration / light use,有速率上限;触顶后注册免费 key(README 写明约 1000 credits/月、无需信用卡),把 accessMode 改为 api-key 并配置 key,无需改插件业务代码。

核心功能

搜索接缝

  • 实现 DSH WebSearchProvider,对接 searchProvider: tavily。
  • 单次结果条数、搜索深度、超时等可在 profile 的插件 config 里调节(见下节)。
  • 返回的 content 摘要截断到 600 字符,避免占满上下文;需要正文可继续用 web_fetch(须保留 fetchProvider: http)。

超时与取消(两道保险)

DSH 的 timeout-policy 是协作式:只 abort 一个 AbortSignal,下游未接力时会一直挂起。本插件合并调用方信号与本地硬超时:

AbortSignal.any([callerSignal, AbortSignal.timeout(timeoutMs)])
  • callerSignal:用户点停止,或工具层 60s 预算;
  • AbortSignal.timeout(...):插件本地上限(默认 timeoutMs 20000)。

README 记载:取消约 513ms 返回 WEB_ABORTED;1s 硬超时约 1023ms 返回 WEB_PROVIDER_ERROR。即使上层取消链路断了,单次搜索也会在 timeoutMs 内结束并返回明确错误。

已知限制(README)

  • keyless 有速率上限,官方未给具体数字;高频请用免费 key。
  • 仅搜索,不实现抓取;web_fetch 依赖内置 http provider。

配置项

在 profile 的 cordis.patch.yml 里,给插件行写 config(字段以 README 为准):

字段 默认值 说明
accessMode keyless keyless 或 api-key
apiKey — 正式 key;仅 api-key 模式
apiKeyEnv TAVILY_API_KEY apiKey 未配置时从该环境变量读取
baseURL https://api.tavily.com 可指向代理或自建网关
searchDepth basic basic = 1 credit/次;advanced = 2 credits/次
timeoutMs 20000 本地硬超时(毫秒)
maxResults 8 单次搜索来源上限

安装与启用

官方 README 未提供 dsh plugin add github:... 一类命令,而是 本地目录 + link: 依赖 + Cordis patch。下面步骤与仓库一致,路径请换成你的环境。

  1. 将仓库放到固定目录,例如 $HOME/data/claude-workspace/dsh/dsh-web-search-tavily/。

  2. 在 profile 的 package.json 增加依赖(路径改为绝对路径):

"@local/dsh-web-search-tavily": "link:/absolute/path/to/dsh-web-search-tavily"
  1. 在 profile 的 cordis.patch.yml 末尾追加:
- insert:
    - id: web-search-tavily
      name: '@local/dsh-web-search-tavily'
- id: web
  config:
    searchProvider: tavily
    fetchProvider: http

- id: web 表示覆盖整行、config 整体替换。searchProvider 与 fetchProvider 都要写全;只写 searchProvider 会抹掉 fetchProvider,连带 web_fetch 失效。

  1. profile 若为 patchReload: live,改完 patch 即热加载,无需重启 dsh。

peer 依赖与插件目录里的 node_modules

插件 import @deepseek-ai/schemastery 与 @deepseek-ai/dsh-web。profile 通过 link: 引用时,pnpm 不会在插件目录安装 peer,Node 从插件真实路径向上解析可能 ERR_MODULE_NOT_FOUND。仓库说明:在插件目录用符号链接指向 $DSH_HOME/profiles/node_modules/@deepseek-ai/ 下的对应包;换 DSH_HOME 或升级 DSH 后若报错,重建链接即可。

典型用法

启用后,智能体侧仍通过 DSH 统一的 web 工具使用搜索,无需为 Tavily 单独写调用代码。运维侧常见做法是:

  1. 先用默认 accessMode: keyless 验证接缝与超时行为;
  2. 遇到速率限制时,注册 Tavily 免费 key,设 accessMode: api-key,配置 apiKey 或环境变量 TAVILY_API_KEY;
  3. 内网需出网代理时,调整 baseURL;
  4. 对实时性要求高的任务,酌情调小 timeoutMs,并确认取消能较快得到 WEB_ABORTED。

摘要被截断时,对命中 URL 再发起 web_fetch(依赖上节保留的 fetchProvider: http)。

适用场景与注意

适合谁: 已用 DSH 做智能体或自动化,聊天模型走内网或不想维护公网 DeepSeek key,但仍需要联网检索;愿意用社区「一切皆插件」方式改 profile,而不是改 DSH 核心。

注意:

  • 插件与 profile 同进程、同权限;安装前核对 GitHub 源码与 MIT 许可证。
  • 社区目录站点(如 skillhub.cn)与 DeepSeek / 幻方无官方从属关系,本文档描述的是社区维护的联网工具插件,非官方应用商店条目。
  • GitHub 公开星标为 0(截至撰写时线索);功能事实以 README 与 package.json 为准。

结尾

dsh-web-search-tavily 把 Tavily 接到 DSH 的 ctx.web 搜索接缝:默认 keyless、可渐进升级到 API key,并用 AbortSignal.any 补上本地硬超时,缓解「点停止仍转圈」这类协作取消断链问题。按 README 完成 link: 安装与 cordis.patch.yml 后,即可在不依赖公网 DeepSeek 搜索 key 的前提下恢复联网检索。

  • 目录页:https://www.skillhub.cn/plugins/liufeicc/dsh-web-search-tavily
  • 源码:https://github.com/liufeicc/dsh-web-search-tavily
羽毛球分组比赛记分
小程序二维码

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

小夜