web-search-plus

🔍 五合一智能搜索自动路由引擎

🥥132总安装量 50评分人数 52
100% 的用户推荐

OpenClaw官方生态的智能搜索聚合器,零依赖设计,自动路由5大搜索提供商,单密钥即可启动,为开发者和研究者提供高效、隐私可控的统一搜索体验。

A

基本安全,请在特定环境下使用

  • 来自可信来源(Github / Microsoft / 官方仓库)
  • ✅ 零第三方依赖:仅使用 Python 标准库,彻底消除供应链攻击风险
  • ✅ 安全传输强制:所有 API 端点强制 HTTPS,证书验证完整
  • ✅ 最小权限设计:无系统命令执行、无动态代码执行(eval/exec)、无子进程创建
  • ⚠️ 本地密钥存储:API 密钥存储于 config.json,需手动设置 600 文件权限防止泄露
  • ⚠️ 缓存数据残留:搜索结果本地缓存可能包含敏感查询,建议定期 `--clear-cache` 清理

使用说明

核心用法

web-search-plus 是一款统一搜索聚合技能,通过智能自动路由机制在 Serper(Google)、Tavily(研究)、Exa(神经)、You.com(RAG/实时)和 SearXNG(隐私/自托管)五大提供商之间自动选择。用户只需执行 python3 scripts/search.py -q "查询内容",系统即通过多信号分析(意图分类、语言模式、URL/品牌识别)自动匹配最佳提供商,无需手动选择。

配置流程极简:运行交互式向导 python3 scripts/setup.py 或复制 config.example.json 手动配置,仅需一个 API 密钥即可启动。支持环境变量与本地 JSON 双模式存储,SearXNG 更提供完全免费的自托管选项。

显著优点

智能路由降低决策成本:购物查询自动导向 Serper 获取价格信息,研究问题路由至 Tavily 获取深度解释,相似性搜索触发 Exa 神经引擎,实时资讯调用 You.com,隐私需求无缝切换 SearXNG。

零依赖架构保障安全:仅使用 Python 标准库(urllib、json、pathlib 等),彻底消除第三方包供应链攻击风险。代码结构清晰,约 1000 行主脚本实现路由、缓存、提供商处理、输出格式化全链路。

弹性容错与成本控制:单点故障自动回退至备用提供商,免费额度叠加可达 4500+ 次/月(Serper 2500 + Tavily 1000 + Exa 1000),SearXNG 自托管实现零边际成本。

开发者友好设计:JSON 结构化输出含路由置信度评分,支持 --explain-routing 调试路由逻辑,-p provider 强制覆盖,30 秒超时防止资源耗尽,本地缓存(默认 1 小时 TTL)提升响应速度。

潜在缺点与局限性

路由误判可能性:模糊查询(如 "apple" 可能指水果或公司)可能导致路由偏差,需手动覆盖。多语言查询的意图识别准确度依赖训练信号质量。

提供商依赖风险:Serper/Tavily/Exa 非 OpenClaw 核心提供商,服务条款变更或 API 调整可能影响功能。免费额度耗尽后需付费或切换至 SearXNG。

SearXNG 自托管门槛:完全隐私需自行部署 Docker 实例(约 5 美元/月 VPS 成本),技术门槛高于托管服务。公共实例的隐私政策依赖运营方。

缓存隐私权衡:本地缓存提升性能但留存查询历史,敏感场景需定期 --clear-cache 或缩短 TTL。

适合的目标群体

  • 全栈开发者:需要统一接口集成多源搜索,避免维护多个 SDK
  • AI/LLM 应用构建者:RAG 场景需 Tavily/You.com 的上下文优化结果
  • 隐私敏感用户:通过 SearXNG 实现零追踪搜索
  • 初创团队/个人开发者:免费额度覆盖原型验证阶段,渐进式付费扩展
  • 学术研究者:Exa 的论文语义搜索与 Tavily 的深度研究模式

使用风险

性能风险:网络超时(默认 30 秒)或提供商限流可能导致延迟,自动回退机制虽保障可用性但增加响应时间。建议生产环境配置多提供商冗余。

配置安全风险config.json 默认 gitignored 但文件权限不当(非 600)可能导致 API 密钥泄露。建议优先使用环境变量,并设置严格文件权限。

数据残留风险:缓存目录(可自定义 WSP_CACHE_DIR)含搜索历史,共享环境需配置独立缓存路径或禁用缓存。

合规风险:向第三方搜索提供商传输查询内容需符合数据出境及隐私法规,企业用户应审查各提供商数据处理协议(DPA)。

web-search-plus 内容

scripts文件夹
手动下载zip · 51.9 kB
search.pytext/plain
请选择文件