Chúng tôi đã xây dựng OWL, kiến trúc mới đằng sau trình duyệt Atlas tích hợp ChatGPT như thế nào
Bên trong kiến trúc quy trình mới của chúng tôi, giúpmang đến cho bạn cách sử dụng web nhanh hơn, thông minh hơn.
Người viết: Ken Rockot, Thành viên Ban Kỹ thuật và Ben Goodger, Trưởng phòng Kỹ thuật của ChatGPT Atlas
Vào tuần trước, chúng tôi đã giới thiệu ChatGPT Atlas, một cách duyệt web mới tích hợp ChatGPT luôn đồng hành cùng bạn. Không chỉ là một trình duyệt web với đầy đủ tính năng, Atlas còn hé lộ một thế giới tương lai, nơi bạn có thể sử dụng ChatGPT mọi nơi trên Internet để đặt câu hỏi, đưa ra gợi ý, và hoàn thành tác vụ. Trong bài viết này, chúng ta sẽ mổ xẻ một trong những khía cạnh kỹ thuật phức tạp nhất của sản phẩm: chúng tôi làm thế nào để biến ChatGPT thành trình duyệt ngày càng hữu ích hơn và có thể sử dụng ở khắp mọi nơi.
Để biến ChatGPT thành một trợ lý thực thụ cho web, chúng tôi đã tái cấu trúc toàn bộ kiến trúc của trình duyệt: tách Atlas khỏi môi trường chạy Chromium. Điều này đòi hỏi phát triển một phương pháp tích hợp Chromium mới để chúng tôi có thể đạt được mục tiêu cho sản phẩm: khởi động tức thì, phản hồi cao ngay cả khi mở nhiều tab hơn, và tạo ra nền tảng vững chắc cho các trường hợp tác nhân tự động sử dụng.

Chromium là một khối xây dựng tự nhiên, cung cấp một trình duyệt web hiện đại với mô hình bảo mật mạnh mẽ, hiệu năng đã được chứng minh, và khả năng tương thích web vượt trội. Hơn nữa, Chromium được một cộng đồng toàn cầu phát triển và không ngừng cải tiến. Đây là lựa chọn phổ biến cho các trình duyệt web trên máy tính hiện đại.
Đội ngũ thiết kế tài năng chúng tôi đã đặt ra các mục tiêu đầy tham vọng về trải nghiệm người dùng, bao gồm hiệu ứng hình ảnh và hoạt ảnh phong phú cho các tính năng như chế độ Tác nhân. Điều này đòi hỏi đội ngũ kỹ sư phải tận dụng các khuôn khổ nguyên gốc hiện đại nhất cho giao diện người dùng (UI) (SwiftUI, AppKit và Metal), thay vì chỉ đơn thuần thay đổi giao diện (reskin) cho trải nghiệm người dùng (UX) Chromium mã nguồn mở. Do đó, UI của Atlas là bản tái cấu trúc toàn diện cho UX của toàn bộ ứng dụng.
Chúng tôi cũng đặt ra những mục tiêu khác cho sản phẩm như thời gian khởi động nhanh và hỗ trợ hàng trăm tab mà không làm giảm hiệu suất. Khó có thể đạt được mục tiêu này với Chromium nguyên bản vốn áp dụng những quy định riêng về nhiều chi tiết như trình tự khởi động, mô hình luồng, và các mô hình tab. Chúng tôi đã cân nhắc thực hiện những thay đổi đáng kể ở đây, nhưng cũng muốn giữ bộ vá lỗi nhắm mục tiêu vào Chromium để có thể nhanh chóng tích hợp các phiên bản mới. Nhằm đảm bảo tăng tốc độ phát triển tối, chúng tôi cần nghĩ ra một cách khác khi tích hợp và vận hành thời gian chạy của Chromium.
Thước đo quan trọng cho khoản đầu tư kỹ thuật của chúng tôi không chỉ là giúp đẩy nhanh quá trình thử nghiệm, lặp lại và phân phối các tính năng mới, mà còn duy trì một phần cốt lõi trong văn hóa kỹ thuật của OpenAI là ra mắt sản phẩm ngay từ ngày đầu tiên. Mỗi kỹ sư mới đều thực hiện và hợp nhất một thay đổi nhỏ vào buổi chiều ngày làm việc đầu tiên. Chúng tôi cần đảm bảo điều này khả thi, mặc dù quá trình lấy mã nguồn và xây dựng Chromium có thể mất hàng giờ.
Câu trả lời của chúng tôi cho những thách thức này là xây dựng một lớp kiến trúc mới mà chúng tôi gọi là OWL: Lớp Web của OpenAI . OWL là kết quả khi chúng tôi tích hợp Chromium, bao gồm chạy tiến trình trình duyệt của Chromium bên ngoài tiến trình ứng dụng Atlas chính.
Hãy nghĩ như thế này: Chromium đã làm lên cuộc cách mạng cho trình duyệt khi chuyển các tab sang các tiến trình riêng biệt. Chúng tôi đang phát triển ý tưởng đó hơn nữa bằng cách chuyển chính Chromium ra khỏi tiến trình ứng dụng chính và đi vào một lớp dịch vụ biệt lập. Thay đổi này mở ra hàng loạt lợi ích:
- Một ứng dụng hiện đại, đơn giản hơn: Atlas được xây dựng gần như hoàn toàn bằng SwiftUI và AppKit. Một ngôn ngữ, một nền tảng công nghệ, một mã nguồn hoàn chỉnh gọn gàng.
- Khởi động nhanh hơn: Chromium khởi động không đồng bộ ở chế độ nền. Atlas không chờ đợi, và hình ảnh hiển thị trên màn hình gần như ngay lập tức.
- Cách ly khỏi tình trạng giật lag và sập ứng dụng: Chromium là công cụ xử lý web mạnh mẽ và phức tạp. Nếu luồng chính bị treo, Atlas vẫn hoạt động. Nếu nó gặp sự cố, Atlas vẫn hoạt động.
- Ít đau đầu hơn khi hợp nhất: Vì không xây dựng dựa trên nhiều UI mã nguồn mở Chromium, sự khác biệt của chúng tôi so với Chromium gốc nhỏ hơn nhiều và dễ bảo trì hơn.
- Lặp lại nhanh hơn: Hầu hết các kỹ sư không bao giờ cần xây dựng Chromium trên máy của mình. OWL triển khai nội bộ dưới dạng tệp nhị phân được dựng sẵn, vì vậy quá trình xây dựng Atlas chỉ mất vài phút chứ không phải hàng giờ.
Do phần lớn kỹ sư trong nhóm không thường xuyên xây dựng Chromium từ mã nguồn, quá trình phát triển có thể diễn ra nhanh hơn nhiều, và ngay cả các thành viên mới cũng có thể hợp nhất những thay đổi đơn giản ngay trong buổi chiều đầu tiên.
Ở cấp độ cao, trình duyệt Atlas là OWL khách, và tiến trình trình duyệt Chromium là OWL chủ. Chúng giao tiếp qua IPC, cụ thể là Mojo(mở trong cửa sổ mới), hệ thống truyền thông điệp riêng của Chromium. Chúng tôi đã viết các ràng buộc tùy chỉnh bằng Swift (và thậm chí cả TypeScript) cho Mojo, để ứng dụng Swift có thể trực tiép gọi các giao diện phía máy chủ.
Thư viện khách OWL cung cấp một API Swift công khai và đơn giản, biến một số khái niệm quan trọng trở nên trừu tượng và được lớp dịch vụ của máy chủ hiển thị.
- Phiên: Cấu hình và điều khiển máy chủ phạm vi toàn cầu
- Hồ sơ: Quản lý trạng thái trình duyệt cho một hồ sơ người dùng cụ thể
- WebView: Điều khiển và nhúng các nội dung web riêng lẻ (ví dụ: kết xuất, nhập liệu, điều hướng, thu phóng, v.v.).
- WebContentRenderer: Chuyển tiếp các sự kiện đầu vào vào quy trình kết xuất của Chromium và nhận phản hồi từ trình kết xuất.
- LayerHost/Client: Trao đổi thông tin tổng hợp giữa giao diện người dùng và Chromium
Ngoài ra, còn có một loạt các điểm cuối dịch vụ để quản lý các tính năng cấp cao như đánh dấu trang, tải xuống, tiện ích mở rộng, và tự động điền.
Các WebView chia sẻ cùng một không gian hiển thị độc quyền trong ứng dụng khách, và được hoán đổi qua lại trong một vùng chứa kết hợp dùng chung. Ví dụ: một cửa sổ trình duyệt thường có một vùng chứa dùng chung duy nhất hiển thị, và chọn một thẻ trong thanh thẻ sẽ hoán đổi WebView của thẻ đó vào vùng chứa. Trên phía Chromium, vùng chứa này tương ứng với mộtgfx::AcceleratedWidget do một CALayer hỗ trợ ở vùng cuối. Chúng tôi cung cấp ID bối cảnh của lớp đó cho máy khách, là nơi một NSView nhúng mã đó bằng cách sử dụng API CALayerHost riêng tư.
Các trường hợp đặc biệt như các trình đơn thả xuống hoặc bộ chọn màu, vốn được Chromium kết xuất trong các widget cửa sổ bật lên riêng biệt, sử dụng cùng một phương pháp. Chúng không có content::WebContents, nhưng lại có content::RenderWidgetHostView riêng với gfx::AcceleratedWidget, vì vậy áp dụng cùng một mô hình kết xuất được ủy quyền.
OWL tự động đồng bộ thông tin hình học của khung hiển thị với phía Chromium, nhờ đó có thể cập nhật bộ tổng hợp GPU, và luôn tạo ra nội dung lớp có kích thước và tỷ lệ thiết bị chính xác.
Chúng tôi cũng tái sử dụng kỹ thuật này để chọn lọc chiếu các thành phần của UI Views nguyên gốc của Chromium vào Atlas (điều này cũng giúp ích khi khởi tạo nhanh các tính năng như lời nhắc cho phép mà không cần xây dựng lại từ đầu trong SwiftUI). Kỹ thuật này tận dụng rất nhiều cơ sở hạ tầng hiện có của Chromium dành cho ứng dụng web cài đặt trên macOS.
Giao diện người dùng Chromium chuyển đổi các sự kiện nền tảng (như NSEvent của macOS) thành mô hình WebInputEvent của Blink trước khi chuyển tiếp chúng đến các trình kết xuất. Nhưng vì OWL chạy Chromium trong một tiến trình ẩn, chúng tôi tự thực hiện chuyển đổi đó bên trong thư viện khách Swift và chuyển tiếp các sự kiện đã được chuyển đổi xuống Chromium.
Từ đó, chúng tuân theo cùng một vòng đời mà các sự kiện đầu vào thực tế thường áp dụng cho nội dung web. Quá trình này bao gồm trả lại các sự kiện cho máy khách bất cứ khi nào một trang chỉ ra rằng nó không xử lý sự kiện đó. Khi điều này xảy ra, chúng tôi tái tổng hợp một NSEvent và cho phần còn lại của ứng dụng cơ hội xử lý đầu vào.
Tính năng duyệt web tác nhân chủ động của Atlas đặt ra một số thách thức riêng đối với phương pháp chúng tôi áp dụng để kết xuất, chuyển tiếp sự kiện đầu vào, và lưu trữ dữ liệu.
Mô hình sử dụng máy tính của chúng tôi yêu cầu đầu vào là một ảnh duy nhất của màn hình. Nhưng một số thành phần UI như danh sách thả xuống lại kết xuất bên ngoài ranh giới của tab, trong các cửa sổ riêng biệt. Trong chế độ tác nhân, chúng tôi ghép các cửa sổ bật lên đó trở lại vào ảnh trang chính tại đúng tọa độ, để mô hình nhìn thấy toàn bộ bối cảnh trong một khung hình.
Đối với đầu vào, chúng tôi áp dụng nguyên tắc tương tự: sự kiện do tác nhân tạo ra được chuyển trực tiếp đến trình kết xuất, chứ không qua lớp trình duyệt đặc quyền. Điều này duy trì ranh giới của môi trường thử nghiệm cô lập ngay cả khi được điều khiển tự động. Ví dụ, chúng ta không muốn loại sự kiện này tạo ra các phím tắt bàn phím khiến trình duyệt thực hiện những việc không liên quan đến nội dung web đang hiển thị.
Tác nhân duyệt web cũng có thể chạy trong môi trường "đã đăng xuất" tạm thời. Thay vì chia sẻ hồ sơ ẩn danh hiện tại của người dùng và có thể khiến rò rỉ trạng thái, chúng tôi sử dụng cơ sở hạ tầng StoragePartition của Chromium để khởi tạo các kho lưu trữ cách ly, chỉ tồn tại trong bộ nhớ. Mỗi phiên hoạt động của tác nhân bắt đầu lại từ đầu; và khi kết thúc, tất cả cookie và dữ liệu trang web sẽ bị xóa. Bạn có thể chạy nhiều phiên hoạt động của tác nhân ở trạng thái “đã đăng xuất”, mỗi phiên trong một tab trình duyệt riêng biệt và hoàn toàn tách biệt với nhau.
Tất cả những điều này sẽ không thể thực hiện được nếu không có cộng đồng Chromium toàn cầu và đóng góp tuyệt vời của họ trong việc xây dựng nền tảng cho web hiện đại. OWL phát triển dựa trên nền tảng đó theo một cách mới: tách biệt công cụ xử lý khỏi ứng dụng, kết hợp một nền tảng web đẳng cấp thế giới với các khuôn khổ nguyên gốc hiện đại, và mở ra một kiến trúc nhanh và linh hoạt hơn.
Khi tư duy lại về cách trình duyệt vận hành Chromium, chúng tôi tạo ra không gian cho những trải nghiệm mới: khởi động mượt mà hơn, giao diện người dùng phong phú hơn, tích hợp chặt chẽ hơn với phần còn lại của hệ điều hành, và một vòng lặp phát triển khép kín có thể theo kịp tốc độ của ý tưởng. Nếu đó là kiểu thử thách phù hợp với bạn, hãy xem các vị trí chúng tôi tuyển dụng để làm việc trên Atlas với tư cách là kỹ sư phần mềm, Atlas, kỹ sư phần mềm, iOS và nhiều vị trí khác.
Thử dùng Atlas tại chatgpt.com/atlas(mở trong cửa sổ mới).
Lời cảm ơn
Xin gửi lời cảm ơn đặc biệt tới ông Darin Fisher và bà Marie Shin vì đã đóng góp cho bài viết này và cảm ơn toàn bộ đội ngũ OpenAI đã xây dựng Atlas.


