前言¶
DeepSeek Harness(DSH)里,模型常用的 @deepseek-ai/dsh-tool-web 会调用标准 web_search 工具。Harness 自带的 @deepseek-ai/dsh-web-search-deepseek 走 Anthropic 兼容 Messages API,让模型去调服务端 web_search;这条路径能拿到标题和链接,但归一化后的 sources[].snippet 往往是空的,模型缺少可直接引用、可阅读的摘录。
若你希望联网结果里每条来源都带正文片段,又不想为每次搜索多烧一轮模型 token,可以把搜索后端换成火山引擎 Doubao Search API。下面介绍社区插件 dsh-web-search-doubao(维护者 gilsaia,分类:联网工具)的做法。
这是什么¶
dsh-web-search-doubao 是 DSH 的 search provider 插件:注册 Doubao Search(Volcengine)后端,并通过 Harness 的 ctx.web 能力接缝把搜索提供方指到该后端。对模型侧而言,@deepseek-ai/dsh-tool-web 无需改动,变的只是背后的实现。
插件当前版本 0.2.1(见仓库 package.json),许可证 MIT。社区目录页:SkillHub 插件页;源码与说明:GitHub 仓库。
与默认联网搜索的差异¶
README 用表格对比了模型侧 web_search 工具在本插件接入 Doubao Search API 前后的字段与成本(以下为资料原文要点,非独立测评):
| 能力 | 默认 DeepSeek 联网路径 | 本插件(Doubao Search API) |
|---|---|---|
sources[].title / .url |
有 | 有 |
sources[].snippet |
恒为空 | 每条结果有真实摘录 |
sources[].publishedAt |
有时为 1970-01-01 哨兵值 |
真实日期,并过滤哨兵 |
| 单次搜索成本 | 多一轮模型调用(数千 token) | 一次 API 调用,不消耗模型 token |
| 典型延迟 | 约 6–14 s | 约 0.2–0.6 s |
Doubao Search 返回结构化结果,含每条结果的 body;插件把它映射到 snippet,便于模型阅读与引用。
环境与依赖¶
安装前请确认:
- DeepSeek Harness
>= 0.2.0-rc.2(提供ctx.web接缝的 provider API)。 - Node.js
>= 22。 - 火山引擎 API Key。文档说明:Agent Plan 的 key 可用,并消耗计划内的 AFP 配额;Agent Plan 文档将 Doubao Search 描述为该计划的搜索服务,需用计划专用 API key。其它火山产品的 key 可能能鉴权,但不在计划配额范围内。
默认请求地址为 https://open.feedcoopapi.com/search_api/web_search(公开 Doubao Search URL),一般无需改 endpoint 即可访问。
安装与启用¶
在 web profile 下从 GitHub 安装(命令来自 README,勿自行拼接其它形式):
dsh plugin --profile web add github:gilsaia/dsh-web-search-doubao
若使用本地目录,则为:
dsh plugin --profile web add /path/to/dsh-web-search-doubao
包声明了 dsh.bundle.patch,添加插件时会写入 bundle,并通过 patch 选中该 provider。README 给出的 patch 片段如下(fetchProvider 需一并写出,因为 row patch 会替换整行 config,省略会导致 web_fetch 失效):
- insert:
- id: web-search-doubao
name: 'dsh-web-search-doubao'
- id: web
config:
searchProvider: doubao
fetchProvider: http
安装后 重启 Harness(或 reload profile),再执行搜索。若出现 Issues with peer dependencies found,README 说明这是预期现象:@deepseek-ai/dsh-* 由 Harness 在加载时提供,pnpm 会报缺失 peer,运行时由 Harness 解析。
配置 API Key¶
插件 必须 提供 key,按以下顺序解析:
- 配置项
apiKey的字面量; apiKeyEnv(默认ARK_API_KEY)所指的 credential,经 Harness credentials 服务读取,并回退到启动环境变量。
无 GUI 时,可导出环境变量后启动:
export ARK_API_KEY=... # then start the harness
或在 profile 的 patch 层写入(密钥更推荐 apiKeyEnv,避免明文进配置文件):
- id: web-search-doubao
config:
apiKey: '...'
若 profile patch 仍是默认的 bare [],应 替换 该 [] 为你的条目;在其后追加 - id: 会形成两个 YAML 文档,Harness 无法解析 overlay。缺少 key 时搜索失败,错误为 WEB_PROVIDER_CREDENTIAL_MISSING,并指明查阅的 reference,不会静默返回空结果。
图形界面配置¶
插件带有 client 半:重启后在 Harness 设置侧栏会出现 联网搜索 (Web search) 页,可在该页完成:
- API Key:密码框输入,经 Harness credentials 域写入表单指定的 reference;明文不进 settings 文件,页面仅显示是否已配置。
- 各配置字段:endpoint、搜索类型、结果数、时间范围、权威度过滤、查询改写、摘要开关等;修改未保存的字段显示 未保存,用户层覆盖的显示 已覆盖 并可 恢复默认。
- 保存 为一次 revision-fenced 写入;撤销 丢弃未保存编辑。
保存后对 下一次搜索 生效,改配置或 key 无需重启。仅当 host 提供 web-search-doubao settings 命名空间时页面才会挂载;未部署该插件的环境不会出现此页。
可调参数¶
以下字段在 每次搜索 时读取,改完即对下次搜索生效(表格来自 README):
| 字段 | 类型 | 默认 | 含义 |
|---|---|---|---|
apiKey |
string (secret) | — | 明文 API key |
apiKeyEnv |
credential ref | ARK_API_KEY |
每次搜索解析的 credential |
baseURL |
string | Doubao Search URL | 完整 endpoint,可改代理或区域 |
searchType |
web | image |
web |
image 返回图片结果 |
maxResults |
1–50 | 10 |
请求未指定上限时的条数 |
timeRange |
string | — | OneDay / OneWeek / OneMonth / OneYear,或 YYYY-MM-DD..YYYY-MM-DD |
authLevel |
0–2 | 0 |
1 限制权威来源(仅 web 搜索) |
queryRewrite |
boolean | false |
是否将对话式 query 改写为搜索式 |
needSummary |
boolean | true |
是否请求作为 snippet 的摘录;关闭则 snippet 为空 |
环境变量 DOUBAO_SEARCH_BASE_URL 可覆盖 baseURL。
启用与禁用¶
插件 挂载期间 接管接缝上的 provider 选择,卸载时 交还先前选择,因此用普通插件开关即可:
- 启用:注册 provider,接缝选择
doubao,搜索走 Doubao Search。 - 禁用:注销 provider 并恢复之前选择;若无显式选择,接缝会自动选剩余唯一可用 provider(通常是自带的 DeepSeek 实现)。
bundle patch 故意不包含 - id: web 的 row patch,避免禁用插件后 profile 仍指向已不存在的 provider(会报 WEB_PROVIDER_CONFIGURED_MISSING 且不会回退)。若要在本插件关闭时仍使用 自带 DeepSeek provider,需单独配置,例如 README 中的 Anthropic 兼容 endpoint(与 Doubao key 不通用):
- id: web-search-deepseek
config:
baseURL: https://ark.cn-beijing.volces.com/api/plan/v1
若在 自己的 patch 层显式固定 searchProvider: doubao,则禁用本插件且仍指向 doubao 时会报错,需自行保证指向已注册的 provider。
验证¶
README 提供本地测试命令(节选):
# pure-function and plugin-contract tests: no network
npm test
另有 npm run test:live(node scripts/smoke.mjs)用于 live smoke,需有效 key 与网络。
适用场景与注意¶
适合谁:已在 DSH web profile 中使用标准 web_search,需要 带 snippet 的联网摘录、更低延迟、且愿意使用火山引擎 Doubao Search / Agent Plan 配额的开发者。
务必注意:
- 插件在 当前 dsh 进程权限 下运行;安装前请自行审阅 源码与 LICENSE,确认符合你的安全与合规要求。
- API key 与 endpoint 配置错误会导致搜索失败或计费落在错误产品线上;Agent Plan key 与 README 中的说明一致时,才在计划配额内调用 Doubao Search。
- SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系;插件星标以目录/GitHub 当时显示为准(资料中 GitHub 星标为 0)。
结尾¶
dsh-web-search-doubao 把 Harness 标准 web_search 的后端换成 Doubao Search API,在不动模型侧工具的前提下补全 sources[].snippet,并可选通过设置页的 联网搜索 管理 key 与搜索参数。需要细节时以仓库 README(含 中文 README.zh.md)为准。