ข้าม​ไป​ยัง​เนื้อหา

Context Map → multi-agent เป็น​ข้อ​ยกเว้น​ที่​ต้อง​มี​เหตุผล

ถ้า​มี​บท​เดียว​ใน​คอร์ส​นี้​ที่​คน​อ่าน​แล้ว​เอา​ไป​ใช้​ผิด​ง่าย​ที่สุด บท​นี้​คือ​บท​นั้น — เพราะ​มัน​คือ​บท​ที่​พูด​เรื่อง Multi-agentMulti-agentระบบ​ที่​มี agent มากกว่า​หนึ่ง​ตัว​ทำงาน​ร่วม​กัน แต่ละ​ตัว​ควร​มี Bounded Context ของ​ตัวเอง​ชัดเจน​และ​เชื่อม​กัน​ผ่าน context map/handoff ที่​ออกแบบ​ไว้ — ไม่ใช่​คำ​ตอบ​สำเร็จรูป​สำหรับ​ทุก​ปัญหา หลาย​งาน​ทำ​ด้วย agent เดียว​หรือ workflow ธรรมดา​ก็​เพียงพอ​และ​เชื่อถือ​ได้​กว่าArchitecture และ​แค่​มี​คำ​นี้​อยู่​ใน​หัวเรื่อง​ก็​พอ​จะ​ทำให้​คน​กระโดด​ไป​แตก agent เป็น​สิบ​ตัว​โดย​ไม่​ได้​ถาม​ว่า​ทำไม สี่บท​ที่​ผ่าน​มา​เรา​ลงแรง​กับ​คำถาม​เดียว: อะไร​ควร​อยู่​ใน agent ที่​มี​ขอบเขต​ดี ตัว​เดียว บท​นี้​ถึง​จะ​เปิด​ประตู​ให้​มี​หลาย​ตัว — แต่​เปิด​แบบ​มี​เงื่อนไข ไม่ใช่​เปิด​ทิ้ง​ไว้ วิธี​เปิด​ที่​ถูก​คือ​หยิบ​เครื่องมือ DDD ที่​คุ้น​มือ​อีก​ชิ้น​มา​ใช้: Context MapContext Mapแผนภาพ​ที่​วาด​ทุก Bounded Context และ​ความ​สัมพันธ์​ระหว่าง​กัน — ใน​ระบบ multi-agent คือ​แผนภาพ​ที่​วาด​ว่า agent ไหน​คุย​กับ agent ไหน ใคร​เป็นต้น​น้ำ (กำหนด​รูปแบบ​ข้อมูล) ใคร​เป็น​ปลาย​น้ำ ก่อน​จะ​ปล่อย​ให้ agent เรียก​กันเอง​มั่ว ๆStrategic Design วาด​แผนที่​ก่อน แล้ว​ค่อย​เถียง​เรื่อง​จำนวน​ตัว

ขอ​ปัก​ธง​ตั้งแต่​ต้นบท เพราะ​นี่​คือ​ความ​เสี่ยง​อันดับ​หนึ่ง​ของ​ทั้ง​บท: multi-agent ไม่ใช่​ค่า​เริ่มต้น ทุก​แหล่ง​ที่​บท​นี้​อ้าง — ทั้ง Anthropic และ Cognition — พูด​ตรง​กัน​ว่า​ให้​เริ่ม​จาก agent เดียว​เสมอ แล้ว​ขึ้น multi-agent เมื่อ​พิสูจน์​ได้​ว่า​คุ้ม​เท่านั้น DDD ไม่​ได้​แปล​ว่า “หนึ่ง Bounded ContextBounded Contextขอบเขต​ที่ ubiquitous language และ model หนึ่ง​ชุด​มี​ความหมาย​คง​เส้น​คง​วา นอก​ขอบเขต​นี้​คำ​เดียวกัน​อาจ​หมาย​ถึง​คนละ​อย่าง — เมื่อ​ออกแบบ​ระบบ agent ให้​คิด​ว่า​แต่ละ agent (หรือ​กลุ่ม agent ที่​ทำงาน​ร่วม​กัน) ควร​รับผิดชอบ Bounded Context เดียว ไม่ใช่​ยัด​ทุก​หน้าที่​ไว้​ใน agent เดียว หรือ​กระจาย agent ตาม​อำเภอ​ใจStrategic Design ต่อ1 agent” — DDD คือ​วินัย​ที่​บอกว่า​อะไร​ควร​อยู่​ใน agent ตัว​เดียว​ก่อน แล้ว multi-agent จึง​เป็น ข้อ​ยกเว้น​ที่​ต้อง​มี​เหตุผล

📦 code ตัวอย่าง

คอร์ส​นี้​เป็น คอร์ส​ออกแบบ ไม่ใช่​ทัวร์ SDK — code ใน​บท​คือ ภาพร่าง ของ context map, โทโพโล​ยี และ pseudo-config สั้นๆ (Thai Mermaid) ไม่ใช่ app ที่​รัน​ได้​จริง สิ่ง​ที่​วาด​ด้วย LangGraph / OpenAI Agents SDK / Claude เป็น​เพียง​ตัวอย่าง​ประกอบ ตัวอย่าง​ต่อยอด​จาก domain เดิม​ที่ repo kaen-food-ordering (กำลัง​จัด​ทำ) โดย​มอง​มัน​ผ่าน​เลนส์ ops-copilot ที่​ช่วย​ทีม​ปฏิบัติการ​ของ platform

ใน DDD เรา​ไม่​ตัดสิน​ใจ​ว่า​จะ​มี​กี่ service ก่อน​จะ​รู้​ว่า domain มี​กี่ bounded context และ​แต่ละ​อัน​สัมพันธ์​กัน​ยังไง context map คือ​แผนภาพ​ที่​ตอบ​คำถาม​นั้น — มัน​วาด ทุก bounded context และ​ความ​สัมพันธ์​ระหว่าง​กัน (ใคร​เป็นต้น​น้ำ​ที่​กำหนด​รูปแบบ​ข้อมูล ใคร​เป็น​ปลาย​น้ำ ตรง​ไหน​ต้อง​มี Anti-Corruption LayerAnti-Corruption Layer (ACL)ชั้น​แปล​ภาษา/model ที่​กั้น​ระหว่าง context สอง​อัน ไม่​ให้ model ของ​อีก​ฝ่าย​รั่ว​เข้า​มา​ปน​เปื้อน — เมื่อ agent เรียก tool หรือ agent อื่น​จาก​ภายนอก ควร​มี​ชั้น​แปล​ผลลัพธ์​กลับ​มา​เป็น​ภาษา​ของ agent เรา​เอง ไม่​ปล่อย​ให้ schema แปลก ๆ ของ​ฝั่ง​นู้น​ไหล​เข้า​มา​ปน​ใน context ของ​เราStrategic Design กั้น) กับ agent ก็​ใช้​ลำดับ​เดียวกัน: วาด context map ของ ops-copilot ก่อน แล้ว​ค่อย​ถาม​ว่า​แต่ละ​กล่อง​บน​แผนที่​ควร​เป็น agent จริง เป็น workflow หรือ​ควร​ถูก​ยุบ​รวม​กัน

จุด​ที่​ต้อง​แยก​ให้​ขาด​คือ context map วาด discontinuity ของ domain ไม่​ได้​วาด​จำนวน agent เส้น​บน​แผนที่​คือ​จุด​ที่​ภาษา​เปลี่ยน​และ​ระดับ​ความ​ไว้ใจ​เปลี่ยน — เหมือน​ที่​เรา​ลาก​ในคอร์ส Bounded Contexts ตอน​แยก order ใน​ครัว ไร​เด​อร์ และ​บิล​ลิ่งออก​จาก​กัน แผนที่​บอกว่า ขอบเขต​อยู่​ตรง​ไหน ส่วน​คำถาม​ว่า จะ implement แต่ละ​ขอบเขต​ด้วย​กี่ agent เป็นการ​ตัดสิน​ใจ​ที่มา​ทีหลัง และ​เป็น​หัวใจ​ของ​ทั้ง​บท​นี้

flowchart LR
  subgraph CM["Context Map ของ ops-copilot — เส้นแบ่งคือ discontinuity ของ domain ไม่ใช่จำนวน agent"]
    OT["Order-Tracking<br/>ภาษา ออเดอร์/สถานะ/ETA<br/>(อ่านอย่างเดียว)"]
    RO["Restaurant-Ops<br/>ภาษา เมนู/คิว/สต๊อก"]
    CS["Customer-Support<br/>ภาษา เคส/นโยบาย"]
    BILL["Billing<br/>ภาษา เงิน/สถานะจ่าย<br/>(คืนเงิน — ย้อนกลับไม่ได้)"]
  end
  RO -->|"upstream: คิว/พร้อมเสิร์ฟ"| OT
  OT -->|"upstream: ส่งสถานะ/ETA"| CS
  CS ==>|"ผ่าน ACL + human-in-the-loop"| BILL
  classDef ctx fill:#c7d2fe,stroke:#3730a3,color:#1a1a1f;
  classDef risky fill:#fca5a5,stroke:#7f1d1d,color:#1a1a1f;
  class OT,RO,CS ctx;
  class BILL risky;

คำ​บรรยาย​ภาพ: context map ของ ops-copilot — สี่​กล่อง​คือ bounded context ของ domain ลูกศร​บอก​ทิศ​ต้นน้ำ→ปลาย​น้ำ (Order-Tracking ป้อน​สถานะ​ให้ Customer-Support) และ​เส้น​หนา​ไป Billing คือ​จุด​ที่​ต้อง​มี ACL + Human-in-the-loopHuman-in-the-loopการ​ออกแบบ​ให้​มนุษย์​เข้า​มา​ตรวจสอบ​หรือ​อนุมัติ​ใน​จุด​ที่​การกระทำ​ของ agent มี​ความ​เสี่ยง​สูง​หรือ​ย้อน​กลับ​ไม่​ได้ เช่น ก่อน​โอน​เงิน​หรือ​ลบ​ข้อมูล​จริง — เป็น guardrail ชนิด​หนึ่ง​ที่​ยัง​จำเป็น​แม้ agent จะ​ฉลาด​ขึ้น​เรื่อย ๆ เพราะ​บาง​การ​ตัดสิน​ใจ​ไม่​ควร​ปล่อย​ให้ agent ตัดสิน​ใจ​เอง​ทั้งหมดProcess คั่น​เพราะ​การ​คืน​เงิน​ย้อน​กลับ​ไม่​ได้ ย้ำ​ว่า​แผนที่​นี้​ไม่​ได้​สั่ง​ว่า​ต้อง​มี4 agent — เส้น​ถูกลาก​บน discontinuity ของ​ภาษา​และ​ความ​ไว้ใจ ไม่ใช่​ตำแหน่ง​งาน​หรือ subdomain แต่ละ​กล่อง​อาจ​เริ่ม​เป็น workflow, บาง​คู่​ที่​ภาษา​ใกล้​กัน​อาจ​ยุบ​รวม​เป็น agent เดียว การ​นับ​จำนวน​ตัว​เป็น​คนละ​คำถาม​ที่​เรา​จะ​ตอบ​ด้าน​ล่าง

เมื่อ​มี context map แล้ว คำถาม​คือ “ขอบเขต​ไหน​คุ้ม​ที่​จะ​แยก​เป็น agent ต่างหาก” คำ​ตอบ​ไม่ใช่ “ทุก​อัน​บน​แผนที่” บทความ When to use multi-agent systems (and when not to) (Anthropic/Claude) ให้​กรอบ​ที่​คม​มาก: การ​แยก agent ออก​ไป​อีก​ตัว​จะ​คุ้ม​ก็​ต่อ​เมื่อ​มัน​ตอบ​ได้​ว่า​อยู่​ใน​เหตุผล​ข้อ​ใด​ข้อ​หนึ่ง​จาก สาม​ข้อ​นี้​เท่านั้น

  • Context protection — งาน​ย่อย​นี้​ต้อง​กิน context ก้อน​ใหญ่ (เช่น​อ่าน​เอกสาร​ยาวๆ หลาย​สิบ​หน้า) แล้ว “ผล​ย่อ” ที่​ได้​กลับ​มา​สั้น​นิดเดียว การ​แยก​ออก​เป็น agent ต่างหาก​ทำให้ context ก้อน​ใหญ่​ไป​เน่า​อยู่​ใน​หัว worker ตัว​นั้น​แทนที่​จะ​ไหล​กลับ​มา​เจือจาง​งบ attention ของ​ตัว​หลัก — นี่​คือ​ยา​แก้ Context RotContext Rotอาการ​ที่​คุณภาพ​การ​ตอบ​ของ agent เสื่อม​ลง​เมื่อ context window ยาว​ขึ้น​และ​สะสม​สิ่ง​ไม่​เกี่ยวข้อง​มาก​ขึ้น​เรื่อย ๆ ระหว่าง​วน agentic loop หลาย​รอบ — เป็น​เหตุผล​เชิง​เทคนิค​ข้อ​หนึ่ง​ที่ agent ควร​มี​ขอบเขต​หน้าที่​แคบ (เหมือน Bounded Context) แทนที่​จะ​ยัด​ทุก​อย่าง​ไว้​ใน agent เดียว​ที่ context ยาว​ขึ้น​เรื่อย ๆProcess โดยตรง
  • Parallelization — งาน​ย่อย​หลาย​ชิ้น เป็น​อิสระ​ต่อ​กัน​จริง และ​รัน​พร้อม​กัน​ได้ เช่น​ต้อง​เช็ก​สถานะ​ร้าน​สิบ​ร้าน​ที่​ไม่​เกี่ยว​กัน การกระจาย​ให้ worker หลาย​ตัว​ทำ​ขนาน​กัน​ลด​เวลา​รวม​ลง​ได้​จริง
  • Specialization — งาน​ย่อย​ต้อง​ใช้​ชุด tool, system prompt หรือ​กระทั่ง model ที่​ต่าง​กัน​ชัดเจน​จน​ยัด​รวม​ใน agent เดียว​แล้ว​ภาษา​เริ่ม​ตี​กัน การ​แยก​ให้​แต่ละ​ตัว​มี​ความ​เชี่ยวชาญ​เฉพาะ​ทำให้​แต่ละ​ตัว​คม​กว่า

สังเกต​ว่า​ทั้ง​สาม​ข้อ​พูด​ถึง คุณสมบัติ​ของ​งาน (context หนัก / ขนาน​ได้ / เชี่ยวชาญ​ต่าง​กัน) ไม่มี​ข้อ​ไหน​พูด​ว่า “เพราะ​มัน​เป็น​คนละ subdomain” หรือ “เพราะ​ผัง​องค์กร​แบ่ง​งาน​แบบ​นี้” ถ้า​ขอบเขต​หนึ่ง​บน context map ตอบ​ไม่​ได้​สัก​ข้อ​ใน​สาม​ข้อ​นี้ มัน​ควร​อยู่​ใน agent เดิม​หรือ​เป็น tool/workflow ต่อ​ไป ไม่ใช่ agent ใหม่

สาม​ข้อ​ข้าง​บน​มี​แกน​ร่วม​เส้น​เดียว: แบ่ง​ตรง​จุด​ที่ context แยก​กัน​ได้​จริง (context-isolable) งาน​ย่อย​ที่​คุ้ม​จะ​เป็น agent แยก​คือ​งาน​ที่​เอา context ของ​มัน​ไป​ทำ​จน​จบ​ใน​กล่อง​ปิด​ของ​ตัวเอง​ได้ แล้ว​ส่ง​กลับ​มา​แค่​ผลลัพธ์​ย่อๆ — ไม่ใช่​งาน​ที่​ต้อง​คอย​ส่ง​สถานะ​ไป​มา​ทุก​ก้าว

กับดัก​ที่​พบ​บ่อย​ที่สุด​คือ​แบ่ง​ตาม phase ของ​งาน หรือ ตำแหน่ง​งาน — planner → coder → reviewer — เพราะ​มัน​เลียน​ผัง​การ​ทำงาน​ของ​คน​ได้​สวยงาม แต่​มัน​พัง​ด้วย​เหตุผล​เดียว: 3 phase นี้​ไม่​ได้ context-isolable เลย coder ต้อง​รู้ เหตุผล ที่ planner ตัดสิน​ใจ ไม่ใช่​แค่​ผลลัพธ์​ของ​แผน และ reviewer ต้อง​เห็น​ข้อมูล​ชุด​เดียว​กับ​ที่ planner เห็น​ตอน​ตัดสิน​ใจ พอ​แยก​เป็น​คนละ agent ทุก HandoffHandoffการ​ส่ง​ต่อ​การ​ควบคุม​บทสนทนา/งาน​จาก agent หนึ่ง​ไป​อีก agent หนึ่ง​อย่าง​มี​สัญญา​ชัดเจน​ว่า​ส่ง​อะไร​ไป​พร้อม​บริบท​เท่า​ไหร่ — คือ​จุด​ที่ Published Language ระหว่าง2 Bounded Context ถูก​ใช้งาน​จริง ถ้า handoff ไม่​ชัด บริบท​จะ​หาย​หรือ​ปน​กัน​ระหว่าง​ทางProcess จึง​บีบ context ทั้ง​ก้อน​ให้​เหลือ​ข้อความสั้นๆ ส่ง​ต่อ — ทุก handoff เสีย context บทความ Cognition — Don’t Build Multi-Agents ชี้​ตรง​นี้​ชัด: decision ที่ agent ตัว​ก่อน​ทำ​ไป​โดย​ปริยาย (implicit) หาย​ไป​กับ handoff จน agent ตัว​ถัด​ตัดสิน​ใจ​ขัด​กันเอง งาน​ที่​บริบท​พัวพัน​กัน​แน่น​แบบ​นี้​ควร​อยู่​ใน agent เดียว​ที่​ถือ context ต่อ​เนื่อง ไม่ใช่​แตก​ตาม phase

❌ version ดิบ: แตก agent ตาม phase/ตำแหน่ง​งาน — ทุก handoff เสีย context
topology: pipeline # แบ่งตาม "ขั้นตอนของงาน" ไม่ใช่ตามจุดที่ context แยกกันได้จริง
agents:
- planner # วางแผน แล้วโยน "แผนที่ย่อแล้ว" ให้ตัวถัดไป
- coder # ลงมือ แต่ไม่เห็นเหตุผลเบื้องหลังที่ planner ชั่งไว้
- reviewer # ตรวจงาน แต่ไม่เห็นข้อมูลชุดเดียวกับที่ planner ตัดสินใจ
handoff: บริบทที่ตัดสินใจถูกบีบเป็นข้อความสั้น → decision โดยปริยายหล่นหายทุกทอด
# version เดียวกันในคราบองค์กร: "1 agent ต่อหนึ่งทีม / 1 subdomain"
# ทั้งคู่ผิดเพราะแบ่งตามผังงาน/ผังคน ไม่ได้แบ่งตาม context-isolability

ฝั่ง​ที่ ได้​ผล​จริง เป็น​ภาพ​กลับ​กัน — Cognition — Multi-Agents: What’s Actually Working เล่า​ว่า​โครง​ที่​เวิร์ก​คือ​ให้ subagent รับ​งาน​ที่​ปิด​จบ​ใน​ตัวเอง​ได้ (เช่น “ไป​หา​ข้อมูล X มา”) แล้ว​คืน​ผล​ย่อ​กลับ​หา agent หลัก​ที่​ยัง​ถือ context หลัก​ไว้​ตลอด — ไม่ใช่ pipeline ที่​โยน state ต่อ​กัน​เป็น​ทอดๆ นี่​คือ context-isolability และ​มัน​ตรง​กับ​ข้อ context protection / parallelization ข้าง​บน​พอดี

พอ​วาง​เรียง​กัน ประโยค​เด็ด​ของ​บท​นี้​จะ​โผล่​มา​เอง — วินัย​ที่​เรา​กำลัง​ใช้​กับ agent ไม่ใช่​ของ​ใหม่ มัน​คือ​กฎ DDD คำ​เดิม​ที่​แค่​เปลี่ยน​คำ​นาม:

กฎ DDD: อย่า​แยก bounded context ออก​จาก​กัน ถ้า​ไม่มี discontinuity ของ​ภาษา/model จริงๆ รองรับ

กฎ agent: อย่า​ไป multi-agent ถ้า​ไม่มี​เหตุผล isolation จริงๆ (context protection / parallelization / specialization) รองรับ

สอง​ประโยค​นี้​คือ​กฎ​เดียวกัน คำ​ว่า “discontinuity” ใน​โลก DDD (ภาษา​เปลี่ยน model เปลี่ยน จน​บังคับ​ต้อง​แยก) คือ​คำ​เดียว​กับ “isolation” ใน​โลก agent (context แยก​กัน​ได้​จริง​จน​คุ้ม​จะ​แยก) และ​ใน​ทั้ง​สอง​โลก ภาระ​การ​พิสูจน์​อยู่​ที่​ฝ่าย​ที่​อยาก​แยก ไม่ใช่​ฝ่าย​ที่​อยาก​รวม — การ​แยก​มี​ต้นทุน (integration, การ​เสีย context ที่ handoff, ความ​ซับซ้อน) เสมอ ถ้า​พิสูจน์ discontinuity/isolation ไม่​ได้ คำ​ตอบ​ตั้งต้น​คือ “อยู่​รวม​กัน​ไป​ก่อน” นี่​คือ​เหตุผล​ที่ DDD เป็น​เครื่องมือ​ที่​เหมาะ​กับ​ยุค multi-agent hype พอดี: มัน​คือ​วินัย​ของ​การ ไม่​แยก​โดย​ไม่มี​เหตุผล ที่​วงการ agent กำลัง​ค้น​พบ​ใหม่​ด้วย​ตัวเอง

ถึง​ตรง​นี้​อาจ​ฟัง​ดูเหมือน​บท​นี้​จะ​บอกว่า “อย่า​ทำ multi-agent เลย” — ไม่ใช่ เมื่อ​เหตุผล​ข้อ​ใด​ข้อ​หนึ่ง​ใน​สาม​ข้อ​เป็น​จริง multi-agent ก็​คุ้ม​จริง และโทโพโล​ยี​ที่​พิสูจน์​ตัวเอง​แล้ว​มีชื่อ​ว่า Orchestrator-WorkersOrchestrator-Workersโทโพโล​ยี​ที่ agent ตัว​หนึ่ง (orchestrator) แตก​งาน​ใหญ่​เป็น​งาน​ย่อย​แล้ว​มอบหมาย​ให้ agent ลูก​ทีม (worker) แต่ละ​ตัว​ที่​มี Bounded Context แคบ​และ​ชัดเจน​ของ​ตัวเอง ก่อน​รวม​ผลลัพธ์​กลับ — ต่าง​จาก​การ​ปล่อย​ให้ agent หลาย​ตัว​คุย​กันเอง​แบบ​ไม่มี​ใคร​คุม​ภาพ​รวมArchitecture: agent หลัก (lead / orchestrator) แตก​งาน​ใหญ่​เป็น​งาน​ย่อย​ที่ context-isolable แล้ว​มอบ​ให้ worker แต่ละ​ตัว​ไป​ทำ​ใน​กล่อง​ปิด​ของ​มัน ก่อน​รวม “ผล​ย่อ” กลับ​มา​ที่ lead — lead เป็น​คน​เดียว​ที่​ถือ​ภาพ​รวม ไม่ใช่​ปล่อย​ให้ worker คุย​กันเองมั่วๆ

นี่​ไม่ใช่​ทฤษฎี Anthropic เล่า​ใน How we built our multi-agent research system (Anthropic, Jun 2025) ว่า​ระบบ research ที่​ใช้​โครง​นี้ ชนะ single-agent baseline ถึง 90.2% บน eval ภายใน และ​พบ​ว่า token ที่​ใช้​อธิบาย variance ของ performance ได้​ถึง ~80% (งาน​ที่​ต้อง​ค้นกว้างๆ ขนาน​ได้ ยิ่ง​ได้​ประโยชน์​จาก​การกระจาย worker) — แต่​ตัวเลข​ที่​ต้อง​จำ​ให้​ขึ้นใจ​คือ ต้นทุน: multi-agent กิน token ราว ~15 เท่า ของ​แชต​เดี่ยว นั่น​คือ “ประตู​ต้นทุน” ที่​ทำให้​โครง​นี้​คุ้ม​เฉพาะ​กับ​งาน​ที่​มูลค่า​สูง​พอ​และ​ขนาน​ได้​จริง เช่น​งาน​ค้นคว้ากว้างๆ ไม่ใช่​ทุก​งาน​ตอบ​ลูกค้า​ทั่วไป งาน​ที่ ~15 เท่า​ไม่​คุ้ม​ก็​กลับ​ไป​ที่ agent เดียว

flowchart LR
  subgraph DEFAULT["ค่าเริ่มต้น: single-agent (เริ่มที่นี่เสมอ)"]
    SA["agent เดียวที่มีขอบเขตดี<br/>1 bounded context<br/>context ต่อเนื่อง คุมง่าย ถูก"]
  end
  subgraph EXC["ข้อยกเว้นที่มีเหตุผล: Orchestrator-Workers"]
    LEAD["lead / orchestrator<br/>ถือภาพรวม + แตกงานที่ context-isolable"]
    W1["worker A<br/>context แยกของตัวเอง<br/>ทำจนจบในกล่องปิด"]
    W2["worker B<br/>context แยกของตัวเอง<br/>ทำจนจบในกล่องปิด"]
    LEAD --> W1
    LEAD --> W2
    W1 -->|"คืนผลย่อ"| LEAD
    W2 -->|"คืนผลย่อ"| LEAD
  end
  DEFAULT ==>|"ข้ามมาได้ต่อเมื่อมี 1 ใน 3 เหตุผล + ผ่านประตูต้นทุน ~15×"| EXC
  classDef def fill:#bbf7d0,stroke:#166534,color:#1a1a1f;
  classDef orch fill:#c7d2fe,stroke:#3730a3,color:#1a1a1f;
  class SA def;
  class LEAD,W1,W2 orch;

คำ​บรรยาย​ภาพ: ซ้าย​คือ​ค่า​เริ่มต้น​ที่​ต้อง​เริ่ม​เสมอ — single-agent ที่​มี​ขอบเขต​ดี​ตัว​เดียว ขวา​คือ​ข้อ​ยกเว้น Orchestrator-Workers: lead แตก​งาน​ให้ worker ที่​มี context แยก​ของ​ตัวเอง ทำ​จน​จบ​ใน​กล่อง​ปิด แล้ว​คืน​ผล​ย่อ​กลับ​หา lead (ไม่ใช่ pipeline ที่​โยน state ต่อ​กัน) เส้น​หนา​กลาง​ภาพ​คือ​ประตู — ข้าม​ได้​ต่อ​เมื่อ​มี 1 ใน 3 เหตุผล และ งาน​คุ้ม​กับ​ต้นทุน ~15 เท่า ย้ำ propagation rule ของ​ทั้ง​คอร์ส: การ​ที่​รูป​แตก​กล่อง​หนึ่ง​เป็น​หลาย​กล่อง​ไม่​ได้​แปล​ว่า​ต้อง​มี agent แยก​จริง​เสมอ — เส้น​ถูกลาก​บน context-isolation discontinuity ไม่ใช่​บน​ตำแหน่ง​งาน​หรือ subdomain worker บาง​ตัว​เริ่ม​เป็น workflow ได้ บาง​คู่​ยุบ​รวม​ได้ และ single-agent ฝั่ง​ซ้าย​ยัง​เป็น​คำ​ตอบ​ที่​ถูก​สำหรับ​งาน​ส่วน​ใหญ่

เพื่อ​ไม่​ให้​อุปมา “agent = bounded context” ถูก​ยืด​เกิน​จริง ต้อง​พูด​จุด​ที่​มัน​ไม่​เหมือน​ให้​ชัด ใน DDD ตัว aggregate รักษา invariant แบบ atomic — กฎ​ธุรกิจ​ถูก​บังคับ ณ ขอบ​ของ aggregate ทุก​ครั้ง​ที่ commit ไม่มี​ทาง​ที่​สถานะ​จะ​ละเมิด​กฎ​แล้ว​รอด แต่ context ของ agent ไม่​ได้ ให้การ​รับประกัน​แบบ​นั้น เมื่อ context ถูก compact หรือ summarize เพื่อ​กัน​ไม่​ให้​ยาว​เกิน กฎ​ที่​เคย​อยู่​ใน context อาจ​ถูก​ย่อ​หาย​หรือ​เพี้ยน​ไป​ได้ การ​บังคับ​กฎ​ของ agent จึง​เป็น​แบบ best-effort ไม่ใช่ atomic

นี่​ไม่ใช่​รายละเอียด​ปลีกย่อย มัน​คือ​เหตุผล​ว่า​ทำไม​ระบบ agent จริง​ต้อง​มี​ของ​สาม​อย่าง​ประกอบ​เสมอ: Agent MemoryAgent Memoryกลไก​ที่ agent เก็บ​ข้อมูล​ข้าม​รอบ​ของ agentic loop หรือ​ข้าม session เช่น สรุป​บทสนทนา​เก่า บันทึก​ข้อเท็จจริง​ระยะ​ยาว หรือ​ผลลัพธ์​ก่อน​หน้าที่​ต้อง​อ้างอิง​ต่อ — ออกแบบ​ให้​ดี​ต้อง​เลือก​ว่า​อะไร​ควร​เก็บ อะไร​ควร​ทิ้ง ไม่ใช่​ยัด​ประวัติ​ทั้งหมด​กลับ​เข้า context ทุก​ครั้ง​จน​เกิด context rotArchitecture ภายนอก​เพื่อ​กัน​ข้อเท็จจริง​สำคัญ​ไม่​ให้​หาย​ตอน compact, GuardrailGuardrailกติกา​ที่​ควบคุม​ไม่​ให้ agent ทำ​เกิน​ขอบเขต​หรือ​ก่อ​ความ​เสียหาย เช่น จำกัด tool ที่​เรียก​ได้ ตรวจ output ก่อน​ส่ง​ออก บังคับ human approval สำหรับ​การกระทำ​ที่​ย้อน​กลับ​ไม่​ได้ — เป็น​สิ่ง​ที่​รักษา​ขอบเขต​ของ Bounded Context ของ agent ให้​ไม่​ล้ำเส้นProcess เพื่อ​รักษา​ขอบเขต​ด้วย​กลไก​นอก context (เช่น​บังคับ human approval ก่อน​คืน​เงิน — ไม่​ฝาก​ไว้​กับ prompt ที่​อาจ​ถูก​ย่อ​ทิ้ง) และ EvalEvalการ​วัดผล​อย่าง​เป็น​ระบบ​ว่า agent ทำงาน​ตรง​ตาม​ที่​ออกแบบ​ไว้​จริง​หรือ​ไม่ ด้วย​ชุด​กรณี​ทดสอบ​และ​เกณฑ์​ที่​ชัดเจน แทน​การ​ดู​จาก​ความ​รู้สึก​ว่า 'ตอบ​ดู​ดี' — จำเป็น​เพราะ agentic loop มี​ความ​ไม่​แน่นอน​สูง​กว่า code ทั่วไป ต้อง​มี eval ก่อน​เชื่อ​ว่า Bounded Context ของ agent ทำงาน​ถูกต้อง​ตาม​สัญญาProcess เพื่อ​วัด​ว่า​ขอบเขต​ยัง​ถูก​รักษา​ไว้​จริง​หลัง​ผ่าน​หลาย​รอบ กล่าว​อีก​แบบ: context map บอกว่า​ขอบเขต ควร อยู่​ตรง​ไหน แต่​การ​ทำให้​ขอบเขต​นั้น ถูก​รักษา​ไว้​จริง ต้อง​อาศัย memory + guardrail + eval ไม่ใช่​หวัง​พึ่ง context window อย่าง​เดียว

  • วาด context map ก่อน แล้ว​ค่อย​นับ​จำนวน agent — แผนที่​วาด discontinuity ของ domain ไม่​ได้​สั่ง​จำนวน​ตัว
  • multi-agent คุ้ม​ก็​ต่อ​เมื่อ​มี 1 ใน 3 เหตุผล: context protection / parallelization / specialization — ไม่ใช่ “1 agent ต่อ1 subdomain”
  • แบ่ง​ตาม context-isolability ไม่ใช่​ตาม phase/ตำแหน่ง​งาน — planner/coder/reviewer พัง​เพราะ​ทุก handoff เสีย context
  • กฎ DDD = กฎ agent: อย่า​แยก​ถ้า​ไม่มี discontinuity/isolation จริง ภาระ​พิสูจน์​อยู่​ที่​ฝ่าย​ที่​อยาก​แยก
  • Orchestrator-Workers เป็น​ข้อ​ยกเว้น​ที่ ship แล้ว​จริง (ชนะ single-agent 90.2%, token อธิบาย variance ~80%, ต้นทุน ~15×) — แต่​เริ่ม​ที่ single-agent เสมอ
  • agent ไม่ใช่ aggregate: การ​บังคับ​กฎ​เป็น best-effort ไม่ใช่ atomic จึง​ต้อง​มี memory + guardrail + eval

บท​ถัด​ไป​จะ​เจาะ​จุด​ที่ agent สอง​ตัว​มา​เจอ​กัน​จริง — Anti-Corruption Layer กับ​การ​ออกแบบ tool ให้​เป็น​ชั้น​แปล​ภาษา​ที่​กั้น​ความ​รก​ของ backend ไม่​ให้​ไหล​เข้า​มา​ปน context ของ agent


🔗 อ้างอิง​เพิ่มเติม​ใน DevIQ

เจาะ​ลึก​แนวคิด​ใน​บท​นี้​ต่อ​ได้ที่​คลัง​อ้างอิง DevIQ:

  • Context Mapping — การ​วาด​แผนที่​ทุก bounded context และ​ความ​สัมพันธ์​ต้นน้ำ/ปลาย​น้ำ เครื่องมือ​ที่​บท​นี้​ยืม​มา​ใช้​ก่อน​ตัดสิน​ใจ​จำนวน agent
  • Bounded Context — ขอบเขต​ที่ model และ​ภาษา​หนึ่ง​ชุด​คง​ความหมาย​ไว้ หน่วย​ที่ agent แต่ละ​ตัว (หรือ​กลุ่ม agent) ควร​รับผิดชอบ
  • Anti-Corruption Layer — ชั้น​แปล​ภาษา​ที่​กั้น​ระหว่าง context จุด​ที่​บท​นี้​ชี้​ว่า​ต้อง​มี​คั่น​ก่อน​ถึง Billing

เช็กความเข้าใจ — บทที่ 5

ข้อ 1 / 3

เหตุผลสามข้อที่ทำให้การแตกเป็น multi-agent สมเหตุผลคืออะไร?