前言¶
DeepSeek Harness(DSH)的设计理念是「一切皆插件」。当内置搜索提供方无法满足特定场景需求时,开发者需要接入外部 API。这个插件通过把字节跳动 feedcoop 的 global_search API 接入 DSH 的 ctx.web 能力接缝,为 DSH 增加了豆包的联网搜索能力。
插件介绍¶
这是一个树外 bundle 插件。它向 ctx.web 注册了一个 WebSearchProvider(id: doubao),并自带 cordis.patch.yml 层。安装后,它会自动挂载提供方并将默认搜索选择切到 doubao。插件零运行时依赖,不修改 harness 源码。
安装与启用¶
在 harness 仓库根目录执行以下命令:
dsh plugin --profile web add github:JayLi52/dsh-web-search-doubao
安装过程会自动把包链接进 profile、把 bundle 层加入 dsh.profile.bundles、挂载提供方并切换 searchProvider: doubao。装完即用,无需手改配置。
配置 Token¶
安装后需要提供 feedcoop Bearer token。推荐使用环境变量方式。
- 在
$DSH_HOME/.env(Windows 默认C:\Users\<你>\.dsh\.env)中写入一行:
DOUBAO_SEARCH_API_KEY=<你的-token>
- 重启
dsh web(环境变量在启动时加载)。
之后对配置的修改(除 token 外)可以通过热重载生效。也可以在 profile 的 cordis.patch.yml 里内联 token,但改 env 需重启。
验证配置结果:
dsh --profile web --dump-config | grep -A3 web-search-doubao
配置项¶
| 字段 | 默认值 | 说明 |
|---|---|---|
apiKey |
'' |
Bearer token;为空时回退读取 $<apiKeyEnv>。两者皆空 → 提供方不可用 |
apiKeyEnv |
DOUBAO_SEARCH_API_KEY |
存放 token 的环境变量名 |
baseURL |
https://open.feedcoopapi.com |
API 基址 |
docCount |
10 |
请求未带 maxResults 时的默认 DocCount |
maxSnippetLength |
300 |
每条结果摘要长度上限 |
使用示例¶
在 Web UI 新会话里让模型调用 web_search 工具,搜索请求即会走豆包提供方。
如果怀疑搜索没走豆包,可以使用 --patch 覆盖层投毒 key 跑一次性任务:
dsh --profile headless --patch ./wrong-key-test.yml "用 web_search 搜 海淀必去景点"
常见问题¶
工具调用报 unknown tool "",模型只剩 thinking 死循环
这不是本插件的问题。harness 的 llm-deepseek 适配器对续包带空串 id/name 的流(DashScope 兼容模式等 OpenAI 兼容端点)有解析 bug,会把工具名覆盖成空串。修复见 deepseek-harness packages/llm/llm-deepseek/src/translate.ts(仅当非空才覆盖)。用 DeepSeek 官方端点不受影响。
Doubao API error: invalid_api_key
token 错或未设置。检查 $DSH_HOME/.env 或 patch 里的 apiKey,改 env 需重启。
WEB_PROVIDER_CONFIGURED_UNAVAILABLE
选了 doubao 但 available() 为 false,即没配 token。
WEB_PROVIDER_AMBIGUOUS
多个可用提供方且没配 searchProvider,显式指定 id。
改了 cordis.patch.yml 没生效
patch 是热重载的;若整层解析失败会保留旧树并打日志,检查 YAML 是否为顶层数组。
注意事项¶
分享给别人时,profile 目录本身不可移植(package.json 里是本机 link: 绝对路径),模型 key(DEEPSEEK_API_KEY 或 Models 页配置)由对方自备。
总结¶
该插件为 DeepSeek Harness 提供了豆包的联网搜索能力,安装简单,零依赖,适合需要增强 Web 搜索功能的 DSH 场景。