ChatGPT အခြေပြု browser ဖြစ်တဲ့ Atlas ရဲ့ နောက်ကွယ်က ဗိသုကာအသစ် OWL ကို ဘယ်လိုတည်ဆောက်ခဲ့သလဲ
ဝဘ်ကို ပိုမြန်၊ ပိုထက်မြက်စွာ အသုံးပြုနိုင်စေတဲ့ ကျွန်ုပ်တို့၏ process architecture အသစ်အတွင်းသို့
Ken Rockot, Technical Staff အဖွဲ့ဝင် နှင့် Ben Goodger, Engineering ခေါင်းဆောင်, ChatGPT Atlas မှ
ပြီးခဲ့တဲ့အပတ်က ကျွန်ုပ်တို့က ChatGPT Atlas ကို မိတ်ဆက်ခဲ့ပါတယ်။ ဒီဟာက ChatGPT ကို ဘေးမှာထားပြီး ဝဘ်ကို browse လုပ်နိုင်တဲ့ နည်းလမ်းအသစ်တစ်ခုပါ။ Atlas က စုံလင်တဲ့ web browser တစ်ခုသာမက အနာဂတ်ကိုလည်း ပြသပေးပါတယ်။ အဲဒါကတော့ အင်တာနက်တစ်လျှောက် ChatGPT ကို သင့်နဲ့အတူ ယူသွားပြီး မေးခွန်းမေးခြင်း၊ အကြံပြုချက်ပေးခြင်းနဲ့ သင့်အတွက် လုပ်ငန်းတာဝန်တွေကို ပြီးစီးစေခြင်းတို့ လုပ်နိုင်မယ့် လောကတစ်ခုပါ။ ဒီပို့စ်မှာ ကျွန်ုပ်တို့က ထုတ်ကုန်ရဲ့ အရှုပ်ထွေးဆုံး engineering ကဏ္ဍတစ်ခုဖြစ်တဲ့ ChatGPT ကို သင်အသုံးပြုလေလေ ပိုအသုံးဝင်လာတဲ့ browser တစ်ခုအဖြစ် ဘယ်လိုပြောင်းလဲခဲ့သလဲဆိုတာကို ရှင်းပြထားပါတယ်။
ChatGPT ကို ဝဘ်အတွက် အမှန်တကယ် co-pilot တစ်ခုဖြစ်စေဖို့ browser တစ်ခုလုံးရဲ့ architecture ကို ပြန်စဉ်းစားရခဲ့ပါတယ်။ ဆိုလိုတာက Atlas ကို Chromium runtime ကနေ ခွဲထုတ်ထားတာပါ။ ဒီအတွက် ကျွန်ုပ်တို့ဟာ Chromium ကို ပေါင်းစည်းအသုံးပြုတဲ့ နည်းလမ်းအသစ်တစ်ခုကို တီထွင်ရပြီး ထုတ်ကုန်ရည်မှန်းချက်တွေဖြစ်တဲ့ ချက်ချင်းစတင်နိုင်မှု၊ tab တွေ ပိုဖွင့်လာသည့်တိုင် တုံ့ပြန်မှုကောင်းမွန်နေမှု၊ နဲ့ အေးဂျင့် အသုံးပြုမှု use case များအတွက် ခိုင်မာတဲ့ အခြေခံတစ်ခု တည်ဆောက်ပေးနိုင်မှုတို့ကို အကောင်အထည်ဖော်နိုင်စေပါတယ်။

Chromium ဟာ သဘာဝကျတဲ့ building block တစ်ခုပါ။ ၎င်းက ခိုင်မာတဲ့ security model၊ သက်သေပြထားတဲ့ performance စွမ်းရည်နဲ့ အလွန်ကောင်းတဲ့ web compatibility ပါရှိတဲ့ ခေတ်မီ web engine တစ်ခုကို ပေးစွမ်းပါတယ်။ ထို့အပြင် ၎င်းကို အဆက်မပြတ် တိုးတက်အောင်လုပ်နေတဲ့ ကမ္ဘာလုံးဆိုင်ရာ community တစ်ခုက ဖန်တီးတည်ဆောက်နေပါတယ်။ ဒါကြောင့် ခေတ်မီ desktop web browser များအတွက် အသုံးများတဲ့ ရွေးချယ်စရာတစ်ခု ဖြစ်ပါတယ်။
ကျွန်ုပ်တို့၏ ထူးချွန်သော design team မှာ Agent mode လို feature တွေအတွက် rich animations နဲ့ visual effects များအပါအဝင် user experience ပိုင်းဆိုင်ရာ ရည်မှန်းချက်ကြီးတွေရှိခဲ့ပါတယ်။ ဒါကြောင့် engineering team က open source Chromium UX ကို အပေါ်ယံအသွင်ပြောင်းရုံမဟုတ်ဘဲ UI အတွက် အခေတ်အမီဆုံး native frameworks များဖြစ်တဲ့ SwiftUI, AppKit နဲ့ Metal ကို အသုံးချရခဲ့ပါတယ်။ ရလဒ်အနေဖြင့် Atlas ရဲ့ UI ဟာ application UX တစ်ခုလုံးကို ကျယ်ကျယ်ပြန့်ပြန့် ပြန်လည်တည်ဆောက်ထားခြင်း ဖြစ်ပါတယ်။
အပြင် fast startup times နဲ့ performance မကျသွားဘဲ tabs ရာနဲ့ချီ support လုပ်နိုင်ခြင်းလို ထုတ်ကုန်ရည်မှန်းချက်များလည်း ရှိခဲ့ပါတယ်။ ဒီရည်မှန်းချက်တွေက boot sequence, threading model နဲ့ tab models စတဲ့ အသေးစိတ်အရာများအပေါ် Chromium က ကိုယ်ပိုင်သတ်မှတ်ချက်များရှိနေတဲ့ out-of-the-box အခြေအနေမှာ အောင်မြင်ဖို့ ခက်ခဲခဲ့ပါတယ်။ ကျွန်ုပ်တို့ဟာ ဒီနေရာတွေမှာ ကြီးမားတဲ့ ပြောင်းလဲမှုများပြုလုပ်ဖို့ စဉ်းစားခဲ့ပေမယ့် Chromium ပေါ်က patch များကို သီးသန့်အလေးပေးထားပြီး version အသစ်တွေကို မြန်မြန်ပေါင်းစည်းနိုင်စေချင်ခဲ့ပါတယ်။ ဖွံ့ဖြိုးတိုးတက်မှု အရှိန်ကို အများဆုံး မြှင့်တင်နိုင်ဖို့ Chromium runtime ကို ပေါင်းစည်းပြီး မောင်းနှင်တဲ့ နည်းလမ်း မတူတဲ့ တစ်ခုကို စဉ်းစားဖန်တီးရခဲ့ပါတယ်။
ကျွန်ုပ်တို့ရဲ့ နည်းပညာရင်းနှီးမြှုပ်နှံမှုအတွက် အရေးကြီးတဲ့ စမ်းသပ်ချက်တစ်ခုက feature အသစ်များကို ပိုမြန်မြန် စမ်းသပ်၊ ပြင်ဆင်၊ ပို့ဆောင်နိုင်စေမယ်ဆိုတာသာမက OpenAI ရဲ့ engineering culture အခြေခံတစ်ခုကိုလည်း ထိန်းသိမ်းနိုင်စေဖို့ ဖြစ်ပါတယ်။ အဲဒါကတော့ ပထမနေ့တင်ပို့နိုင်ခြင်းပါ။ အင်ဂျင်နီယာအသစ်တိုင်းက သူတို့ရဲ့ ပထမဆုံးနေ့ မွန်းလွဲပိုင်းမှာပဲ ပြောင်းလဲမှုသေးသေးလေးတစ်ခု ပြုလုပ်ပြီး merge လုပ်ပါတယ်။ Chromium ကို checkout လုပ်ပြီး build လုပ်ဖို့ နာရီများစွာ ကြာနိုင်ပေမယ့် ဒီအရာ ဖြစ်နိုင်နေစေရမယ်ဆိုတာ ကျွန်ုပ်တို့ သေချာစေရခဲ့ပါတယ်။
ဒီစိန်ခေါ်မှုများအတွက် ကျွန်ုပ်တို့ရဲ့ ဖြေရှင်းချက်က OWL: OpenAI’s Web Layer လို့ ခေါ်တဲ့ architectural layer အသစ်တစ်ခုကို တည်ဆောက်ခြင်း ဖြစ်ပါတယ်။ OWL က Chromium ကို ကျွန်ုပ်တို့ ပေါင်းစည်းထားသည့် ပုံစံဖြစ်ပြီး Chromium ရဲ့ browser process ကို အဓိက Atlas app process အပြင်ဘက်မှာ run စေထားတာကို ဆိုလိုပါတယ်။
ဒီလို စဉ်းစားကြည့်ပါ—Chromium က tabs များကို သီးခြား process တွေထဲ ရွှေ့ခြင်းအားဖြင့် browser တွေကို တော်လှန်ပြောင်းလဲခဲ့ပါတယ်။ ကျွန်ုပ်တို့က အဲဒီအယူအဆကို ပိုရှေ့တိုးပြီး Chromium ကိုယ်တိုင်ကို main application process ကနေ ထုတ်ပြီး သီးခြားထားသော service layer ထဲသို့ ရွှေ့ထားတာပါ။ ဒီပြောင်းရွှေ့မှုက အကျိုးကျေးဇူးများစွာကို ဖွင့်လှစ်ပေးပါတယ်-
- ပိုရိုးရှင်းပြီး ခေတ်မီသော app: Atlas ကို SwiftUI နဲ့ AppKit နီးပါးသာ အသုံးပြုတည်ဆောက်ထားပါတယ်။ Language တစ်မျိုး၊ tech stack တစ်ခု၊ သန့်ရှင်းသော codebase တစ်ခု။
- ပိုမြန်သော startup: Chromium က နောက်ကွယ်မှာ asynchronous အဖြစ် boot တက်ပါတယ်။ Atlas က မစောင့်ပါ — pixels တွေက မျက်နှာပြင်ပေါ်ကို ချက်ချင်းနီးပါး ပေါ်လာပါတယ်။
- နှေးကွေးမှုနဲ့ crash များကနေ သီးခြားခွဲထားမှု: Chromium ဟာ အားကောင်းပြီး ရှုပ်ထွေးတဲ့ web engine တစ်ခုပါ။ ၎င်းရဲ့ main thread hang ဖြစ်ရင်လည်း Atlas မဖြစ်ပါဘူး။ ၎င်း crash ဖြစ်သွားရင်လည်း Atlas က ဆက်လက်အလုပ်လုပ်နေပါတယ်။
- Merge လုပ်ရာမှာ ခေါင်းကိုက်မှု နည်းခြင်း: Chromium open source UI ရဲ့ အပိုင်းအများကြီးပေါ်မှာ ကျွန်ုပ်တို့ တည်ဆောက်နေတာမဟုတ်တဲ့အတွက် upstream Chromium နဲ့ ကျွန်ုပ်တို့ရဲ့ diff က ပိုသေးပြီး ထိန်းသိမ်းရ ပိုလွယ်ပါတယ်။
- ပိုမြန်သော iteration: အင်ဂျင်နီယာအများစုက Chromium ကို local မှာ build လုပ်ဖို့ မလိုတော့ပါ။ OWL ကို internal မှာ prebuilt binary အဖြစ် ထုတ်ပေးထားလို့ Atlas builds တွေဟာ နာရီမဟုတ်ဘဲ မိနစ်ပိုင်းပဲ ကြာပါတယ်။
ကျွန်ုပ်တို့အဖွဲ့ရဲ့ အင်ဂျင်နီယာအများစုက Chromium ကို source ကနေ ပုံမှန် build မလုပ်ကြတော့တဲ့အတွက် development က ပိုမြန်နိုင်ပါတယ်—အသစ်ဝင်လာတဲ့ team member များတောင် သူတို့ရဲ့ ပထမဆုံးနေ့ မွန်းလွဲပိုင်းမှာပဲ ပြောင်းလဲမှုရိုးရိုးများကို merge လုပ်နိုင်ပါတယ်။
အမြင့်ဆုံးအဆင့်ကနေ ကြည့်ရင် Atlas browser က OWL Client ဖြစ်ပြီး Chromium browser process က OWL Host ဖြစ်ပါတယ်။ နှစ်ဖက်က IPC ကနေ ဆက်သွယ်ကြပြီး အထူးသဖြင့် Chromium ကိုယ်ပိုင် message-passing system ဖြစ်တဲ့ Mojo(ဝင်းဒိုးအသစ်တွင် ဖွင့်မည်) ကို အသုံးပြုပါတယ်။ ကျွန်ုပ်တို့က Mojo အတွက် custom Swift (နဲ့ TypeScript တောင်ပါ) bindings များရေးသားခဲ့တာကြောင့် Swift app က host ဘက် interface များကို တိုက်ရိုက်ခေါ်နိုင်ပါတယ်။
OWL client library က ရိုးရှင်းသော public Swift API တစ်ခုကို ထုတ်ပေးပြီး host ၏ service layer က ဖော်ထုတ်ထားတဲ့ အဓိက concept အချို့ကို abstraction လုပ်ပေးပါတယ်-
- Session: host ကို global အဆင့်မှာ configure လုပ်ပြီး ထိန်းချုပ်ခြင်း
- Profile: သတ်မှတ်ထားသော user profile တစ်ခုအတွက် browser state ကို စီမံခန့်ခွဲခြင်း
- WebView: web contents တစ်ခုချင်းစီကို ထိန်းချုပ်ပြီး embed လုပ်ခြင်း (ဥပမာ render, input, navigate, zoom စသည်)
- WebContentRenderer: input events များကို Chromium ၏ rendering pipeline ထဲသို့ ပို့ဆောင်ပြီး renderer ထံမှ feedback လက်ခံခြင်း
- LayerHost/Client: UI နှင့် Chromium ကြား compositing information ကို အပြန်အလှန် ဖလှယ်ခြင်း
ဒါ့အပြင် bookmarks, downloads, extensions နဲ့ autofill လို high-level features များကို စီမံခန့်ခွဲဖို့ service အဆုံးမှတ် မျိုးစုံလည်း ရှိပါတယ်။
client app ထဲမှာ အပြန်အလှန် သီးသန့် presentation space တစ်ခုကို မျှဝေသုံးတဲ့ WebViews များကို shared compositing container တစ်ခုထဲ အဝင်အထွက် လဲလှယ်အသုံးပြုပါတယ်။ ဥပမာ browser window တစ်ခုမှာ မြင်နေရတာက shared container တစ်ခုတည်းဖြစ်ပြီး tab strip ထဲက tab တစ်ခုကို ရွေးလိုက်တဲ့အခါ အဲဒီ tab ရဲ့ WebView ကို container ထဲ လဲသွင်းပေးပါတယ်။ Chromium ဘက်မှာ ဒီ container က နောက်ဆုံးမှာ CALayer နဲ့ ပံ့ပိုးထားတဲ့ gfx::AcceleratedWidget တစ်ခုနဲ့ ကိုက်ညီပါတယ်။ ကျွန်ုပ်တို့က အဲဒီ layer ရဲ့ context ID ကို client ဆီ ဖော်ထုတ်ပေးပြီး client ဘက်က NSView က private CALayerHost API ကို အသုံးပြုကာ embed လုပ်ပါတယ်။
Chromium က သီးခြား popup widgets များထဲ render လုပ်တဲ့ <select> dropdowns သို့မဟုတ် color pickers လို အထူးကိစ္စများမှာလည်း ဒီနည်းလမ်းကိုပဲ အသုံးပြုပါတယ်။ ၎င်းတို့မှာ content::WebContents မရှိပေမယ့် သူတို့ကိုယ်ပိုင် gfx::AcceleratedWidget ပါဝင်တဲ့ content::RenderWidgetHostViewတော့ ရှိပါတယ်၊ ဒါကြောင့် delegated rendering model တူညီစွာ သက်ဆိုင်နေပါတယ်။
OWL က အတွင်းပိုင်းမှာ view geometry ကို Chromium ဘက်နဲ့ sync လုပ်ထားတာကြောင့် GPU compositor ကို လိုက်လျောညီထွေ update လုပ်နိုင်ပြီး မှန်ကန်တဲ့ size နဲ့ device scale ရှိတဲ့ layer contents များကို အမြဲ ထုတ်ပေးနိုင်ပါတယ်။
ကျွန်ုပ်တို့ဟာ ဒီနည်းပညာကို Chromium ကိုယ်ပိုင် native Views UI ရဲ့ အစိတ်အပိုင်းတွေကို Atlas ထဲသို့ ရွေးချယ် projected လုပ်ဖို့လည်း ပြန်အသုံးပြုပါတယ် (SwiftUI နဲ့ အစားထိုးတည်ဆောက်မှုများကို အစကနေ မလုပ်ဘဲ permission prompts လို features များကို မြန်မြန် bootstrap လုပ်ဖို့လည်း အသုံးဝင်ပါတယ်)။ ဒီနည်းပညာက macOS ပေါ်က installable web apps များအတွက် Chromium ရဲ့ ရှိပြီးသား infrastructure ကို အလွန်အမင်း မှီငြမ်းထားပါတယ်။
Chromium UI က platform events များ (ဥပမာ macOS NSEvents) ကို renderer များဆီ မပို့မီ Blink ၏ WebInputEvent model သို့ ဘာသာပြန်ပေးပါတယ်။ ဒါပေမယ့် OWL က Chromium ကို မမြင်ရတဲ့ hidden process ထဲမှာ run နေတဲ့အတွက် အဲဒီဘာသာပြန်မှုကို Swift client library ထဲမှာ ကျွန်ုပ်တို့ ကိုယ်တိုင်လုပ်ပြီး ဘာသာပြန်ပြီးသား events များကို Chromium ဆီ ပို့ပေးပါတယ်။
အဲဒီကနေစပြီး event များက web content အတွက် တကယ့် input events များ လိုက်နာမယ့် lifecycle အတိုင်းပဲ ဆက်သွားပါတယ်။ ဒီထဲမှာ စာမျက်နှာတစ်ခုက event ကို မကိုင်တွယ်ခဲ့ဘူးလို့ ဖော်ပြတဲ့အခါ event များကို client ဆီ ပြန်ပို့ပေးခြင်းလည်း ပါဝင်ပါတယ်။ အဲဒီလိုဖြစ်တဲ့အခါ ကျွန်ုပ်တို့က NSEvent တစ်ခုကို ပြန်လည်ဖန်တီးပြီး app ရဲ့ ကျန်အစိတ်အပိုင်းများကို အဲဒီ input ကို ကိုင်တွယ်ခွင့်ပေးပါတယ်။
Atlas ရဲ့ အေးဂျင့် အခြေပြု browsing feature က rendering, input event forwarding နဲ့ data storage အတွက် ကျွန်ုပ်တို့ရဲ့ နည်းလမ်းများအပေါ် ထူးခြားတဲ့ စိန်ခေါ်မှုအချို့ကို ဖန်တီးပေးပါတယ်။
ကျွန်ုပ်တို့၏ computer use မော်ဒယ် က input အဖြစ် screen ပုံရိပ်တစ်ပုံတည်းကို မျှော်မှန်းပါတယ်။ ဒါပေမယ့် <select> dropdowns လို UI elements အချို့က tab အကန့်အသတ်အပြင်ဘက် သီးခြား window များတွင် render လုပ်ပါတယ်။ agent mode မှာတော့ အဲဒီ popups များကို မှန်ကန်တဲ့ coordinate များအတိုင်း main page image ထဲ ပြန်ပေါင်းစပ်ပေးတာကြောင့် မော်ဒယ် က context အပြည့်အစုံကို frame တစ်ခုတည်းထဲမှာ မြင်နိုင်ပါတယ်။
Input အတွက်လည်း တူညီတဲ့ အခြေခံစည်းမျဉ်းကို အသုံးချပါတယ်။ အေးဂျင့် က ဖန်တီးသော events များကို privileged browser layer မဖြတ်ဘဲ renderer ဆီ တိုက်ရိုက်ပို့ပါတယ်။ ဒီလိုလုပ်ခြင်းက automated control အောက်မှာတောင် sandbox boundary ကို ထိန်းသိမ်းထားပေးပါတယ်။ ဥပမာ browser ကို ပြသထားသော web content နဲ့ မဆိုင်တဲ့ အရာများ လုပ်စေမယ့် keyboard shortcuts များကို ဒီ event အမျိုးအစားက synthesize မလုပ်စေချင်ပါဘူး။
Agent browsing ကို ယာယီ “logged-out” context ထဲမှာလည်း run လုပ်နိုင်ပါတယ်။ အသုံးပြုသူရဲ့ ရှိပြီးသား Incognito profile ကို မျှဝေသုံးရင် state leak ဖြစ်နိုင်တဲ့အတွက် Chromium ရဲ့ StoragePartition infrastructure ကို အသုံးပြုပြီး သီးခြားထားသော in-memory stores များကို ဖန်တီးပါတယ်။ agent session တစ်ခုချင်းစီက အသစ်စတင်ပြီး အဆုံးသတ်သွားတဲ့အခါ cookies နဲ့ site data အားလုံးကို စွန့်ပစ်လိုက်ပါတယ်။ “logged-out” agent sessions အများအပြားကို browser tab တစ်ခုချင်းစီထဲ run လုပ်နိုင်ပြီး session တစ်ခုချင်းစီက အခြား session များနှင့် လုံးဝ သီးခြားနေပါတယ်။
ဒီအရာအားလုံးက global Chromium community နဲ့ ခေတ်မီဝဘ်အတွက် အခြေခံအုတ်မြစ်တစ်ခု တည်ဆောက်ပေးခဲ့တဲ့ သူတို့ရဲ့ အံ့မခန်းအလုပ်များ မရှိဘဲ မဖြစ်နိုင်ပါဘူး။ OWL က အဲဒီအခြေခံပေါ်မှာ နည်းလမ်းအသစ်တစ်ခုနဲ့ တည်ဆောက်ထားတာပါ—engine ကို app ကနေ ခွဲထုတ်ခြင်း၊ world-class web platform တစ်ခုကို modern native frameworks များနဲ့ ပေါင်းစပ်ခြင်း၊ နဲ့ ပိုမြန်ပြီး ပိုပြောင်းလွယ်ပြင်လွယ်တဲ့ architecture ကို ဖွင့်လှစ်ပေးခြင်းတို့ ဖြစ်ပါတယ်။
Browser တစ်ခုက Chromium ကို ဘယ်လိုကိုင်ဆောင်ထားသလဲဆိုတာကို ပြန်စဉ်းစားခြင်းအားဖြင့် ကျွန်ုပ်တို့က အတွေ့အကြုံအသစ်အမျိုးအစားများအတွက် နေရာဖန်တီးနေပါတယ်—ပိုချောမွေ့တဲ့ startup များ၊ ပိုကြွယ်ဝတဲ့ UI၊ OS ၏ ကျန်အစိတ်အပိုင်းများနဲ့ ပိုကပ်လျက်ပေါင်းစည်းမှု၊ နဲ့ အတွေးအခေါ်အမြန်နှုန်းအတိုင်း ရွေ့လျားတဲ့ development loop တို့ပါ။ ဒီလိုစိန်ခေါ်မှုမျိုးက သင့်စိတ်ကြိုက်ဖြစ်တယ်ဆိုရင် Atlas ပေါ်မှာ အလုပ်လုပ်ဖို့ Software Engineer, Atlas, Software Engineer, iOS, နှင့် အခြားရာထူးများ ကို ကြည့်ရှုလိုက်ပါ။
Atlas ကို chatgpt.com/atlas(ဝင်းဒိုးအသစ်တွင် ဖွင့်မည်) တွင် စမ်းသုံးကြည့်ပါ။
ကျေးဇူးတင်လွှာ
ဤပို့စ်အတွက် ပါဝင်ကူညီခဲ့သော Darin Fisher နှင့် Marie Shin အားလည်းကောင်း၊ Atlas ကို တည်ဆောက်ခဲ့သည့် OpenAI အဖွဲ့တစ်ဖွဲ့လုံးအားလည်းကောင်း အထူးကျေးဇူးတင်ရှိပါသည်။


