DeepSeek Harness 联网兜底链插件

前言

DeepSeek Harness(DSH)的 ctx.web 能力是智能体开发中常用的一环,但内置的 web_fetch 在目标站点不可达或被反爬时统一返回 HTTP 404,搜索则是一次完整的模型调用,且官方 Exa provider 使用精确 peer 版本,DSH 小版本升级就会在启动时被禁用。

@wjunhere/dsh-web-providers 针对这些问题提供了一套解决方案,通过构建有序的兜底链,让模型无感知地自动切换后端。

插件定位

这是一个为 DeepSeek Harness 提供的联网工具插件,维护者为 wjunhere。它为 DSH 的 ctx.web 能力提供搜索与抓取 provider,内部采用有序兜底链机制,支持 Exa/Tavily/Jina 三家后端的组合使用。

核心价值在于:对外仍是单个 provider,web_search / web_fetch 工具不变;模型无感知;前一后端失败时自动换下一个。

核心功能

搜索链

搜索链的顺序为:exa → tavily → jina-search,注册为 provider id dsh-search。

  • Exa 返回 sources[](无 highlight 的结果被丢弃)
  • Tavily 返回 title/url/content(content 截 500 字符当 snippet)
  • Jina Search 返回 title/url/description

任一成功即返回,全部失败时报 WEB_PROVIDER_ERROR 并附每段失败原因。

抓取链

抓取链的顺序为:jina → tavily extract,注册为 provider id dsh-fetch。

  • Jina 返回 { url, statusCode: 200, body: { kind: 'text', content } },正文前带标题
  • 失败(非 2xx、空正文、正文过短、拦截页)后回退 Tavily Extract 的 raw_content

两链都遵守调用方 AbortSignal,每段有独立超时。

安装与启用

在 DSH profile 目录(例如 ~/.dsh/profiles/<name>)安装:

npm install @wjunhere/dsh-web-providers

把包加进 package.json 的 dsh.profile.bundles:

{
  "dsh": { "profile": { "bundles": ["...", "@wjunhere/dsh-web-providers"] } }
}

再在 profile 的 cordis.patch.yml 里 pin 两个 provider:

- id: web
  name: "@deepseek-ai/dsh-web"
  config:
    searchProvider: dsh-search
    fetchProvider: dsh-fetch

重启 DSH 生效。

配置说明

凭据默认从启动环境的 EXA_API_KEY / TAVILY_API_KEY / JINA_API_KEY 读取,也可以写在 config 里(优先级高于环境变量)。

核心配置项:

- insert:
    - id: web-providers
      name: '@wjunhere/dsh-web-providers'
      config:
        search:
          order: [exa, tavily, jina]   # 搜索链顺序
        fetch:
          order: [jina, tavily]        # 抓取链顺序
        exa:
          apiKey: ''                   # 空则读 EXA_API_KEY
          baseURL: https://api.exa.ai
          proxyUrl: ''
          searchType: auto             # auto / keyword / neural
          highlightsPerResult: 1
          timeoutMs: 20000
        tavily:
          apiKey: ''                   # 空则读 TAVILY_API_KEY
          baseURL: https://api.tavily.com
          proxyUrl: ''                 # 大陆网络通常需要
          searchDepth: basic           # basic / advanced
          extractDepth: basic
          numResults: 5
          maxContentChars: 100000
          timeoutMs: 20000
        jina:
          apiKey: ''                   # 空则读 JINA_API_KEY
          baseURL: https://r.jina.ai
          searchBaseURL: https://s.jina.ai
          proxyUrl: ''
          timeoutMs: 30000
          maxContentChars: 100000
          minContentChars: 50
          allowAnonymous: false

适用场景与注意

适合需要增强 DSH 联网能力的开发者,特别是:

  • 目标站点经常返回 404 或反爬,需要多后端兜底
  • 需要更精准的英文技术内容检索(Exa 语义召回)
  • 希望避免因 DSH 版本升级导致官方 provider 被禁用

注意:插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。

限制

  • Tavily Extract 对反爬站点同样可能失败(如 Reddit);这类只能走浏览器路径。
  • Exa 需要 API key;Jina 匿名模式只有 20 RPM(带 key 500 RPM)。

总结

@wjunhere/dsh-web-providers 通过构建有序的搜索与抓取兜底链,为 DeepSeek Harness 的 ctx.web 能力提供了更健壮的联网方案。它让模型无感知地自动切换后端,解决了目标站点不可达、反爬、版本依赖等问题,适合需要增强 DSH 联网能力的开发者。

插件目录页:https://www.skillhub.cn/plugins/wjunhere/dsh-web-providers
GitHub:https://github.com/wjunhere/dsh-web-providers

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

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

Xiaoye