dsh-plugin-search-hub:DSH 多引擎网页搜索与免费端点轮询

前言

在 DeepSeek Harness(DSH)里给智能体接网页搜索,常见做法是绑定单一搜索 API,或在官方设置里切到 DeepSeek 搜索。一旦某个端点限流、欠费或网络不稳,整轮对话里的检索就会卡住;想换 Tavily、Brave、自建 SearXNG,又往往要改配置或改预设。社区插件 dsh-plugin-search-hub(目录页显示名:多引擎网页搜索 / Multi-engine Web Search)把多路引擎和调度收在一个插件里:可以不配 Key 在若干免费匿名端点间轮询,也可以按模式接入多家付费搜索,并在插件页里完成大部分配置。

这是什么

dsh-plugin-search-hub 由 qunqin24 维护,归类为 DSH 社区目录中的「联网工具」。当前 npm 包版本为 0.1.0,许可证 MIT,要求宿主 dsh >=0.2.1-rc.2 <0.3.0。

插件通过 bundle 补丁把 web 的 searchProvider 设为 plugin-search-hub,在宿主层注册搜索调度服务,并提供图形设置页与参数更完整的 web_search 工具。web_fetch 仍使用 DSH 内置实现,不由本插件替换。

核心功能

免费模式与冷却

免费模式在 Exa、Parallel、Firecrawl、Keenable 四家匿名免费端点之间轮询(与 Hermes Agent 使用的端点相同),不需要 API key。也可单独选用 exa-free、parallel-free、firecrawl-free、keenable-free,或把 free 作为整体放进任意调度模式。

某引擎被限流(HTTP 429、限流提示文本)或故障(401/402/403/5xx、网络错误、超时)后,默认 跳过 60 秒;同一次请求会自动换下一家。若响应头带 Retry-After 且更长,则以该值为准。冷却状态在宿主服务内共享,所有会话共用一份。

付费与自建引擎

除免费轮询外,支持:Tavily、Brave、Serper(Google)、Exa、Perplexity Sonar、Jina、博查(bocha)、SearXNG(自建实例,需配置地址)。

三种搜索模式

模式 含义
single 固定使用单个引擎
fallback 按配置顺序依次尝试,失败则降级
round-robin 在已选引擎间轮流使用

free 可以作为一个整体参与上述任意模式。在 fallback / round-robin 下,未配置 Key 的付费引擎会被跳过(不进入冷却),结果中会说明缺少哪个环境变量。

结果与过滤

可设置每次搜索返回条数(1–20)、单条摘要及引擎附带的总结的最大字数(超过则截断,默认 0 表示不截断)、以及屏蔽域名黑名单。支持在请求侧排除域名的引擎会直接排除;其余在本地过滤,并多取结果以补足数量。

图形设置页与凭据

在 DSH 插件 → 已安装插件 → 多引擎网页搜索 详情页可切换模式、勾选引擎并调整顺序、填写 API Key、配置 SearXNG 地址、结果条数、截断长度、黑名单、冷却时间与单次尝试超时。Key 写入 DSH 凭据库,不写进配置文件;保存后下一次搜索即生效。也可用同名环境变量提供 Key(见下文表格)。

怎么接入 DSH

部分 入口 作用
服务 dsh-plugin-search-hub ctx.pluginSearchHub:引擎注册、调度、冷却;并作为 ctx.web 的 plugin-search-hub 提供方
设置页 dsh-plugin-search-hub/client 插件详情页 UI
工具 dsh-plugin-search-hub/tool 宿主层 web_search,支持时间范围、域名、地区、语言、新闻等参数

桌面版 / Web:各智能体预设自带的 web_search 经 ctx.web 走 Search Hub,无需改预设;模型侧仍只有查询词参数,高级过滤在桌面内置工具上不可用,但模式、引擎、免费轮询与冷却照常生效。内置 web_search 自身最多取 8 条,设置里 maxResults 大于 8 时以 8 为准。

TUI / headless:关闭宿主内置搜索,改用本插件的 web_search,可使用完整过滤参数。

若在桌面版「网页搜索」官方设置页切回 DeepSeek 搜索 API,web 提供方会被改回 DeepSeek。要恢复 Search Hub,可删除 profile 里 cordis.patch.yml 对 web 行的覆盖。

安装与启用

桌面版:插件 → 添加插件,输入 dsh-plugin-search-hub,安装后打开开关并重启 App。

命令行(将 <name> 换成你的 profile 名):

dsh plugin --profile <name> add dsh-plugin-search-hub

从本地源码构建后安装(在插件仓库目录执行):

pnpm install && pnpm build
dsh plugin --profile <name> add /path/to/dsh-plugin-search-hub

pnpm build 会编译宿主端 lib/*.js,并用 esbuild 生成浏览器端 lib/client.js。

卸载:插件详情页点「卸载」,或:

dsh plugin --profile <name> remove dsh-plugin-search-hub

设置与配置

插件页

  • 搜索模式:单引擎 / 顺序降级 / 轮询。
  • 引擎列表:单引擎模式单选;另两种模式多选并用箭头排序。旁标「免费」「已配置 Key」或「未配置 Key」。
  • API Key:仅对已选引擎显示;留空保留当前 Key,「清除」删除已保存 Key。
  • 结果个数、内容截断长度、屏蔽网站、冷却时间、单次尝试超时:与 README 描述一致;「已修改」仅在值与默认不同时显示。

环境变量与引擎 id

引擎 凭据名(环境变量)
Tavily TAVILY_API_KEY
Brave BRAVE_SEARCH_API_KEY
Serper SERPER_API_KEY
Exa EXA_API_KEY
Perplexity PERPLEXITY_API_KEY
Jina JINA_API_KEY
博查 BOCHA_API_KEY
SearXNG SEARXNG_URL(也可在设置页填地址)

可选引擎 id:free、exa-free、parallel-free、firecrawl-free、keenable-free、tavily、brave、serper、exa、perplexity、jina、bocha、searxng。

cordis.patch.yml

补丁会整体替换 plugin-search-hub 行的 config,手写时需写全字段。示例:

- id: plugin-search-hub
  config:
    mode: fallback            # single | fallback | round-robin
    engine: free              # single 模式使用的引擎
    engines: [tavily, brave, free]
    cooldownSeconds: 60
    attemptTimeoutMs: 15000
    maxResults: 8
    truncateChars: 0         # 默认 0 不截断;500 表示超过 500 字截断
    blockedDomains: [csdn.net]
    searxngUrl: https://searx.example.org

开发与验证状态

仓库内开发命令:

pnpm typecheck
pnpm test               # 63 个单元测试,不访问网络
node scripts/smoke.ts   # 真实调用免费引擎,观察轮换与冷却

维护者在 README 中注明:已验证四个免费端点真实调用、限流文本识别,以及在 dsh 0.2.1-rc.2 独立 web profile 下的安装、配置合成、设置页与 Key 存取;未验证八个付费引擎的真实调用,以及桌面版里完整对话链路的实测。使用前若以付费引擎为主,建议自行用少量请求验证 Key 与配额。

适用场景与注意

适合需要在 DSH 里统一网页搜索入口、希望免费端点自动轮换并带冷却、或要在 Tavily / Brave / Serper / 自建 SearXNG 等之间做降级或轮询的开发者。TUI/headless 需要带时间、域名等过滤时,应使用插件提供的 web_search 而非仅依赖桌面预设的简参工具。

DSH 插件以当前 dsh 进程权限 运行,会向所配搜索引擎或免费端点发起网络请求;安装前请阅读 源码与许可证,并只在可信环境配置 API Key。社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系,插件亦非官方内置组件。

链接

羽毛球分组比赛记分
小程序二维码

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

Xiaoye