前言¶
DSH 的 web_search 工具依赖外部搜索提供方(如 exa、deepseek-official)。这些提供方可能因网络波动、API 限流、凭据错误或超时而失败。DSH 的 seam 没有提供方级别的超时控制,也没有内置的自动切换机制。本插件为 ctx.web 已注册的提供方增加了一层有序降级逻辑:它不实现搜索后端,也不处理凭据,而是将提供方串成一条链。当提供方不可用、报错、超时或返回空结果时,它会自动切换到下一个提供方,直到找到可用结果或全部失败。
核心功能¶
- 实现网络搜索提供方的有序降级:按配置顺序依次尝试多个搜索提供方。
- 在已注册提供方之上工作:读取并处理
ctx.web中已注册的提供方(如exa、deepseek-official)。 - 支持配置项:通过
order(优先级)、exclude(排除列表)、timeoutSeconds(超时预算)、fallbackOnEmpty(空结果处理)进行控制。 - 自动切换机制:当提供方不可用、超时或返回空结果时自动换下一个。
- 错误处理:处理
WEB_PROVIDER_ERROR和WEB_PROVIDER_UNAVAILABLE等错误。
安装与启用¶
使用官方命令安装插件。包内自带 cordis.patch.yml,dsh plugin 会把它追加进该 profile 的 dsh.profile.bundles,启动时把 web.searchProvider 指到本插件。
安装命令:
dsh plugin --profile web add github:killcerr/dsh-web-search-order
本地开发:
如果需要修改源码,使用路径安装。修改后重启 DSH 即可,无需重装:
dsh plugin --profile web add C:\path\to\dsh-web-search-order
配置与行为¶
插件支持以下配置项:
order: 提供方 ID 列表,越靠前优先级越高。未点名的提供方按注册顺序接在后面。没装(认不出)的 ID 会被忽略,只提示一次。exclude: 永不尝试的提供方 ID 列表,优先级高于order。timeoutSeconds: 单次尝试的超时预算(秒)。本插件自行实现此超时,DSH seam 没有提供方级别的超时。fallbackOnEmpty: 当既没有 sources 也没有回答文本时,是否当作未命中并换下一个。设为false则原样返回空结果。
版本差异:
* 0.1.5 线:支持在 ~/.dsh/settings.yaml 的 web-search-order 小节配置,热生效。
* 0.1.6+ 线:在插件行的 config 中配置,设置页编辑会写回 profile patch。
兼容性与环境¶
- Node.js 版本:需要
Node.js >= 22.19.0。 - DSH 版本:声明兼容性为
>=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0。- 注意:0.1.7 线使用
config行配置,不再支持settings.yaml。
- 注意:0.1.7 线使用
- 0.2.0+:不再声明兼容性。
生态背景¶
DSH 理念是「一切皆插件」。本插件属于社区目录中的联网工具类别,由 killcerr 维护,遵循 MIT 许可证。