dsh-search-fusion:多引擎搜索融合与按需省请求

前言

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

验证是否生效(重启后):

  1. 设置 → 左侧导航 → 搜索融合 出现独立入口;
  2. 页面上改配置、点「+ 添加引擎」保存;
  3. search_fusion_status 的 custom engines: 列出新引擎;
  4. 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
羽毛球分组比赛记分
小程序二维码

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

Xiaoye