OpenAI Atlas: 用於 AI 驅動瀏覽的 OWL 架構
OpenAI 開發了 OWL (OpenAI's Web Layer),這是一個全新的架構層,將 Chromium 運行時與主應用程式進程分離,為 Atlas 瀏覽器提供動力。這種解耦設計讓 Atlas 能夠結合 Chromium 的網頁相容性,以及使用 SwiftUI 和 AppKit 构建的高性能原生 UI,同時為代理型 (agentic) AI 瀏覽提供穩固的基礎。
OWL 架構:將 Chromium 與應用程式解耦
為了避免標準 Chromium 啟動序列和執行緒模型的限制,OpenAI 開發了 OWL,將 Chromium 瀏覽器進程作為一個獨立的服務層,運行在 Atlas 主應用程式進程之外。這種轉變將瀏覽器引擎移至獨立進程,類似於 Chromium 隔離分頁的方式,但是在應用程式層級進行。
這種架構提供了幾個技術優勢:
- 原生 UI 效能: Atlas 使用 SwiftUI、AppKit 和 Metal 构建,能夠實現僅靠重新設計 Chromium UX 所難以達到的豐富動畫和視覺效果。
- 加速啟動: 由於 Chromium 在背景異步啟動,Atlas UI 幾乎可以立即將像素渲染到螢幕上,無需等待引擎初始化。
- 提高穩定性: 透過隔離引擎,即使 Chromium 主執行緒掛起或進程崩潰,Atlas 仍能保持運作。
- 開發速度: 大多數工程師可以將 OWL 作為預建的二進位檔 (prebuilt binary) 使用,將建置時間從數小時縮短至數分鐘,讓新團隊成員在入職第一天就能合併更改。
- 簡化維護: 與上游 Chromium 源碼相比,較小的差異 (diff) 使整合新版本的引擎變得更加容易。
技術實現與通訊
Atlas 作為 OWL Client 運行,而 Chromium 瀏覽器進程則作為 OWL Host。兩者之間的通訊透過 Chromium 的內部訊息傳遞系統 Mojo 處理,並使用自定義的 Swift 和 TypeScript 綁定。
API 與服務層
OWL 客戶端函式庫提供了一個 Swift API,抽象化了以下主機端概念:
- Session: 主機的全局配置與控制。
- Profile: 特定使用者設定檔的瀏覽器狀態管理。
- WebView: 對單個網頁內容的控制,包括導航、縮放和輸入。
- WebContentRenderer: 輸入事件轉發與渲染器回饋的管理。
- LayerHost/Client: UI 與 Chromium 之間的合成資訊交換。
渲染管線
Atlas 使用委派渲染模型 (delegated rendering model) 來跨進程邊界投影像素。WebView 會被切換到一個共享的合成容器中。在 Chromium 端,此容器是一個由 CALayer 支持的 gfx::AcceleratedWidget。Atlas 透過 NSView 使用私有的 CALayerHost API 來嵌入此圖層。
同樣的技術也被用於將 Chromium 的原生 Views UI(例如權限提示)和獨立的彈出式小工具(如顏色選擇器或 <select> 下拉選單)投影到 Atlas 介面中。
輸入事件處理
由於 Chromium 在隱藏進程中運行,Atlas Swift 客戶端函式庫會在將事件轉發給 Chromium 之前,將 macOS 的 NSEvents 轉換為 Blink 的 WebInputEvent 模型。如果網頁未處理某個事件,該事件會返回給客戶端,並在客戶端重新合成為 NSEvent,供應用程式的其他部分處理。
對代理型瀏覽的支持
OWL 包含針對「代理模式 (Agent mode)」的特定優化,在此模式下,AI 模型會與網頁進行互動:
為 AI 進行視覺合成: 為了為 AI 模型提供單一且連貫的螢幕圖像,Atlas 會將獨立的彈出視窗(如下拉選單)重新合成回正確座標的主頁面圖像中。
沙盒化輸入: 代理生成的事件會直接路由到渲染器,繞過特權瀏覽器層。這可以防止 AI 合成可能觸發與網頁內容無關的瀏覽器層級動作的鍵盤快捷鍵。
隔離儲存: 代理工作階段可以使用 Chromium 的
StoragePartition基礎設施在臨時的「登出」環境中運行。這為 Cookie 和網站數據創建了隔離的記憶體內儲存,一旦工作階段結束就會被丟棄,從而允許多個隔離的代理工作階段在不同分頁中同時運行。