前言¶
在 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.webweb-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_ERRORWEB_PROVIDER_CREDENTIAL_MISSINGWEB_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.yaml 的 web-search section 中设置 backend:
web-search:
backend: tavily # tavily | deepseek-official
可选值为:
tavily:使用本插件的 Tavily provider,结果带 content excerpts;deepseek-official:委托到 shippedweb-search-deepseekprovider,结果不带 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-search、web-search-tavily 等 section 是否按预期进入组合配置。
适用场景与注意¶
适合以下情况:
- 使用
dsh,希望为ctx.web增加 Tavily 搜索; - 希望在
tavily与deepseek-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 未在已核实资料中提供,本文不给出。