ในการพัฒนาระบบซอฟต์แวร์ยุคใหม่ การพึ่งพา AI โมเดลเดียว (Single-Agent) ให้เขียนโค้ด ตรวจ bugs วางโครงสร้าง และทำ Test cases ทั้งหมดพร้อมกัน มักนำไปสู่ปัญหา Context Overload และความผิดพลาดที่สูงขึ้น OpenCode จึงออกแบบสถาปัตยกรรม Multi-Agent Systems ขึ้นมาเพื่อแก้ไขปัญหานี้โดยเฉพาะ
ทำไมต้อง Multi-Agent ใน OpenCode? (WHY)
การกระจายงานให้ AI หลายตัวที่มีหน้าที่เฉพาะทาง มีข้อดีเหนือกว่าการใช้ AI ตัวเดียวดังนี้:
- ลด Context Drift & Token Pollution: เอเจนต์ย่อยรับฟังเฉพาะคำสั่งที่เกี่ยวข้อง ทำให้ Context Window ไม่แออัดจนหลงลืมข้อกำหนดหลัก
- ประหยัดต้นทุน (Cost Efficiency): ให้ Primary Agent ตัวหลักวางแผน แล้วส่งงานย่อยให้โมเดลราคาถูก/ความเร็วสูง ทำแทน
- แยกความรับผิดชอบชัดเจน (Separation of Concerns): เอเจนต์สำหรับเขียนโค้ดจะไม่ยุ่งกับการแก้โครงสร้างไฟล์ ขณะที่เอเจนต์ตรวจทาน (Reviewer) จะได้รับสิทธิ์แบบ Read-only เพื่อความปลอดภัย
การคำนวณ Token และ Context Window ในระบบ Multi-Agent
ข้อดีที่สำคัญมากๆ ของการใช้ Subagent ใน OpenCode คือเรื่อง **การคิด Token แยกกันอย่างเป็นอิสระ**:
- Context Window อิสระ (Isolated Context): เมื่อ Primary Agent สั่งงาน Subagent (เช่น
@frontend-dev) ระบบจะสร้าง Context Window ใหม่ให้ Subagent ตัวนั้นทันที ทำให้ประวัติการคุยยาวๆ ของ Primary Agent ไม่หลุดไปเปลือง Token ใน Subagent - ส่งเฉพาะ Instruction ที่จำเป็น: Subagent จะรับเพียง System Prompt ของตัวเองบวกกับคำสั่งย่อยที่ได้รับมอบหมายเท่านั้น จึงประมวลผลได้รวดเร็วและใช้ Token น้อยมาก
- นับ Token แยกตามรายโมเดล: หากเลือกใช้โมเดลต่างชนิดกัน (เช่น Primary ใช้โมเดลใหญ่ แต่ Subagent ใช้
opencode/big-pickle) การตัดโควตาและค่าใช้จ่ายของ Token จะถูกคำนวณแยกกันตามเรตของแต่ละโมเดลอย่างตรงไปตรงมา
OpenCode ทำงานอย่างไร? (HOW)
OpenCode ใช้หลักการกระจายงานผ่านระบบ Primary Agent และ Subagents โดยเราสามารถกำหนดบทบาทให้ทำงานร่วมกันอย่างมีประสิทธิภาพ:
- @lead (Primary Agent): ตัวหลักที่ถูกตั้งเป็นค่าเริ่มต้น รับโจทย์ใหญ่จากผู้ใช้ วิเคราะห์สเปก วางแผน และสั่งการกระจายงานให้ Subagents ทั้งหมด
- @designer (Subagent): ออกแบบ UI/UX, Component Structure, Color Palette และ Style Guide
- @frontend-dev (Subagent): พัฒนาและแก้ไข โค้ดฝั่ง UI/Frontend (เช่น React, Next.js, Vue)
- @backend-dev (Subagent): พัฒนา API, Database Schema และ Business Logic ฝั่ง Server
- @tester (Subagent): เขียน Unit Test และรันการทดสอบครอบคลุมโค้ดที่เพิ่งเขียน
- @sec-check (Subagent): สแกนหาช่องโหว่ความปลอดภัยแบบ Read-Only ก่อนส่งสรุปผลกลับ
การตัดสินใจของ OpenCode CLI และจำนวน Developer
Primary Agent ทำหน้าที่เป็น Orchestrator อัจฉริยะ ที่ตัดสินใจกระจายงานเองตามความเหมาะสม:
- วิเคราะห์และ Spawn งานคู่ขนาน (Dynamic Spawning): หากมีงานเขียน UI และ API ที่ไม่เกี่ยวข้องกัน Primary Agent จะเปิด Subagent
@frontend-devและ@backend-devขึ้นมารันขนานกัน (Parallel Subagents) เพื่อประมวลผลพร้อมกันทันที - ไม่จำเป็นต้องสร้าง Subagent หลายตัวในคอนฟิก: เราสามารถสร้างนิยาม Subagent ไว้เพียงตัวเดียว แล้วปล่อยให้ระบบเรียกใช้งานพร้อมกันหลาย Instance ได้ เว้นแต่ต้องการแบ่งแยกหน้าที่ สิทธิ์ หรือใช้ Model คนละตัวกัน
ตั้งค่า Multi-Agent ใน OpenCode (opencode.json)
กำหนด "default_agent": "lead" พร้อมตั้งค่า lead เป็น Primary Agent โดยแนะนำให้ **เว้นการระบุคีย์ model ใน Primary Agent ไว้** เพื่อหลีกเลี่ยงข้อผิดพลาดหรือ Warning เรื่อง Configuration ในกรณีที่ชื่อโมเดลระบุไม่ตรงกับ Provider ซึ่งการเว้นไว้จะช่วยให้ Primary Agent ดึงโมเดลหลักที่ถูกเลือกไว้บน OpenCode TUI มาใช้งานโดยอัตโนมัติ ส่วนสิทธิ์การแก้ไขไฟล์ (permission) สามารถใช้ "allow" หรือ "deny" แบบทั่วไป เพื่อหลีกเลี่ยงการล็อก Path โฟลเดอร์เฉพาะทางที่อาจไม่ตรงกับโครงสร้างโปรเจกต์ของผู้ใช้งานแต่ละคน:
{
"$schema": "https://opencode.ai/config.json",
"default_agent": "lead",
"agent": {
"lead": {
"mode": "primary",
"description": "Lead Architect for planning, task delegation, and orchestrating workflow",
"prompt": "คุณคือ Lead Architect หน้าที่ของคุณคือรับโจทย์จากผู้ใช้ วิเคราะห์ความต้องการ วางแผนระบบอย่างเป็นขั้นตอน และสั่งการกระจายงานไปยัง Subagents (@designer, @frontend-dev, @backend-dev, @tester, @sec-check) ตามความเชี่ยวชาญ ห้ามเขียนโค้ดเองโดยตรง ให้ส่งต่อคำสั่งย่อยและรวบรวมผลลัพธ์มาสรุปให้ผู้ใช้เท่านั้น"
},
"designer": {
"mode": "subagent",
"description": "UI/UX Designer for designing webpage layouts and style guidelines",
"model": "opencode/big-pickle",
"prompt": "คุณคือ UI/UX Designer หน้าที่คือออกแบบหน้าเว็บ Layout, UI components, Color palette และ Style guide ตามคำสั่งเท่านั้น",
"permission": {
"edit": "allow"
}
},
"frontend-dev": {
"mode": "subagent",
"description": "Frontend Developer for building web interfaces and client-side logic",
"model": "opencode/big-pickle",
"prompt": "คุณคือ Frontend Developer หน้าที่คือเขียนและแก้ไขโค้ดฝั่ง UI, Client Components และเชื่อมต่อ API ตามคำสั่งเท่านั้น",
"permission": {
"edit": "allow"
}
},
"backend-dev": {
"mode": "subagent",
"description": "Backend Developer for building APIs, server logic, and database schemas",
"model": "opencode/big-pickle",
"prompt": "คุณคือ Backend Developer หน้าที่คือเขียน API, Database Schema, Authentication และ Server Logic ตามคำสั่งเท่านั้น",
"permission": {
"edit": "allow"
}
},
"tester": {
"mode": "subagent",
"description": "QA Tester for unit testing",
"model": "opencode/big-pickle",
"prompt": "คุณคือ QA Tester หน้าที่คือเขียน Unit Test และ Integration Test ตามคำสั่งเท่านั้น",
"permission": {
"edit": "allow"
}
},
"sec-check": {
"mode": "subagent",
"description": "Security Auditor for checking code vulnerabilities",
"model": "opencode/big-pickle",
"prompt": "คุณคือ Security Auditor หน้าที่คือสแกนหาช่องโหว่ความปลอดภัยและวิเคราะห์ความเสี่ยงแบบ Read-only",
"permission": {
"edit": "deny"
}
}
}
}
กำหนดเวิร์กโฟลว์อัตโนมัติด้วย .opencode/commands/
โฟลเดอร์ .opencode/commands/ ทำหน้าที่เป็นศูนย์รวมสคริปต์คำสั่งลัด (Custom Slash Commands) ช่วยให้เราล็อกลำดับเวิร์กโฟลว์ซ้ำๆ ให้ AI ทำงานได้ทันที:
- เปลี่ยน Markdown เป็น Custom Command: เพียงสร้างไฟล์
.mdในโฟลเดอร์นี้ เช่นbuild-feature.mdจะกลายเป็นคำสั่ง/build-featureใน CLI - ลำดับงานอัตโนมัติ: เขียน Prompt กำหนดขั้นตอนล่วงหน้า เช่น พิมพ์
/build-featureเพื่อสั่งให้@leadรับสเปก สั่ง@designerออกแบบ สั่ง@frontend-devและ@backend-devเขียนโค้ดคู่ขนาน แล้วส่งต่อให้@testerและ@sec-checkตรวจสอบ โดยไม่ต้องพิมพ์สั่งใหม่ทุกครั้ง - สร้างมาตรฐานให้ทีม: ช่วยให้ทุกคนในทีมรันเวิร์กโฟลว์การพัฒนาโค้ดแบบเดียวกันอย่างแม่นยำ
บทสรุป
สถาปัตยกรรม Multi-Agent ใน OpenCode ไม่ได้เพียงช่วยให้ AI เขียนโค้ดได้เร็วขึ้น แต่เป็นการจำลอง "ทีมวิศวกรซอฟต์แวร์ขนาดเล็ก" เข้ามาไว้ในสภาพแวดล้อมการทำงานของคุณ ช่วยให้การพัฒนาซอฟต์แวร์ในระดับโปรดักชันมีความแม่นยำ ปลอดภัย และควบคุมต้นทุนได้จริง
No comments:
Post a Comment