OpenAI Atlas: 用于 AI 驱动浏览的 OWL 架构
OpenAI 开发了 OWL(OpenAI 的 Web 层),这是一个新的架构层,它将 Chromium 运行时与主应用进程分离,以驱动 Atlas 浏览器。这种解耦使 Atlas 能够将 Chromium 的网页兼容性与基于 SwiftUI 和 AppKit 构建的高性能原生 UI 相结合,同时为具备代理能力的 AI 浏览提供坚实的基础。
OWL 架构:将 Chromium 与应用解耦
为了避免标准 Chromium 启动序列和线程模型的限制,OpenAI 开发了 OWL,以将 Chromium 浏览器进程作为隔离的服务层运行在主 Atlas 应用进程之外。此举将浏览器引擎移至独立进程,类似于 Chromium 隔离标签页的方式,但应用于应用级别。
此架构提供了几项技术优势:
- 原生 UI 性能: Atlas 使用 SwiftUI、AppKit 和 Metal 构建,使得可以实现仅通过重新皮肤 Chromium UX 难以达到的丰富动画和视觉效果。
- 加速启动: 由于 Chromium 在后台异步启动,Atlas UI 能够几乎瞬间将像素渲染到屏幕上,无需等待引擎初始化。
- 提高稳定性: 通过隔离引擎,即使 Chromium 主线程挂起或进程崩溃,Atlas 仍能保持运行。
- 开发速度: 大多数工程师可以将 OWL 作为预构建二进制文件使用,从而将构建时间从数小时缩短到数分钟,并使新团队成员能够在第一天就合并更改。
- 简化维护: 与上游 Chromium 源代码相比的差异更小,这使得集成新版本引擎变得更加容易。
技术实现与通信
Atlas 作为 OWL 客户端 运行,而 Chromium 浏览器进程则充当 OWL 主机。两者之间的通信通过 Mojo 进行,这是 Chromium 的内部消息传递系统,使用自定义的 Swift 和 TypeScript 绑定。
API 和服务层
OWL 客户端库提供一个 Swift API,用于抽象以下主机端概念:
- 会话: 主机的全局配置和控制。
- 配置文件: 特定用户配置文件的浏览器状态管理。
- WebView: 对单个网页内容的控制,包括导航、缩放和输入。
- WebContentRenderer: 输入事件转发和渲染器反馈的管理。
- LayerHost/Client: UI 与 Chromium 之间的合成信息交换。
渲染管道
Atlas 使用委托渲染模型将像素投射到进程边界。WebView 被交换到一个共享的合成容器中。在 Chromium 侧,此容器是一个由 CALayer 支撑的 gfx::AcceleratedWidget。Atlas 通过 NSView 使用私有的 CALayerHost API 将此层嵌入。
此相同技术也用于将 Chromium 的原生 Views UI(如权限提示)和独立的弹出窗口小部件(如颜色选择器或 <select> 下拉菜单)投射到 Atlas 界面中。
输入事件处理
由于 Chromium 在隐藏进程中运行,Atlas Swift 客户端库在将事件转发给 Chromium 之前,会将 macOS NSEvents 转换为 Blink 的 WebInputEvent 模型。如果页面未处理某个事件,则会将其返回给客户端,客户端会将其重新合成为 NSEvent,以供应用其余部分处理。
对代理浏览的支持
OWL 包含特定的优化,以支持 “代理模式”,在这种模式下,AI 模型与网页进行交互:
- AI 的视觉合成: 为了为 AI 模型提供单个连贯的屏幕图像,Atlas 会将独立的弹出窗口(如下拉菜单)在正确坐标处合成回主页面图像。
- 沙盒输入: 由代理生成的事件会直接路由到渲染器,绕过特权浏览器层。这可以防止 AI 合成可能触发与网页内容无关的浏览器级操作的键盘快捷键。
- 隔离存储: 代理会话可以使用 Chromium 的
StoragePartition基础设施在临时的 “已登出” 上下文中运行。这会创建隔离的、内存中的 Cookie 和站点数据存储,这些存储在会话结束时会被丢弃,从而允许多个隔离的代理会话在不同标签页中同时运行。