DeepSeek Harness 可以自由换搜索引擎了
Abstract
DeepSeek Harness 可以自由换搜索引擎了,基于 dsh-web-search 插件,可已增强 DeepSeek Harness 的 web_search 和 web_fetch 工具,支持百度、豆包、Tavily、Exa 四个后端。
Jump to section

DeepSeek 把自己的 Agent 执行框架 DeepSeek Harness(简称 DSH)开源之后,社区的热情主要投给了插件。"一切皆插件"的架构意味着模型、工具、沙箱都能换,大家也确实都在往里面塞各种能力,贡献非常活跃。
但用久了会发现一个很具体的盲区:搜索。官方给了 web_search 和 web_fetch 两个工具,模型侧的调用方式是固定的,背后走哪家搜索引擎却不由你决定,默认只能用内置那套。
这带来两个实际后果:国内中文资料、中文网页,检索效果不一定理想;你已经买好的百度千帆或火山方舟额度,在 DSH 里也常常用不上。
所以我写了 dsh-web-search。一句话说清楚它做什么:不动 Agent 的提示词和工具调用,把 DSH 官方搜索工具背后的引擎,换成你自己能控制的那几家。
插件是怎么把搜索引擎接进去的
插件会在 Harness 里注册一块自己的搜索门面(ctx.web),把百度、豆包、Tavily、Exa 四个后端接到官方的 web_search / web_fetch 上。模型面对的还是 @deepseek-ai/dsh-tool-web 那套官方工具定义,一个字段都没改。
这个设计的前提是:工具签名不变。Agent 依旧调用那两个工具,不用改提示词,也不用让模型去 curl 抓网页。变的只有"实际是谁去搜"这一层。
设置里有一个 自定义搜索 开关:
- 关掉:继续用 DSH 内置搜索(
deepseek-official)和内置 HTTP 提取,插件完全不介入 - 打开:在本页选择搜索后端;网页提取可以单独指定
默认是打开的。没配任何密钥之前,摘要条会老实写「还没有可用后端」,不装样子。
装完长这样
重启 dsh web 之后,设置侧栏会出现 网络搜索。

页顶能看见当前 web_search 和 web_fetch 实际走哪条路。搜索后端和网页提取是两排胶囊,可以分开选——这是刻意拆开的:搜得准和抓得全,是两种能力,各自的最优组合未必是同一家。
下面四张卡片分别是百度、豆包、Tavily、Exa。展开填密钥,填完点击 测试连接——它会真的向对应厂商发起一次单结果搜索——没问题的话,摘要条就会显示「探测成功 · 1 条结果」这类字样。注意「已配置」只代表密钥存在,探测才说明密钥真的能用。
密钥保存在插件设置里,前端只显示密码点,不会回传明文。也可以放到 DSH 凭据,或写在 ~/.dsh/.env,读取顺序就是:插件设置 → DSH 凭据 → 启动环境。
四个后端,怎么选
四家后端的脾气差别不小,先看全貌:
| 后端 | 特长 | 要知道的边界 | 更适合 |
|---|---|---|---|
| 百度(千帆智能搜索生成) | 中文问答比较稳 | 经常只给一段摘要,不带网页引用 | 「先给我说清楚」这类问题 |
| 豆包(火山方舟联网搜索) | 国内网页覆盖一般比海外搜索引擎更对口 | 要填支持联网内容插件的模型 ID,额度也要开通 | 中文资料检索场景 |
| Tavily | 为模型设计的搜索,结果常带一段 answer | 海外服务,中文网页不是主场 | 搜完还要读正文的流程 |
| Exa | 语义检索强 | 搜索只返回链接,没有 answer | 语义层面的探索式搜索 |
每一家都有值得展开的细节。
百度经常只返回一段摘要、不带网页引用。插件在这里做了补救:尽量从摘要文本里把 https:// 链接捡回来,捡得到就有引用,捡不到就只有摘要。
豆包走的是方舟 Responses 的 web_search 插件。配置时有两个前提:模型 ID 必须支持联网内容插件,对应额度要已开通,少一个都跑不起来。
Tavily 是给模型用的搜索服务,结果里常带一段现成的 answer。它的 Extract 能力还可以直接当 web_fetch 后端,适合「搜完还要把页面正文拉下来」的活法。
Exa 的语义检索是强项,但搜索只返回链接,没有 answer。需要正文就走它的 Contents,或者干脆把网页提取固定到 Tavily、内置 HTTP。
自动模式:一家不行,换下一家
搜索后端默认是 自动:按 百度 → 豆包 → Tavily → Exa 的顺序,用第一家已经配好密钥的。
这个顺序的价值在容错。当前这家请求失败了——超时、额度用尽、接口抖动——会自动去试下一家配置好的,并在 Harness 日志里记下跳过了谁。搜索能力不会因为单一厂商的故障直接掉线。
但要说清楚边界:failover 只存在于自动模式。你手动指定了某一家,那就是它,失败了也不会换人。显式选择不被悄悄改写,我认为这比"永远帮你兜底"更重要。
网页提取是和搜索后端独立的一档。自动的规则是:当前搜索走 Tavily / Exa,提取才跟着走对应服务;否则用 DSH 内置 HTTP。也可以把提取直接钉死成内置 HTTP、Tavily 或 Exa,跟搜索后端彻底脱钩。
怎么装
直接执行:
dsh plugin --profile web add @yugasun/dsh-web-search
装完重启 dsh web,打开设置 → 网络搜索,填至少一家密钥,点测试连接。摘要条从「还没有可用后端」变成「自动 · 百度」这类字样,就可以在对话里正常搜了。
卸载也是一行:
dsh plugin --profile web remove @yugasun/dsh-web-search
参考资料
- GitHub 仓库:yugasun/dsh-plugins · dsh-web-search
- npm:@yugasun/dsh-web-search
- DeepSeek Harness:deepseek-ai/deepseek-harness
Continue your reading
When you finish this article, use these paths to continue the thread.
// tags
Explore adjacent topics and move sideways through the knowledge graph.