跳转至

🎯 SearXNG 免费引擎池评估与宽池复测(2026-11-01)

📌 结论摘要

初始测试固定以 101 节点经 360T7 路由器、PassWall 当前代理节点出网,不迁移 SearXNG 容器,不切换 exit node,也不修改生产引擎配置。全量测试覆盖 267 个免费引擎、801 次查询;宽池复测覆盖 73 个候选引擎、292 次查询。随后按用户确认的“soak 结果直接形成生产配置”规则,生产池进入增量调整:当前分类匹配查询持续返回有效结果的引擎保留在默认池,zero/error 引擎从默认池禁用,已恢复引擎保留。SearXNG 本身支持按分类和指定引擎选通道,MCP search_web 已增加可选 category/engines,并用显式路由失败不回退的负向回归验证;当前运行会话需要新会话才能加载新 schema。

📚 目录

🧪 测试边界

项目 全量测试 宽池复测
时间 2026-11-01 2026-11-01
出口 101 → 360T7 → PassWall 当前节点 同左
引擎 267 个免费引擎 73 个宽池候选
查询 OpenAI、人工智能、Tailscale exit node 按分类选择 2 个查询
轮次 每查询 1 次 每查询 2 轮
请求数 801 292
单引擎超时 8 秒 8 秒
生产配置 未修改 未修改
临时容器 已删除 已删除

测试使用临时 SearXNG 容器,只挂载临时 settings.yml。生产 codex-searxng 容器、生产 settings.yml 和路由配置均未被改写。依据是临时容器名称、/config 回读的 267/73 启用数量,以及本轮结束后的 git status 为干净状态。

📊 全量测试结果

状态定义:

  • good:3 个查询中至少 2 个有结果,且没有 timeout、429、CAPTCHA。
  • usable:至少 1 个查询有结果,但未达到 good。
  • zero:3 个查询均为 0 结果,且没有引擎错误。
  • timeout / too_many / captcha:对应引擎错误类型。
状态 数量 占比
good 92 34.5%
usable 41 15.4%
zero 93 34.8%
timeout 30 11.2%
too_many 8 3.0%
captcha 3 1.1%

至少返回过一次结果的引擎共 133 个,占 49.8%;明确被 timeout、429 或 CAPTCHA 阻断的引擎共 41 个,占 15.4%。

通用搜索

引擎 成功 总结果数 平均耗时 P95 观察
Bing 3/3 30 3.1s 6.2s 结果质量最好,但偏慢
搜狗 3/3 26 1.2s 1.3s 中文相关性强,速度快
360 搜索 3/3 13 0.59s 0.92s 最快,但结果数偏少
Mwmbl 3/3 210 2.0s 2.8s 结果多,质量需要复核
Fynd 3/3 30 1.7s 2.3s 可用补充
Yandex 3/3 35 3.0s 4.8s 地区化明显
Naver 3/3 41 3.5s 5.2s 偏韩国/本地化
Wiby 3/3 15 2.4s 5.3s 小索引
Searchch 3/3 30 3.6s 6.6s 瑞士/本地化
Boardreader 3/3 23 3.8s 4.6s 论坛搜索

分类引擎

分类 主要候选 依据
新闻 搜狗微信、DuckDuckGo News、Bing News、Il Post、Naver News 前四者全量测试 3/3;Naver News 2/3
图片 Quark Images、Baidu Images、Yandex Images、Bing Images Quark/Baidu 约 0.5 秒,Yandex/Bing 覆盖更广
视频 Bilibili、Sogou Videos、Dailymotion、Odysee、Acfun 多数 3/3
IT Baidu Kaifa、StackOverflow、MDN、GitHub、Microsoft Learn、Lib.rs、Crates.io 多数 3/3
科学 OpenAlex、Crossref、arXiv、EuropePMC OpenAlex/Crossref 3/3
文件与应用 Google Play Apps、Apple App Store、OpenRepos 3/3
社交/音乐/影视 Lemmy、9GAG、Genius、YouTube、Mastodon、Senscritique、RottenTomatoes 多数 3/3

🔁 宽池复测结果

宽池包含 73 个候选引擎,按分类选择查询,每项执行 2 轮,共 292 次请求。

状态 数量
good 64
usable 1
parser_or_crash 3
zero 2
timeout 3

宽池中大部分通用和分类引擎保持稳定。较值得继续保留的包括:

类型 引擎 复测结果
通用 Bing 4/4,40 条,平均 1.0 秒,P95 1.2 秒
通用 360 搜索 4/4,12 条,平均 0.64 秒,P95 0.78 秒
通用 Yandex 4/4,40 条,平均 1.3 秒
通用 Mwmbl 4/4,346 条,平均 1.0 秒
通用 Fynd 4/4,40 条,平均 1.5 秒
通用 Boardreader 4/4,24 条,平均 1.7 秒
通用 Encyclosearch 4/4,60 条,平均 1.1 秒
通用 Wiby、Searchch、Naver、Crowdview 均有结果,适合作为补充
图片 Quark Images、Baidu Images、Artic 4/4,速度约 0.2 到 0.6 秒
视频 Bilibili、Acfun、Sogou Videos、360search Videos 4/4,速度约 0.2 到 0.7 秒
IT MDN、StackOverflow、GitHub、Crates.io、Baidu Kaifa 4/4
新闻 搜狗微信、Bing News 4/4
科学 OpenAlex、Crossref、EuropePMC 4/4

宽池复测中的异常必须记录:

引擎 状态 证据 处理建议
搜狗 parser_or_crash 全量测试 3/3 正常,宽池复测 0/4,全部 unexpected crash 暂不作为核心主源,继续观察
OpenLibrary parser_or_crash 4/4 有结果,但伴随 unexpected crash 不作为干净候选,先修引擎问题
Yandex Images parser_or_crash 2/4 有结果,伴随 parsing error 暂不作为默认图片主源
Picjumbo zero 4/4 零结果,access denied 暂不启用
DuckDuckGo News timeout 4/4 零结果,Suspended: timeout 暂不作为新闻主源
Devicons zero 4/4 零结果 暂不启用
Genius timeout 4/4 零结果,Suspended: timeout 暂不作为音乐主源
Il Post timeout 4/4 零结果,Suspended: timeout 暂不作为新闻主源
Wikinews usable 1/4 有结果 只保留为实验通道

🧭 按需选择通道

SearXNG 本身支持按分类和指定引擎查询。宽池直接测试结果:

查询方式 结果数 结论
默认 general 266 可用
categories=news 57 可用
categories=it 178 可用
categories=science 60 可用
categories=images 135 可用
categories=videos 124 可用
categories=files 77 可用
categories=social media 107 可用
engines=github 30 可用
engines=stackoverflow 10 可用
engines=bing 10 可用
engines=360search 7 可用
engines=sogou 0 unexpected crash

因此“按实际需求指向不同通道”是可实现的,当前状态是:

  1. SearXNG 层已支持:categories、engines 和 !bang 都可用。
  2. MCP 封装层已扩展:local_search_registry.search_web 新增可选 category 和 engines;显式路由失败时返回 provider=none 与 explicit_route=true,不再静默回退。
  3. 当前会话仍是旧 schema:MCP 工具 schema 在进程启动时加载;当前会话需要新开 Codex 会话或重启 Codex 才能看到新参数。

实测 MCP 行为(直接启动修改后的 MCP server):

请求 结果 结论
category=news + OpenAI SearXNG 返回 5 条新闻结果 分类路由正常
engines=["github"] + react SearXNG 返回 5 条结果 指定引擎路由正常
engines=["brave"] + OpenAI provider=none、explicit_route=true、0 条 显式路由失败时未回退 Serper/Tavily
默认 OpenAI SearXNG 0 条后 Serper 返回 5 条 默认降级顺序保持不变

结论:按需路由已经实现并验证。为让模型自动使用,已在全局规则中增加分类路由约束:

  • 新闻、IT/代码、科学/论文、图片、视频、文件/应用、社交/论坛查询应显式传 category。
  • 只有用户明确指定来源时才传 engines。
  • 显式 category/engines 失败时报告该通道失败,不回退到通用搜索。
  • 未指定分类/引擎时,保留 SearXNG → Serper → Tavily 降级。

🚫 暂不进入默认池

CAPTCHA

引擎 原因
百度通用 当前出口触发验证码
Quark 通用 当前出口触发验证码
DuckDuckGo 通用 当前出口触发人机挑战

429 限流

引擎 原因
Brave、Brave News、Brave Images、Brave Videos 当前出口 too many requests
Google CSE Images 当前出口 too many requests
Wikimini 当前出口 too many requests
Shopify Stock 当前出口 too many requests

超时

引擎 原因
DuckDuckGo Web、Images、Videos 8 秒内超时
Google CSE timeout 与 429 交替
Seznam、WolframAlpha、Semantic Scholar 超时
GitLab、HackerNews、Docker Hub、Codeberg 超时
Alpine Linux Packages、Library of Congress、Tagesschau 超时
Pinterest、Pexels、Openverse、Material Icons 超时
SoundCloud、SeptaSearch、Yacy 超时
Anna's Archive、Library Genesis、BTDigg 超时

零结果但无错误

引擎 原因
Wikipedia 3/3 零结果,无错误
Wikidata 3/3 零结果,无错误
Qwant、Qwant Images、Qwant Videos access denied 或零结果
Yahoo 解析错误
Mojeek、Mojeek Images、Mojeek News access denied
MyMemory、Mozhi、Dictzone、Lingva 3/3 零结果
Currency、Tineye、Fastbot、Yep、Fireball、Searchmysite 零结果或访问错误

完整的 267 个引擎原始结果在 temp/searxng-full-engine-test/summary.csv,宽池复测在 temp/searxng-full-engine-test/wide_summary.csv。这两个文件是逐引擎记录,不应把单个零结果直接等同于永久不可用,应结合分类查询和后续复测判断。

🧩 宽池组合

核心候选

引擎 保留原因 风险
Bing 两次测试均稳定,结果质量较好 偏慢,P95 约 1.2 到 6.2 秒
360 搜索 两次测试均稳定,速度最快 结果数偏少,质量需要复核
Mwmbl 结果量大,速度快 结果质量混合
Yandex 两次测试均稳定 地区化和质量波动

通用补充

Fynd 4/4、40 条;Naver 4/4、52 条;Wiby 4/4、26 条;Searchch 4/4、40 条;Boardreader 4/4、24 条;Encyclosearch 4/4、60 条;Crowdview 2/4、80 条。它们能返回结果,但分别存在地区化、索引小、论坛属性或质量波动,不适合作为唯一主源。

分类通道

新闻、图片、视频、IT、科学、文件与应用、社交/音乐/影视按本轮分类结果保留。宽池复测中,Quark Images 4/4、40 条;Baidu Images 4/4、40 条;Bilibili 4/4、80 条;Sogou Videos 4/4、58 条;GitHub 4/4、120 条;StackOverflow 4/4、40 条;MDN 4/4、22 条;OpenAlex 4/4、40 条;Crossref 4/4、80 条。每个分类仍应继续做第二轮复测。

🚀 生产自适应调整记录(2026-11-02)

第 8 轮 soak 结果中,crowdview、wikivoyage、ansa、arxiv、rottentomatoes、pubmed、wikispecies、naver news 在分类匹配查询下均返回 HTTP 200 但 0 条结果;openrepos 与 huggingface spaces 已恢复并分别返回 10、14 条结果。依据是 temp/searxng-soak/latest.json 第 8 轮 last_results。按用户确认的自动生产调整规则,前述 8 个引擎已在 101 生产配置中设为 disabled: true,后两个保持启用。

本次还修复了生产容器挂载覆盖:原容器残留 /etc/searxng 匿名 volume,遮蔽单文件配置挂载,导致宿主配置修改未生效;现改为整目录只读挂载 /root/.codex/integrations/searxng/config -> /etc/searxng 并强制重建容器。容器健康检查返回 OK,宿主与容器内 settings.yml SHA256 均为 2607000ab650c36b313a07e4e5c782bf2dbbb15835def09f29504af8e3ef7388,默认查询回读未命中已禁用的 8 个引擎。回退材料保存在 101 /srv/codex-hub-backup/agentmeshos/searxng/20261102T145738+0800/。

🔄 soak 测试到生产配置的闭环修正(2026-11-02 23:05)

结论:soak 测试从“只记录、不回写”改为“每轮累计、每轮按策略重算、自动写生产并做运行态验收”。测试本身改为打独立实例,不再直接查询生产端口。依据是本轮代码修改、生产配置 SHA256 与三次真实回读。

测试粒度

soak 不是全体引擎同时测,而是分批轮转:每批 16 个引擎,每 30 分钟一批,63 个候选约 2 小时覆盖一轮。每批只发 16 个单引擎查询,避免同一时刻把出口打黑。

原断点

断点 证据 影响
结果只写 state.json 第 1 至 26 轮没有生产写回步骤 累计结论无法进入生产
通知仍写“不要直接修改生产配置” 旧 soak_runner.py 通知文案 与用户已授权的实时修正要求相反
测试直接查询生产 8090 旧 timer 环境 SEARXNG_SOAK_BASE=:8090 生产配置一变,测试口径就跟着变

修正后的链路

  1. 执行器版本化为 scripts/maintenance/agentmeshos-searxng-soak.py,旧的 temp/searxng-soak/soak_runner.py 已退役归档。
  2. 每轮把 16 个结果写入 state.json#engine_history、observations.jsonl 和 production-selection.json,累计不覆盖。
  3. 决策策略:error 立即禁用;zero 连续两次禁用;healthy 立即恢复;非候选池引擎保持禁用。
  4. 生产同步:备份到 /srv/codex-hub-backup/agentmeshos/searxng/<时间戳>/ → 原子替换 settings.yml → 重启 codex-searxng → /healthz 与 /config 运行态回读 → 任何一步失败自动回滚并重新验收。
  5. 隔离测试实例 codex-searxng-soak-test 监听 127.0.0.1:18090,63 个候选全部启用、其余禁用,与生产配置解耦。
  6. 通知文案改为“状态更新 + 生产配置已同步并健康验证”,并带上新增启用/禁用清单。
  7. 通知带轮次时间戳;投递前只读检查本线程队列,已有未投递的 soak 通知时本轮不再叠加,避免积压成一串过期消息。

立即重算结果

按第 1 至 26 轮累计状态重算,生产池 63 个候选中启用 53 个,调整 10 个引擎:

动作 引擎 最近累计状态
禁用 360search、fdroid zero
禁用 mastodon users、lemmy posts、lemmy comments、bing images error
启用 ansa、arxiv、rottentomatoes、naver news healthy

生产配置回写后 SHA256 为 0cb9d03dfeb62968bb10e3cfc5fbbc73c1301ce45c8905b51111aa063c2f80c1,宿主与容器内一致,/healthz 返回 OK,/config 回读启用数 53,默认中英文查询 137 条结果且无 unresponsive 引擎。回退材料在 /srv/codex-hub-backup/agentmeshos/searxng/20261102T230448+0800/。

首个自动闭环样本

第 27 轮(隔离实例)中 mastodon users 返回 40 条结果由 error 转 healthy,脚本自动重新启用并重启生产容器,健康检查通过、运行态回读启用数 54,通知已投递回本线程。说明“测试 → 决策 → 生产 → 验收 → 通知”整条链路可用。

风险

  • timer 是 transient 单元:主机重启后需要重建,本轮沿用原方式,未改为持久化 unit。
  • zero 阈值只有 2 次:偏保守不起来,可能误杀偶发空结果引擎;如误杀明显,调大 ZERO_DISABLE_STREAK 即可回滚恢复。
  • 单次 healthy 即恢复:可能出现抖动引擎反复开关,需观察一周后再决定是否改为连续两次恢复。

⚠️ 风险与未决项

  • 搜狗稳定性未通过:全量 3/3,宽池 0/4 全部 unexpected crash,必须继续观察,不能因为上一轮正常就定为核心。
  • MCP 路由扩展已实现但仍需新会话:当前会话的 MCP 工具 schema 尚未热加载;新会话才会看到 category/engines。显式路由失败的负向回归已经通过。
  • 旧探针已退役:SearXNG 专属探针、timer、service、安装注册、状态目录和文档引用已删除;共享告警适配器与共享邮件通道保留,避免影响其他探针。
  • 长期稳定性未证明:本轮是一次全量加一次宽池复测,不能代替多天 soak test;Brave、DuckDuckGo、Google CSE 已经证明会随时间和出口变化失效。
  • 结果质量只做了抽样:表格主要反映可用性、速度和错误类型,最终质量仍需人工复核。

🔜 下一步

  1. 在新 Codex 会话中验证新增 category/engines 的 schema 可见,并用新闻、IT、论坛各一次真实调用确认模型会按规则使用。
  2. 对宽池中的核心候选和分类候选做多轮 soak test,观察 429、CAPTCHA 和解析错误。
  3. 在确认最终引擎池后,再更新生产 settings.yml 和 Agent 运行态势的状态展示。