前言¶
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 把「三十行适配器 + 已有实例」称为「裸」方案;本插件在包内嵌入实例管理与可靠性逻辑,要点如下。
-
安装即实例(可选)
未配置baseURL时,插件拉取searxng/searxng镜像,选首个空闲端口,生成settings.yml(启用 JSON、关闭 limiter、一次性生成 secret),等待/healthz后对外服务;卸载插件时停止容器。若已有 SearXNG,只设baseURL即可,不再创建容器。 -
引擎失败当错误处理
读取 SearXNG 的unresponsive_engines,按fallbackEngines或放宽过滤条件做第二次请求,再报告哪些引擎无响应。 -
可重试的瞬时故障
网络错误、超时、429/5xx 会按配置重试;调用方取消不会重试;最坏延迟约为(retries + 1) × timeoutMs。 -
短 TTL 内存缓存
默认cacheTtlMs为 60000,同一查询在 60 秒内再次发起时可直接命中缓存。 -
结果便于引用
仅保留 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