dsh-web-search-searxng:为 DSH 提供免 API 密钥的 SearXNG 联网搜索

前言

DeepSeek Harness(DSH)通过 ctx.web 缝把 web_search 交给可插拔的搜索提供方。常见做法是接商业搜索 API,或在本地先单独部署 SearXNG,再写一层薄适配器去调 {base}/search?format=json。后者往往默认实例已就绪、JSON 已开启,且难以区分「无结果」与「底层引擎全部失败」——两种情形都可能返回 HTTP 200 和空列表。

下面介绍社区插件 dsh-web-search-searxng(维护者 svoemesto):它把 SearXNG 搜索注册到 DSH 的 web 缝,默认在本地 Docker 中拉起专用实例,让智能体使用标准工具 web_search,无需向搜索厂商申请密钥,也无需为单次查询付费。

这是什么

dsh-web-search-searxng 是面向 DeepSeek Harness 的 bundle 插件,分类属于联网工具。包内声明 dsh.bundle,安装即激活;提供方在缝内注册为 searxng,工具名仍为 harness 自带的 web_search。当前包版本 2.1.2,许可证 MIT。

插件用 ESM 实现,无额外 npm 依赖、无构建步骤。目录页:skillhub.cn/plugins/svoemesto/dsh-web-search-searxng。源码与说明:github.com/svoemesto/dsh-web-search-searxng。

与「裸接 SearXNG」的差异

README 把「三十行适配器 + 已有实例」称为「裸」方案;本插件在包内嵌入实例管理与可靠性逻辑,要点如下。

  1. 安装即实例(可选)
    未配置 baseURL 时,插件拉取 searxng/searxng 镜像,选首个空闲端口,生成 settings.yml(启用 JSON、关闭 limiter、一次性生成 secret),等待 /healthz 后对外服务;卸载插件时停止容器。若已有 SearXNG,只设 baseURL 即可,不再创建容器。

  2. 引擎失败当错误处理
    读取 SearXNG 的 unresponsive_engines,按 fallbackEngines 或放宽过滤条件做第二次请求,再报告哪些引擎无响应。

  3. 可重试的瞬时故障
    网络错误、超时、429/5xx 会按配置重试;调用方取消不会重试;最坏延迟约为 (retries + 1) × timeoutMs。

  4. 短 TTL 内存缓存
    默认 cacheTtlMs 为 60000,同一查询在 60 秒内再次发起时可直接命中缓存。

  5. 结果便于引用
    仅保留 http(s) 链接,摘要不超过 800 字符,附带 publishedAt;content 来自引擎的 answers 等字段,不生成虚构摘要。

生成配置使用 use_default_settings: true,general 类默认启用 brave、duckduckgo、google cse、wikipedia、wikidata 等;google、bing、qwant、yandex 在配置中存在但默认关闭(需密钥或不稳定)。查看当前实例已启用引擎:

curl -s http://127.0.0.1:8888/config | jq -r '.engines[] | select(.enabled) | .name'

(端口以你实际绑定为准,默认从 8888 起扫描空闲端口。)

环境要求

要求 说明
Docker 守护进程 运行 dsh 的用户可执行 docker version;无 Docker 时需配置 baseURL 指向已有实例
磁盘与网络 首次约需 ~400 MB 用于镜像拉取
Node 22+ 与 harness 要求一致
DSH 0.2.x 且含 ctx.web 缝 旧版无该缝时插件行会等待服务而不生效
pnpm 与 git dsh plugin 通过 pnpm 安装,github: 源需要 git

安装与启用

官方支持的安装方式如下(需使用 web 配置档示例;可按自己的 profile 名替换):

# 从 GitHub 安装(推荐)
dsh plugin --profile web add github:svoemesto/dsh-web-search-searxng

# 本地开发目录
dsh plugin --profile web add /path/to/dsh-web-search-searxng

包声明 dsh.bundle,上述命令会同时安装并激活 bundle。已在运行的 harness 内也可通过 plugin_manager → install_bundle 完成同等操作。

首次启动较慢:镜像下载、容器创建与 /healthz 等待(默认 startupTimeoutMs 90000 ms)只发生一次。就绪前调用 web_search 会报错「SearXNG instance is not ready: …」;后台仍会继续拉起,下一次搜索通常即可成功。

安装后向 agent 提一个需要时效信息的问题,即可验证 web_search 是否走本地 SearXNG 实例。

安装后在磁盘与配置上的变化

对象 位置与行为
容器 默认名 dsh-searxng,--restart unless-stopped,仅绑定 127.0.0.1:<端口>:8080
设置 $DSH_HOME/searxng/settings.yml(默认 ~/.dsh/searxng/),首次写入后不覆盖
端口 从 port(默认 8888)起最多尝试 50 个连续端口

容器在插件激活时启动,在 harness 退出、HMR 重载或卸载插件时停止;容器对象保留,下次启动较快。非本插件创建且未带标签 dsh.plugin=dsh-web-search-searxng 的同名容器不会被接管,需改 containerName 或改用 baseURL。

dsh --profile <名> --dump-config 中可见两行补丁:web-search-searxng 提供方行,以及对 web 行的覆盖——searchProvider: searxng、fetchProvider: http(整段替换 config,故显式保留 fetchProvider,避免 web_fetch 失去提供方)。若在 Settings → Plugins → Web search 中已有更强覆盖,仍以用户设置为准。

常用配置项

所有字段可选,均有默认值。完整列表见仓库 README;常用项如下。

字段 默认 含义
baseURL 未设 使用已有 SearXNG,不启动容器
port 8888 容器端口扫描起点
image searxng/searxng:latest SearXNG 镜像
containerName dsh-searxng 插件管理的容器名
dataDir $DSH_HOME/searxng 宿主机配置目录
startupTimeoutMs 90000 等待就绪上限
timeoutMs 20000 单次搜索超时
retries 1 可重试错误的额外次数(0–5)
fallbackEngines [] 引擎失败时的备选引擎列表
cacheTtlMs 60000 结果缓存 TTL;0 关闭

无 Docker 时,在配置中指定已有实例的 baseURL 即可,行为与「只连外部 SearXNG、不拉容器」一致。

适用场景与注意

适合:希望在 DSH 里用标准 web_search 做联网检索、又不想绑定商业搜索 API 或按量付费的开发者;本机或可访问网络内已有 Docker,能接受首次拉镜像的开销。

注意:

  • 插件以当前运行 dsh 的用户权限操作 Docker 与本地端口;安装前建议阅读源码与 MIT 许可证,确认容器绑定与数据目录符合你的安全策略。
  • 社区目录 skillhub.cn 独立于 DeepSeek / 幻方,并非官方应用商店;DSH 生态强调「一切皆插件」,本插件是社区维护的联网工具之一。
  • 搜索质量取决于 SearXNG 所启用的引擎及目标站点可达性;插件不调用额外付费 API,也不代写搜索结果正文。

结尾

dsh-web-search-searxng 把 SearXNG 实例管理、引擎失败处理、重试与短缓存收进一个 DSH bundle,使「安装插件」在多数环境下等价于「可用的本地元搜索 + web_search」。需要细节、英文 README 或 issue 跟踪时,请直接查阅 GitHub 仓库与 Skillhub 目录页。

  • 目录页:https://www.skillhub.cn/plugins/svoemesto/dsh-web-search-searxng
  • GitHub:https://github.com/svoemesto/dsh-web-search-searxng
羽毛球分组比赛记分
小程序二维码

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

小夜