CCA · Foundations

retry พร้อม error feedback และขีดจำกัดของการ retry

แนวคิด

บทก่อนสรุปว่า strict schema กำจัด syntax error แต่ไม่ได้กำจัด semantic error เมื่อ output ผ่าน schema แล้วแต่ validation เชิงความหมายไม่ผ่าน เช่น ตัวเลขบวกกันไม่ลงตัว หรือค่าอยู่ผิด field เทคนิคที่ใช้แก้คือ retry-with-error-feedback คือส่งคำขอใหม่พร้อมแนบ validation error ที่เจาะจงลงไปใน prompt

หัวใจอยู่ที่คำว่า "เจาะจง" การ retry เปล่า ๆ ด้วย prompt เดิมมักได้ผลเดิม แต่การบอกโมเดลว่าผิดตรงไหน เช่น "line_items บวกกันได้ 250 แต่ total ระบุ 200 กรุณาตรวจสอบ" ให้ข้อมูลที่โมเดลใช้แก้ตัวเองได้ตรงจุด follow-up request จึงควรมีทั้งเอกสารต้นฉบับ ผลการดึงที่ล้มเหลว และ validation error ที่ชี้ปัญหา

ทำไมสำคัญ

การแนบ error ที่เจาะจงเปลี่ยน retry จากการเดาสุ่มเป็นการแก้ที่มีทิศทาง โมเดลไม่ต้องหาเองว่าพลาดตรงไหน แต่ได้รับบอกตรง ๆ แล้วโฟกัสไปที่การแก้จุดนั้น นี่คล้ายกับการรีวิวโค้ดที่บอกบรรทัดที่ผิดพร้อมเหตุผล ย่อมได้ผลกว่าการบอกลอย ๆ ว่า "มีอะไรผิด"

แต่จุดที่ต้องเข้าใจให้ลึกคือ retry ไม่ได้แก้ได้ทุกอย่าง retry มีประสิทธิภาพเมื่อปัญหาเป็นเรื่องรูปแบบหรือโครงสร้างที่โมเดลแก้เองได้จากข้อมูลที่มีอยู่ เช่น จัดค่าให้ตรง field หรือคำนวณใหม่ให้ยอดตรง แต่ retry จะไร้ผลเมื่อข้อมูลที่ต้องการไม่มีอยู่ในเอกสารต้นทางเลย

ลองนึกถึงกรณีที่ต้องดึง tax_id แต่เอกสารไม่ได้พิมพ์ tax_id ไว้ ไม่ว่าจะ retry กี่รอบพร้อม error ที่ชัดแค่ไหน โมเดลก็ดึงสิ่งที่ไม่มีมาไม่ได้ ยิ่ง retry ยิ่งเสี่ยงให้โมเดลกุค่าขึ้นมาเพื่อให้ผ่าน validation ซึ่งแย่กว่าเดิม การแยกให้ออกว่าเมื่อไร retry จะช่วยและเมื่อไรจะเปล่าประโยชน์ จึงสำคัญมาก ถ้าข้อมูลขาดเพราะไม่มีในต้นทาง ทางที่ถูกคือปล่อย field เป็น null หรือส่งให้คนตรวจ ไม่ใช่ retry ซ้ำ ๆ ในทางกลับกัน ถ้าเป็น format mismatch หรือ structural error ที่โมเดลจัดการได้จากข้อมูลที่มี retry พร้อม error feedback มักแก้ได้ในรอบเดียว

ตัวอย่าง

รอบแรก: extract → line_items [100, 150], total 200
validation: sum(line_items) = 250 ≠ total 200  → ไม่ผ่าน

รอบ retry (แนบทั้งเอกสาร + ผลที่ล้มเหลว + error เจาะจง):
"เอกสารต้นฉบับ: [...]
 ผลที่ได้: total = 200
 ปัญหา: line_items บวกกันได้ 250 ไม่ตรงกับ total 200
 กรุณาตรวจสอบและแก้ให้สอดคล้องกับเอกสาร"
→ โมเดลแก้ที่จุดที่ชี้ได้

แต่ถ้า error คือ "tax_id ว่าง" และเอกสารไม่มี tax_id เลย
→ retry ไร้ผล ควรปล่อย null หรือส่งให้คนตรวจ ไม่ใช่ retry ซ้ำ

เช็คความเข้าใจ

retry-with-error-feedback ต่างจากการ retry เปล่า ๆ อย่างไร และควรแนบอะไรไปด้วย

เมื่อไรที่ retry จะไร้ผล และควรทำอย่างไรแทน

อ่านต่อ