กู้คืน error ในระดับ subagent ก่อน แล้วค่อยส่งต่อ
แนวคิด
ในระบบหลาย agent การจัดการ error มีสองระดับ คือกู้คืนในที่ กับส่งต่อขึ้นไป หลักที่ดีคือให้ subagent กู้คืนความล้มเหลวชั่วคราวด้วยตัวเองก่อน แล้วส่งต่อให้ coordinator เฉพาะ error ที่แก้ในระดับตัวเองไม่ได้ พร้อมกับผลบางส่วนและรายละเอียดว่าพยายามทำอะไรไปแล้ว
เหตุผลคือ transient error เช่น timeout ครั้งเดียว มักหายเองเมื่อลองใหม่ ถ้า subagent โยนทุก error ขึ้นไปหา coordinator ทันที coordinator จะรับภาระตัดสินใจเรื่องเล็ก ๆ ที่ subagent จัดการเองได้ และบริบทของดุมกลางก็บวมด้วยรายละเอียดยิบย่อย การกู้คืนในที่จึงเก็บความซับซ้อนไว้ใกล้จุดที่เกิดปัญหาที่สุด
แต่ subagent ไม่ควรกลืน error ที่ตัวเองแก้ไม่ได้ เมื่อการกู้คืนในที่ล้มเหลวจริง สิ่งที่ส่งต่อขึ้นไปต้องเป็น error ที่มีโครงสร้าง ไม่ใช่แค่สถานะกว้าง ๆ ว่า "ทำไม่ได้"
ทำไมสำคัญ
พิจารณา Sample Question ข้อ 8 subagent ที่ค้นเว็บเกิด timeout ระหว่างค้นหัวข้อยาก คำถามคือควรออกแบบให้ข้อมูลความล้มเหลวไหลกลับสู่ coordinator แบบไหนเพื่อให้กู้คืนได้อย่างชาญฉลาด
คำตอบที่ถูกคือส่ง error ที่มีโครงสร้างกลับไป ประกอบด้วยชนิดของความล้มเหลว, query ที่พยายามใช้, ผลบางส่วนที่ได้มา, และทางเลือกที่พอเป็นไปได้ ข้อมูลชุดนี้ให้ coordinator ตัดสินใจได้ว่าจะลองใหม่ด้วย query อื่น เปลี่ยนวิธี หรือเดินหน้าด้วยผลบางส่วน
ตัวเลือกอื่นทำลายข้อมูลที่มีค่า การลองใหม่แบบ exponential backoff ในตัว subagent แล้วคืนแค่สถานะกว้าง ๆ ว่า "search unavailable" เมื่อหมดโควตา ซ่อนบริบทที่ coordinator ต้องใช้ตัดสินใจ การจับ timeout แล้วคืนผลว่างที่ทำเครื่องหมายว่าสำเร็จ เป็นการกลบ error ด้วยการปั้นความล้มเหลวเป็นความสำเร็จ ซึ่งกันการกู้คืนทุกทางและเสี่ยงได้รายงานที่ไม่ครบ ส่วนการโยน timeout exception ตรงขึ้นไปที่ตัวจัดการระดับบนสุดจนล้มทั้ง workflow เป็นการยุติงานทั้งหมดโดยไม่จำเป็น ทั้งที่กลยุทธ์กู้คืนอาจสำเร็จได้
เส้นแบ่งจึงชัด กู้คืนในที่สำหรับสิ่งที่แก้เองได้ และส่งต่อแบบมีโครงสร้างพร้อมผลบางส่วนสำหรับสิ่งที่แก้เองไม่ได้
ตัวอย่าง
// subagent ลองในที่ก่อน (เช่น retry 1-2 ครั้งสำหรับ transient)
// เมื่อยังไม่หาย จึงส่ง error ที่มีโครงสร้างขึ้น coordinator
{
"failure_type": "timeout",
"attempted_query": "AI impact on music industry 2025",
"partial_results": ["บทความ 2 ชิ้นที่โหลดทัน"],
"suggested_alternatives": ["ลด scope เป็นรายปี", "เปลี่ยนคำค้น"]
}
โครงสร้างนี้ให้ coordinator มีทุกอย่างที่ต้องใช้ตัดสินใจกู้คืน แทนที่จะรู้แค่ว่าล้มเหลว
เช็คความเข้าใจ
subagent ควรกู้คืน error ชนิดใดในระดับตัวเอง และส่งต่ออะไรขึ้น coordinator
ใน Sample Q8 รูปแบบ error propagation ที่ดีที่สุดคือแบบใด และเพราะอะไรตัวเลือกอื่นแย่กว่า