dsh-web-search-tavily:为 DeepSeek Harness 增加 Tavily 搜索与后端切换

前言

在 DeepSeek Harness(dsh)中,web-search 能力通过 provider 注册到 ctx.web 这个 seam。若希望在 Tavily 与 DeepSeek search 之间切换,直接修改 web 行会触发生命周期上的副作用:改变 web 行配置会重启 dsh-web 插件,并释放已注册的 provider。

dsh-web-search-tavily 是一个 Tavily-backed search provider bundle,由 nitrazepam01 维护,为 dsh 注册 Tavily backend,并提供一个可热切换的 backend selector。下面介绍它解决的问题、安装方式、配置方法和注意事项。

这是什么

dsh-web-search-tavily 是一个用于 DeepSeek Harness 的插件包,核心目标是:

  • ctx.web web-search seam 注册 Tavily backend;
  • web 行后方放置 search-switch 这个委托 provider;
  • 让后端选择保存在 settings 层,从而支持 Tavily / DeepSeek search 的热切换。

该插件许可证为 MIT。

核心功能

Tavily provider

Tavily provider 调用 POST /search,并将结果规范为:

{ url, title, snippet, publishedAt }

当 backend 选择为 tavily 时,结果携带 content excerpts。当 backend 选择为 deepseek-official 时,会委托到随包提供的 web-search-deepseek provider,结果不带 excerpts。

热切换 backend selector

search-switch 是一个 delegating provider,它位于 web 行之后,并在每次搜索时从 web-search settings section 解析当前 backend。

保存 web-search section 后即时生效:

  • no restart;
  • no loader-row reload。

之所以采用委托 provider,而不是直接改 web 行,是因为修改 web 行配置会重启 dsh-web 插件,并释放所有已注册 provider。search-switch 将选择保留在 settings 层,避开这个副作用。

凭证解析链

凭证解析链为:

literal apiKey -> credentials service -> launch environment

其中 apiKey 是 literal key,属于 secret,通过 credentials domain 存储;apiKeyEnv 的默认值是 TAVILY_API_KEY

错误类型

插件支持完整的 WebError taxonomy,包括:

  • WEB_PROVIDER_ERROR
  • WEB_PROVIDER_CREDENTIAL_MISSING
  • WEB_ABORTED

安装与启用

从 git 安装:

dsh plugin --profile web add github:nitrazepam01/dsh-web-search-tavily

按名称安装:

dsh plugin --profile web add dsh-web-search-tavily

从本地 checkout 安装:

dsh plugin --profile web add ./dsh-web-search-tavily

安装完成后,需要重启 dsh web,因为 bundle layers are frozen at boot。

卸载:

dsh plugin --profile web remove dsh-web-search-tavily

资料说明该插件是 plain JS,无 build step,无 allowBuilds 要求。

典型用法

1. 配置凭证

将 Tavily key 存入 $DSH_HOME/.credentials.yaml

TAVILY_API_KEY: tvly-your-key

这一步是为 credential service 提供可用的 TAVILY_API_KEY,供凭证解析链使用。

2. 选择 backend

$DSH_HOME/settings.yamlweb-search section 中设置 backend:

web-search:
  backend: tavily            # tavily | deepseek-official

可选值为:

  • tavily:使用本插件的 Tavily provider,结果带 content excerpts;
  • deepseek-official:委托到 shipped web-search-deepseek provider,结果不带 excerpts。

保存该 section 后即时生效,无需重启,也无需 loader-row reload。

3. Tavily options

Tavily options 位于 web-search-tavily section,包含以下配置项:

web-search-tavily:
  apiKey:
  apiKeyEnv: TAVILY_API_KEY
  baseURL:
  maxResults:

字段说明:

  • apiKey:literal key,属于 secret,通过 credentials domain 存储;
  • apiKeyEnv:credential reference name,默认值为 TAVILY_API_KEY
  • baseURL:Tavily REST endpoint;
  • maxResults:每次搜索的最大结果数。

4. 检查组合配置

不启动服务,只查看组合后的配置:

dsh --profile web --dump-config

这一步用于确认 web-searchweb-search-tavily 等 section 是否按预期进入组合配置。

适用场景与注意

适合以下情况:

  • 使用 dsh,希望为 ctx.web 增加 Tavily 搜索;
  • 希望在 tavilydeepseek-official 之间切换 backend;
  • 希望切换 backend 时不重启、不触发 loader-row reload;
  • 希望凭证通过 apiKey、credentials service 或 launch environment 解析。

注意事项:

  • 安装后必须重启 dsh web,因为 bundle layers are frozen at boot;
  • apiKey 是 secret,不应随意提交到仓库;
  • 改变 web 行配置会重启 dsh-web 插件,并释放已注册 provider;
  • 不要把插件目录理解为 DeepSeek / 幻方官方应用商店;本文只讨论 dsh 插件本身;
  • 插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。

链接

GitHub 仓库:

https://github.com/nitrazepam01/dsh-web-search-tavily

目录页 URL 未在已核实资料中提供,本文不给出。

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

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

小夜