dsh-deepseek-search:用 DeepSeek Search / Fetch API 接入 DSH 网页能力

前言

在 DeepSeek Harness(DSH)里做联网智能体时,模型侧的 web_search、web_fetch 通常由 dsh-tool-web 定义 schema、选择 provider 并渲染结果;真正发请求的是挂在 ctx.web seam 上的各个后端。DSH 自带 web-search-deepseek(provider id 为 deepseek-official)走 Anthropic 兼容接口和原生 web_search 工具,但不提供抓取 provider。若你希望搜索与抓取都走 DeepSeek 原生的 POST /v1/tools/search 与 POST /v1/tools/fetch,并由服务方把页面抽成 Markdown 再返回,就需要单独的后端实现。下面介绍社区插件 dsh-deepseek-search(维护者 zou-hong-run),它在 ctx.web 上注册搜索与抓取两个 provider,本包只负责这两个后端,不自带模型工具。

这是什么

dsh-deepseek-search 是第三方 MIT 许可的 DSH 插件(当前包版本 0.1.0),分类为联网工具。它在 ctx.web seam 上注册网页搜索和网页抓取两个 provider,后端调用 DeepSeek 原生的 Search / Fetch JSON API。工具名仍是 harness 侧的 web_search / web_fetch,schema、provider 选择与结果展示仍由 @deepseek-ai/dsh-web(dsh-tool-web)负责;安装后通过 bundle patch 把 searchProvider 与 fetchProvider 都指向同一 id:deepseek-search。

核心功能

搜索与抓取后端

  • 搜索 provider:请求 POST /v1/tools/search,把响应映射为 seam 所需的 sources(url、title、snippet、publishedAt)。summary 映射为 snippet(缺失时回退到 snippet),date 映射为 publishedAt。
  • 抓取 provider:请求 POST /v1/tools/fetch,返回 text 类型正文,内容为服务方抽取的 Markdown({ kind: 'text', content })。
  • 同一 provider id:两类能力都注册为 deepseek-search;包内 cordis.patch.yml 会把 web 行的 searchProvider 与 fetchProvider 一并指向它。

凭据、重试与 I/O

凭据在加载时按顺序解析一次:插件配置 apiKey → 环境变量 DEEPSEEK_SEARCH_API_KEY → DEEPSEEK_API_KEY;不读磁盘、不写日志。available() 仅做本地检查(key 非空且 baseURL 为合法 http/https),不发起网络请求。

对 408、429、500、502、503、504 做指数退避重试,并尊重 Retry-After(上限 8 秒)。响应 seam 传入的 AbortSignal,取消后以 WEB_ABORTED 结束。原始响应上限 8 MiB,解压后 16 MiB;按魔数识别 gzip/zlib,避免不同 undici 版本下 response.json() 异常。

与官方 deepseek-official 的差异

deepseek-official(DSH 自带) 本插件
搜索后端 Anthropic 兼容的 web_search 工具 原生 POST /v1/tools/search
结构化字段 工具块中的 sources 标题、URL、summary/snippet、日期
抓取 provider 无 原生 POST /v1/tools/fetch
模型回合 有 无,只做检索

两者可共存;最终用哪个由 bundle patch 决定。选用本插件的常见理由是抓取:页面由 DeepSeek 抽取后以 Markdown 返回,而不是原始 HTML。插件只做检索,不运行模型回合,也不生成答案文本;搜索侧服务方生成的 content(答案)不会经 seam 返回。

环境要求

  • DeepSeek Harness 0.2.1-rc.2(peer:@deepseek-ai/dsh-web、@deepseek-ai/dsh-launch-environment)。
  • Node.js 24+。DSH 0.2.1 的 CLI 使用 import.meta.main,Node 22 无此特性时 CLI 可能静默退出。
  • 可访问 /v1/tools/search 与 /v1/tools/fetch 的 DeepSeek API key;调用由 DeepSeek 计费。

安装与启用

插件以当前 dsh 进程权限运行,安装前请自行查看源码与 MIT 许可证。

安装

从 npm(发布后):

dsh plugin --profile web add dsh-deepseek-search

从 GitHub:

dsh plugin --profile web add github:zou-hong-run/dsh-deepseek-search

从本地目录(示例路径按你的环境替换):

dsh plugin --profile web add link:C:/path/to/dsh-deepseek-search

dsh plugin 会把参数转发给 profile 目录里的 pnpm,并把包加入 dsh.profile.bundles;注册与改写 web 行由包内 bundle patch 完成。

安装后重启 profile:

dsh web

验证配置

dsh --profile web --dump-config | grep -A4 -- '- id: web'

应看到 searchProvider 与 fetchProvider 均为 deepseek-search,例如:

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

之后在会话里调用 web_search 或 web_fetch 即可;工具仍由 dsh-tool-web 提供,本插件没有单独的模型工具名。

凭据与配置

凭据

启动环境示例:

export DEEPSEEK_API_KEY=sk-...
dsh web

或在 $DSH_HOME/cordis.patch.yml 覆盖插件条目:

- id: dsh-deepseek-search
  config:
    apiKey: sk-...

未配置 key 时,显式调用 search()/fetch() 会报 WEB_PROVIDER_CREDENTIAL_MISSING;seam 侧可能返回 WEB_PROVIDER_CONFIGURED_UNAVAILABLE 或 WEB_PROVIDER_UNAVAILABLE。

配置项

键 默认值 作用
apiKey "" 显式凭据,优先于环境变量
baseURL https://api.deepseek.com 基地址,自动拼接 /v1/tools/search 与 /v1/tools/fetch
count 10 调用方未传 maxResults 时的默认结果数
maxRetries 2 首次尝试之后的重试次数
retryDelayMs 800 指数退避基础延迟

覆盖示例:

- id: dsh-deepseek-search
  config:
    baseURL: https://api.deepseek.com
    count: 5
    maxRetries: 1

request.maxResults 会作为 API 的 count 发送,并限制在上限 50 以内。bundle patch 会整行替换 web 的 config;若还需保留 web 行上的其他键,请在用户 patch 层一并写回(用户 patch 在 bundle 之后应用)。

典型用法

安装、配置 key 并执行 dsh web 后,在 harness 会话中像使用其他 web provider 一样调用 web_search 与 web_fetch,无需本插件提供的额外工具名。抓取结果中 seam 的 WebFetchResult 无标题字段,抽取出的 title 会被丢弃;statusCode 固定为 200(表示 DeepSeek 抽取状态,非源站 HTTP 状态)。

适用场景与注意

适合:已在 DSH web profile 上使用 dsh-tool-web,希望搜索与抓取统一走 DeepSeek 原生 Search/Fetch JSON API,且需要 fetch provider(Markdown 正文)的场景。

注意:

  • /v1/tools/search 与 /v1/tools/fetch 由服务方维护,可能变更或限流;本插件不做本地爬取或 HTML 解析,抽取失败会以 WEB_PROVIDER_ERROR 结束。
  • 与 deepseek-official 可并存,以 patch 选择的 provider id 为准。
  • 已在 DSH 0.2.1-rc.2 + Node 24.22 上验证;其他版本可能改变 loader 或 seam 契约。
  • 第三方插件,与 DeepSeek 官方无隶属关系;社区目录 SkillHub 为独立站点,亦非官方应用商店。

结尾

dsh-deepseek-search 把 DeepSeek 原生 Search/Fetch API 接到 DSH 的 ctx.web seam,用单一 provider id 同时覆盖搜索与抓取,并与官方 deepseek-official 形成互补(尤其在使用 fetch 与 Markdown 正文时)。安装与配置以 README 为准;详情见 GitHub 仓库 与 SkillHub 目录页。

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

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

小夜