postsdsh-web-search

DeepSeek Harness 可以自由换搜索引擎了

Abstract

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

DSH 多搜索引擎

DeepSeek 把自己的 Agent 执行框架 DeepSeek Harness(简称 DSH)开源之后,社区的热情主要投给了插件。"一切皆插件"的架构意味着模型、工具、沙箱都能换,大家也确实都在往里面塞各种能力,贡献非常活跃。

但用久了会发现一个很具体的盲区:搜索。官方给了 web_searchweb_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_searchweb_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

参考资料

Continue your reading

When you finish this article, use these paths to continue the thread.

cd ../posts

// tags

Explore adjacent topics and move sideways through the knowledge graph.

// continue reading