dsh-keyless-search:DeepSeek Harness 的免 Key 多引擎搜索 Provider

DeepSeek Harness (DSH) 内置的 web_search 工具依赖 DeepSeek 的服务端接口,既需要 DEEPSEEK_API_KEY,又会消耗一个完整的模型轮次。dsh-keyless-search 是一个第三方 Provider 插件,用于替换 ctx.web 的底层搜索后端。它通过本地发起真实浏览器请求,实现了免 Key、不消耗模型轮次的检索功能。

核心功能

该插件基于 Node.js 实现,不依赖 DeepSeek 官方包,具备以下能力:

  • 免 API Key:不消耗模型轮次,也不依赖环境变量中的 Key。
  • 真实浏览器渲染:使用本地 Chrome/Edge 渲染 Google,绕过 HTTP 抓取必然遇到的 JS 墙。
  • 多引擎并发与降级:默认链路为 google-browser(代理)+ bing-global(国际版)+ bing(直连)。代理不可用时自动收敛为直连,google-browser 失败时自动降级。
  • 代理自动探测:无需手动配置 proxyUrl,插件会自动扫描本地常见端口(如 7890、1080 等)。
  • 语言感知:检测到中日韩字符时,自动跳过国际版 Bing,避免英文结果污染。
  • 多主题拆分:针对“主题1、主题2”的复合查询,自动拆分为最多 8 个子查询,去重后合并返回。
  • 浏览器实例回收:空闲(默认 5 分钟)后自动关闭由插件拉起的 Chrome 实例,不占用系统资源。
  • 零 Host 依赖:仅使用 node: 内置模块,不从 @deepseek-ai/* import 任何东西。

安装与启用

安装该插件需要 DeepSeek Harness 环境。请确保 Node 版本 ≥ 22。

dsh plugin --profile <profile> add github:Wandering233/dsh-keyless-search

安装后需重启 DSH 生效。插件通过 dsh.bundle.patch 自动应用配置,无需手动修改 cordis.patch.yml。

配置说明

在 profile 的 cordis.patch.yml 中配置 web-search-local:

- insert:
    - id: web-search-local
      name: 'dsh-keyless-search'
      config:
        engines: [google-browser, bing-global, bing]
        proxyUrl: ''            # '' = 自动探测;'off' = 强制直连;或 'http://host:port'
        maxSources: 16
        browserTimeoutMs: 30000
        searchTimeoutMs: 15000
        chromePath: ''          # 留空自动探测浏览器路径
        browserIdleTimeoutMs: 300000 # 5分钟空闲后回收

关键字段说明:
* engines:指定搜索引擎列表。默认为 [google-browser, bing-global, bing]。
* proxyUrl:留空时自动探测本地端口;设置为 'off' 时强制直连。
* browserIdleTimeoutMs:设置浏览器实例空闲多久后回收,0 表示禁用回收。

已知限制

  1. 冷启动成本:首次使用浏览器引擎需要拉起 Chrome(约 3-6 秒),复用实例约 3-4 秒。
  2. 结果截断:工具层默认最多返回 8 条结果(searchMaxResults),即使插件返回更多,也会被截断。该上限无法通过配置调整。
  3. 特定引擎问题:
    • DuckDuckGo 已不可用,返回 botnet 页面。
    • Mojeek 实测返回 0 条。
    • SearXNG 需要特定配置且依赖 Unix 特有模块(如 os.uname()),公共实例通常不可用。
  4. 依赖要求:需要本地安装 Chrome / Chromium / Edge,且本地目录安装时建议显式安装 puppeteer-core。

开发与自检

包内提供 selftest.mjs,可在不启动 DSH 的情况下进行纯 Node 自检:

node selftest.mjs

总结

dsh-keyless-search 通过引入本地浏览器渲染和智能拆分策略,解决了 DSH 原生搜索需消耗模型轮次的问题。它适合需要高频、免 Key 搜索能力的场景,但在使用前需留意冷启动延迟及结果数量上限。

项目地址:https://github.com/Wandering233/dsh-keyless-search

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

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

小夜