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

เมื่อไร​ไม่​ควร​ใช้ agent (+ eval)

เจ็ด​บท​ที่​ผ่าน​มา​เรา​ลงแรง​กับ​คำถาม​ด้าน​เดียว: อะไร​ควร​อยู่​ใน AgentAgentระบบ​ซอฟต์แวร์​ที่​รับ​เป้าหมาย​แล้ว​วางแผน-ตัดสิน​ใจ-เรียก​ใช้ tool ได้​เอง​หลาย​รอบ (agentic loop) โดย​ไม่​ต้อง​มี​มนุษย์​กำกับ​ทุก​ก้าว ต่าง​จาก​โปรแกรม​ทั่วไป​ที่​รัน​ตาม​ลำดับ​คำ​สั่ง​ตายตัว — ใน​คอร์ส​นี้​มอง​แต่ละ agent เหมือน1 Bounded Context ที่​ต้อง​มี​ขอบเขต ภาษา และ​หน้าที่​ของ​ตัวเอง​ชัดเจนArchitecture ที่​มี​ขอบเขต​ดี​ตัว​เดียว — ภาษา​หนึ่ง​ชุด, tool ที่​พอดี​หน้าที่, บริบท​ที่​แคบ​พอ​จะ​รักษา​งบ attention, และ​เปิด​ประตู​ให้ Multi-agentMulti-agentระบบ​ที่​มี agent มากกว่า​หนึ่ง​ตัว​ทำงาน​ร่วม​กัน แต่ละ​ตัว​ควร​มี Bounded Context ของ​ตัวเอง​ชัดเจน​และ​เชื่อม​กัน​ผ่าน context map/handoff ที่​ออกแบบ​ไว้ — ไม่ใช่​คำ​ตอบ​สำเร็จรูป​สำหรับ​ทุก​ปัญหา หลาย​งาน​ทำ​ด้วย agent เดียว​หรือ workflow ธรรมดา​ก็​เพียงพอ​และ​เชื่อถือ​ได้​กว่าArchitecture เฉพาะ​เมื่อ​มี​เหตุผล​รองรับ บท​ปิด​คอร์ส​นี้​ถอย​ออก​มา​ถาม​คำถาม​ที่​กลับ​ด้าน​กัน สอง​ข้อ: เมื่อไร​ไม่​ควร​มี agent ตั้งแต่​แรก และ จะ​รู้​ได้​ยังไง​ว่า agent ที่​ปั้น​มา​ทำงาน​ตรง​ตาม​ขอบเขต​จริง คำถาม​แรก​คือ ประตู​ต้นทุน คำถาม​ที่​สอง​คือ EvalEvalการ​วัดผล​อย่าง​เป็น​ระบบ​ว่า agent ทำงาน​ตรง​ตาม​ที่​ออกแบบ​ไว้​จริง​หรือ​ไม่ ด้วย​ชุด​กรณี​ทดสอบ​และ​เกณฑ์​ที่​ชัดเจน แทน​การ​ดู​จาก​ความ​รู้สึก​ว่า 'ตอบ​ดู​ดี' — จำเป็น​เพราะ agentic loop มี​ความ​ไม่​แน่นอน​สูง​กว่า code ทั่วไป ต้อง​มี eval ก่อน​เชื่อ​ว่า Bounded Context ของ agent ทำงาน​ถูกต้อง​ตาม​สัญญาProcess — และ​ทั้ง​สอง​เป็น​วินัย​ของ​การ​ยับยั้ง​ชั่งใจ​แบบ​เดียว​กับ​ที่​ทั้ง​คอร์ส​ยืม​มา​จาก DDD

📦 code ตัวอย่าง

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

ก่อน​ถาม​ว่า agent จะ​ทำงาน​ได้​ดี​แค่​ไหน ต้อง​ถาม​ก่อน​ว่า​มัน แพง​แค่​ไหน — เพราะ​ทุก​ครั้ง​ที่ Agentic LoopAgentic Loopวงจร​ที่ agent ทำซ้ำ​จนกว่า​จะ​บรรลุ​เป้าหมาย: รับ input → วางแผน/ตัดสิน​ใจ → เรียก tool → สังเกต​ผลลัพธ์ → วน​กลับ​ไป​ตัดสิน​ใจ​ใหม่ — ต่าง​จาก​โปรแกรม​ทั่วไป​ที่​รัน​เส้นทาง​เดียว​จบ วงจร​นี้​เอง​ที่​ทำให้ agent ยืดหยุ่น แต่​ก็​เสี่ยง context rot ถ้า​วน​นาน​เกิน​ไป​โดย​ไม่มี​ขอบเขตProcess วน​หนึ่ง​รอบ มัน​เอา​ผล tool กลับ​เข้า context แล้ว​เรียก model ใหม่ ต้นทุน token จึง​ไม่​ได้​จ่าย​ครั้ง​เดียว แต่​จ่าย​ทบ​ทุกรอบ Anthropic ให้​ตัวเลข​ที่​ควร​จำ​ขึ้นใจ​ใน How we built our multi-agent research system (Anthropic, Jun 2025): จาก​ข้อมูล​จริง​ของ​เขา agent ตัว​เดียว​กิน token ราว ~4 เท่า​ของ​แชต​ธรรมดา (chat) และ multi-agent กิน​ราว ~15 เท่า​ของ​แชต

ตัวเลข​พวก​นี้​อันตราย​ถ้า​จำ​ครึ่ง​เดียว กติกา​ข้อ​เดียว​ที่​ห้าม​ลืม​คือ บอก​เสมอ​ว่า​เทียบ​กับ baseline ไหน:

  • ~4× — single agent เทียบ chat — ที่มา How we built our multi-agent research system
  • ~15× — multi-agent เทียบ chat — ที่มา​เดียวกัน (post multi-agent research system)
  • ~3–10× — multi-agent เทียบ single agent ที่​ทำงาน​เดียวกัน — ที่มา When to use multi-agent systems (and when not to) ซึ่ง​ระบุ​ตัวเลข​นี้ไว้ตรงๆ (คนละ​แหล่ง​กับ​สอง​ข้อ​บน ไม่ใช่​ค่าที่​ได้​จาก​การ​หาร)

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

autonomy เหมาะ​กับ​งาน​ปลาย​เปิด​ใน​สภาพ​แวดล้อม​ที่​เชื่อถือ​ได้

หัวข้อ​ที่​มีชื่อ​ว่า “autonomy เหมาะ​กับ​งาน​ปลาย​เปิด​ใน​สภาพ​แวดล้อม​ที่​เชื่อถือ​ได้”

ถ้า​ต้นทุน​คือ​ด้าน​หนึ่ง​ของ​เหรียญ ความ​เหมาะสม​ของ​งาน คือ​อีก​ด้าน คำ​แนะนำ​จาก Building Effective Agents (Anthropic, Dec 2024) ชัดเจน: ให้ agent มี autonomy เต็ม​เฉพาะ​กับ งาน​ปลาย​เปิด​ที่​เดา​จำนวน​ขั้นตอน​ล่วงหน้า​ไม่​ได้​และ hardcode เส้นทาง​ตายตัว​ไม่​ได้ — และ​ให้​ปล่อย autonomy นั้น ใน​สภาพ​แวดล้อม​ที่​เชื่อถือ​ได้ เท่านั้น “เชื่อถือ​ได้” ใน​ที่​นี้​หมาย​ถึง​สภาพ​ที่ agent ลอง​แล้ว​ผิด​ได้​โดย​ไม่​ทำลาย​อะไร​ถาวร: มี sandbox, การกระทำ​ย้อน​กลับ​ได้ หรือ​มี GuardrailGuardrailกติกา​ที่​ควบคุม​ไม่​ให้ agent ทำ​เกิน​ขอบเขต​หรือ​ก่อ​ความ​เสียหาย เช่น จำกัด tool ที่​เรียก​ได้ ตรวจ output ก่อน​ส่ง​ออก บังคับ human approval สำหรับ​การกระทำ​ที่​ย้อน​กลับ​ไม่​ได้ — เป็น​สิ่ง​ที่​รักษา​ขอบเขต​ของ Bounded Context ของ agent ให้​ไม่​ล้ำเส้นProcess คั่น​ก่อน​ถึง​จุด​ที่​ย้อน​ไม่​ได้

เหตุผล​อยู่​ที่​ธรรมชาติ​ของ agentic loop เอง Chip Huyen อธิบาย​ไว้​ใน Chip Huyen — Agents (Jan 2025) ว่า​ยิ่ง agent วน​หลาย​ก้าว โอกาส​พลาด​ยิ่ง ทบ​ต้น — ถ้า​แต่ละ​ก้าว​ถูก 95% งาน​สิบ​ก้าว​ติด​ก็​เหลือ​ความ​น่า​เชื่อถือ​รวม​ราว 60% เท่านั้น งาน​ที่​ผิด​หนึ่ง​ก้าว​แล้ว​เสียหาย​ถาวร (เช่น​คืน​เงิน​เกิน​ยอด, ลบ​ข้อมูล​จริง) จึง​ไม่ใช่​ที่​ของ autonomy เต็ม​รูป มัน​คือ​ที่​ของ Human-in-the-loopHuman-in-the-loopการ​ออกแบบ​ให้​มนุษย์​เข้า​มา​ตรวจสอบ​หรือ​อนุมัติ​ใน​จุด​ที่​การกระทำ​ของ agent มี​ความ​เสี่ยง​สูง​หรือ​ย้อน​กลับ​ไม่​ได้ เช่น ก่อน​โอน​เงิน​หรือ​ลบ​ข้อมูล​จริง — เป็น guardrail ชนิด​หนึ่ง​ที่​ยัง​จำเป็น​แม้ agent จะ​ฉลาด​ขึ้น​เรื่อย ๆ เพราะ​บาง​การ​ตัดสิน​ใจ​ไม่​ควร​ปล่อย​ให้ agent ตัดสิน​ใจ​เอง​ทั้งหมดProcess หรือ workflow ที่​ล็อก​เส้นทาง​ไว้ ใน domain ops-copilot ของ​เรา​นี่​แปลได้ตรงๆ: การ “อ่าน​สถานะ​ออเดอร์” อยู่​ใน sandbox โดย​ธรรมชาติ (อ่าน​อย่าง​เดียว ผิด​ก็​แค่​อ่าน​ใหม่) แต่​การ “คืน​เงิน” ไม่มี​วัน​เป็น sandbox — มัน​เป็น​เส้น​ที่​ต้อง​มี​คน​กั้น​เสมอ

รวม​สอง​ด้าน — ต้นทุน​กับ​ความ​เหมาะสม — เข้า​เป็น​บันได​ตัดสิน​ใจ​ได้​เลย หลัก​ยึด​ยัง​เป็น​ข้อ​เดิม​จาก Building Effective Agents: เริ่ม​จาก​สิ่ง​ที่​ง่าย​ที่สุด​ที่​แก้​ปัญหา​ได้ แล้ว​เพิ่ม​ความ​ซับซ้อน​เมื่อ​จำเป็น เท่านั้น ตรง​นี้​คือ​จุด​ที่​ต้อง​แยก workflow / single agent / ไม่​ใช้ agentWorkflow vs Agentความ​ต่าง​สำคัญ​ที่​มัก​ถูก​มอง​ข้าม: workflow คือ code ที่​กำหนด​ลำดับ​ขั้นตอน​ตายตัว​ไว้​ล่วงหน้า (คาด​เดา​ได้ ทดสอบ​ง่าย) ส่วน agent คือ​ระบบ​ที่​ตัดสิน​ใจ​เส้นทาง​เอง​แบบ​ไดนามิก​ผ่าน agentic loop (ยืดหยุ่น​กว่า​แต่​คาด​เดา​ยาก​กว่า) — โจทย์​ส่วน​ใหญ่​ไม่​ต้องการ agent เต็ม​รูปแบบ workflow ที่​ออกแบบ​ดี​มัก​พอเพียง​และ​เชื่อถือ​ได้​กว่าProcess ออก​จาก​กัน​ให้​ขาด แล้ว​ไต่​ขึ้น​ที​ละ​ขั้น​เมื่อ​ขั้น​ล่าง​ตอบโจทย์ไม่ได้จริงๆ:

  • ไม่​ใช้ agent (code ธรรมดา / workflow) — งาน​ที่​เส้นทาง​ตายตัว คาด​เดา​ได้ เขียน​เป็น​ลำดับ​ขั้น​ได้ เช่น “ลูกค้า​กด​ยกเลิก → เช็กว่า​ยัง​ไม่​เข้า​ครัว → คืน​สถานะ” งาน​แบบ​นี้ workflow ชนะ​ขาด​เพราะ​ถูก คาด​เดา​ได้ ทดสอบ​ง่าย และ​ไม่มี​ความ​ไม่​แน่นอน​ของ agentic loop มา​ให้​ปวด​หัว
  • single agent — งาน​ปลาย​เปิด​ใน​สภาพ​แวดล้อม​ที่​เชื่อถือ​ได้ และ​มูลค่า​คุ้ม​กับ​ต้นทุน ~4× เช่น​ตอบ​คำถาม​ลูกค้า​ที่​รูป​คำถาม​เดา​ไม่​ได้​ล่วงหน้า นี่​คือ ค่า​เริ่มต้น เมื่อ​พ้น​ระดับ workflow
  • multi-agent — เฉพาะ​เมื่อ​ผ่าน​ประตู 3 เหตุผล​จาก​บท​ที่ 5 (When to use multi-agent systems (and when not to) (Anthropic/Claude) — context protection / parallelization / specialization) และ มูลค่า​งาน​คุ้ม​กับ​ต้นทุน ~15× เทียบ​แชต ไม่ใช่​เพราะ “มัน​เป็น​คนละ SubdomainSubdomainส่วน​ย่อย​ของ​ปัญหา​ทาง​ธุรกิจ (problem space) แบ่ง​เป็น core, supporting, generic — ก่อน​จะ​ออกแบบ​ว่า​จะ​มี agent กี่​ตัว​และ​แต่ละ​ตัว​ทำ​อะไร ต้อง​วิเคราะห์ subdomain ของ​ธุรกิจ​ก่อน​เสมอ ไม่ใช่​เริ่ม​จาก​อยาก 'มี agent' แล้ว​ค่อย​หา​เรื่อง​ให้​มัน​ทำStrategic Design
flowchart TD
  START["งานที่อยากให้ AI ช่วยในทีมปฏิบัติการ"]
  Q1{"ขั้นตอนตายตัว<br/>คาดเดาเส้นทางได้ไหม?"}
  W["ไม่ใช้ agent<br/>code ธรรมดา / workflow<br/>ถูก คาดเดาได้ ทดสอบง่าย"]
  Q2{"สภาพแวดล้อมเชื่อถือได้/มี sandbox<br/>และผิดแล้วกู้คืนได้ไหม?"}
  H["ยังไม่ให้ autonomy เต็ม<br/>workflow + human-in-the-loop<br/>คั่นก่อนการกระทำที่ย้อนไม่ได้"]
  Q3{"มูลค่างานคุ้มต้นทุน<br/>~4× token ของ chat ไหม?"}
  SA["single agent ที่มีขอบเขตดี<br/>1 bounded context<br/>เริ่มที่นี่เสมอ"]
  Q4{"มี 1 ใน 3 เหตุผล isolation<br/>และคุ้ม ~15× token ของ chat?"}
  MA["multi-agent (orchestrator-workers)<br/>ข้อยกเว้นที่ต้องพิสูจน์"]
  START --> Q1
  Q1 -->|"ใช่ ตายตัว"| W
  Q1 -->|"ปลายเปิด"| Q2
  Q2 -->|"ไม่"| H
  Q2 -->|"ใช่"| Q3
  Q3 -->|"ไม่คุ้ม"| W
  Q3 -->|"คุ้ม"| SA
  SA --> Q4
  Q4 -->|"ยังไม่ผ่าน"| SA
  Q4 -->|"ผ่าน พิสูจน์ได้"| MA
  classDef plain fill:#bbf7d0,stroke:#166534,color:#1a1a1f;
  classDef def fill:#c7d2fe,stroke:#3730a3,color:#1a1a1f;
  classDef gate fill:#fde68a,stroke:#b45309,color:#1a1a1f;
  classDef exc fill:#fca5a5,stroke:#7f1d1d,color:#1a1a1f;
  class W,H plain;
  class SA def;
  class Q1,Q2,Q3,Q4 gate;
  class MA exc;

คำ​บรรยาย​ภาพ: บันได​ตัดสิน​ใจ “ควร​ใช้ agent ไหม” อ่าน​จาก​บน​ลง​ล่าง​เป็น​ชุด​ประตู (เหลือง) — งาน​ตายตัว​ตก​ไป​ที่ workflow (เขียว), งาน​ที่​สภาพ​แวดล้อม​ไม่​น่า​เชื่อถือ​หรือ​ย้อน​ไม่​ได้​ตก​ไป​ที่ workflow + human-in-the-loop, งาน​ปลาย​เปิด​ที่​คุ้ม​ต้นทุน ~4× ถึง​จะ​ได้ single agent (น้ำเงิน) ซึ่ง​เป็น​ค่า​เริ่มต้น​เมื่อ​พ้น workflow และ multi-agent (แดง) เป็น​ปลายทาง​เดียว​ที่​ต้อง​ผ่าน​ประตู​สอง​ชั้น: มี 1 ใน 3 เหตุผล isolation และ คุ้ม​ต้นทุน ~15× เทียบ​แชต ย้ำ​วินัย​เดิม​ของ​ทั้ง​คอร์ส — การ​ไป​ถึง​กล่อง single agent หรือ multi-agent ไม่ใช่ “เป้าหมาย” ที่​ต้อง​ไต่​ให้​สุด เส้น​ทุก​เส้น​ถูกลาก​บน discontinuity ของ​ภาษา/ความ​ไว้ใจ/ต้นทุน ไม่ใช่​บน​ตำแหน่ง​งาน​หรือ subdomain และ​คำ​ตอบ​ที่​ถูก​สำหรับ​งาน​ส่วน​ใหญ่​คือ​กล่อง​เขียว​หรือ​น้ำเงิน ไม่ใช่​แดง

สมมติ​ผ่าน​ประตู​ต้นทุน​แล้ว งาน​นี้​คุ้ม​ที่​จะ​เป็น agent จริง คำถาม​ถัด​มา​คือ รู้​ได้​ยังไง​ว่า​มัน​ทำงาน​ถูก — และ​นี่​คือ​จุด​ที่ agent ต่าง​จาก code ธรรมดา​ที่สุด code deterministic test ด้วย​การ​เทียบ output กับ​ค่าที่​คาด​ไว้​เป๊ะๆ แต่ agent เดิน​ไป​ถึง​คำ​ตอบ​เดียวกัน​ได้ หลาย​เส้นทาง จะ​วัด​มัน​ด้วย​ไม้บรรทัด​แบบ​เดิม​ไม่​ได้ ต้อง​มี eval ที่​ออกแบบ​มา​เพื่อ​ความ​ไม่​แน่นอน​นี้​โดย​เฉพาะ

เริ่ม​ด้วย ~20 query จริง ก่อน อย่า​เพิ่ง​ไป​สร้าง​ชุด​ทดสอบ​พัน​เคส​อัตโนมัติ​ตั้งแต่​วัน​แรก Anthropic แนะนำ​ใน How we built our multi-agent research system (Anthropic, Jun 2025) ว่า eval ที่​ดี​เริ่ม​จาก​ตัวอย่าง​จำนวน​น้อย​แต่ เป็น​ของ​จริง — ราว 20 query ที่มา​จาก​การ​ใช้งาน​จริง ก็​พอ​จับ​สัญญาณ regression ก้อน​ใหญ่​ได้​แล้ว การ​รอ​จน​มี​ชุด​ใหญ่ “ครบ​สมบูรณ์” ค่อย​เริ่ม​วัด มัก​แปล​ว่า​ไม่​ได้​เริ่ม​วัด​เลย

ตัดสิน​ที่ end-state ไม่ใช่ golden trajectory นี่​คือ​หัวใจ​ของ​บท​นี้ กับดัก​ที่​พบ​บ่อย​คือ​บันทึก​เส้นทาง “ที่​ถูกต้อง” ไว้​หนึ่ง​เส้น (golden trajectory) แล้ว diff เส้น​ที่ agent เดิน​จริง​กับ​มัน​ที​ละ​ก้าว — วิธี​นี้​พัง​เพราะ agent ที่​ทำงาน​ถูก​อาจ​เลือก tool คนละ​ตัว สลับ​ลำดับ หรือ​ลอง​ผิด​แล้ว​แก้ตัวเอง​ระหว่าง​ทาง ทุก​ความ​ต่าง​ที่​ไม่ใช่​ความ​ผิด​จริง​จะ​ถูก​นับ​เป็น fail หมด (false negative เพียบ) ทาง​ที่​ถูก​กว่า​คือ​ถาม​ว่า ปลายทาง​ถูก​ไหม: ออเดอร์​ที่​ลูกค้า​ถาม​ได้​สถานะ​ที่​ถูกต้อง​กลับ​ไป​หรือ​เปล่า, เคส​ถูก​ปิด​ด้วย​ผล​ที่​ตรง​นโยบาย​ไหม — นี่​คือ outcome-eval ส่วนตัว process ให้​ตรวจ เป็น​จุดๆ ที่​สำคัญ​แทน ไม่ใช่​เทียบ​ทั้ง​เส้น: “มัน​เรียก guardrail คืน​เงิน​ก่อน​โอน​จริง​ไหม”, “มัน​หลุด​ไป​แตะ tool นอก​ขอบเขต​หรือ​เปล่า” — เป็น checkpoint ไม่​กี่​จุด ไม่ใช่ trajectory-diff

LLM-as-judge เรียก​ครั้ง​เดียว​ด้วย rubric เมื่อ output เป็น​ภาษา​ธรรมชาติ​ที่​ไม่มี​คำ​ตอบ​ตายตัว ให้​ใช้ model อีก​ตัว​เป็น​ผู้​ตัดสิน (LLM-as-judge) โดย​ป้อน rubric ที่​เขียน​เกณฑ์​ไว้​ชัด — ถูก​ตาม​ข้อเท็จจริง​ไหม, ครบ​ทุก​ประเด็น​ที่​ถาม​ไหม, อยู่​ใน​นโยบาย​ไหม — แล้ว​ให้ judge ให้​คะแนน​ทุก​เกณฑ์​ใน การ​เรียก​ครั้ง​เดียว Anthropic พบ​ว่า judge เดี่ยว​ที่​ถือ rubric ครบ​ทุก​มิติ​ได้​ผล​นิ่ง​และ​ถูก​กว่า​การ​ซอย​เป็น judge หลาย​ตัว​เรียก​หลาย​ครั้ง

✅ ภาพร่าง eval ของ Order-Tracking agent — วัด​ที่​ปลายทาง
seed_set: 20 # query จริงจากการใช้งาน ไม่ใช่พันเคสสังเคราะห์
judge: outcome # ตัดสินที่ end-state ไม่ diff เส้นทางทั้งเส้น
end_state_checks:
- สถานะ/ETA ที่คืนตรงกับความจริงของออเดอร์
- ตอบครบประเด็นที่ลูกค้าถาม
process_spot_checks: # ตรวจเป็นจุด ไม่ใช่ trajectory-diff
- ไม่เรียก tool นอกขอบเขต (เช่น issue_refund)
- เรียก human-approval guardrail ก่อนการกระทำที่ย้อนไม่ได้
llm_judge:
calls: 1 # เรียกครั้งเดียว ถือ rubric ครบทุกมิติ
rubric: [ถูกตามข้อเท็จจริง, ครบประเด็น, อยู่ในนโยบาย]

eval อัตโนมัติ​บอกว่า คะแนน​ตก แต่​ไม่​ได้​บอกว่า ตก​เพราะ​อะไร — ส่วน​นั้น​ยัง​ต้อง​ใช้​คน นี่​คือ human-in-the-loop ใน​บทบาท​ที่​คน​มัก​ลืม: ไม่ใช่​แค่​กั้น​การกระทำ​เสี่ยง​ตอน runtime แต่​คือ​คน​ที่นั่ง​อ่าน transcript ตอน​วัดผล​ด้วย วินัย​ที่​ได้​ผล​คือ อ่าน 20–50 transcript ด้วย​มือ แล้ว​ทำ error analysis — ดู​ว่า agent พลาด​ตรง​ไหน คิด​อะไร​อยู่​ตอน​พลาด ยิ่ง​อ่าน​ของ​จริง​มาก ยิ่ง​เจอ failure mode ที่ automated eval มอง​ข้าม

ขั้น​ที่​ทำให้ error analysis กลาย​เป็น​ของใช้​ได้​จริง​คือ ตั้ง​ชื่อ class ความ​พลาด อย่า​ปล่อย​ให้​ความ​ผิด​เป็นกอง​ข้อสังเกต​กระจัดกระจาย ให้​จัด​เป็น​หมวด​ที่​ซ้ำ​ได้ สาม​หมวด​ที่​ครอบ​เคส​ส่วน​ใหญ่:

  • planning — วางแผน/แตก​งาน​ผิด​ตั้งแต่​ต้น เช่น​เข้าใจ​คำถาม​ลูกค้า​ผิด​ทิศ หรือ​เลือก​กลยุทธ์​ที่​ไม่มี​วัน​ตอบ​โจทย์
  • tool — เลือก tool ผิด​ตัว กรอก parameter ผิด หรือ​อ่าน​ผลลัพธ์​ที่ tool คืน​มา​ผิด
  • efficiency — ปลายทาง​ถูก​แต่​เปลือง​เกิน​เหตุ วน​ซ้ำ เรียก tool ซ้ำๆ ผลาญ token โดย​ไม่​จำเป็น (หมวด​นี้​เชื่อม​กลับ​ประตู​ต้น​ทุนตรงๆ)

พอ​ความ​พลาด​มีชื่อ มัน​ก็​นับ​ได้ จัด​ลำดับ​ได้ และ​แก้​ตรง​จุด​ได้ — planning ที่​พลาด​บ่อย​มัก​แก้​ที่ System PromptSystem Promptชุด​คำ​สั่ง​ที่​ฝัง​ไว้​ล่วงหน้า​เพื่อ​กำหนด​บทบาท ขอบเขต​หน้าที่ ภาษา และ​กติกา​ของ agent ก่อน​เริ่ม​สนทนา​จริง เทียบ​ได้​กับ​สัญญา (contract) ที่​ประกาศ​ว่า Bounded Context นี้​รับผิดชอบ​อะไร และ​ปฏิเสธ​คำขอ​ที่​อยู่​นอก​ขอบเขตArchitecture, tool ที่​พลาด​บ่อย​มัก​แก้​ที่ schema/description ของ tool (คือ ACL จาก​บท​ที่ 6), efficiency ที่​แย่​มัก​แก้​ที่​ขอบเขต​หรือ Agent MemoryAgent Memoryกลไก​ที่ agent เก็บ​ข้อมูล​ข้าม​รอบ​ของ agentic loop หรือ​ข้าม session เช่น สรุป​บทสนทนา​เก่า บันทึก​ข้อเท็จจริง​ระยะ​ยาว หรือ​ผลลัพธ์​ก่อน​หน้าที่​ต้อง​อ้างอิง​ต่อ — ออกแบบ​ให้​ดี​ต้อง​เลือก​ว่า​อะไร​ควร​เก็บ อะไร​ควร​ทิ้ง ไม่ใช่​ยัด​ประวัติ​ทั้งหมด​กลับ​เข้า context ทุก​ครั้ง​จน​เกิด context rotArchitecture วง eval จึง​ไม่ใช่​การ​ให้​เกรด​ครั้ง​เดียว​จบ แต่​เป็น​วง​ที่​หมุน​กลับ​มา​ปรับ design

flowchart LR
  Q["1. เก็บ ~20 query จริง<br/>seed set จากงานจริง"]
  RUN["2. รัน agent<br/>เก็บ transcript + end-state"]
  JUDGE["3. ตัดสินที่ end-state (outcome-eval)<br/>+ LLM-as-judge ตาม rubric เรียกครั้งเดียว<br/>+ ตรวจ process เป็นจุด ไม่ใช่ trajectory-diff"]
  HUMAN["4. human-in-the-loop<br/>อ่าน 20-50 transcript ด้วยมือ<br/>error analysis"]
  CLASS["5. ตั้งชื่อ class ความพลาด<br/>planning / tool / efficiency"]
  FIX["6. แก้ system prompt / tool / guardrail<br/>ตาม class ที่พลาดบ่อยสุด"]
  Q --> RUN --> JUDGE --> HUMAN --> CLASS --> FIX
  FIX -->|"วนซ้ำ"| Q
  classDef step fill:#c7d2fe,stroke:#3730a3,color:#1a1a1f;
  classDef human fill:#fde68a,stroke:#b45309,color:#1a1a1f;
  class Q,RUN,JUDGE,FIX step;
  class HUMAN,CLASS human;

คำ​บรรยาย​ภาพ: วง eval หมุน​หก​ก้าว — เก็บ ~20 query จริง​เป็น seed set, รัน agent เก็บ transcript, ตัดสิน​ที่ end-state ด้วย outcome-eval บวก LLM-as-judge (rubric เรียก​ครั้ง​เดียว) และ​ตรวจ process เป็น​จุดๆ ไม่ใช่ diff ทั้ง​เส้นทาง สอง​ก้าว​สี​เหลือง​คือ​ส่วน​ที่​คน​ยัง​ต้อง​ลงมือ: อ่าน 20–50 transcript ทำ error analysis และ​ตั้ง​ชื่อ class ความ​พลาด (planning/tool/efficiency) ก่อน​ป้อน​กลับ​ไป​แก้ system prompt/tool/guardrail แล้ว​วน​ใหม่ จุด​สำคัญ​คือ​ลูกศร​ตัดสิน (ก้าว 3) ชี้​ที่ ปลายทาง ไม่ใช่​เทียบ​เส้นทาง​ที่ agent เดิน​กับ​เส้น golden

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

นี่​คือ​เหตุผล​ราก​ของ​ทั้ง​บท: ถ้า​การ​รักษา​ขอบเขต​เป็น best-effort คุณ​ก็ พิสูจน์ ด้วย​การ​ออกแบบอย่าง​เดียว​ไม่​ได้ ต้อง วัด ว่า​มัน​ยัง​ถูก​รักษา​ไว้​จริง​หลัง​ผ่าน​หลาย​รอบ eval คือ​ครึ่ง​ที่​วัด​ได้​ของ​คำ​ว่า best-effort — คู่​กับ agent memory ที่​ดึง​ข้อเท็จจริง​สำคัญ​กลับ​ขึ้น​มา​ย้ำ และ guardrail ที่ hard-stop การกระทำ​ย้อน​ไม่​ได้​นอก context กล่าว​อีก​แบบ: aggregate การันตี​ขอบเขต​ด้วย​ตัว​มัน​เอง แต่ agent ต้องการ ระบบ​สาม​ชั้น — memory + guardrail + eval — มา​ทดแทน​การันตี​ที่​มัน​ไม่มี เรื่อง eval ลึก​กว่า​นี้ (dataset design, การ​กัน judge bias, การ​วัด regression เป็น​ระบบ) เป็น​หัวข้อ​ของ คอร์ส Evals ใน​อนาคต​ของ​แก่น บท​นี้​ปัก​หมุด​แค่​หลัก​คิด: วัด​ที่​ปลายทาง เริ่ม​จาก​น้อย​แต่​จริง และ​ให้​คน​อ่าน transcript

ปิด​คอร์ส: DDD คือ​คำ​ศัพท์​ของ​ความ​ยับยั้ง​ชั่งใจ

หัวข้อ​ที่​มีชื่อ​ว่า “ปิด​คอร์ส: DDD คือ​คำ​ศัพท์​ของ​ความ​ยับยั้ง​ชั่งใจ”

แปดบท​ที่​ผ่าน​มา​ไม่มี domain ใหม่​สัก​บท มี​แต่ domain ฟู้ด​เดลิ​เวอรี​เดิม​ที่​มอง​ผ่าน​เลนส์ agent — และ​ทุก​บท​ย้ำ​วินัย​ข้อ​เดียว: รู้​ก่อน​ว่า​อะไร​ควร​อยู่​ใน agent ที่​มี​ขอบเขต​ดี​ตัว​เดียว แล้ว​ค่อย​แตก​เมื่อ​มี​เหตุผล​จริง Bounded ContextBounded Contextขอบเขต​ที่ ubiquitous language และ model หนึ่ง​ชุด​มี​ความหมาย​คง​เส้น​คง​วา นอก​ขอบเขต​นี้​คำ​เดียวกัน​อาจ​หมาย​ถึง​คนละ​อย่าง — เมื่อ​ออกแบบ​ระบบ agent ให้​คิด​ว่า​แต่ละ agent (หรือ​กลุ่ม agent ที่​ทำงาน​ร่วม​กัน) ควร​รับผิดชอบ Bounded Context เดียว ไม่ใช่​ยัด​ทุก​หน้าที่​ไว้​ใน agent เดียว หรือ​กระจาย agent ตาม​อำเภอ​ใจStrategic Design บอกว่า​ขอบเขต​อยู่​ตรง​ไหน, Ubiquitous LanguageUbiquitous Languageภาษา​กลาง​ที่​ทีม​และ​ผู้เชี่ยวชาญ​ธุรกิจ​ใช้​ร่วม​กัน อิง​กับ model โดยตรง — สำหรับ agent แล้ว ภาษา​นี้​คือ​คำ​ศัพท์​ที่​ปรากฏ​ใน system prompt ชื่อ tool และ schema ของ​มัน​ด้วย ถ้า​คำ​ใน code agent ไม่​ตรง​กับ​คำ​ที่​ผู้เชี่ยวชาญ​ธุรกิจ​ใช้ แปล​ว่า​กำลัง​หลง​ทางStrategic Design กลาย​เป็น system prompt กับ​ชื่อ tool, Context MapContext Mapแผนภาพ​ที่​วาด​ทุก Bounded Context และ​ความ​สัมพันธ์​ระหว่าง​กัน — ใน​ระบบ multi-agent คือ​แผนภาพ​ที่​วาด​ว่า agent ไหน​คุย​กับ agent ไหน ใคร​เป็นต้น​น้ำ (กำหนด​รูปแบบ​ข้อมูล) ใคร​เป็น​ปลาย​น้ำ ก่อน​จะ​ปล่อย​ให้ agent เรียก​กันเอง​มั่ว ๆStrategic Design มา​ก่อน​การ​นับ​จำนวน agent, ACL กั้น​ความ​รก​ของ backend ที่​ขอบ, published language ทำให้ agent คุย​กัน​ได้​โดย​ไม่​ปน​เปื้อน และ​บท​นี้​ปิด​ด้วย​ประตู​ต้นทุน​กับ eval

วงการ agent ปี 2024–2025 กำลัง​ค้น​พบ​สิ่ง​ที่ DDD พูด​มาสอง​ทศวรรษ​ด้วย​ตัวเอง — “อย่า​แยก​ถ้า​ไม่มี discontinuity จริง”, “เริ่ม​จาก​สิ่ง​ที่​ง่าย​ที่สุด”, “ภาระ​พิสูจน์​อยู่​ที่​ฝ่าย​ที่​อยาก​แยก” ทั้ง Anthropic, Cognition และ Simon Willison ลงเอย​ที่​คำ​แนะนำ​เดียวกัน: เริ่ม​ที่ single agent เสมอ นั่น​คือ​คือ​คุณค่า​ที่แท้​จริง​ของ​การ​เอา DDD มา​จับ​งาน​นี้ — มัน​ไม่ใช่​ศัพท์​เท่ๆ ที่​แปะ​ทับ​ของ​ใหม่ แต่​คือ คำ​ศัพท์​ของ​ความ​ยับยั้ง​ชั่งใจ ที่​มี​มา​ก่อน พร้อม​ใช้​กับ​ยุค​ที่​แรง​กดดัน​ให้ “แตก agent ให้​เยอะ​เข้า​ไว้” ดัง​ที่สุด ครั้ง​หน้าที่​มี​คน​เสนอ multi-agent เป็น​คำ​ตอบ​แรก คุณ​มี​ทั้ง​คำถาม​และ​คำ​ศัพท์​ที่​จะ​ถาม​กลับ​ว่า ทำไม — และ​นั่น​คือ​ทั้งหมด​ที่​คอร์ส​นี้​อยาก​มอบ​ให้


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

เจาะ​ลึก​แนวคิด​ที่​บท​นี้ (และ​ทั้ง​คอร์ส) ยืน​อยู่​บน​ได้ที่​คลัง​อ้างอิง DevIQ:

  • Bounded Context — ขอบเขต​ที่ model และ​ภาษา​หนึ่ง​ชุด​คง​ความหมาย​ไว้ วิทยานิพนธ์​ที่​ทั้ง​แปดบท​ยืม​มา​สวม​ร่าง​ให้ agent
  • Subdomain — การ​จำแนก core/supporting/generic ที่​บอกว่า​งาน​ไหน​คุ้ม​จะ​เป็น agent ปลาย​เปิด งาน​ไหน​ควร​เป็น workflow หรือ​ซื้อ​สำเร็จ

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

ข้อ 1 / 3

ตัวเลข "multi-agent กิน token ราว ~15 เท่า" เป็นการเทียบกับ baseline ใด?