Google ADK สรุป 5 บทเรียนการ refactor agent monolith — จาก Python script ตันไปสู่ production agent
บน Google Developers Blog Luis Sala และ Jacob Badish ปล่อยโพสต์ “Production-Ready AI Agents: 5 Lessons from Refactoring a Monolith” — เป็น post-mortem ของการเอา agent ตัวต้นแบบชื่อ Titanium จาก monolithic Python script มาทำ production บน Agent Development Kit (ADK)
ปัญหาเดิม: monolith ที่ตันและ silent fail
Titanium ทำหน้าที่ research target company แล้วร่าง personalized outreach email — ตอน prototype:
- รันบน massive linear for loop
- เป็น Python script ตัวเดียว
- silent fail ถ้า sub-task พลาด
- จำกัดที่ hardcoded list 12 case studies เท่านั้น
ทีมเลือก rip out monolith แล้วใช้ ADK แทน — สรุปเป็น 5 บทเรียนสำหรับใครจะเอา agent ขึ้น production
บทเรียน 1: Separation of Concerns ผ่าน SequentialAgent
แทนที่จะให้ LLM ตัวเดียว execute massive multi-step prompt — แตกเป็น specialized agent หลายตัว ใน SequentialAgent pipeline:
- Company Researcher — รวบรวมข้อมูลบริษัทเป้าหมาย
- Search Planner — วางแผน query สำหรับ research
- Case Study Researcher — match กับ case study database
- Selector — เลือก case study ที่เกี่ยวข้องที่สุด
- Email Drafter — ร่าง outreach email
บทเรียน: specialized agent ที่มี task แคบ ๆ ทำงานเสถียรกว่า single LLM ที่รัน massive prompt
บทเรียน 2: Structured Output ผ่าน Pydantic ไม่ใช่ prompt-engineering
โค้ดเดิม force JSON output ผ่าน hard-coded prompt — โค้ดเลอะเทอะ และ JSON parsing เปราะบาง
วิธีแก้: inject Pydantic objects ตรง ๆ เป็น schema definition — ADK ใช้ feature “Structured Outputs” ของ model เพื่อ guarantee structural integrity แทน
บทเรียน 3: Observability ด้วย OpenTelemetry
ไม่มีทาง put agent เข้า production โดยไม่มี live diagnostics — ทีมแนะนำ:
- ใช้ OpenTelemetry trace สำหรับ debug latency แต่ละ component
- Trace ช่วย resolve “ground-truth dispute” — เวลา agent ตัดสินใจผิดต้อง trace กลับว่า reasoning step ไหนพัง
บทเรียน 4: Cost Control เป็น first-class citizen
Agentic loop แพง — ถ้า agent เจอ error แล้ว retry โดยไม่มี boundary จะ เผา token budget ในไม่กี่นาที
ต้องตั้ง:
- max iteration count
- per-step timeout
- token budget per session
บทเรียน 5: Circuit Breaker, ไม่ใช่ try-catch retry
เขียน try-catch retry loop เองในโค้ด ไม่ใช่วิธีที่ดี — ปล่อยให้ ADK หรือ orchestration framework จัดการ graceful failure ผ่าน circuit breaker pattern
ผลลัพธ์: agent ที่ fail เร็วและชัดเจน แทนที่จะ retry เงียบ ๆ จน token หมด
มุมมอง AI Curator
โพสต์นี้น่าสนใจไม่ใช่เพราะ insight ใหม่ — แต่เพราะ Google ยอมเผยกระบวนการ engineering ของตัวเอง สำหรับ agent ที่ใช้งานจริงใน sales pipeline ของบริษัท
ที่ต้องสังเกต: 5 บทเรียนทั้งหมดเป็น principle ของ distributed system ที่ engineer แบ็คเอนด์รู้ดีอยู่แล้ว — separation of concerns, structured contract, observability, rate limiting, circuit breaker — แต่ agent dev ส่วนใหญ่ตอนนี้ยังไม่ apply principle เหล่านี้ เพราะ “agent demo ทำได้ใน Jupyter notebook”
นี่คือสาเหตุหนึ่งที่ agent หลายตัวที่ดูดีบน demo fail spectacularly บน production — engineer ทำ demo ใน notebook แต่ลืมว่า production ต้องการ:
- Cost guard
- Distributed tracing
- Schema enforcement
- Graceful degradation
สำหรับทีม dev ไทย/SEA ที่กำลังจะ deploy agent บน production:
1. ถ้าทีมไม่เคย run distributed system มาก่อน — อย่าเริ่มที่ agent เริ่มที่ traditional API microservice ก่อน เรียน rate limiting, tracing, structured logging ให้เข้าใจ แล้วค่อยขยับมา agent — ไม่งั้นจะเจอบทเรียนเดียวกับ Google แต่ราคาแพงกว่า เพราะ token cost คุณจ่ายเอง
2. SequentialAgent pattern ใช้ได้กับงาน Thai context มาก — เช่น: รับเรื่องร้องเรียนภาษาไทย → translator agent → classifier agent → routing agent → response drafter agent ดีกว่าให้ Claude ตัวเดียวรับและตอบตามจินตนาการ
3. Pydantic schema สำคัญกว่าที่คิดในงานภาษาไทย — Thai-language LLM output มักมี edge case (เครื่องหมายวรรคตอนแปลก ๆ, วงเล็บไม่ครบ) ที่ทำให้ JSON parsing พังโดยไม่จำเป็น Pydantic forced output ลด failure mode พวกนี้ไปเยอะ
โดย overall — ADK กับ Microsoft Agent Framework กำลังบรรจบกันที่ pattern เดียว (multi-agent orchestration + structured output + observability) ใครเริ่มเรียนรู้ pattern ตอนนี้จะ portable ระหว่างค่ายได้ในอนาคต
แหล่งข่าว
อ่านเพิ่มในหมวด เครื่องมือนักพัฒนา
Betelgeuse รัน Qwen3.8 Flash Next ขนาด 68GB บน RTX 3060 กับแรม 16GB ส่วน Basalt วัดให้เห็นว่าเอนจินที่เร่งด้วยแฟล็กลัดทำให้โมเดลลืมของ
Betelgeuse ฟอร์ก llama.cpp ที่เปิดเมื่อ 31 ต.ค. ดึง expert จาก NVMe เข้า VRAM ตามต้องการ อ้าง 22 tok/s แบบไม่ทิ้ง expert แต่ README เตือนเองว่ายังทดลองและตัวเลขมาจากคนละรอบ วันเดียวกันผู้พัฒนา Basalt เผยผลวัดว่าแฟล็กเร่งความเร็วทำคุณภาพ Q8 ตกไปใกล้ Q2
กฎห้ามโคลนเกมของ Claude Code เริ่มกระทบงานจริง บริษัทรับทำเกมกระดานร้องงานลูกค้าหยุด แต่รายงานหลายชิ้นปนกับตัวกรองไซเบอร์คนละเรื่อง
ต่อจากที่เราพบกฎนี้ในไบนารี Claude Code ผู้ใช้เริ่มรายงานว่างานเชิงพาณิชย์ถูกปฏิเสธ และ Tom's Hardware กับ Mashable หยิบไปรายงาน แต่เมื่อไล่ issue ที่อ้างถึง พบว่าหลายรายการเกิดก่อนกฎจะมา จึงน่าจะเป็นตัวกรองด้านไซเบอร์ ส่วน Anthropic ยังไม่ชี้แจง
Claude Code ส่ง transcript ของ background agent ให้โมเดลทุก ~30 วินาทีเพื่อเขียนสถานะ 3–5 คำ ผู้วัดรายงานกินราว 16% และยังปิดแบบทางการไม่ได้
รายงานอิสระพบว่าฟีเจอร์ agent_summary ของ Claude Code ส่ง transcript เต็มของ background agent ไปถามสถานะทุก ~30 วินาที คิดเป็น 16.4% ของค่าใช้จ่ายในระบบของผู้วัด Issue เปิดมาตั้งแต่ ส.ค. ยังไม่มีสวิตช์ปิดที่รองรับ เราตรวจพบโค้ดนี้ใน 2.1.314 และพบกฎใหม่เรื่องเกมที่ไม่อยู่ใน changelog