สารบัญ
OpenClaw Subagent คืออะไร?
Subagent คือ AI Agent ตัวเล็กๆ ที่ถูกสร้างขึ้นมาเพื่อทำงานเฉพาะทาง (Specialized Agent) โดย Main Agent หรือ Agent หลักเป็นคนสั่งให้ทำงาน เมื่องานเสร็จแล้ว Subagent จะรายงานผลกลับไป
แนวคิดหลัก: แทนที่จะให้ AI ตัวเดียวทำทุกอย่าง เราแบ่งงานออกเป็นส่วนๆ และมอบหมายให้ Subagent เฉพาะทางจัดการแต่ละส่วน
โครงสร้างการทำงาน
Agent
Agent
Agent
Agent
ข้อดีของ Subagent
โฟกัสเฉพาะทาง
แต่ละ Subagent เชี่ยวชาญงานเฉพาะ ทำให้ได้ผลลัพธ์ที่แม่นยำกว่า
แบ่งงานได้ชัดเจน
งานซับซ้อนแบ่งเป็นส่วนย่อย จัดการได้ง่ายและตรวจสอบได้
ทำงานขนานได้
หลาย Subagent ทำงานพร้อมกัน ลดเวลาดำเนินการโดยรวม
Retry ได้เฉพาะส่วน
ถ้าส่วนไหน fail ให้ retry เฉพาะส่วนนั้น ไม่ต้องเริ่มใหม่ทั้งหมด
วิธีสร้าง Subagent ด้วย sessions_spawn
ใน OpenClaw เราใช้ sessions_spawn
ใน subagents tool เพื่อสร้าง Subagent ใหม่
รูปแบบการเรียกใช้งาน
{
"action": "spawn",
"target": "agent:main:subagent",
"message": "คำอธิบายงานที่ต้องการให้ Subagent ทำ",
"context": {
"label": "my-worker",
"skills": ["skill1", "skill2"],
"model": "ollama-local/kimi-k2.5:cloud"
}
}
Parameters สำคัญ
| Parameter | ประเภท | คำอธิบาย |
|---|---|---|
| action | string | ใช้ค่า "spawn" เพื่อสร้าง subagent ใหม่ |
| target | string | รูปแบบ "agent:main:subagent" |
| message | string | รายละเอียดงานที่ต้องการให้ทำ (ควรละเอียดชัดเจน) |
| context.label | string | ชื่อ identifier สำหรับ subagent (optional) |
| context.skills | array | รายชื่อ skills ที่ต้องการให้ subagent ใช้ (optional) |
| context.model | string | โมเดล AI ที่ต้องการใช้ (optional) |
ขั้นตอนการทำงาน
Main Agent สร้าง Subagent
เรียกใช้ sessions_spawn พร้อมระบุงานที่ชัดเจน
Subagent ทำงานอย่างอิสระ
Subagent ทำงานตามที่ได้รับมอบหมาย สามารถเรียกใช้ tools ได้ตามสิทธิ์
Push-based Completion
เมื่อ Subagent เสร็จงาน จะรายงานผลกลับไปหา Main Agent อัตโนมัติ
Main Agent รวบรวมผล
Main Agent รับผลจาก Subagent และนำไปใช้ต่อหรือส่งให้ผู้ใช้
ตัวอย่างการใช้งานจริง
1 สร้างบทความอัตโนมัติ
ตัวอย่างการใช้ Subagent เขียนบทความและ deploy เว็บไซต์
{
"action": "spawn",
"target": "agent:main:subagent",
"message": "เขียนบทความ 'Docker Best Practices' สำหรับเว็บไซต์ wiki-tlog.web.app
เนื้อหาที่ต้องการ:
1. Docker fundamentals
2. Security best practices
3. Performance optimization
4. Common pitfalls
เขียนเป็นภาษาไทย เก็บไฟล์เป็น HTML ใน public/articles/docker-best-practices.html
แล้ว deploy ไปยัง Firebase (wiki-tlog project)",
"context": {
"label": "article-writer"
}
}
2 วิจัยและสรุปข้อมูล
ตัวอย่างการใช้ Subagent ค้นคว้าข้อมูลจากเว็บและสรุปผล
{
"action": "spawn",
"target": "agent:main:subagent",
"message": "ค้นคว้าเกี่ยวกับ 'Kubernetes vs Docker Swarm'
งานที่ต้องทำ:
1. ค้นหาข้อมูลล่าสุดเกี่ยวกับ Kubernetes และ Docker Swarm
2. เปรียบเทียบข้อดีข้อเสียของแต่ละตัว
3. สรุปเป็นตารางเปรียบเทียบ
4. แนะนำว่าควรใช้ตัวไหนในกรณีใด
ส่งผลลัพธ์กลับมาเป็น markdown",
"context": {
"label": "researcher",
"skills": ["web_search", "web_fetch"]
}
}
3 Code Review และ Refactoring
ตัวอย่างการใช้ Subagent ตรวจสอบและปรับปรุงโค้ด
{
"action": "spawn",
"target": "agent:main:subagent",
"message": "Review และ refactor ไฟล์ /src/api/handlers.ts
งานที่ต้องทำ:
1. อ่านไฟล์ handlers.ts
2. ตรวจสอบ code quality, security issues, performance problems
3. แนะนำการปรับปรุง
4. แก้ไขไฟล์ตามข้อแนะนำ (ถ้าได้รับอนุญาต)
รายงานผลกลับมาพร้อมสรุปการเปลี่ยนแปลง",
"context": {
"label": "code-reviewer",
"skills": ["read", "edit", "write"]
}
}
4 การใช้หลาย Subagent พร้อมกัน (Parallel Execution)
ตัวอย่างการ spawn หลาย subagent เพื่อทำงานขนานกัน
// Spawn 3 subagents พร้อมกัน // Subagent 1: Research { "action": "spawn", "target": "agent:main:subagent", "message": "ค้นหาข้อมูลเกี่ยวกับ Firebase Hosting...", "context": { "label": "research-1" } } // Subagent 2: Write Code { "action": "spawn", "target": "agent:main:subagent", "message": "สร้าง Firebase deployment script...", "context": { "label": "coder-1" } } // Subagent 3: Test { "action": "spawn", "target": "agent:main:subagent", "message": "เตรียม test cases สำหรับ deployment...", "context": { "label": "tester-1" } }
หมายเหตุ: การทำงานแบบขนานช่วยลดเวลาโดยรวม แต่ต้องแน่ใจว่าแต่ละ subagent ไม่ขัดแย้งกัน (เช่น แก้ไขไฟล์เดียวกันพร้อมกัน)
Best Practices
1. อธิบายงานให้ชัดเจน
Message ที่ส่งให้ Subagent ควรมีรายละเอียดครบถ้วน:
- ✓ ระบุ context และ background เพียงพอ
- ✓ ระบุ output ที่ต้องการอย่างชัดเจน
- ✓ ระบุ constraints และ limitations
- ✓ ระบุไฟล์/ทรัพยากรที่เกี่ยวข้อง
2. กำหนด Scope ให้แคบลง
แต่ละ Subagent ควรทำงานเดียวและทำให้ดี:
❌ ไม่แนะนำ:
"จัดการทุกอย่างเกี่ยวกับเว็บไซต์ให้เรียบร้อย"
✅ แนะนำ:
"สร้างไฟล์ HTML สำหรับหน้า About ตาม template ที่กำหนด"
3. ใช้ Label สำหรับติดตาม
ตั้งชื่อ label ที่สื่อความหมายเพื่อให้ติดตามและ debug ได้ง่าย:
// Good labels "label": "article-writer-docker" "label": "research-k8s-vs-docker" "label": "deploy-firebase-wiki" // Bad labels "label": "agent1" "label": "worker" "label": "test"
4. จัดการ Error อย่างเหมาะสม
วางแผนสำหรับกรณีที่ Subagent fail:
- • กำหนด timeout ที่เหมาะสม
- • เตรียม fallback plan
- • Log error messages เพื่อนำไปแก้ไข
- • พิจารณา retry logic (แต่ไม่ควร retry ไม่รู้จบ)
5. สิ่งที่ควรหลีกเลี่ยง
- ❌ Don't busy-poll: อย่าวนลูปถาม status ตลอด ใช้ push-based completion
- ❌ Don't spawn recursively: อย่าให้ Subagent spawn Subagent ซ้อนกันเกินไป
- ❌ Don't share mutable state: หลีกเลี่ยงการแชร์ state ที่เปลี่ยนแปลงได้ระหว่าง Subagent
- ❌ Don't ignore security: ตรวจสอบสิทธิ์และ permissions ของแต่ละ Subagent
6. การ Monitor และ Debug
เครื่องมือสำหรับติดตามและจัดการ Subagent:
// List all running subagents { "action": "list" } // Kill a specific subagent { "action": "kill", "target": "agent:main:subagent:uuid" } // Send additional instructions { "action": "steer", "target": "agent:main:subagent:uuid", "message": "..." }
สรุป
สิ่งสำคัญที่ต้องจำ:
- Subagent = Agent เฉพาะทางที่ทำงานเดียวได้ดี
- ใช้ sessions_spawn เพื่อสร้าง Subagent ใหม่
- Push-based completion = ไม่ต้อง poll
- อธิบายงานให้ชัดเจน กำหนด scope ให้แคบ
ขั้นตอนต่อไป:
- ลองสร้าง Subagent ง่ายๆ สำหรับงานที่ทำบ่อย
- ศึกษา skills ที่มีในระบบ
- ทดลองใช้หลาย Subagent พร้อมกัน
- พัฒนา workflow ที่เหมาะกับงานของคุณ