🎯 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 |
因此“按实际需求指向不同通道”是可实现的,当前状态是:
- SearXNG 层已支持:
categories、engines和!bang都可用。 - MCP 封装层已扩展:
local_search_registry.search_web新增可选category和engines;显式路由失败时返回provider=none与explicit_route=true,不再静默回退。 - 当前会话仍是旧 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 |
生产配置一变,测试口径就跟着变 |
修正后的链路
- 执行器版本化为
scripts/maintenance/agentmeshos-searxng-soak.py,旧的temp/searxng-soak/soak_runner.py已退役归档。 - 每轮把 16 个结果写入
state.json#engine_history、observations.jsonl和production-selection.json,累计不覆盖。 - 决策策略:
error立即禁用;zero连续两次禁用;healthy立即恢复;非候选池引擎保持禁用。 - 生产同步:备份到
/srv/codex-hub-backup/agentmeshos/searxng/<时间戳>/→ 原子替换settings.yml→ 重启codex-searxng→/healthz与/config运行态回读 → 任何一步失败自动回滚并重新验收。 - 隔离测试实例
codex-searxng-soak-test监听127.0.0.1:18090,63 个候选全部启用、其余禁用,与生产配置解耦。 - 通知文案改为“状态更新 + 生产配置已同步并健康验证”,并带上新增启用/禁用清单。
- 通知带轮次时间戳;投递前只读检查本线程队列,已有未投递的 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 已经证明会随时间和出口变化失效。
- 结果质量只做了抽样:表格主要反映可用性、速度和错误类型,最终质量仍需人工复核。
🔜 下一步
- 在新 Codex 会话中验证新增
category/engines的 schema 可见,并用新闻、IT、论坛各一次真实调用确认模型会按规则使用。 - 对宽池中的核心候选和分类候选做多轮 soak test,观察 429、CAPTCHA 和解析错误。
- 在确认最终引擎池后,再更新生产
settings.yml和 Agent 运行态势的状态展示。