Context
当前 ApeRAG web search 实现走 aperag/domains/web_access/search/ 双 provider chain:
- Jina (优先) — 用户在 model-platform 配
provider_type=jina 后 https://s.jina.ai/ 调用
- DuckDuckGo (fallback) — 默认 fallback,无需 key
国内私有化部署场景下两条路都不理想:
- DuckDuckGo:GFW 屏蔽,国内 deploy 上 timeout / connection-reset 频繁
- Jina:可用但需用户自配 API key + 单次延迟 ~5-9s(且需用户自己注册 jina.ai 账号)
→ 默认部署后用户开箱体验是「web search 不可用」,需要用户额外配置 key 才能用。
Market landscape (主流 chatbot web search 实现方式)
| 类别 |
代表产品 |
search backend |
ApeRAG 能否复制 |
| 商业 SaaS 内嵌付费 key |
ChatGPT / Claude.ai / Perplexity / Gemini |
Bing API / 自有 crawler / Google |
❌ 私有化部署不能 bake key |
| 国内大厂自家搜索基建 |
百度文心 / 字节豆包 / 腾讯元宝 / 阿里通义 / 月之暗面 / 智谱 |
各家自营 search |
❌ ApeRAG 无自有基建 |
| 自部署开源 meta-search |
(n/a) |
SearxNG 聚合 Google/Bing/Baidu/搜狗等 |
✅ 最适合 ApeRAG 私有化部署 |
| 多 paid SaaS 兜底 |
(n/a) |
Bing API + Tavily + Brave + SerpAPI |
✅ 但需用户配 1+ key |
Proposal: SearxNG + 多 search provider 矩阵
核心改动
新增 3 个 search provider 选项,让 deploy 选最贴合自己网络环境的:
1. SearxNG (推荐 P0) — 开源 meta-search,无 key,docker 自部署
- 仓库: https://github.com/searxng/searxng
- 用户 deploy:
docker-compose.yaml 加一个 searxng container(参考社区 docker-compose)
- ApeRAG 加
aperag/domains/web_access/search/providers/searxng_search_provider.py
- 配置:
SEARXNG_BASE_URL=http://searxng:8080(.env 一行)
- 国内可用 (SearxNG backend 配置中可启用 Baidu / 搜狗 / 必应国内版)
2. Tavily (推荐 P1) — 专为 AI agent 设计,免费 1000/mo
- API: https://tavily.com/
- 1 个 API key 即可,国际可用,对比 Jina 配置更简单(不需要分别配 key + bot)
- ApeRAG 加
aperag/domains/web_access/search/providers/tavily_search_provider.py
- 用户在 model-platform 配
provider_type=tavily
3. Bing Search API (P2) — Microsoft Cognitive Services
Provider 优先级链 (per user model-platform 配置)
类似现有 Jina 优先 → DuckDuckGo fallback 模式,扩展为:
SearxNG (if SEARXNG_BASE_URL set)
→ Bing API (if user configured)
→ Tavily (if user configured)
→ Jina (if user configured)
→ DuckDuckGo (free, public)
实施层在 _search_with_jina_fallback 改名 _search_with_provider_chain + 按优先级链走。
配套改动
envs/env.template 加 SEARXNG_BASE_URL= 默认空 + 注释解释如何启 SearxNG container
aperag/domains/web_access/README-zh.md 加 SearxNG 自部署 guide
- model-platform UI 加 Tavily / Bing 作可选 provider type
- 默认 deploy 体验:
docker-compose up 启 ApeRAG + SearxNG → 国内开箱可用 web search
Acceptance criteria
Out of scope
- 自建中文搜索 crawler(需要法务 / 反爬 / robots.txt 评估,单独 issue)
- 与厂商谈 Bing API 批发授权(私有化部署不适用)
Related
- Wave 10/11 close-out: web search 失败诊断(msg=29ef1397 thread)
- Jina parser bug fix: PR pending Bryce hot-fix(
X-Return-Format: json → Accept: application/json,独立 PR)
Context
当前 ApeRAG web search 实现走
aperag/domains/web_access/search/双 provider chain:provider_type=jina后https://s.jina.ai/调用国内私有化部署场景下两条路都不理想:
→ 默认部署后用户开箱体验是「web search 不可用」,需要用户额外配置 key 才能用。
Market landscape (主流 chatbot web search 实现方式)
Proposal: SearxNG + 多 search provider 矩阵
核心改动
新增 3 个 search provider 选项,让 deploy 选最贴合自己网络环境的:
1. SearxNG (推荐 P0) — 开源 meta-search,无 key,docker 自部署
docker-compose.yaml加一个 searxng container(参考社区 docker-compose)aperag/domains/web_access/search/providers/searxng_search_provider.pySEARXNG_BASE_URL=http://searxng:8080(.env一行)2. Tavily (推荐 P1) — 专为 AI agent 设计,免费 1000/mo
aperag/domains/web_access/search/providers/tavily_search_provider.pyprovider_type=tavily3. Bing Search API (P2) — Microsoft Cognitive Services
aperag/domains/web_access/search/providers/bing_search_provider.pyProvider 优先级链 (per user model-platform 配置)
类似现有 Jina 优先 → DuckDuckGo fallback 模式,扩展为:
实施层在
_search_with_jina_fallback改名_search_with_provider_chain+ 按优先级链走。配套改动
envs/env.template加SEARXNG_BASE_URL=默认空 + 注释解释如何启 SearxNG containeraperag/domains/web_access/README-zh.md加 SearxNG 自部署 guidedocker-compose up启 ApeRAG + SearxNG → 国内开箱可用 web searchAcceptance criteria
aperag/domains/web_access/search/providers/searxng_search_provider.py实现 + 单测aperag/domains/web_access/search/providers/tavily_search_provider.pyaperag/domains/web_access/search/providers/bing_search_provider.py_search_with_provider_chain替代_search_with_jina_fallback,按优先级走envs/env.template加SEARXNG_BASE_URLenv vardocker-compose.yaml增加 SearxNG service (optional profile)README-zh.md+ 国内部署 guide 更新Out of scope
Related
X-Return-Format: json→Accept: application/json,独立 PR)