Quest 66 - Hierarchical Agent Team
Quest 66: Hierarchical Agent Team
hard 30-45 minutes🎯 Learning Objectives
- สร้าง manager-worker hierarchy ที่ decompose งานและ assign ให้ workers
- เข้าใจ task decomposition — แบ่งงานใหญ่เป็นงานย่อย
- รู้จัก result validation — manager ต้อง verify ผลลัพธ์ก่อน accept
- ออกแบบ parallel execution ที่ workers ทำงานพร้อมกัน
📖 Concept: Manager-Worker Hierarchy
Manager-Worker Pattern คือ hierarchical structure ที่ manager จัดการงาน และ workers ทำงาน — เหมือนหัวหน้าทีมที่แบ่งงานให้ลูกทีม
ทำไม pattern นี้ถึงสำคัญ? เพราะ agent ตัวเดียวมี limits — context window, ความเร็ว, ความแม่นยำ แต่ถ้ามี manager ที่ decompose งานแล้วให้ workers หลายคนทำงานพร้อมกัน ประสิทธิภาพจะสูงขึ้นมาก
const team = createTeam(manager, workers);const result = team.execute('Write a comprehensive report on AI trends');// Manager: decompose → [research, outline, draft, review]// Workers: แต่ละคนรับ subtask หนึ่งตัว// Manager: validate ผลลัพธ์จากทุกคน⚙️ How It Works
วงจร Manager-Worker
1. manager.decompose(task) — แบ่ง task เป็น subtasks[] ↓2. manager.assign(subtasks, workers) — assign subtask ให้แต่ละ worker ↓3. Workers execute พร้อมกัน (parallel) ↓4. manager.validate(results) — ตรวจสอบผลลัพธ์จากทุก worker ↓5. ถ้า accepted → return results + summary ถ้า rejected → retry หรือ assign ใหม่ทำไม Manager ต้อง Validate?
ถ้า manager รับผลลัพธ์จาก workers โดยไม่ validate คุณภาพจะไม่保证:
// ❌ ไม่ validate — รับทุกอย่างconst results = workers.map(w => w.execute(subtask));return { results, summary: 'done' };
// ✅ Validate ก่อน acceptconst results = workers.map(w => w.execute(subtask));const { accepted, rejected } = manager.validate(results);if (rejected.length > 0) { // retry หรือ assign ใหม่}return { results: accepted, summary: 'done with validation' };💡 Example: Team แบบ step-by-step
const manager = { decompose: (task) => ['research', 'outline', 'draft'], assign: (subtasks, workers) => subtasks.map((st, i) => ({ task: st, worker: workers[i % workers.length] })), validate: (results) => ({ accepted: results.filter(r => r.quality > 0.7), rejected: results.filter(r => r.quality <= 0.7), })};
const workers = [ { name: 'Alice', execute: (task) => ({ task, output: '...', quality: 0.9 }) }, { name: 'Bob', execute: (task) => ({ task, output: '...', quality: 0.5 }) },];
const team = createTeam(manager, workers);const result = team.execute('Write a report');// Alice's work accepted, Bob's rejected (quality 0.5)⚠️ Common Mistakes
Mistake 1: ไม่ validate ผลลัพธ์จาก workers
“Workers know what they’re doing” → Manager ต้อง validate ทุกผลลัพธ์ — ไม่เช่นนั้น quality ไม่保证
Mistake 2: Assign งานทุกอย่างให้ worker เดียว
“One fast worker is better than three slow ones” → Hierarchy มีไว้เพื่อ parallel execution — ใช้ workers หลายคนทำงานพร้อมกัน
Mistake 3: Manager ทำงานเองแทนที่จะ assign
“I’ll just do it myself, it’s faster” → Manager ควร decompose และ assign — ไม่ใช่ทำงานเอง (นั่นคือ job ของ workers)
Mistake 4: ไม่มี feedback loop
“Just collect results and return” → ถ้า worker ล้มเหลว manager ต้อง assign ใหม่ — ไม่ใช่ ignored
📝 Knowledge Check
📝 Knowledge Check
Q1:Manager-Worker Hierarchy มีข้อดีอย่างไร?
Q2:ทำไม Manager ต้อง validate ผลลัพธ์จาก Workers?
Q3:ถ้า manager.validate() reject results บางส่วน ควรทำอย่างไร?
🏋️ Quest: Hierarchical Agent Team
สร้าง manager-worker team ที่ decompose, assign, validate งาน
-
Download ไฟล์เริ่มต้นของ quest:
Terminal window npx bluebeltdojo download quest-66-agent-hierarchycd quest-66-agent-hierarchy -
เปิด
problem.jsใน editor ของคุณพร้อม AI tool -
Implement
createTeam(manager, workers)ตาม instructions ในproblem.js -
ตรวจสอบ solution ของคุณ:
Terminal window node test.js -
สำคัญ! ทดสอบ edge case: manager.validate ปฏิเสธ results บางส่วน
-
แก้ไขจน tests ทุกตัวผ่าน
-
ส่งคำตอบ:
Terminal window npx bluebeltdojo submit
💡 Tip: ลองนึกถึง scenario ที่ worker สร้าง output คุณภาพต่ำ — manager จัดการอย่างไร?
คำใบ้
- อ่าน instructions ใน
problem.jsอย่างละเอียด - Manager ต้อง decompose task ก่อน assign — ไม่ใช่ส่ง task ตรงให้ workers
- Validate results จาก workers ก่อน accept — ถ้า rejected ต้อง retry
- ถ้าติดขัด ลองอ่าน “Common Mistakes” อีกครั้ง