前言¶
DeepSeek Harness(DSH)里,联网搜索通常依赖单一 web_search provider。免费或额度制后端一旦失败、结果偏少,要么换引擎重配,要么多引擎并行把请求打满。社区里也有按「选哪个引擎」思路设计的路由类插件;若更关心「用最少请求拿到够用结果」,就需要在失败回退之外做结果合并、重复查询缓存,以及成本可观测。
下面介绍维护者 xinstart-1 发布的联网工具插件 dsh-search-fusion(分类:联网工具;GitHub 星标数为 0)。它将 Bing、DuckDuckGo、SearXNG、AnySearch 等后端统一包装为 ctx.web 下的 fusion search provider,默认 按需融合 与 查询缓存,并支持自定义 JSON/MCP 引擎(含 Tavily 预设)。许可证为 MIT;package.json 中版本为 0.1.2,要求 Node ^22.19.0 || >=24.0.0,DSH >=0.2.1-rc.1 <0.3.0-0。
这是什么¶
dsh-search-fusion 是 DSH 的搜索插件:多引擎配置、失败自动 fallback、部分结果合并去重、跨引擎一致性加权排序,并在每次搜索报告中说明实际查了几个引擎、是否命中缓存。
与 dsh-search-router 的对比如下(资料原文表格摘要):
| 能力 | dsh-search-router | dsh-search-fusion |
|---|---|---|
| 多引擎配置 / fallback | 有 | 有 |
| 部分结果合并 | 前一个引擎结果丢弃 | 合并去重、一致性加权 |
| 按需融合 | 无 | 默认结果不足才多查 |
| 查询缓存 | 无 | 重复查询零请求 |
| 成本可见 | 无 | 结果内报告开销 |
router 解决「用哪个引擎」;fusion 解决「怎么用最少的请求拿到够用的结果」。
成本模型与融合策略¶
免费引擎额度有限,默认路径尽量只发一个请求:
| 策略 | 行为 | 请求数 |
|---|---|---|
sequential |
依次尝试,第一个成功即停 | 成功时通常为 1 |
fusion(默认) |
结果少于 minResults 或为空时才继续查 |
通常 1,不足时 2+ |
always-fuse |
并行查完链路内所有引擎再合并 | N(需显式启用) |
查询缓存默认开启,TTL 600000 ms(10 分钟):同一 query 的重复搜索不产生新请求。
每次搜索会在结果中带一行报告,例如:
Fusion: 2 engine(s) queried (bing, ddg); answered: bing, ddg.
Merged 12 unique sources, showing top 10.
Cross-engine agreement: 2 source(s) returned by 2+ engines.
Elapsed 812 ms.
融合排序公式(资料原文):
score = 引擎权重 + 跨引擎一致性×1.5 + 有标题 + 有摘要
URL 去重会规范化 fragment、尾部斜杠、utm_* 等追踪参数,域名小写,路径大小写敏感。
安装与启用¶
官方安装命令:
dsh plugin --profile desktop add dsh-search-fusion
亦可在 profile 的 package.json 中声明依赖与 bundle(本地开发可用 link: 路径,示例见仓库 README)。装完后 重启 DSH。
插件通过自带 cordis.patch.yml 将 searchProvider 设为 fusion,并需一并设置 fetchProvider: http(loader 为整段替换 config,只写 searchProvider 会冲掉 dsh-base 的 fetchProvider,导致 web_fetch 报 WEB_PROVIDER_AMBIGUOUS)。若要用 DeepSeek Fetch API,可在更高层 patch 覆盖,例如:
- id: web
config:
searchProvider: fusion
fetchProvider: deepseek-fetch-api
验证是否生效(重启后):
- 设置 → 左侧导航 → 搜索融合 出现独立入口;
- 页面上改配置、点「+ 添加引擎」保存;
search_fusion_status的custom engines:列出新引擎;web_search结果带Fusion: ...报告行。
search_fusion_switch 可切换主引擎与回退链,下一次搜索立即生效。
设置页与主要配置¶
设置入口:设置 → 侧边导航 → 搜索融合。本插件带 client 半端,通过宿主的 settings.section 注册真实设置页;配置经 host 路由 /plugins/dsh-search-fusion/config 读写,保存后合并进 profile 的 cordis.patch.yml。新增或删除引擎需重启 DSH 以重建实例;密钥轮换无需重启。
常用配置键(默认值见下表):
| 键 | 默认 | 说明 |
|---|---|---|
primary |
bing |
首选引擎 |
fallback |
["ddg","searxng"] |
失败或结果不足时依次尝试 |
strategy |
fusion |
sequential / fusion / always-fuse |
maxResults |
10 |
最终保留条数 |
minResults |
5 |
fusion 下低于此数才继续下一引擎 |
cacheEnabled |
true |
查询缓存 |
cacheTtlMs |
600000 |
缓存有效期 |
engineTimeoutMs |
12000 |
单引擎超时 |
locale |
zh-CN |
传给支持地区的引擎 |
customEngines |
[] |
自定义搜索引擎 |
engineWeights |
{} |
手动权重,未列出的为 1 |
不用 GUI 时可在 cordis.patch.yml 中写 customEngines,示例:
- id: dsh-search-fusion
config:
primary: tavily
fallback: [bing]
customEngines:
- id: tavily
preset: tavily
url: https://api.tavily.com/search
apiKeyEnv: TAVILY_API_KEY
代理(大陆网络下 DuckDuckGo、SearXNG 常需代理;Bing cn.bing.com 可直连):Node 全局 fetch 不读 HTTP_PROXY,插件使用自带代理客户端。在 ~/.dsh/settings.yaml 配置:
search-fusion:
proxy: "http://127.0.0.1:7897"
留空则直连。
自定义搜索引擎¶
设置页点 「+ 添加引擎」:粘贴 API 地址(引擎名与技术参数随地址识别)、粘贴 API Key(保存时写入 DSH 凭据)。无「引擎类型」下拉;例如 https://api.tavily.com/search 自动识别为 Tavily REST 预设。
主机名识别规则摘要:api.tavily.com(含子域)→ Tavily REST;mcp.tavily.com 或地址含 /mcp/ → Tavily MCP;其它域名 → 域名主体首字母大写作名称。
MCP 可按 JSON 文本域粘贴 mcpServers 片段;HTTP/SSE 帧均支持,会话每次搜索新建。Key 经 ctx.get("credentials") 写入 ~/.dsh/.credentials.yaml,profile patch 中仅保留引用名(如 TAVILY_API_KEY 或 DSH_SEARCH_<ID>_KEY)。
每张卡片可标 主引擎 / 回退 / 未启用;可多行同类型引擎,凭据引用自动避让以免覆盖。
工具与典型用法¶
| 工具 | 用途 |
|---|---|
search_fusion_status |
当前引擎、回退链、策略、缓存统计、上次搜索结果 |
search_fusion_switch |
切换主引擎/回退链,下次搜索生效(重启后恢复持久配置) |
日常流程:安装并重启 → 在「搜索融合」页设主引擎、回退链与策略(或写 YAML)→ 用 web_search 联网;需要临时换链时调用 search_fusion_switch;排查时看 search_fusion_status 与结果中的 Fusion: 行。
开发侧可运行 npm test 做离线测试;npm run test:live 需网络/代理(详见仓库 README)。
适用场景与注意¶
适合:希望在 DSH 内统一多搜索后端、控制请求次数、合并多源结果,并接入 Tavily 等自定义 JSON/MCP 引擎的智能体或桌面 profile 用户。
注意:
- 插件以当前 DSH 进程的权限与网络环境执行搜索;安装前请自行查看 GitHub 源码 与 MIT 许可证。
- 社区插件目录 SkillHub 条目 为独立生态站点,与 DeepSeek / 幻方无官方从属关系。
- 使用
link:开发时,插件不得静态 import 宿主私有包@deepseek-ai/*,否则可能出现configured web provider "fusion" is not registered。
结尾¶
dsh-search-fusion 把多引擎搜索收成单一 fusion provider,用默认 fusion 策略和查询缓存压低重复与过量请求,并在结果里公开实际开销。需要进一步核对说明或提交 issue,可访问目录页与仓库:
- 目录页:https://www.skillhub.cn/plugins/xinstart-1/dsh-search-fusion
- GitHub:https://github.com/xinstart-1/dsh-search-fusion