🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

Tavily 增强搜索 moguiyu/dsh-tavily

DeepSeek Harness
moguiyu17 天前有提交已提供中文文档扫描:含敏感能力

DeepSeek Harness 的可选搜索工具,由 Tavily 驱动(rc.7 插件管理):支持多 Key 轮换与故障转移、用量仪表盘、Plugins → configuration 里的设置卡片;内置 web_search 永不替换。

41.7/100
综合分
12
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add moguiyu/dsh-tavily
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · market
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 17 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-tavily-workspace(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 02:20:00

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 38 处,展示前 32 条)
  • 发起网络请求
    packages/dsh-tavily/lib/client.js:242
    const response = await fetch('/api/tavily-manager', { cache: 'no-store' })
  • 发起网络请求
    packages/dsh-tavily/lib/client.js:251
    const response = await fetch('/api/tavily-usage', { cache: 'no-store' })
  • 发起网络请求
    packages/dsh-tavily/lib/client.js:274
    const response = await fetch('/api/tavily-manager', {
  • 发起网络请求
    packages/dsh-tavily/lib/client.js:297
    const response = await fetch('/api/tavily-manager', {
  • 发起网络请求
    packages/dsh-tavily/lib/client.js:317
    const response = await fetch('/api/tavily-manager', {
  • 发起网络请求
    packages/dsh-tavily/lib/client.js:339
    const response = await fetch('/api/tavily-manager', {
  • 写入本地文件
    packages/dsh-tavily/src/backend.js:47
    writeFileSync(statePath(file), JSON.stringify(state, null, 2) + '\n', { mode: 0o600 })
  • 请求外部主机api.tavily.com
    packages/dsh-tavily/src/backend.js:78
    response = await fetch('https://api.tavily.com/usage', {
  • 发起网络请求
    packages/dsh-tavily/src/backend.js:78
    response = await fetch('https://api.tavily.com/usage', {
  • 发起网络请求
    packages/dsh-tavily/src/client.js:247
    const response = await fetch('/api/tavily-manager', { cache: 'no-store' })
  • 发起网络请求
    packages/dsh-tavily/src/client.js:256
    const response = await fetch('/api/tavily-usage', { cache: 'no-store' })
  • 发起网络请求
    packages/dsh-tavily/src/client.js:279
    const response = await fetch('/api/tavily-manager', {
  • 发起网络请求
    packages/dsh-tavily/src/client.js:302
    const response = await fetch('/api/tavily-manager', {
  • 发起网络请求
    packages/dsh-tavily/src/client.js:322
    const response = await fetch('/api/tavily-manager', {
  • 发起网络请求
    packages/dsh-tavily/src/client.js:344
    const response = await fetch('/api/tavily-manager', {
  • 读取本地文件
    packages/dsh-tavily/src/lib.js:180
    const parsed = JSON.parse(readFileSync(path, 'utf8'))
  • 发起网络请求
    packages/dsh-tavily/src/tools.js:282
    const response = await fetch(`${TAVILY_BASE_URL}/${path}`, init)
  • 读取本地文件
    packages/dsh-tavily/verify-alpha.seam.mjs:26
    if (!existsSync(home)) mkdtempSync(home)
  • 读取本地文件
    packages/dsh-tavily/verify-alpha.seam.mjs:39
    return JSON.parse(readFileSync(settingsFile, 'utf8'))
  • 写入本地文件
    packages/dsh-tavily/verify-alpha.seam.mjs:47
    writeFileSync(settingsFile, JSON.stringify(doc, null, 2))
  • 读取本地文件
    packages/dsh-tavily/verify-alpha.seam.mjs:126
    assert.equal(existsSync(join(home, 'tavily-tool.json')), true)
  • 读取本地文件
    packages/dsh-tavily/verify-alpha.seam.mjs:127
    assert.deepEqual(JSON.parse(readFileSync(join(home, 'tavily-tool.json'), 'utf8')), { enabled: false })
  • 读取本地文件
    packages/dsh-tavily/verify-alpha.seam.mjs:145
    assert.deepEqual(JSON.parse(readFileSync(join(home, 'tavily-tool.json'), 'utf8')), { enabled: true })
  • 读取本地文件
    verify-016/verify-0.1.6.seam.mjs:71
    try { return JSON.parse(readFileSync(settingsFile, 'utf8')) } catch { return {} }
  • 写入本地文件
    verify-016/verify-0.1.6.seam.mjs:76
    writeFileSync(settingsFile, JSON.stringify(doc, null, 2))
  • 读取本地文件
    verify-016/verify-0.1.6.seam.mjs:185
    const pkg = JSON.parse(readFileSync(join(repoRoot, 'packages/dsh-tavily', 'package.json'), 'utf8'))
  • 读取本地文件
    verify-rc8.seam.mjs:24
    if (!existsSync(home)) mkdtempSync(home)
  • 读取本地文件
    verify-rc8.seam.mjs:37
    return JSON.parse(readFileSync(settingsFile, 'utf8'))
  • 写入本地文件
    verify-rc8.seam.mjs:45
    writeFileSync(settingsFile, JSON.stringify(doc, null, 2))
  • 读取本地文件
    verify-rc8.seam.mjs:125
    assert.equal(existsSync(join(home, 'tavily-tool.json')), true)
  • 读取本地文件
    verify-rc8.seam.mjs:126
    assert.deepEqual(JSON.parse(readFileSync(join(home, 'tavily-tool.json'), 'utf8')), { enabled: false })
  • 读取本地文件
    verify-rc8.seam.mjs:144
    assert.deepEqual(JSON.parse(readFileSync(join(home, 'tavily-tool.json'), 'utf8')), { enabled: true })
扫描于 2026/11/3(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
涉及外部主机:api.tavily.com

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

2 张 · 点击查看大图

功能亮点

  • 多Key轮换
  • 故障转移
  • 用量仪表盘

README

由 DeepSeek 最新模型翻译生成
dsh-tavily awesome · DSH plugin 为 DeepSeek Harness(DSH)提供 Tavily 网页搜索:多 API Key、轮换与故障转移、实时用量环、extract / map / crawl 直连工具、research 综合调研报告,以及 Plugins(插件)页面上的 Key 管理卡片。 内置的 web_search 工具永不被替换:Tavily 是原生搜索的补充,而不是替代。本插件不注册任何网页搜索 provider,也不会改写 web.searchProvider。 亮点 - 🔑 多个 Tavily API Key —— 在 DSH 界面中维护一份扁平的 Key 列表。 - 🔁 Key 轮换与故障转移 —— 轮询使用;遇到 HTTP 401/429/432/433 自动换下一个 Key;负载均衡模式可按 Tavily 账号限制在途请求数。 - 📊 实时用量 —— 每个 Key 的 Tavily 用量与总计,全部服务端获取,Key 不出服务端。 - ⚡ Tavily 直连工具 —— tavily_extract 读取已知 URL 的完整内容,tavily_map 发现站点链接,tavily_crawl 抓取整站,共用同一套 Key 轮换。
展开完整文档(README 剩余 1 节)
dsh-tavily

awesome · DSH plugin

为 DeepSeek Harness(DSH)提供 Tavily 网页搜索:多 API Key、轮换与故障转移、实时用量环、extract / map / crawl 直连工具、research 综合调研报告,以及 Plugins(插件)页面上的 Key 管理卡片。

内置的 web_search 工具永不被替换:Tavily 是原生搜索的补充,而不是替代。本插件不注册任何网页搜索 provider,也不会改写 web.searchProvider。

亮点

- 🔑 多个 Tavily API Key —— 在 DSH 界面中维护一份扁平的 Key 列表。
- 🔁 Key 轮换与故障转移 —— 轮询使用;遇到 HTTP 401/429/432/433 自动换下一个 Key;负载均衡模式可按 Tavily 账号限制在途请求数。
- 📊 实时用量 —— 每个 Key 的 Tavily 用量与总计,全部服务端获取,Key 不出服务端。
- ⚡ Tavily 直连工具 —— tavily_extract 读取已知 URL 的完整内容,tavily_map 发现站点链接,tavily_crawl 抓取整站,共用同一套 Key 轮换。
- 📝 Research 综合报告 —— tavily_research 调用 Tavily Research 端点(mini/pro/auto),等待任务完成并返回带引用的综合报告;任务超时未完成时用 tavily_get_research 凭 request_id 取回。Research 的额度远高于搜索(mini 4–110、pro 15–250 额度),因此按需调用、不设默认。

安装

在 Plugins 页面安装

1. 打开 DSH 侧边栏的 Plugins(插件)页面,点击 Add plugin。
2. 填入 npm 包名 @moguiyu/dsh-tavily,或源码地址 https://github.com/moguiyu/dsh-tavily。该输入框也接受 tarball 与本机绝对路径。
3. 点击 Install,再点击 Enable now。刚装好的 bundle 默认是关闭的,需要手动启用。

随后卡片会渲染在 dsh-tavily 这个 bundle 自己的页面上 —— 位于描述与其行列表之间。

用命令行安装

该对话框接受的内容与 dsh plugin add 完全一致,两种方式等价:

从 npm 安装 —— 稳定版,市场统计以此为准
dsh plugin --profile web add @moguiyu/dsh-tavily

从仓库安装 —— 永远是最新源码
dsh plugin --profile web add github:moguiyu/dsh-tavily

--profile <name> 指定安装到哪个 profile;两种写法解析到同一个插件。

环境要求 —— DSH 目前是开发者预览版(0.1.x-rc/alpha、0.2.x-rc/alpha)。工具与 Key/用量路由已在 0.1.6-alpha.2、0.1.7-rc.2、0.2.0-rc.2 与 0.2.1-alpha 线上实测,并预期在 0.1.0-rc.7 起的每一条声明线上可用 —— peer 范围刻意比「已实测」商店矩阵更宽。卡片与 Plugins 页面的安装入口都需要 0.1.6-alpha.2 或更新版本 —— 该版本新增了 Plugins 页面并把插件配置移到那里;更早的版本上插件功能完整、可用命令行安装,只是没有卡片。npm 包名是带 scope 的 @moguiyu/dsh-tavily,不是同名的社区 dsh-tavily provider 替换插件。

兼容性 —— 0.3.x 是单一自包含包:工具、路由与卡片都在 @moguiyu/dsh-tavily 内,只使用长期稳定的 ctx.tools / ctx.webServer / ctx.credentials / ctx.systemPrompt 接缝,不再有任何按版本特性探测的代码路径。peer 范围按宿主元组逐条列出(^0.1.0-rc.7、^0.1.1-rc.1、^0.1.2-alpha.2、^0.1.3-alpha.1、^0.1.5-0、^0.1.6-0、^0.1.7-0、^0.2.0-0、^0.2.1-0),因为预发布比较符不会级联 —— 新的宿主版本线要新增比较符,而不是放宽旧的。dsh.compatibility.dshReleases 是更窄的「已实测」商店兼容矩阵:最近几条宿主线的滚动窗口,而不是历史账本。两者都由 compatibility.json 这一个文件生成,因此不会互相漂移。

包结构

只有一个包。 早期版本还发布过 @moguiyu/dsh-tavily-backend 与 @moguiyu/dsh-tool-tavily-search。自 0.3.0 起两者都并入 @moguiyu/dsh-tavily,该包已完全自包含;两个旧包已弃用,不再更新。

| 包 | 作用 |
| @moguiyu/dsh-tavily | 全部功能:tavily_search + tavily_extract / tavily_map / tavily_crawl + tavily_research / tavily_get_research、Key/用量路由,以及 Plugins 页面上的卡片 |

凭据

- TAVILY_API_KEYS —— 逗号分隔的 Key 列表;工具按它轮换,遇到 HTTP 401/429/432/433 自动重试。
- TAVILY_API_KEY —— 主 Key,会自动同步为列表中的第一个 Key。

两者均由卡片自动维护。Key 离开服务端时始终脱敏,任何状态文件都不保存 Key 内容。

Key 使用策略

- 轮流使用 —— 轮询;遇到 HTTP 401/429/432/433 就换下一个 Key。
- 用量最少优先 / 用量最多优先 —— 保存时按 Tavily 实时用量重排 Key。
- 负载均衡(Load balance) —— 每个 Tavily 账号同时最多 N 个请求在途(默认 1),并发调用在账号之间分散,因此单个免费账号不会被并发打爆。Tavily 的 100 请求/分钟是按账号计算的,而多把 Key 可能属于同一个账号;账号归组由各 Key 在 /usage 返回的 account 数据推断,卡片 Account 列可手动固定或单独拆分某个 Key。

无法服务的 Key 会被跳过而不是让调用失败:401、429、432(套餐额度用尽)、433(按量付费额度用尽)都会自动切换到下一个 Key,且单次调用中每把 Key 最多尝试一次。

Tavily 工具

tavily_search 以及直连工具与 research 组合,均独立于 web_search:

- tavily_search —— 完整搜索能力(search_depth、topic、days、域名过滤、include_answer、include_raw_content);
- tavily_extract —— 抓取已知 HTTP(S) URL 的完整内容;
- tavily_map —— 只发现站点链接,不抓取页面内容;
- tavily_crawl —— 抓取整站并返回各页面提取内容;
- tavily_research —— 提交 Tavily Research 任务并等待带引用的综合报告(model:mini / pro / auto,另有 citation_format、output_length、域名过滤与可选的 output_schema);
- tavily_get_research —— 当任务超出首次调用的等待时间时,用 request_id 取回结果。

tavily_research 会轮询任务并在完成时返回报告;timeout_seconds: 0 表示只排队并立即返回 id。mini 适合窄问题(实测约 11 秒、9 额度),pro 适合宽问题(数分钟)。由于 research 按次动态计费且远高于搜索(mini 4–110、pro 15–250 额度),它是每次调用的选择,而不是默认行为。

compose 该插件即注册这些工具,没有单独的工具开关。若要关闭,请用其 Plugins 页面上的开关停用整个插件 —— 无论开关如何,内置 web_search 都保留自己的 provider,其 schema 也不会被改动。

状态文件

- ~/.dsh/tavily-manager.json —— Key 保存日期、策略、每账号并发上限与账号归组(仅脱敏名称)

权限 600,不保存任何密钥。

开发

pnpm install
pnpm test
pnpm build

许可证

MIT
预览分享卡片长什么样 ↓moguiyu/dsh-tavily
分享 · DeepSeek Harness Hub
moguiyu/dsh-tavily

DeepSeek Harness 的可选搜索工具,由 Tavily 驱动(rc.7 插件管理):支持多 Key 轮换与故障转移、用量仪表盘、Plugins → configuration 里的设置卡片;内置 web_search 永不替换。

回到顶部