Knowledge Hub

OpenUI: ภาษาสำหรับให้ LLM สร้าง UI แบบสตรีม

เรียนรู้ว่า OpenUI ทำให้โมเดลสร้างหน้าจอ (Generative UI) เป็นภาษาที่สั้นกว่า JSON ได้อย่างไร มีส่วนประกอบอะไรบ้าง เริ่มใช้อย่างไร และควรทดสอบอะไรก่อนนำไปใช้จริง

AI และเทคโนโลยีอ่าน 13 นาทีเผยแพร่ 20 ตุลาคม 2569

Note ข้อมูลในหน้านี้อ่านจาก repo thesysdev/openui และหน้าเอกสารภาพรวมของ OpenUI เมื่อ 2026-10-20 ผ่านการดึงหน้าเว็บ ไม่ได้ใช้ gh และไม่ได้อ่าน commit sha จึงยังไม่ได้อ่านโค้ดต้นทางและไวยากรณ์ละเอียดของ OpenUI Lang ตัวเลขประสิทธิภาพทั้งหมดเป็นตัวเลขที่ README รายงานเอง ยังไม่มีใครทดสอบซ้ำ

🎯 แก่นของเรื่อง

OpenUI คือเฟรมเวิร์ก Generative UI ที่ให้ LLM ตอบเป็นภาษาเฉพาะแบบสั้น (OpenUI Lang) แทนการตอบเป็น JSON ยาว ๆ แล้วฝั่งแอปแปลงภาษานั้นเป็นคอมโพเนนต์จริงทีละส่วนระหว่างที่โทเคนยังไหลเข้ามา

ทำไมจึงได้ผล (กลไกเหตุ-ผล)

ขั้น เหตุ ผล
1 คุณประกาศคอมโพเนนต์ที่อนุญาตพร้อมสัญญาแบบ Zod ระบบสร้าง system prompt จากรายการนั้นเอง prompt จึงตรงกับโค้ดเสมอ
2 ภาษาออกแบบให้สั้นและอ่านทีละส่วนได้ โมเดลสร้างโทเคนน้อยลง และ parser เริ่มวาดหน้าจอได้ก่อนตอบจบ
3 Parser ตรวจว่าใช้เฉพาะคอมโพเนนต์ที่ลงทะเบียนไว้ โมเดลสร้าง UI นอกกรอบที่คุณกำหนดไม่ได้

20% ที่สำคัญที่สุดในทางปฏิบัติ

  • ต้องรู้: ท่อ 5 ขั้น (ดูหัวข้อสถาปัตยกรรม), การนิยามคอมโพเนนต์ด้วย Zod, และการสร้าง prompt จากไลบรารีคอมโพเนนต์
  • รอได้: แพ็กเกจเสริม เช่น email, observability, OpenClaw, A2UI จนกว่าจะมีความต้องการจริง

📈 ช่วยให้ดีขึ้นอย่างไร

สถานการณ์ ไม่ใช้ OpenUI Lang ใช้ OpenUI Lang วัดอย่างไร หลักฐาน
โทเคนรวมของ 7 สถานการณ์ UI 10,180 (Vercel JSON-Render) และ 9,948 (Thesys C1 JSON) 4,800 นับด้วย tiktoken (encoder ของ GPT-5) วัดแล้ว ตัวเลขจาก README (อ่าน 2026-10-20) ลดลง 52.8% และ 51.7% ตามลำดับ
ตัวเลข "สูงสุด 67%" - README ระบุว่าใช้โทเคนน้อยกว่า JSON "สูงสุด" 67% ไม่ระบุเงื่อนไขใน README วัดแล้ว (ค่าสูงสุดที่รายงานเอง ไม่ใช่ค่าเฉลี่ย) ไม่เห็นวิธีวัด
ความหน่วงที่ผู้ใช้รู้สึก รอให้ JSON ครบก่อนจึงแสดงผล วาดทีละส่วนระหว่างสตรีม เวลาถึงองค์ประกอบแรกบนจอ ตีความ จากการที่ README ระบุว่าเรนเดอร์แบบก้าวหน้า ยังไม่มีตัวเลข
ความปลอดภัยของ UI ที่โมเดลสร้าง โมเดลอาจสร้างโครงสร้างที่แอปไม่รองรับ จำกัดเฉพาะคอมโพเนนต์ที่ลงทะเบียน จำนวนเอาต์พุตที่ถูกปฏิเสธ ตีความ จากคำอธิบายเรื่อง controlled rendering
คุณภาพ/ความแม่นยำของ UI ที่โมเดลสร้าง - - อัตราสร้างสำเร็จ ยังไม่ทดสอบ README ที่อ่านไม่มีตัวเลขส่วนนี้

Important ตัวเลขที่วัดมาเทียบเฉพาะจำนวนโทเคนในชุดทดสอบของ repo เอง การประหยัดโทเคนไม่ได้แปลว่าคุณภาพ UI หรือต้นทุนรวมดีขึ้นเท่ากัน

🧩 ข้อเท็จจริงเทียบกับการตีความ

ประเด็น ข้อเท็จจริง (อ่านจาก repo) ข้อควรระวัง
คำอธิบาย repo "The Open Standard for Generative UI" ใบอนุญาต MIT คำว่า "มาตรฐานเปิด" เป็นคำที่ repo ใช้เรียกตัวเอง
รันไทม์ React, Vue, Svelte, Angular ชุดคอมโพเนนต์สำเร็จรูปและหน้าแชตมีใน React เท่านั้น
ประสิทธิภาพ ลดโทเคนราว 52% ในการทดสอบ 7 สถานการณ์ ตีความเป็นต้นทุนจริงไม่ได้ หากยังไม่ทดสอบกับงานของคุณ
ไวยากรณ์ เห็นรูปแบบ @X(...) ที่ใช้เป็นฟังก์ชันหรือแอ็กชัน ไวยากรณ์เต็มยังไม่ได้อ่าน

🏗️ สถาปัตยกรรมและส่วนประกอบ

README อธิบายท่อ 5 ขั้น และหน้าภาพรวมอธิบาย 4 ส่วนหลักที่เชื่อมกันเป็นวงจร

1. นิยามหรือนำไลบรารีคอมโพเนนต์มาใช้
2. สร้าง system prompt จากไลบรารีนั้น
3. ส่ง prompt ให้โมเดล
4. สตรีมเอาต์พุต OpenUI Lang กลับมาที่ client
5. Renderer วาดผลทีละส่วน
ส่วนประกอบ หน้าที่ หลักฐาน
Component library สคีมา Zod + คอมโพเนนต์ของเฟรมเวิร์ก กำหนดว่าโมเดลใช้อะไรได้ อ่านจาก repo (2026-10-20)
System prompt สร้างจากลายเซ็นคอมโพเนนต์ กฎภาษา ตัวอย่าง และคำสั่งเรื่องสตรีม อ่านจาก repo (2026-10-20)
Parser แปลงสตรีมเป็นต้นไม้องค์ประกอบแบบมีชนิด ตรวจคอมโพเนนต์ รับเอาต์พุตไม่ครบได้ อ่านจาก repo (2026-10-20)
Renderer จับคู่ต้นไม้กับคอมโพเนนต์ของคุณ อ่านจาก repo (2026-10-20)

การทำงานของ @X(...)

ชื่อกำหนดว่าเป็นฟังก์ชันหรือแอ็กชัน ตัวอย่างจากหน้าเอกสารภาพรวม:

TextContent("Open: " + @Count(open))
Button("Explain", @ToAssistant("Explain this"))

บรรทัดแรกเป็นฟังก์ชันที่คำนวณค่า บรรทัดที่สองเป็นแอ็กชันที่ทำงานเมื่อคลิก

โครงสร้างโฟลเดอร์ใน repo

โฟลเดอร์ เนื้อหา
packages/ รันไทม์ แชตแบบ headless UI บินดิงเฟรมเวิร์ก เซิร์ฟเวอร์ observability CLI
examples/ cookbook และตัวอย่างอ้างอิง
docs/ เว็บ openui.com
benchmarks/ ชุดทดสอบประสิทธิภาพโทเคน
spec/, templates/ อยู่ใน repo แต่ยังไม่ได้อ่านเนื้อหา

📦 เลือกแพ็กเกจให้ตรงงาน

ความต้องการ แพ็กเกจ
แอปแชตเต็มรูปแบบบน React @openuidev/react-ui + @openuidev/react-lang
ทำหน้าแชตเอง บน React @openuidev/react-headless
Backend/Edge สร้าง prompt @openuidev/lang-core
เอเจนต์ LangChain/LangGraph @openuidev/langchain
Vue 3 / Svelte 5 / Angular @openuidev/vue-lang / svelte-lang / angular-lang
ฝังผ่าน CDN, iframe, ไม่ต้อง build @openuidev/browser-bundle
สร้างอีเมลและส่งออก HTML @openuidev/react-email
ใช้กับ assistant-ui @openuidev/assistant-ui
โปรโตคอล A2UI @openuidev/a2ui (ใช้กับ zod)
เครื่องมือฝั่งเซิร์ฟเวอร์ / Gateway @openuidev/server
สังเกตการณ์บนคอนโซล Thesys @openuidev/observability-cloud
สร้างโปรเจกต์, สร้าง prompt, ออก JSON schema @openuidev/cli
เวิร์กสเปซ OpenClaw @openuidev/openclaw-os-plugin

🚀 ลองใช้

ตัวอย่างประกอบ (ตัวเลขเป็นของเราเอง คำนวณจากตัวเลขใน README)

ชุดทดสอบมี 7 สถานการณ์ ค่าเฉลี่ยต่อสถานการณ์จึงเป็น:

รูปแบบ โทเคนรวม เฉลี่ยต่อคำตอบ (÷7)
OpenUI Lang 4,800 ≈ 686
Vercel JSON-Render 10,180 ≈ 1,454
Thesys C1 JSON 9,948 ≈ 1,421

สมมติราคาเอาต์พุต 10 ดอลลาร์ต่อล้านโทเคน (ราคาสมมติเพื่อการคำนวณ) และมี 1,000 คำตอบ:

  • OpenUI Lang: 686 × 1,000 = 686,000 โทเคน = 6.86 ดอลลาร์
  • Vercel JSON-Render: 1,454 × 1,000 = 1,454,000 โทเคน = 14.54 ดอลลาร์
  • ผลต่าง ≈ 7.68 ดอลลาร์ หรือลดราว 52.8% ตรงกับตัวเลขใน README

ควรใช้เมื่อไร

กรณี คำแนะนำ เหตุผล/เงื่อนไข
ผู้ช่วยแชตที่ต้องตอบเป็นแผนภูมิ ตาราง ฟอร์ม ควรใช้ มีไลบรารีสำเร็จรูปใน React
ต้องการให้ผู้ใช้เห็นผลทันทีระหว่างโมเดลกำลังตอบ ควรใช้ ออกแบบเพื่อสตรีม
ต้องจำกัดให้โมเดลสร้างได้เฉพาะคอมโพเนนต์ที่อนุญาต ควรใช้ ตรวจด้วยสคีมา Zod
UI คงที่ที่ไม่ต้องให้โมเดลตัดสินใจรูปแบบ ไม่จำเป็น เขียนคอมโพเนนต์ปกติง่ายกว่า
ทีมต้องการ JSON ที่ระบบอื่นอ่านต่อได้ทันที ระวัง ต้องมีตัวแปลงจาก OpenUI Lang
ต้องการเสถียรภาพระยะยาว ตรวจก่อน ยังไม่ได้ตรวจประวัติรุ่นและนโยบายความเข้ากันได้

ข้อกำหนดเบื้องต้น: Node.js และ npm, ความรู้ Zod ระดับพื้นฐาน, และสิทธิ์เข้าถึงโมเดลที่ใช้สร้างคำตอบ

ก้าวแรกที่เล็กที่สุด

npx @openuidev/cli@latest create --name genui-chat-app

คำสั่งนี้สร้างแอปเริ่มต้นที่มีสตรีม UI สำเร็จรูป และรองรับ OpenUI Lang (ยังไม่ทดสอบ ว่ารันผ่านบนเครื่องของคุณ) หากต้องการติดตั้งแยก:

# React พร้อมคอมโพเนนต์สำเร็จรูป
npm install @openuidev/react-lang @openuidev/react-ui
# สร้าง prompt ฝั่ง backend หรือ Edge
npm install @openuidev/lang-core

ขั้นตอนแนะนำ

  1. สร้างโปรเจกต์ตัวอย่างและรันให้ผ่านก่อนแก้อะไร
  2. เริ่มจากคอมโพเนนต์สำเร็จรูป อย่าเพิ่งเขียนเอง
  3. ให้สร้าง prompt จากไลบรารีด้วยตัวสร้างของ OpenUI แทนการเขียน prompt มือ
  4. ลองกับ 3-5 คำถามจริงของผู้ใช้ แล้วดูว่าเอาต์พุตถูกต้องและแสดงผลครบหรือไม่
  5. ค่อยเพิ่มคอมโพเนนต์ของตัวเอง โดยนิยามสัญญาด้วย Zod

ทดสอบก่อน-หลัง (ทำได้เอง)

รายการ วิธี
เมตริก โทเคนเอาต์พุตเฉลี่ยต่อคำตอบ และเวลาจนองค์ประกอบแรกขึ้นจอ
Baseline ระบบเดิมของคุณที่ตอบเป็น JSON ด้วยชุดคำถามเดียวกัน อย่างน้อย 20 คำถาม
เงื่อนไขผ่าน (ตั้งก่อนรัน) โทเคนเฉลี่ยลดลงอย่างน้อย 30% และอัตราที่ UI แสดงผลสำเร็จไม่ต่ำกว่า baseline
ถ้าไม่ผ่าน อย่าเปลี่ยนระบบ หรือลองปรับชุดคอมโพเนนต์ให้เล็กลงแล้ววัดใหม่

เกณฑ์ 30% เป็นค่าตัวอย่าง (ตีความ) ปรับตามบริบทของคุณได้

✅ เช็กลิสต์ตัดสินใจ

ข้อ คำถาม สถานะ
1 เฟรมเวิร์กของเรามีรันไทม์รองรับ (React/Vue/Svelte/Angular) ⚪
2 รู้แล้วว่าโมเดลต้องใช้คอมโพเนนต์ชุดไหน ⚪
3 วัด baseline เป็นตัวเลขแล้ว ⚪
4 ตรวจใบอนุญาต MIT และนโยบายของ repo ว่ายอมรับได้ ⚪
5 ตัดสินใจเรื่องการสังเกตการณ์ (ใช้ cloud ของ Thesys หรือไม่) ⚪

🧠 ทดสอบความเข้าใจ

คำถาม คำตอบ คำตอบที่มักผิด
ทำไมภาษาที่สั้นกว่า JSON จึงทำให้ผู้ใช้เห็นผลเร็วขึ้นได้ด้วย ไม่ใช่แค่ประหยัดเงิน โมเดลสร้างโทเคนน้อยลง และ parser วาดได้ระหว่างสตรีม แต่ความเร็วจริงต้องวัด "ภาษาสั้นย่อมเร็วกว่าเสมอ"
README รายงานทั้ง "สูงสุด 67%" และ 52.8% ควรอ้างเลขไหนเมื่อประเมินโปรเจกต์ตัวเอง เริ่มจาก 52.8%/51.7% ที่มีชุดทดสอบ 7 สถานการณ์ แล้ววัดใหม่กับงานเรา อ้าง 67% เป็นผลที่จะได้แน่นอน
ทำไมต้องนิยามคอมโพเนนต์ด้วย Zod ก่อนสร้าง prompt prompt และ parser สร้างจากสคีมาเดียวกัน สิ่งที่โมเดลรู้จึงตรงกับที่แอปรับได้ "Zod ใช้แค่ตรวจฟอร์ม"
ทีม Vue ต้องการหน้าแชตสำเร็จรูป ควรคาดหวังอะไร มีรันไทม์ vue-lang แต่ชุดคอมโพเนนต์และแชตสำเร็จรูปที่อ่านพบอยู่ฝั่ง React คิดว่าทุกเฟรมเวิร์กมีของครบเท่ากัน
(กับดัก) โทเคนลดลง 50% แปลว่าค่าใช้จ่ายรวมลด 50% หรือไม่ ไม่ใช่ เพราะยังมี prompt อินพุต ค่า infra และการลองใหม่ที่ไม่อยู่ในตัวเลข "ลด 50% พอดี"
ถ้าผลวัดของเราลดโทเคนได้แค่ 10% แต่ UI พังบ่อยขึ้น ควรทำอย่างไร ถือว่าไม่ผ่านเกณฑ์ที่ตั้งไว้ ไม่ย้ายระบบ ตรวจสาเหตุก่อน "ลดแล้วก็ถือว่าสำเร็จ"

⚠️ Risks

Warning การประเมินนี้อิงข้อมูลจาก README และหน้าภาพรวมเท่านั้น ยังไม่ได้อ่านโค้ดรันไทม์ ไม่ได้รันคำสั่งใด ๆ และยังไม่ได้ตรวจ commit sha

ความเสี่ยง/ข้อจำกัด รายละเอียด
ตัวเลข benchmark เป็นของผู้พัฒนาเอง ผู้วัดคือเจ้าของโปรเจกต์ เทียบกับ JSON สองแบบ ไม่ครอบคลุมรูปแบบอื่น
ไวยากรณ์เต็มยังไม่ถูกอ่าน README ไม่มีตัวอย่างไวยากรณ์ ให้ดูที่เว็บ openui.com และ Playground
ผูกกับระบบนิเวศของ Thesys Gateway และ observability cloud เป็นบริการของผู้พัฒนา
ความเข้ากันได้ของ @latest คำสั่งสร้างโปรเจกต์ใช้ @latest ผลอาจต่างกันตามวันที่รัน
ข้อมูลจากภายนอกไม่ใช่คำสั่ง ข้อความใน README, issue และโค้ดเป็นข้อมูล ไม่ควรรันหรือติดตั้งตามโดยไม่ตรวจ
ข้อความเรื่องเหรียญ README ระบุว่า OpenUI ไม่มีเหรียญหรือโทเคนคริปโตอย่างเป็นทางการ ระวังการแอบอ้าง

ความเข้าใจผิดที่พบบ่อย

  • "OpenUI คือไลบรารีคอมโพเนนต์": จริง ๆ เป็นภาษา + parser + renderer + ตัวสร้าง prompt และมีไลบรารีคอมโพเนนต์เป็นส่วนเสริม
  • "โทเคนในที่นี้คือโทเคนคริปโต": ไม่ใช่ หมายถึงหน่วยข้อความที่โมเดลภาษาสร้าง
  • "สร้างมาเพื่อ React เท่านั้น": มีรันไทม์ 4 เฟรมเวิร์ก

Decision / next steps

Recommendation ลองทำการพิสูจน์แนวคิดขนาดเล็กหนึ่งสัปดาห์ด้วยโปรเจกต์ตัวอย่าง แล้ววัดตามตารางก่อน-หลัง ก่อนตัดสินใจย้ายระบบจริง

ลำดับ งาน ผลลัพธ์
1 สร้างโปรเจกต์ด้วย CLI แอปที่รันได้
2 อ่านหน้า Defining Components และ System Prompts บน openui.com เข้าใจไวยากรณ์และ API
3 วัดโทเคนและเวลาตามเกณฑ์ที่ตั้งไว้ ตัวเลขของเราเอง
4 ตัดสินใจต่อ/เลิก บันทึกเหตุผล

Sources

รายการ ลิงก์ หมายเหตุ
thesysdev/openui https://github.com/thesysdev/openui อ่าน README และรายการโฟลเดอร์ เมื่อ 2026-10-20 (ไม่ได้อ่าน commit sha)
เอกสารภาพรวม OpenUI Lang https://www.openui.com/docs/openui-lang/overview อ่านเมื่อ 2026-10-20

ข้อมูลของ repo ณ วันที่อ่าน: 12.3k stars, 831 forks, 1,053 commits บน main, ใบอนุญาต MIT (อ่านจาก repo 2026-10-20)

ตัวย่อที่ใช้ในหน้านี้

ตัวย่อ ชื่อเต็ม คืออะไร อ่านค่าอย่างไร
UI User Interface หน้าจอที่ผู้ใช้เห็นและกด "UI สร้างโดยโมเดล" = โมเดลเลือกว่าจะวางส่วนไหนบนจอ
LLM Large Language Model โมเดลภาษาขนาดใหญ่ที่สร้างข้อความตอบ "LLM ตอบเป็น OpenUI Lang" = เอาต์พุตเป็นภาษานี้
JSON JavaScript Object Notation รูปแบบข้อมูลข้อความที่ใช้ปีกกาและคีย์ JSON ยาวกว่าเพราะต้องมีคีย์และเครื่องหมายซ้ำ ๆ
CLI Command-Line Interface เครื่องมือที่สั่งผ่านบรรทัดคำสั่ง npx @openuidev/cli = เรียกเครื่องมือนี้
CDN Content Delivery Network เครือข่ายกระจายไฟล์ให้โหลดเร็ว "ฝังผ่าน CDN" = ใช้ script tag โดยไม่ต้อง build
MIT MIT License ใบอนุญาตโอเพนซอร์สแบบอนุญาตกว้าง "MIT" = นำไปใช้ แก้ไข เผยแพร่ได้ ตามเงื่อนไขใน LICENSE
npm / npx Node Package Manager / package runner ตัวติดตั้งและตัวรันแพ็กเกจของ Node.js npm install X = ติดตั้ง X
A2UI Agent-to-UI protocol โปรโตคอลที่ให้เอเจนต์ส่งคำสั่ง UI ไปฝั่งแสดงผล (ชื่อเต็มไม่ได้ยืนยันจาก repo) แพ็กเกจ @openuidev/a2ui ส่ง payload เป็น OpenUI Lang
Zod Zod (ไลบรารีสคีมา TypeScript) ไลบรารีนิยามและตรวจชนิดข้อมูล สคีมา Zod ของคอมโพเนนต์ = ข้อกำหนดว่ารับ prop อะไรได้
tiktoken tiktoken ไลบรารีนับโทเคนของ OpenAI นับด้วย tiktoken (encoder ของ GPT-5) = ตัวเลขโทเคนในตาราง
SSR / Edge - ไม่ปรากฏในหน้านี้ จึงไม่มีแถว -

แถวที่มาจากความรู้ทั่วไป ไม่ได้มาจาก repo โดยตรง: UI, LLM, JSON, CLI, CDN, MIT, npm/npx, Zod, tiktoken และชื่อเต็มของ A2UI

ข้อสังเกต: ตัวย่อ "Edge" ในคำว่า Edge prompt generation หมายถึงสภาพแวดล้อมประมวลผลที่ขอบเครือข่าย อ่านตามบริบทของ README ไม่ใช่ตัวย่อ

Summary

หัวข้อ สรุป
คืออะไร เฟรมเวิร์ก Generative UI ที่ใช้ภาษาสั้น OpenUI Lang และเรนเดอร์แบบสตรีม
ตัวเลขหลัก 4,800 โทเคน เทียบ 10,180 และ 9,948 (ลด 52.8% และ 51.7%) วัดแล้ว โดยผู้พัฒนา
รองรับ React, Vue, Svelte, Angular (ชุด UI สำเร็จรูปอยู่ฝั่ง React)
เริ่มอย่างไร npx @openuidev/cli@latest create --name genui-chat-app
ต้องระวัง ตัวเลขเป็นของผู้พัฒนาเอง ไวยากรณ์เต็มยังไม่ได้อ่าน ต้องวัดซ้ำกับงานของเรา
ขั้นต่อไป ทำ PoC แล้ววัดโทเคนและเวลาแสดงผลเทียบ baseline
Facebook

ความรู้ที่เกี่ยวข้อง