我开源了 OpenReach:给 AI Agent 补上一层免费的 Web 访问基础设施

如果一个 Agent 连最新网页都拿不到,模型再强,也只能在旧知识里打转。
更现实的问题是:“能搜索”不等于“拥有一套稳定、可控、可替换、可自部署的 Web 能力”。

OpenReach Logo

过去一段时间,我一直在做 Agent 相关的工程。

真正开始把 Agent 往业务里放之后,我越来越明显地感受到一个问题:

模型能力在快速提升,但 Agent 访问真实互联网这件事,依然很碎。

搜索网页是一套接口,搜图片又是另一套接口;找到 URL 之后,还得再解决正文读取;换一个搜索厂商,上层 Tool 协议可能又得跟着改;某个免费搜索源失效,整条 Agent 链路就可能直接断掉。

而现在,Web Search 已经越来越像 Agent 的“基础能力”,而不是一个可有可无的插件。

OpenAI 在 ChatGPT Search 的官方介绍里就提到,过去为了得到一个真正有用的网络答案,往往需要多次搜索、不断点开链接、筛选信息源;现在 Web Search 被直接整合进模型的回答流程。OpenAI 的 API 也已经把 searchopen_pagefind_in_page 这类动作放进 Web Search Tool 中。Anthropic 同样提供了 Web Search 和 Web Fetch 工具。

这说明一个趋势已经很明确:

未来的 Agent,不只是“会思考”,还必须具备稳定获取外部世界信息的能力。

但对很多需要自托管、国内部署、企业内部 Agent 或希望降低厂商绑定的场景来说,我更希望这层能力能够掌握在自己手里。

于是有了 OpenReach

GitHub:

https://github.com/changluya/openreach


真正想解决的,不是“再做一个搜索引擎”

OpenReach 的定位其实很简单:

面向 AI Agent 的开源 Web 访问基础设施。

它并不打算重新做一个 Google,也不是要和 Serper、Tavily 这些商业搜索服务竞争。

它想解决的是更靠近 Agent 工程的一层问题:

让 Agent 依赖稳定的能力接口,而不是直接绑定某一家搜索厂商。

我把 Agent 最常用的 Web 能力先收敛成了三个最基础的原语:

search(query)        -> 搜索网页 / 发现信息源
image-search(query)  -> 文搜图 / 发现图片及来源页
read(url)            -> 读取网页 / 提取正文与元数据

对上层 Agent 来说,它只需要知道这三个能力。

至于底层到底使用 Bing、百度、搜狗、360、DuckDuckGo,还是未来换成 SearXNG、Serper、Exa,都不应该让业务侧重新改一遍 Tool。

这也是 OpenReach 最核心的设计。


一个 Agent 联网,为什么需要单独做一层基础设施?

表面上看,搜索 API 很多,直接选一家接入就行。

但实际做下来,至少会遇到三个问题。

第一,搜索能力很容易和厂商绑死

目前主流模型厂商已经把 Web Search 做成托管工具,这种方式体验很好,但本质上还是跟平台绑定。

截至 2026 年 8 月 15 日,OpenAI 官方 API 定价中,Web Search 为 10 美元 / 1000 次调用,另外还会产生相应的搜索内容 Token 费用;Anthropic 官方 Web Search 同样是 10 美元 / 1000 次搜索,再叠加 Token 成本。

对于直接使用大模型官方能力的应用来说,这非常合理。

但如果你正在做的是:

  • 企业内部 Agent
  • 私有化部署
  • 大量检索型任务
  • Research / Deep Research
  • 希望自由切换搜索 Provider 的 Agent 平台

那么你可能会希望把“Web 能力层”从“模型能力层”里拆出来。

OpenReach 项目本身开源免费,内置的免费 Provider 不要求额外购买 Search API Key。

当然,这不代表运行成本为零:服务器、网络以及未来接入商业 Provider 仍然会产生自己的基础设施成本。

第二,Search、Image Search、Read 往往是三套东西

一个真正能工作的 Agent 搜索流程通常不是:

用户问题 -> 搜一下 -> 完成

而更接近:

用户问题
   ↓
Search
   ↓
发现候选来源
   ↓
Read
   ↓
读取正文
   ↓
判断证据是否足够
   ↓
继续 Search / Read
   ↓
多源验证
   ↓
生成答案与引用

如果是内容生产,还会多一个 image-search

所以我没有只做一个 /search 接口,而是直接把 Search / Image Search / Read 三个能力放在一起。

第三,免费搜索源最大的问题不是“不能用”,而是“不够稳定”

免费 Provider 经常会遇到页面 DOM 调整、限流、网络出口差异等问题。

所以 OpenReach 没有把稳定性押在一个 Provider 上,而是做了 Provider SPI 和自动降级。

当前 Web Search 默认链路是:

Bing 中国
  ↓
百度
  ↓
搜狗
  ↓
360 搜索
  ↓
DuckDuckGo

Image Search 则是:

Bing Images
  ↓
百度图片
  ↓
搜狗图片
  ↓
Openverse

上游出现超时、解析失败或空结果时,可以继续尝试下一路。

这不等于商业级 SLA,但对于免费、自托管和早期 Agent 场景来说,至少不会把整条链路完全押在一个网页结构上。


image-20260815145607497

现在的 OpenReach,具体能做什么?

当前版本已经把最基础的一套闭环跑通了。

能力接口用途
Web SearchPOST /api/web/search搜索网页、官网、新闻、博客、技术资料
Image SearchPOST /api/web/image-search文搜图、发现图片与来源页
Web ReadPOST /api/web/read读取网页标题、正文、元数据和链接
Health CheckGET /api/web/health部署及 Skill 初始化连通性检查
Provider Fallback内部能力Provider 失败后自动切换
SSRF ProtectionRead 内部能力降低危险 URL 访问风险
OpenReach SkillPython CLI让 Agent 直接调用三种 Web 能力

searchimage-search 都支持 region 参数。

不填写时默认为:

region = auto
provider = auto

也可以显式传入 CNJPUS 等区域,让具体 Provider 做 best-effort 映射。


官网、新闻、技术文档,甚至公众号公开文章,都可以进入同一条 Agent 链路

OpenReach 并不限定搜索内容的类型。

现在比较适合的场景包括:

官网 / 产品资料

Agent 可以先搜索公司官网、产品页、解决方案、价格页、更新日志,再继续读取正文。

技术文档 / GitHub / 博客

适合 Coding Agent、研发助手或技术调研场景:先发现信息源,再把页面正文交给模型分析。

新闻 / 行业资讯

先搜索事件相关来源,再读取多篇原文进行汇总和交叉判断。

Research / Deep Research

把 Search 和 Read 组合成循环,让 Agent 不断发现来源、补证据,而不是只依赖一次搜索结果。

微信公众号公开文章

对于公开可访问、并且已经被搜索引擎收录的公众号文章,可以尝试通过 Search 发现链接,也可以直接把公开文章 URL 交给 Read。

这里需要特别说明:微信页面受收录、访问策略和反爬影响比较明显,所以当前属于 best-effort,并不承诺所有公众号文章都能稳定搜索和读取。

这也是我希望项目一直保持的一点:

支持什么就明确写什么,做不到的地方也明确写出来。


我希望“部署一个 Agent 搜索服务”只需要一条命令

为了让这个东西真正容易用,我不希望使用者先配一堆环境。

当前最简单的启动方式就是一条 Docker 命令:

docker run -d \
  --name openreach \
  --restart unless-stopped \
  -p 8080:8080 \
  codercl/openreach:latest

启动完成后,访问:

http://localhost:8080/

就能直接看到 OpenReach 自带的官网。

文档也直接内置在 Spring Boot 服务里:

快速启动    http://localhost:8080/docs/
接口文档    http://localhost:8080/docs/api.html

不需要再部署一套单独的前端或文档服务。

对于一个基础设施型开源项目,我更希望它的体验是:

拉起来,马上能看;复制接口,马上能测。


除了 HTTP API,我还给它做了一个可以直接交给 Agent 的 Skill

我后来又做了一件自己觉得比较有意思的事情:

把 OpenReach 自己封装成了 OpenReach Skill。

服务部署好后,可以直接下载 Skill,然后只提供一次服务器 IP:

python3 scripts/openreach.py init 192.168.1.20

初始化过程会先请求:

GET /api/web/health

确认服务连通之后,再把服务器地址写入 Skill 自己的 config.json

之后就不需要每次输入服务地址了:

python3 scripts/openreach.py doctor

python3 scripts/openreach.py search "AI Agent" \
  --region auto \
  --provider auto \
  --limit 5

python3 scripts/openreach.py image-search "杭州西湖" \
  --region auto \
  --provider auto \
  --limit 8

python3 scripts/openreach.py read \
  "https://spring.io/projects/spring-boot/"

Skill 本身只使用 Python 标准库,不额外依赖第三方 Python 包。


真正想复刻的,不是 ChatGPT 的“搜索框”,而是它背后的搜索思路

OpenAI 在介绍 ChatGPT Search 时提到,一个真正有用的网络答案,过去经常需要多次查询、不断查看不同来源,再把信息组合起来。

这也是我在设计 OpenReach Skill 时重点参考的地方。

我没有把 SOP 写成“调用一次 search 然后总结”,而是抽象成了:

Query Planning
    ↓
Search
    ↓
Source Selection
    ↓
Read
    ↓
Evidence Check
    ↓
必要时继续 Search / Read
    ↓
Cross-source Verification
    ↓
Citation

换句话说:

Search 只负责发现信息,Read 才开始理解信息,多源验证之后才应该进入最终回答。

这套流程更适合 Research Agent、资讯分析、事实核查和需要引用来源的场景。

OpenAI 当前的 Web Search API 本身也已经暴露了 searchopen_pagefind_in_page 等不同动作,并且将引用信息作为搜索结果的一部分返回。

所以我越来越觉得,未来 Agent 的 Web 能力不会只是“给模型塞一个搜索 API”。

它更像是一条完整的信息获取流水线。


我也不想把 OpenReach 包装成一个“万能搜索”

当前 OpenReach 还是一个很早期的版本。

有几条边界我认为必须讲清楚。

第一,目前的 read 主要针对普通 HTML / SSR 页面,强 JavaScript 动态渲染页面并不是它当前最擅长的场景,后续计划通过 Playwright / Browser Reader 扩展。

第二,目前没有做跨 Provider 的统一 Pagination、Freshness 和商业级精准 Geo。

第三,Bing、百度、搜狗、360、DuckDuckGo 这些免费 Provider 主要是对公开搜索结果页进行 best-effort 解析,并不是对应厂商提供的商业 Search API。

第四,OpenReach 不准备去建设验证码绕过、住宅代理池、账号池这一类重反爬体系。

如果一个业务真的需要稳定 Google SERP、Shopping、Places、高 QPS 或商业 SLA,我更倾向于通过 Provider SPI 接入 Serper 等商业服务,而不是自己重新造一套反爬基础设施。

这其实也是 OpenReach 的设计原则:

把接口统一,把 Provider 留成可替换的。


最后:我更想把它做成 Agent 与互联网之间的一层“公共接口”

OpenReach 现在还很小。

但我想做的方向其实比较明确:

不是再做一个搜索产品,而是把 Agent 访问互联网时最常见的能力抽出来,形成一层足够轻、足够开放、可以自己部署的基础设施。

今天是:

Search
Image Search
Read

接下来可以继续往里加入:

Playwright Dynamic Read
SearXNG Provider
Commercial Provider
News Search
Places / Maps Search
Rerank
Source Quality
Citation Pipeline

当上层 Agent 只认一套稳定协议之后,底层能力就可以不断替换和增强。

这可能才是我觉得 OpenReach 最有价值的地方。

项目目前已经开源,如果你也在做 Agent、Research、联网搜索、内容生产或者企业内部 AI 应用,欢迎拿去试。

GitHub:

https://github.com/changluya/openreach

有 Bad Case、Provider 接入需求或者新的使用场景,也欢迎一起交流。


参考资料

  1. OpenReach GitHub
    https://github.com/changluya/openreach

  2. OpenAI:Introducing ChatGPT Search
    https://openai.com/index/introducing-chatgpt-search/

  3. OpenAI API:Web Search Tool
    https://developers.openai.com/api/docs/guides/tools-web-search

  4. OpenAI API Pricing(Web Search 价格,以 2026-08-15 页面为准)
    https://developers.openai.com/api/docs/pricing

  5. Anthropic:Web Search Tool
    https://docs.anthropic.com/en/docs/build-with-claude/tool-use/web-search-tool

  6. Anthropic Pricing(Web Search 价格,以 2026-08-15 页面为准)
    https://docs.anthropic.com/en/docs/about-claude/pricing

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐