dsh-web-search-doubao:为 DSH 的 web_search 接入豆包搜索摘要

前言

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,便于模型阅读与引用。

环境与依赖

安装前请确认:

  1. DeepSeek Harness >= 0.2.0-rc.2(提供 ctx.web 接缝的 provider API)。
  2. Node.js >= 22。
  3. 火山引擎 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,按以下顺序解析:

  1. 配置项 apiKey 的字面量;
  2. 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 配额的开发者。

务必注意:

  1. 插件在 当前 dsh 进程权限 下运行;安装前请自行审阅 源码与 LICENSE,确认符合你的安全与合规要求。
  2. API key 与 endpoint 配置错误会导致搜索失败或计费落在错误产品线上;Agent Plan key 与 README 中的说明一致时,才在计划配额内调用 Doubao Search。
  3. SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系;插件星标以目录/GitHub 当时显示为准(资料中 GitHub 星标为 0)。

结尾

dsh-web-search-doubao 把 Harness 标准 web_search 的后端换成 Doubao Search API,在不动模型侧工具的前提下补全 sources[].snippet,并可选通过设置页的 联网搜索 管理 key 与搜索参数。需要细节时以仓库 README(含 中文 README.zh.md)为准。

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

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

小夜