前言¶
在 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。
- 目录页:https://www.skillhub.cn/plugins/zou-hong-run/dsh-deepseek-search
- 源码与文档:https://github.com/zou-hong-run/dsh-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 目录页。