我们如何构建OWL——ChatGPT浏览器Atlas背后的新架构

OpenAI Blog 产品

摘要

# 我们如何构建OWL——ChatGPT浏览器Atlas背后的新架构 来源:[https://openai.com/index/building-chatgpt-atlas/](https://openai.com/index/building-chatgpt-atlas/) 作者:*Ken Rockot(技术人员)和 Ben Goodger(ChatGPT Atlas 工程主管)* 上周,我们[发布了ChatGPT Atlas⁠](https://openai.com/index/introducing-chatgpt-atlas/),这是一种用ChatGPT作为您的助手来浏览网页的全新方式。除了是一个功能完整的网络浏览器外,Atlas还提供了

深入探讨驱动ChatGPT Atlas的新架构OWL——解耦Chromium、实现快速启动、丰富UI和ChatGPT驱动的智能浏览功能。
查看原文
查看缓存全文

缓存时间: 2026/04/20 14:53

# 我们如何构建 OWL——支撑我们基于 ChatGPT 的浏览器 Atlas 的新架构 来源:https://openai.com/index/building-chatgpt-atlas/ 作者:*Ken Rockot,技术人员和 Ben Goodger,ChatGPT Atlas 工程负责人* 上周,我们推出了 [ChatGPT Atlas](https://openai.com/index/introducing-chatgpt-atlas/),这是一种用 ChatGPT 陪伴你浏览网页的全新方式。除了是一款功能完整的网络浏览器,Atlas 还展现了未来的愿景:一个你可以在互联网上随处携带 ChatGPT,向它提问、征求建议和完成任务的世界。在这篇文章中,我们揭示了产品最复杂的工程方面之一:我们如何将 ChatGPT 转变为一款随着使用而变得越来越有用的浏览器。 让 ChatGPT 成为网络真正的副驾驶,意味着要重新思考浏览器的整个架构:将 Atlas 与 Chromium 运行时分离。这需要开发一种新的 Chromium 集成方式,使我们能够实现产品目标:即时启动、即使打开更多标签页也能保持响应,并为代理用例建立坚实的基础。 ChatGPT Atlas 主屏幕在浏览器中显示,显示一个提示气泡,上面写着"我们今天应该做什么?"位于输入栏上方。输入字段下方是建议的提示,如查找旧金山附近可出租的海滨住宅、总结法网公开赛、创建 1770 年代新英格兰风格的鳄梨椅图像以及改进代码可读性。背景有柔和的蓝色和淡紫色渐变。 ## Chromium 作为自然的构建块 Chromium 是一个自然的构建块。它提供了最先进的网络引擎,具有强大的安全模型、公认的性能记录和无与伦比的网络兼容性。此外,它由一个全球社区开发,不断对其进行改进。它是现代桌面网络浏览器的常见选择。 我们才华横溢的设计团队对用户体验有宏大目标,包括为代理模式等功能提供丰富的动画和视觉效果。这要求我们的工程团队利用最现代的本地框架来构建 UI(SwiftUI、AppKit 和 Metal),而不是简单地改变开源 Chromium UX 的外观。因此,Atlas 的 UI 是对整个应用程序 UX 的全面重建。 我们还有其他产品目标,如快速启动时间和支持数百个标签页而不影响性能。这些目标用现成的 Chromium 很难实现,因为 Chromium 对从引导序列、线程模型到标签页模型的许多细节都有明确规定。我们考虑在这里做出重大改变,但我们希望保持针对 Chromium 的补丁集有针对性,这样我们就可以快速集成新版本。 为了确保我们的开发速度最大化,我们需要想出一种不同的方式来集成和驱动 Chromium 运行时。我们技术投资的试金石不仅是它能够加快实验、迭代和交付新功能的速度,还能让我们维持 OpenAI 工程文化的核心部分:第一天就开始交付。每个新工程师都会在他们第一天下午做出一个小改动并合并。我们需要确保即使 Chromium 检出和构建需要数小时,这也是可能的。 ## 我们的答案:OWL 我们对这些挑战的解决方案是构建一个我们称为 **OWL:OpenAI 的网络层** 的新架构层。OWL 是我们对 Chromium 的集成,涉及在 Atlas 应用程序进程 *之外* 运行 Chromium 的浏览器进程。这样想象:Chromium 通过将标签页移到单独的进程中革新了浏览器。我们把这个想法更进一步,将 Chromium 本身移出主应用程序进程,放入一个隔离的服务层。 这一转变带来了一系列好处: - **更简洁、现代的应用:** Atlas 几乎完全用 SwiftUI 和 AppKit 构建。一种语言,一个技术栈,一个干净的代码库。 - **更快的启动:** Chromium 在后台异步启动。Atlas 不需要等待——像素几乎瞬间出现在屏幕上。 - **与卡顿和崩溃隔离:** Chromium 是一个强大而复杂的网络引擎。如果它的主线程挂起,Atlas 不会。如果它崩溃,Atlas 保持运行。 - **更少的合并麻烦:** 因为我们不是基于那么多 Chromium 开源 UI 构建,我们对上游 Chromium 的改动更小,更容易维护。 - **更快的迭代:** 大多数工程师从不需要在本地构建 Chromium。OWL 作为预构建的二进制文件在内部交付,所以 Atlas 构建只需几分钟,而不是几小时。 因为我们团队中的大多数工程师不经常从源代码构建 Chromium,开发可以进行得更快——甚至新团队成员也可以在他们第一个下午合并简单的改动。 ## 架构概述 在高层,Atlas 浏览器是 **OWL 客户端**,Chromium 浏览器进程是 **OWL 主机**。他们通过 IPC 通信,具体是 [Mojo](https://chromium.googlesource.com/chromium/src/+/main/mojo/README.md)(Chromium 自己的消息传递系统)。我们为 Mojo 编写了自定义 Swift(甚至 TypeScript)绑定,所以我们的 Swift 应用可以直接调用主机端接口。 OWL 客户端库公开了一个简单的公共 Swift API,它抽象了主机服务层公开的几个关键概念: - **Session:** 全局配置和控制主机 - **Profile:** 管理特定用户配置文件的浏览器状态 - **WebView:** 控制和嵌入各个网络内容(例如渲染、输入、导航、缩放等) - **WebContentRenderer:** 将输入事件转发到 Chromium 的渲染管道并从渲染器接收反馈 - **LayerHost/Client:** 在 UI 和 Chromium 之间交换合成信息 还有一个广泛的服务端点范围,用于管理高级功能,如书签、下载、扩展和自动填充。 ## 渲染和合成 WebView 在客户端应用中共享一个互斥的呈现空间,并在共享合成容器中进行交换。例如,浏览器窗口通常有一个可见的共享容器,在标签条中选择一个标签会将该标签的 WebView 交换到容器中。 在 Chromium 端,此容器对应于一个 `gfx::AcceleratedWidget`,最终由 `CALayer` 支持。我们将该层的上下文 ID 公开给客户端,其中 `NSView` 使用私有 `CALayerHost` API 嵌入它。下拉菜单或颜色选择器等特殊情况由 Chromium 在单独的弹出小部件中呈现,使用相同的方法。它们没有 `content::WebContents`,但它们 *确实* 有自己的 `content::RenderWidgetHostView` 和 `gfx::AcceleratedWidget`,所以相同的委派渲染模型适用。 OWL 在内部将视图几何与 Chromium 端保持同步,以便可以相应地更新 GPU 合成器,并且总是可以生成正确大小和设备比例的图层内容。我们也重复使用这种技术来选择性地将 Chromium 自己的本地 Views UI 的元素投影到 Atlas 中(这对于快速引导权限提示等功能也很有用,而无需在 SwiftUI 中从头构建替代品)。 这种技术大量借鉴了 Chromium 现有的 macOS 可安装网络应用基础设施。 ## 输入事件处理 Chromium UI 在将平台事件(如 macOS NSEvents)转换为 Blink 的 WebInputEvent 模型,然后转发到渲染器之前。但由于 OWL 在隐藏的进程中运行 Chromium,我们在 Swift 客户端库中自己进行该转换,并将已翻译的事件转发到 Chromium。从那里,它们遵循真实输入事件通常对网络内容遵循的相同生命周期。 这包括每当页面指示它没有处理事件时,将事件 *返回* 给客户端。发生这种情况时,我们重新合成 NSEvent 并给应用程序的其余部分一个处理输入的机会。 ## 代理浏览的独特挑战 Atlas 的代理浏览功能为我们的渲染、输入事件转发和数据存储方法带来了一些独特的挑战。我们的计算机使用模型期望单个屏幕图像作为输入。但某些 UI 元素,如下拉菜单,会在标签页边界之外的单独窗口中呈现。在代理模式中,我们将这些弹出窗口合成回主页面图像的正确坐标,以便模型在一帧中看到完整的上下文。 对于输入,我们应用相同的原则:代理生成的事件直接路由到渲染器,永远不会通过特权浏览器层。这在自动控制下保持了沙箱边界。例如,我们不希望这类事件合成浏览器快捷键,使浏览器做与显示的网络内容无关的事情。 代理浏览也可以在临时的"已登出"上下文中运行。我们使用 Chromium 的 `StoragePartition` 基础设施来启用隔离的内存存储,而不是共享用户现有的隐身配置,这可能会泄露状态。每个代理会话从头开始,结束时,所有 Cookie 和网站数据都会被丢弃。你可以运行多个"已登出"代理会话,每个会话在自己的浏览器标签页中,每个都完全与其他隔离。 ## 展望 所有这些都要感谢全球 Chromium 社区及其为现代网络构建基础的不可思议的工作。OWL 以一种新的方式建立在该基础之上:将引擎与应用程序解耦,融合世界一流的网络平台与现代本地框架,并解锁一个更快、更灵活的架构。 通过重新思考浏览器如何容纳 Chromium,我们创造了新种类体验的空间:更顺畅的启动、更丰富的 UI、与操作系统其余部分的更紧密集成,以及以想法的速度运动的开发循环。 如果这听起来像是你的挑战,请查看我们的职位空缺,以在 Atlas 上工作为[软件工程师、Atlas](https://openai.com/careers/software-engineer-atlas-san-francisco/)、[软件工程师、iOS](https://openai.com/careers/software-engineer-ios-san-francisco/) 等[更多](https://openai.com/careers/search/?c=e1e973fe-6f0a-475f-9361-a9b6c095d869%2Cf002fe09-4cec-46b0-8add-8bf9ff438a62%2Cab2b9da4-24a4-47df-8bed-1ed5a39c7036)。

相似文章

推出 ChatGPT Atlas,内置 ChatGPT 的浏览器

OpenAI Blog

OpenAI 推出了 ChatGPT Atlas,一款内置 ChatGPT 的网络浏览器,让用户可以在整个网络上访问 AI 助手,具有集成记忆、上下文感知和 Agent 模式功能。该产品今天在 macOS 上为免费版、Plus、Pro 和 Go 用户推出,Windows、iOS 和 Android 版本即将推出。

介绍 ChatGPT agent

OpenAI Blog

OpenAI 推出 ChatGPT agent,一个统一的智能体系统,结合了网页浏览、深度研究和对话能力,能够自主处理复杂的多步骤任务。该智能体可以浏览网站、分析信息、运行代码和生成交付成果,同时通过权限请求让用户保持控制。

认识引领ChatGPT最大变革的OpenAI工程师

Wired

OpenAI正在将ChatGPT转变为一个超级应用,一个覆盖生活方方面面的个性化AI助手,由新任核心产品负责人Thibault Sottiaux主导,他此前曾打造了Codex。

持续强化ChatGPT Atlas抵御提示注入攻击

OpenAI Blog

OpenAI宣布通过对抗训练和强化防护措施,持续加固ChatGPT Atlas以抵御提示注入攻击,包括建立快速响应循环,在新型攻击策略出现于实际环境前即发现并缓解。