![]()
新智元報(bào)道
編輯:桃子 好困
【新智元導(dǎo)讀】OpenAI首個(gè)瀏覽器Atlas,背后技術(shù)秘密終于公開了!借用了谷歌Chromium,但關(guān)鍵創(chuàng)新在于全新架構(gòu)OWL。據(jù)稱,新入職員工一個(gè)下午就能交代碼。
OpenAI瀏覽器Atlas核心架構(gòu),終于揭秘!
今天一早,Atlas負(fù)責(zé)人Ben Goodger公開一篇博文,背后OWL架構(gòu)首次亮相。
![]()
上一周,OpenAI醞釀已久的終極瀏覽器ChatGPT Atlas?終于現(xiàn)世。它開啟了一種全新的網(wǎng)頁瀏覽方式,全程還可以和ChatGPT交互。
為了讓ChatGPT成為得力的「領(lǐng)航員」,團(tuán)隊(duì)重構(gòu)了瀏覽器的架構(gòu)OWL。
![]()
OWL架構(gòu)自畫像
其中,最關(guān)鍵的一步在于:將Atlas應(yīng)用與Chromium運(yùn)行時(shí),進(jìn)行分離。
為此,他們開發(fā)了一種全新的Chromium集成方式,由此一來,Atlas可以做到——
即時(shí)啟動(dòng)
在打開大量標(biāo)簽頁時(shí),仍能保持流暢響應(yīng)
為AI智能體用例奠定基礎(chǔ)
![]()
原生框架OWL,重構(gòu)UI體驗(yàn)
為何要用谷歌Chromium去做「套殼」?
OpenAI給出了解釋,Chromium是一個(gè)理想的構(gòu)件基礎(chǔ)。
它提供了一流的網(wǎng)頁引擎,擁有強(qiáng)大的安全模型、久經(jīng)考驗(yàn)的性能表現(xiàn)和無與倫比的網(wǎng)頁兼容性。
此外,它由一個(gè)全球化的社區(qū)持續(xù)開發(fā)和改進(jìn),是現(xiàn)代桌面網(wǎng)頁瀏覽器的首選方案。
![]()
另一方面,OpenAI設(shè)計(jì)團(tuán)隊(duì)為「用戶體驗(yàn)」設(shè)立了宏偉目標(biāo),比如為「智能體模式」等功能實(shí)現(xiàn)豐富的動(dòng)畫和視覺效果。
這就要求,工程團(tuán)隊(duì)必須采用最現(xiàn)代化的原生框架(如SwiftUI、AppKit和Metal)來構(gòu)建UI,而非簡(jiǎn)單地為開源的Chromium UX「換皮」。
因此,Atlas的UI是對(duì)整個(gè)應(yīng)用用戶體驗(yàn)的一次徹底重建。
此外,OpenAI團(tuán)隊(duì)還有其他產(chǎn)品目標(biāo),比如快速啟動(dòng)、支持?jǐn)?shù)百個(gè)標(biāo)簽頁同開等。
僅靠開箱即用的Chromium,是無法實(shí)現(xiàn)的。
因?yàn)樗鼘?duì)啟動(dòng)序列、線程模型和標(biāo)簽頁模型等許多細(xì)節(jié),都有其固定的實(shí)現(xiàn)方式。
![]()
為了最大限度地提高開發(fā)速度,OpenAI必須找到一種不同的方式來集成和驅(qū)動(dòng)Chromium運(yùn)行。
衡量這項(xiàng)技術(shù)投資成功的關(guān)鍵,不僅在于它能否支持更快的實(shí)驗(yàn)迭代和新功能交付,還在于它能否堅(jiān)守OpenAI工程文化的核心:
入職第一天就提交代碼。
每一位新工程師都會(huì)在入職第一天的下午,就能完成并合并一個(gè)小改動(dòng)。
即便檢出和構(gòu)建Chromium可能需要數(shù)小時(shí)之久,這一點(diǎn)也必須實(shí)現(xiàn)。
為此,OpenAI給出的解決方案是:OWL。
為應(yīng)對(duì)這些挑戰(zhàn),OpenAI構(gòu)建了一個(gè)新的架構(gòu)層,稱之為OWL:OpenAI Web Layer。
OWL是集成Chromium的方案,它將Chromium的瀏覽器進(jìn)程,運(yùn)行在主應(yīng)用Atlas的進(jìn)程之外。
![]()
第一天提交代碼,數(shù)分鐘造Atlas
你可以這樣理解:Chromium通過將標(biāo)簽頁移至獨(dú)立進(jìn)程,徹底改變了瀏覽器。
OpenAI將這一理念推向了新的高度,即把Chromium本身從主應(yīng)用進(jìn)程中剝離出來,置于一個(gè)隔離的服務(wù)層中。
這種設(shè)計(jì)方式,帶來了一系列優(yōu)勢(shì):
更簡(jiǎn)潔、現(xiàn)代化的應(yīng)用:Atlas幾乎完全由SwiftUI和AppKit構(gòu)建。單一語言、單一技術(shù)棧、純凈的代碼庫。
更快的啟動(dòng)速度:Chromium在后臺(tái)異步啟動(dòng),Atlas無需等待,界面幾乎瞬間就能呈現(xiàn)在用戶眼前。
與卡頓和崩潰隔離:Chromium是一個(gè)強(qiáng)大而復(fù)雜的網(wǎng)頁引擎。即便其主線程卡死,Atlas依然流暢;即便它崩潰,Atlas也能保持運(yùn)行。
更少的合并煩惱:由于團(tuán)隊(duì)并未大量基于Chromium開源UI進(jìn)行構(gòu)建,Atlas與上游Chromium的代碼差異更小,維護(hù)也更容易。
更快的迭代速度:大多數(shù)工程師完全無需在本地構(gòu)建Chromium。OWL在內(nèi)部以預(yù)構(gòu)建二進(jìn)制文件的形式分發(fā),因此構(gòu)建Atlas只需幾分鐘,而非數(shù)小時(shí)。
因?yàn)楣こ處煙o需頻繁地從源碼構(gòu)建Chromium,開發(fā)速度得以大幅提升——即便是新成員也能在入職第一天下午,就合并簡(jiǎn)單的代碼改動(dòng)。
從頂層來看,Atlas瀏覽器是OWL客戶端,而Chromium的瀏覽器進(jìn)程是OWL主機(jī)。
它們之間通過IPC(進(jìn)程間通信)進(jìn)行通信,具體使用的是Mojo?(在新窗口中打開)——Chromium自有的消息傳遞系統(tǒng)。
OpenAI為Mojo編寫了自定義的Swift(甚至TypeScript)綁定,使得Swift應(yīng)用能夠直接調(diào)用主機(jī)端的接口。
OWL客戶端庫提供了一個(gè)簡(jiǎn)潔的公共Swift API,抽象了主機(jī)服務(wù)層暴露的幾個(gè)關(guān)鍵概念:
Session:全局配置和控制主機(jī)
Profile:為特定用戶配置文件管理瀏覽器狀態(tài)
WebView:控制和嵌入單個(gè)網(wǎng)頁內(nèi)容(如渲染、輸入、導(dǎo)航、縮放等)
WebContentRenderer:將輸入事件轉(zhuǎn)發(fā)至Chromium的渲染管線,并接收來自渲染器的反饋
LayerHost/Client:在UI和Chromium之間交換圖形合成信息
![]()
此外,還有一系列廣泛的服務(wù)端點(diǎn),用于管理書簽、下載、擴(kuò)展和自動(dòng)填充等高級(jí)功能。
渲染:跨進(jìn)程邊界傳遞像素
在客戶端應(yīng)用中,多個(gè)WebView共享一個(gè)互斥的顯示空間,它們會(huì)在一個(gè)共享的合成容器中被換入換出。
例如,一個(gè)瀏覽器窗口通常只有一個(gè)可見的共享容器,當(dāng)用戶在標(biāo)簽欄中選擇一個(gè)標(biāo)簽頁時(shí),該標(biāo)簽頁對(duì)應(yīng)的WebView就會(huì)被換入這個(gè)容器。
在Chromium端,這個(gè)容器對(duì)應(yīng)一個(gè)gfx::AcceleratedWidget,其底層由一個(gè)CALayer支持。
OpenAI將該CALayer的上下文ID暴露給客戶端,客戶端中的NSView再通過私有的CALayerHost API將其嵌入。
![]()
對(duì)于一些特殊情況,如 下拉菜單或顏色選擇器,Chromium會(huì)在獨(dú)立的彈出窗口中進(jìn)行渲染,但仍采用相同的方法。 這些彈出窗口沒有content::WebContents,但它們有自己的content::RenderWidgetHostView和gfx::AcceleratedWidget,因此同樣的委托渲染模型依然適用。 OWL內(nèi)部會(huì)保持視圖幾何信息與Chromium端同步,以便GPU合成器能夠相應(yīng)地更新,并始終生成尺寸和設(shè)備縮放比例正確的圖層內(nèi)容。 OpenAI還利用這項(xiàng)技術(shù),有選擇地將Chromium自身原生Views UI的元素投射到Atlas中。 這對(duì)于快速實(shí)現(xiàn)權(quán)限提示等功能非常有用,無需在SwiftUI中從零開始構(gòu)建替代品。 這項(xiàng)技術(shù)大量借鑒了Chromium現(xiàn)有的在macOS上安裝PWA(可安裝網(wǎng)頁應(yīng)用)的基礎(chǔ)設(shè)施。 輸入事件:解析與轉(zhuǎn)發(fā) 在將平臺(tái)事件(如macOS的NSEvents)轉(zhuǎn)發(fā)給渲染器之前,Chromium UI會(huì)先將其轉(zhuǎn)換為Blink的WebInputEvent模型。 但由于OWL在一個(gè)隱藏的進(jìn)程中運(yùn)行Chromium,OpenAI在Swift客戶端庫中自行完成了這一轉(zhuǎn)換,并將轉(zhuǎn)換后的事件直接轉(zhuǎn)發(fā)給Chromium。 此后,這些事件將遵循與真實(shí)輸入事件在網(wǎng)頁內(nèi)容中相同的生命周期。 這包括當(dāng)頁面表示未處理某個(gè)事件時(shí),將該事件返回給客戶端。此時(shí),OpenAI會(huì)重新合成一個(gè)NSEvent,讓應(yīng)用的其他部分有機(jī)會(huì)處理該輸入。 智能體模式:特殊處理 Atlas AI智能體瀏覽功能,對(duì)渲染、輸入事件轉(zhuǎn)發(fā)、數(shù)據(jù)存儲(chǔ)方案,提出了一些獨(dú)特的挑戰(zhàn)。 計(jì)算機(jī)視覺模型需要將整個(gè)屏幕的單張圖像作為輸入。但某些UI元素(如下拉菜單)會(huì)渲染在標(biāo)簽頁邊界之外的獨(dú)立窗口中。
在智能體模式下,OpenAI會(huì)將這些彈出窗口,以正確的坐標(biāo)合成回主頁面圖像中,確保模型能在單個(gè)畫面中看到完整的上下文。
對(duì)于輸入,他們采用相同的原則:由智能體生成的事件直接路由到渲染器,絕不經(jīng)過擁有特權(quán)的瀏覽器層。
這確保了即使在自動(dòng)化控制下,沙箱邊界依然得以維持。
比如,OpenAI不希望這類事件合成出鍵盤快捷鍵,從而導(dǎo)致瀏覽器執(zhí)行與當(dāng)前網(wǎng)頁內(nèi)容無關(guān)的操作。
智能體瀏覽還可以在一個(gè)臨時(shí)的「已登出」的上下文中運(yùn)行。
同時(shí),OpenAI不會(huì)共享用戶現(xiàn)有的無痕模式配置文件,而是利用Chromium的StoragePartition基礎(chǔ)設(shè)施,來啟動(dòng)隔離的、內(nèi)存中的存儲(chǔ)空間。
每個(gè)智能體會(huì)話都從一個(gè)全新的狀態(tài)開始,會(huì)話結(jié)束時(shí),所有的cookie和網(wǎng)站數(shù)據(jù)都會(huì)被丟棄。
任何人可以同時(shí)運(yùn)行多個(gè)「已登出」的智能體對(duì)話,每個(gè)都位于獨(dú)立的瀏覽器標(biāo)簽頁中,并與其他會(huì)話完全隔離。
絲滑解鎖下一代AI瀏覽器
如果沒有全球Chromium社區(qū)以及他們?yōu)闃?gòu)建現(xiàn)代網(wǎng)絡(luò)基石所付出的卓越努力,這一切都無從談起。
OWL正是在這一基石上,以一種全新的方式進(jìn)行構(gòu)建:
將引擎與應(yīng)用解耦,將世界級(jí)的網(wǎng)絡(luò)平臺(tái)與現(xiàn)代化的原生框架相融合,從而解鎖了一個(gè)更快、更靈活的架構(gòu)。
通過重塑瀏覽器承載Chromium的方式,OpenAI為創(chuàng)造新型體驗(yàn)開辟了空間:更流暢的啟動(dòng)、更豐富的 UI、與操作系統(tǒng)更深度的集成,以及一個(gè)能跟上創(chuàng)意速度的開發(fā)循環(huán)。
所以,Atlas遠(yuǎn)不止是Chromium一個(gè)簡(jiǎn)單的外殼。
![]()
參考資料:
https://openai.com/index/building-chatgpt-atlas/
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.