Back to home@my-dsh

dsh-web-search-tavily

Tavily web-search provider plugin for DeepSeek Harness (dsh) — registers into ctx.web so the model-facing web_search tool uses Tavily

Stars
1
Language
JavaScript
Created
Aug 30, 2026
Updated
Aug 30, 2026
GitHub repo

Introduction

dsh-web-search-tavily

English | 中文

DeepSeek Harness 的 Tavily 联网搜索插件。

该插件向 web 能力缝(ctx.web)注册一个 Tavily 后端的搜索 provider,并把 web_search 工具的搜索选择切到它。注册后,模型每次调用 web_search 都会通过 Tavily REST API(POST /search)执行联网检索,返回标题、链接和页面摘要。

为什么需要它

DSH 自带的搜索 provider 是 deepseek-official,它通过 DeepSeek API 的服务端检索执行搜索,消耗的是模型 API 的计费额度。Tavily 是独立的搜索 API,有自己的免费/廉价配额(basic 档每次 1 credit),适合把「聊天计费」和「联网搜索用量」分开,或单独控制搜索配额。

安装

# 从 GitHub 直装(需要 git)
dsh plugin --profile <name> add github:my-dsh/dsh-web-search-tavily

# 发布到 npm 后也可以
dsh plugin --profile <name> add @my-dsh/dsh-web-search-tavily

包声明了 dsh.bundle,安装后自动加入 profile 的 bundle 层栈,重启 DSH 生效。

前置条件

  • 一个 web surface profile(如 dsh web 使用的默认 profile)。
  • Tavily API key,二选一:
    • 存入 DSH 凭据(推荐):凭据名 TAVILY_API_KEY
    • 或在启动 DSH 的环境里 export TAVILY_API_KEY=tvly-...

key 按每次搜索解析一次(凭据服务优先,回落到启动环境),从不缓存、从不落盘到配置文件。

bundle 补丁做了什么

cordis.patch.yml 两行:

  1. 插入 @my-dsh/dsh-web-search-tavily——注册 id 为 tavily 的搜索 provider;
  2. web 行的 searchProvider 改成 tavily。补丁是整体替换 config,所以同时复述了 dsh-base 自带的 fetchProvider: http(否则匿名 fetch 会被关掉)。

配置

全部可选。通过用户 patch 层(~/.dsh/profiles/<name>/cordis.patch.yml)覆盖:

- id: web-search-tavily
  name: '@my-dsh/dsh-web-search-tavily'
  config:
    # 搜索深度:basic(1 credit,默认)或 advanced(2 credits)
    searchDepth: advanced
    # 无 maxResults 的请求向 Tavily 要多少条结果(默认 8)
    maxResults: 5
    # 单次请求超时毫秒(默认 30000)
    timeoutMs: 20000
    # API key。留空走凭据/环境解析(推荐);填了则字面量优先,密钥会进入配置文件
    # apiKey: tvly-...
字段默认说明
apiKey字面量 key;优先于凭据解析。建议留空
apiKeyEnvTAVILY_API_KEY凭据名 / 环境变量名
baseURLhttps://api.tavily.comREST 端点,/search 会拼在后面
searchDepthbasicTavily search_depth
maxResults8默认结果数上限
timeoutMs30000每次请求超时

设置页修改即时生效:provider 按搜索快照当前配置段,一次搜索不会混用两个版本的配置。

行为细节

  • 凭据解析失败、Tavily 返回错误、网络失败都以 DSH 标准 WebError 码上抛(WEB_PROVIDER_CREDENTIAL_MISSING / WEB_PROVIDER_ERROR / WEB_ABORTED),模型收到的错误文本与自带 provider 一致。
  • 去重:Tavily 返回的重复 URL 会按序去重。
  • 可移植源结构:结果映射为 { url, title?, snippet?, publishedAt? },与 web 缝的其他 provider 一致。

源码布局

dsh-web-search-tavily/
├── src/
│   ├── index.js    # Cordis 函数插件:Config schema + 注册进 ctx.web
│   └── provider.js # TavilySearchProvider:REST 映射、错误码、去重、超时
├── cordis.patch.yml  # bundle 补丁:插入 provider + 切换 web.searchProvider
└── package.json      # dsh.bundle 声明 + peer 依赖

纯 ESM JavaScript,无构建步骤,TypeScript 类型通过 JSDoc 标注。

License

MIT