ถ้าเคยใช้ AI chat สักพัก คงเคยเจออาการนี้: ถามไปหนึ่งเรื่อง ได้กลับมาเป็นก้อนยาว ๆ ห้าบรรทัดเต็มไปด้วย markdown ทั้งที่สิ่งที่อยากรู้จริง ๆ คือ "เทียบกันหน่อย" หรือ "อนุมัติให้แล้ว"
Google เพิ่งปล่อย A2UI 1.0 เมื่อ 11 พ.ย. ซึ่งพยายามแก้ปัญหานี้ตรง ๆ ด้วยวิธีที่เรียบง่ายกว่าที่คิด: agent ไม่ได้ส่งโค้ด HTML มาให้เรา แต่ส่ง "คำอธิบายว่าอยากได้ UI แบบไหน" มา แล้วให้แอปเรนเดอร์เองด้วย component ของตัวเอง

คำอธิบายจากทีม A2UI ของ Google เลยบอกตรง ๆ ว่า วิธีที่คนใช้ agent กันอยู่ตอนนี้คือ "ยุคเครื่องเทอร์มินัล" ของคอมพิวเตอร์ ทุกอย่างเป็นข้อความ และข้อความไม่ค่อยเหมาะกับงานที่ต้องเทียบ 3 ตัวเลือก หรืออนุมัติแผนที่ยาว ๆ
เพราะฉะนั้นเป้าหมายของ A2UI มี 3 ข้อพอดี:
- เป็นส่วนตัวในจังหวะนั้น: agent สร้าง UI ที่ปรับตามความต้องการของผู้ใช้แต่ละคน
- เป็นธรรมชาติของแบรนด์: agent ใช้ design system ของแอปเท่านั้น วางและตั้งค่าเฉพาะ component ที่แอปลงทะเบียนไว้
- เร็ว เสถียร และปลอดภัย: ผูกข้อมูลไว้ฝั่ง server ค่าที่อ่อนไหวจึงไม่หลุดไปถึงโมเดล
จุดที่น่าสนใจที่สุดคือข้อสองและสาม — agent ไม่ได้ควบคุมหน้าตาแอป มันแค่บอกว่า "อยากได้ช่องนี้ ข้อมูลนี้" แล้วฝั่งแอปตัดสินใจเองว่าจะเรนเดอร์ยังไง นี่คือแนวคิดที่แก้ปัญหาความปลอดภัยไปในตัว เพราะ agent ไม่มีทางส่ง HTML/JS ที่รันเองในเบราว์เซอร์ของเราได้
A2UI ส่ง structured UI description ไม่ใช่ markup ธรรมดา พร้อมกันนั้น 1.0 เพิ่มสองอย่างที่สำคัญ:
- bidirectional function calls: ตอนนี้ agent เรียกกลับเข้ามาหาแอปได้ เช่น หน้าจอเลือกเที่ยวบินสามารถเช็ค availability แบบเรียลไทม์ได้ ไม่ต้องรอรอบสนทนาใหม่
- accessibility + metadata extensions: รองรับการเข้าถึงและ metadata เพิ่มเติม
ตัว renderer ที่ปล่อยมาแบบ open source ตอนนี้มี:
- Web: React, Angular, Lit
- Mobile และ Desktop: Flutter, SwiftUI, Jetpack Compose (Compose ตอนนี้อยู่ที่ v0.9.1, v1.0 ยังไม่มา)
- Agent SDK: Python, TypeScript, Dart
ที่น่าสนใจคือ renderer เว็บกับ Flutter ทำงานใน MCP Apps ได้ด้วย แปลว่า A2UI หน้าจอสามารถโผล่ในผู้ช่วย AI ที่รองรับ MCP Apps เช่น Claude กับ Gemini ได้
Google บอกว่าองค์กรที่กำลัง build ด้วย A2UI อยู่บ้าง แต่ละแบบใช้คนละแนว:
- Atlassian เอา A2UI ไปใส่ Jira ให้ agent ถามหาข้อมูลที่ขาดจากทีมผ่าน interactive card ในตัว work item ตอนนี้คนอ่านและตอบได้เลยใน Jira
- Alation ใช้สร้าง feed ใน AIOS ที่มี metric card และ chart โดยแต่ละ chart แสดง SQL query ที่ใช้หา data ต้นทางได้ — feed เดียวกันดูใน Alation กับใน Claude ก็ได้ผลลัพธ์คล้ายกัน
- ByteDance ปล่อย renderer สำหรับ Lynx (framework cross-platform ของตัวเอง) ตัวอย่างใน Lynx GenUI Playground เป็น trip planner 2 วันสำหรับเกียวโต
- ภายใน Google Gemini Notebook ใช้ A2UI ถามว่าจะได้ slide แบบไหน อะไรเป็นหัวข้อ แล้วมี review card ให้แก้ก่อน generate
มุมที่ผมสนใจที่สุดคือ มันเปลี่ยนวิธีคิดเรื่อง "agent ทำ UI ให้เรา" จากเดิมที่ agent คุยกับ user ผ่าน text กลายเป็น agent ผูกกับ UI ของแอปเราโดยตรง ซึ่งถ้าทำได้จริง ผลที่ตามมาคือ:
- โค้ดฝั่งแอปไม่ต้องเขียนใหม่: renderer รับ A2UI message แล้วเรนเดอร์เอง ส่วน agent ก็แค่ผลิต message
- ความปลอดภัยดีกว่า: ไม่มี agent ใดส่งโค้ดมารันในแอปเรา
- UX เป็น native จริง: scroll, animation, accessibility ของแพลตฟอร์มได้ตามปกติ ไม่ใช่ HTML ที่ agent ปั้นมา
ข้อเสียที่ต้องระวังตอนนี้คือ ความไม่สม่ำเสมอของ support — Compose ยังเป็น 0.9.1, Gemini รองรับ 0.9.1 อยู่ (กำลังอัปเกรดเป็น 1.0), Lynx ก็ยังเป็น 0.9 อยู่ ถ้าจะเอาไปใช้จริงต้องดูว่า target platform ที่ตัวเองต้องการอยู่ที่เวอร์ชันไหนก่อน
อีกเรื่องคือ A2UI เป็นแค่ protocol ไม่ได้ให้ agent runtime มาให้ และก็ไม่ได้รับประกันว่า assistant ทุกตัวจะรองรับเวอร์ชันเดียวกัน
ถ้าอยากลองดู:
- อ่าน doc ที่ a2ui.org แล้วลองทำ quickstart
- เลือก renderer ตามแพลตฟอร์ม — React สำหรับเว็บ, Flutter ถ้าต้องการข้ามแพลตฟอร์ม, SwiftUI สำหรับ iOS
- ลองเล่นกับ A2UI Playground ของ CopilotKit ก่อน ไม่ต้องเขียน agent เอง
- ถ้ามาจาก 0.9 ดู evolution guide ที่ระบุทุกจุดที่เปลี่ยน
สรุปคือ A2UI 1.0 เป็นความพยายามที่สมเหตุสมผลของการเอา "generative UI" ออกจากเฟส demo มาเป็นของจริง เพราะบังคับเรื่องความปลอดภัยและ native fidelity ไว้ตั้งแต่ดีไซน์ protocol ตัวแอปยังคุมหน้าตาเองได้ ซึ่งเป็นสิ่งที่ความพยายามก่อนหน้านี้หลายชุดทำไม่ได้