dsh-web-search-plus:DSH 网页搜索的优先级链与 Tavily 多密钥轮换

前言

在 DeepSeek Harness(DSH)里,web_search 依赖 ctx.web 这一接缝选定的搜索提供方。接缝的规则很硬:配置了某个 provider id 就只用那一个,失败就是失败;未配置 id 且多个提供方可用时会抛出 WEB_PROVIDER_AMBIGUOUS。没有内置的优先级链,也没有「第一个挂了换第二个」的回退。

若你同时配置了 Tavily 与 DeepSeek 原生搜索,或希望用多把 Tavily 密钥分摊免费额度,官方接缝本身做不到排序与轮换。dsh-web-search-plus(社区目录名:网页搜索++)由 polan-prologue 维护,分类为联网工具。它注册单一 provider web-search-plus,在内部串联 Tavily 与 DeepSeek 原生节点,并支持 Tavily 侧多密钥轮换与失败回退。

这是什么

dsh-web-search-plus 是 DSH 的网页搜索增强插件:在 Tavily 与 DeepSeek 原生搜索之间自由排序,前一个失败(或按配置把空结果视为失败)时自动尝试下一个;Tavily 侧最多 20 个密钥槽位轮换,遇 429 或额度用尽会冷却并切到下一槽。

DeepSeek 节点复用官方 provider 实例,密钥、账号 token、端点与用量限制仍来自 Settings → Web search,不重复实现上游逻辑。

调用关系可概括为:

web_search 工具
   └─ ctx.web(固定为 web-search-plus)
        ├─ 1. Tavily            → 在配置的密钥槽间轮换
        └─ 2. DeepSeek native   → 复用官方 provider 实例

核心功能

有序回退

在插件页 Priority 卡片中调整链顺序;第一个成功返回的节点 wins,后续不再调用。可通过 fallbackOnEmpty 决定「空结果」是否算作失败并继续链。

Tavily 多密钥与状态

最多 20 个 Tavily 密钥槽,按 tavilyKeyRefs 顺序轮换。限速(429)或配额耗尽的密钥进入冷却,链自动尝试下一槽。每个槽显示实时状态(ready / invalid / cooling down),当前使用的槽会标记。

Tavily keys 卡片支持保存、清除、移除、新增槽位、重置冷却;Status 卡片可一键查询各槽当前 plan 用量。

接管与交还

在 Plugins → 网页搜索++ 点击 Take over 后,接缝使用本插件的链。Hand back to official search 会把 web 行写回 deepseek-official,链不再被咨询。页面上的 Try one search 探测与真实接管状态一致,不会在接缝指向别处时误报链已执行。

密钥与 UI

密钥经 ctx.credentials 写入,不进 settings 文件、不进 snapshot 响应、不进日志。列表接口不返回密钥明文;需要时可经 eye 按钮通过仅 loopback、带 no-store 的路由单次 reveal 一个槽。管理路由仅接受 loopback,并对 Origin、Sec-Fetch-Site、写请求的 Content-Type 等做了约束。界面随 DSH 语言在中文/英文间切换。

链行为摘要

情况 结果
首节点成功 返回该结果,不调用后续节点
首节点抛错 记录原因,执行下一节点
节点未注册 记为 not registered,执行下一节点
调用方取消 立即传播,不会继续回退
全部失败 WEB_SEARCH_CHAIN_EXHAUSTED,每个节点一行原因

安装与启用

需要 dsh 0.1.0 或更新版本。插件通过 ctx.web 接缝与 webServer 前缀路由工作;宿主过旧时不会注册并在日志中说明原因。Node 引擎要求 >=20(见 package 元数据)。

从 npm 安装(README 原文命令):

dsh plugin --profile desktop add dsh-web-search-plus

安装后刷新浏览器一次,打开 Plugins → 网页搜索++,点击 Take over。

若需固定 Git 标签而非 npm 发布版,README 给出:

dsh plugin --profile desktop add github:polan-prologue/dsh-web-search-plus#v0.1.2

配置与管理

选项写在 profile 的 cordis.patch.yml 插件行,也可在插件页四张卡片中编辑:Priority(顺序与是否启用链)、Tavily keys、Tavily options、Status(接管状态、可用性、探测搜索、用量查询)。无体验平台时会回退到内核 Built-in plugins 页。

Key 默认值 含义
priority [tavily, deepseek-official] 链顺序
tavilyKeyRefs [TAVILY_API_KEY] 凭证引用,轮换顺序
tavilyBaseURL https://api.tavily.com 端点(自动追加 /search 与 /usage)
tavilyMaxResults 8 每次搜索结果数(1–20)
tavilySearchDepth basic basic / fast / ultra-fast / advanced
tavilyIncludeAnswer true 是否向 Tavily 请求 LLM 摘要
tavilyTimeoutMs 30000 单次请求超时
tavilyRateLimitCooldownMs 60000 429 后冷却时间
fallbackOnEmpty false 空结果是否视为失败并继续链

Tavily 免费档按账户计量,多密钥只有来自不同账户时才能分摊额度;advanced 深度消耗双倍 credits。接缝仍只选一个 provider id——本插件即该 id,排序是插件内部逻辑,不是接缝自带能力。部分构建上修改 web 行的 provider 需要重启宿主,页面会提示而非静默失败。

典型用法

  1. 安装插件并刷新浏览器。
  2. 在 Tavily keys 中配置一个或多个凭证引用(默认 TAVILY_API_KEY)。
  3. 在 Priority 中把 Tavily 与 deepseek-official 拖到期望顺序;按需打开链总开关与 fallbackOnEmpty(在配置或 Tavily options 相关项中)。
  4. 点击 Take over,在 Status 用 Try one search 验证链是否按预期工作;需要时用 fetch per-key usage 查看各 Tavily 槽用量。
  5. 不再使用链时,选择 Hand back to official search 交还官方搜索。

开发侧自测(README):

npm test          # 238 个单元测试,无网络、无密钥
npm run test:live # 使用真实密钥做 live 搜索

适用场景与注意

适合:已在 DSH desktop profile 使用 web_search,希望 Tavily 与 DeepSeek 原生搜索可排序、可回退;或有多把 Tavily 密钥、需要在限速与额度之间自动切换的用户。

注意:

  • 插件以当前 dsh 进程权限 运行,安装前请自行查看 GitHub 仓库 源码与 MIT 许可证。
  • DSH 社区插件目录(如 SkillHub 条目)为独立生态站点,与 DeepSeek / 幻方无官方从属关系;「一切皆插件」是 DSH 的产品思路,本文介绍的是社区维护的联网工具类插件。
  • Tavily 侧能力受 Tavily 账户与 API 策略约束;DeepSeek 原生节点行为随 Settings → Web search 与上游变更而变,本插件刻意复用官方实例以降低漂移。

结尾

dsh-web-search-plus 把 DSH 网页搜索从「接缝只能钉死一个提供方」扩展为「单 provider 内的 Tavily ↔ DeepSeek 优先级链 + Tavily 多密钥轮换」,并在插件页完成接管、交还与探测,密钥留在凭证域。

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

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

小夜