รูปแบบ PRG สำหรับ AI Agents
AI agents กำลังทำความผิดพลาดเดิมที่เคยเกิดขึ้นเมื่อ 25 ปีที่แล้วซ้ำอีกครั้ง
ในยุค 90 เว็บฟอร์มมีบั๊กที่ร้ายแรงอย่างหนึ่ง คือเมื่อผู้ใช้สั่งซื้อสินค้าแล้วกดรีเฟรช เบราว์เซอร์จะส่งคำสั่งซื้อนั้นซ้ำอีกครั้ง ส่งผลให้เกิดการเรียกเก็บเงินสองครั้งและทำให้ลูกค้าไม่พอใจ
วิธีแก้ไขคือการใช้รูปแบบ Post/Redirect/Get (PRG) ซึ่งมีหลักการทำงานดังนี้:
- ผู้ใช้ส่งคำขอแบบ POST เพื่อส่งข้อมูล
- เซิร์ฟเวอร์ประมวลผลข้อมูล
- เซิร์ฟเวอร์ส่งการ Redirect ไปยัง URL ใหม่
- เบราว์เซอร์ส่งคำขอแบบ GET เพื่อแสดงผลลัพธ์
หากผู้ใช้กดรีเฟรช พวกเขาจะทำเพียงแค่ส่งคำขอ GET ซ้ำเท่านั้น ส่วนคำขอ POST ที่เป็นอันตรายจะหายไปแล้ว
AI agents ได้นำบั๊กนี้กลับมาอีกครั้ง
เมื่อเอเจนต์เรียกใช้เครื่องมือ (tool) เพื่อตัดบัตรเครดิตหรือสร้างบันทึกข้อมูล หากเครือข่ายขัดข้อง เอเจนต์จะไม่ทราบว่าการดำเนินการนั้นสำเร็จหรือไม่ และจะพยายามทำซ้ำอีกครั้ง ซึ่งจะทำให้ลูกค้าถูกเรียกเก็บเงินซ้ำสองครั้ง
คุณสามารถแก้ไขปัญหานี้ได้โดยการใช้ Idempotency Key ซึ่งทำหน้าที่เหมือนการ Redirect โดยจะแยกส่วนระหว่าง "การลงมือทำ" ออกจาก "การแสดงผลลัพธ์"
รูปแบบสำหรับเอเจนต์ควรเป็นดังนี้:
- เอเจนต์สร้างคีย์ที่ไม่ซ้ำกัน (unique key) ก่อนการพยายามครั้งแรก
- โดยใช้ค่าที่คงที่ เช่น User ID และ Cart ID
- ส่งคีย์นี้ไปพร้อมกับการเรียกใช้เครื่องมือทุกครั้ง
- เซิร์ฟเวอร์จะตรวจสอบคีย์ หากพบคีย์เดิมอีกครั้ง เซิร์ฟเวอร์จะส่งผลลัพธ์เดิมกลับไปแทนที่จะดำเนินการซ้ำเป็นครั้งที่สอง
สำหรับงานที่ใช้เวลานาน ลำพังแค่คีย์อาจไม่เพียงพอ คุณจำเป็นต้องมีระบบ Checkpointing โดยต้องบันทึกสถานะ (state) ในทุกขั้นตอน เพื่อให้แน่ใจว่าเมื่อเริ่มทำงานใหม่ ระบบจะสามารถทำงานต่อจากจุดเดิมที่ค้างไว้ได้
ปฏิบัติตามกฎเหล่านี้สำหรับเครื่องมือของเอเจนต์ใดๆ ที่มีการเปลี่ยนแปลงข้อมูล:
- เครื่องมือที่มีการเปลี่ยนแปลงข้อมูล (mutating tool) ทุกชนิดต้องรองรับ Idempotency Key
- สร้างคีย์จากเจตนาของผู้ใช้ (user intent) ไม่ใช่จาก Timestamp
- สร้างคีย์ก่อนการพยายามครั้งแรก
- ใช้คีย์เดิมในการพยายามใหม่ทุกครั้ง
- สำหรับงานที่ใช้เวลานาน ให้ทำ Checkpoint ในทุกขั้นตอนระหว่างทาง
เลเยอร์อาจเปลี่ยนไป แต่ตรรกะยังคงเดิม
ชุมชนแห่งการเรียนรู้ (ไม่บังคับ): https://t.me/GyaanSetuAi
