Agent ทำงานค้างหรือเรียกคำสั่งซ้ำ: ออก⁠แบบให้ทำงานต่อได้อย่างไร

ออก⁠แบบ Agent ให้ทำงานต่อหลังหยุด โดยแยกงานกับรอบลอง เก็บสถานะ ตรวจผลปลายทาง และป้องกันคำสั่งซ้ำ พร้อมหน้า⁠จอให้ทีมกู้งาน

โดย เผยแพร่ อัปเดต อ่านประมาณ 7 นาที

ภาพประกอบแบบคำ⁠ขอสองฉบับที่หนีบไว้ด้วยกัน คู่กับแบบฉบับเดียวกันที่ติดแถบสีส้ม
ในบทความนี้
  1. แยกตัวงานออกจากความพยายามทำงานแต่ละรอบ
  2. เข้าใจว่า Checkpoint ยืนยันอะไรได้บ้าง
  3. ให้การลองใหม่อ้างถึงคำสั่งเดิม
  4. แยกสาเหตุก่อนตัด⁠สิน⁠ใจทำซ้ำ
  5. ให้คนมีทางกู้งานที่ไม่สร้างปัญหาซ้ำ

Agent ส่งคำ⁠ขอสร้างใบงาน ระบบปลายทางสร้างสำเร็จแล้ว แต่คำ⁠ตอบหายระหว่างทางก่อนที่ Agent จะ​บั⁠น⁠ทึ⁠ก​ผล เมื่อเริ่มงานใหม่ ผู้⁠ช่วยเห็นว่าขั้นนี้ยังไม่เสร็จจึงสร้างใบงานอีกครั้ง แต่ละระบบดูเหมือนทำงานสมเหตุสมผลในมุมของตัวเอง ทว่าธุรกิจกลับได้รายการซ้ำ

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

แยกตัวงานออกจากความพยายามทำงานแต่ละรอบ

กำหนดรหัสงานธุรกิจให้คงเดิมแม้ตัวทำงานเริ่มใหม่ หนึ่งงานอาจมีหลายคำสั่ง และหนึ่งคำสั่งอาจลองหลายครั้ง ต้องแยกรหัสเหล่า⁠นี้ออกจากกัน การเริ่มลองอีกครั้งไม่ควรกลายเป็นการประกาศว่ามีคำ⁠ขอธุรกิจใหม่

ในตัวอย่างสมมติของงานบริการ ขั้น⁠ตอนอาจเป็นเตรียมใบงาน รออนุ⁠มัติ สร้างใบงานในระบบหลัง⁠บ้าน และแจ้งผู้ขอ เก็บรุ่นข้อมูลเข้า ราย⁠ละเอียดที่อนุ⁠มัติ รหัสคำสั่ง รหัสรายการปลายทาง และสถานะของแต่ละขั้น พร้อมจุดอ้างอิงหลักฐาน แทนการฝากไว้ในสรุปบทสนทนาอย่าง⁠เดียว

ตั้งสถานะให้ตรงกับสิ่งที่รู้จริง เช่น รอทำ รออนุ⁠มัติ กำลังทำ ยืนยันผลแล้ว ยังไม่ทราบผล ล้มเหลว และยกเลิก แต่ละสถานะมีวิธีกู้ต่างกัน หากระบบใบงานหมดเวลารอ การ⁠เขียนว่าล้มเหลวอาจทำให้เข้าใจผิด เพราะรายการอาจถูกสร้างแล้ว

หน้า⁠จอต้องสื่อความต่างนี้ด้วย บอกเจ้าหน้าที่ว่าคำ⁠ขอส่ง⁠ออก⁠ไปแล้วและกำลังตรวจผล แทนการชวนให้กดลองใหม่ทันที มิฉะนั้นคนอาจสร้างรายการซ้ำแบบเดียวกับที่ระบบพยายามป้องกัน

เข้าใจว่า Checkpoint ยืนยันอะไรได้บ้าง

Checkpoint เก็บสถานะ Workflow เพื่อกลับมาทำต่อ LangGraph อธิบายการเก็บสถานะ ประวัติ และการ⁠ทำงานต่อบนฐาน Checkpoint แต่ฐานข้อมูลที่ใช้และระดับความทนทานของการ⁠เขียนยังต้องเหมาะกับ​แ⁠อ⁠ป เอกสาร Persistence ของ LangGraph

Temporal ใช้ประวัติเหตุการณ์ที่​บั⁠น⁠ทึ⁠ก​ไว้กับการ Replay เพื่อให้งานดำเนินต่อ และมีข้อกำหนดเรื่องความสม่ำเสมอของ​โ⁠ค้⁠ด​เมื่อ Replay วิธีนี้เป็นฐานสำหรับประสานงานยาวได้ แต่ไม่ได้ทำให้⁠บริการภายนอกที่แยกกันกลายเป็นธุรกรรมเดียวที่สำเร็จหรือล้มพร้อมกันทั้งหมด การ⁠ทำงานของ Workflow ใน Temporal

ช่องว่างสำคัญเกิดเมื่อคำสั่งภายนอกสำเร็จก่อน​บั⁠น⁠ทึ⁠ก​ผลอย่างถาวร Checkpoint ที่บอกว่ากำลังจะสร้างใบงานไม่สามารถบอกได้ว่าปลายทางสร้างไปแล้วหรือยัง แ⁠อ⁠ป​ต้องอาศัยข้อตกลงของคำสั่ง รหัสอ้างอิงภายนอก หรือขั้นตรวจเทียบผลเพื่อหาคำ⁠ตอบ

Temporal แนะนำให้ Activity ทำซ้ำได้โดยไม่เพิ่มผลทางธุรกิจ เพราะระบบอาจลองใหม่เมื่อไม่ได้⁠รับรายงานจบ แม้ผลภายนอกเกิด⁠ขึ้นแล้ว เหตุผลเดียวกันนี้ควรนำไปพิจารณาไม่ว่าจะใช้ฐาน Workflow ใด Idempotency ของ Temporal Activity

ให้การลองใหม่อ้างถึงคำสั่งเดิม

Idempotency key ใช้บอกบริการที่รองรับว่าเป็นความพยายามทำคำสั่งเดียวกัน เมื่อกลับมาลองคำสั่งที่ได้⁠รับอนุญาตเดิม ให้ใช้ Key ที่เหมาะ⁠สมเดิมและเก็บความ⁠สัมพันธ์กับข้อมูลคำสั่งไว้ หากสร้าง Key ใหม่ทุก⁠ครั้ง ก็ไม่ช่วยระบุว่าเป็นการลองซ้ำ

อย่าสมมติว่า API ทุกแห่งรับประกันเหมือนกัน ต้องตรวจว่าคำสั่งใดรองรับ เก็บประวัติไว้นานเท่าไร เมื่อพารามิเตอร์เปลี่ยนจะเกิดอะไร และส่งผลล้มเหลวเดิมกลับมาอย่างไร ตัวอย่างเช่น เอกสาร Stripe แยกพฤติกรรม API v1 กับ v2 และอธิบายอายุข้อมูลกับการเทียบพารามิเตอร์ของ v1 นี่เป็นข้อตกลงเฉพาะของบริการ ไม่ใช่กฎร่วมของทุกระบบ Idempotent requests ของ Stripe

หาก API ไม่รองรับ ให้ดูว่ารับรหัสอ้างอิงธุรกิจที่ไม่ซ้ำและค้นหาหรือบังคับความไม่ซ้ำได้หรือไม่ ถ้าไม่มี การตั้งธงในระบบเราเพียงว่าส่งแล้วไม่สามารถปิดช่องว่างระหว่างคำสั่งปลายทางกับการ​บั⁠น⁠ทึ⁠ก​ในเครื่องเราได้ ต้องมีขั้นตรวจเทียบหรือพักรายการที่ไม่ทราบผลให้คนตรวจ ไม่ควรรับประกันว่าทำครั้งเดียวแน่นอน

หากหลาย Worker ทำงานพร้อมกัน ต้องมีการประสานสถานะแบบคงทนเพื่อไม่ให้สองรอบถือสิทธิ์ทำคำสั่งเดียวกันอิสระ ควบคู่กับการป้องกันซ้ำหรือข้อบังคับรายการไม่ซ้ำที่ปลายทางเมื่อทำได้ การล็อกอย่าง⁠เดียวอาจหมดอายุทั้งที่คำ⁠ขอปลายทางยังทำงานอยู่

ภาพประกอบจอและบัตรงานที่แสดงสองขั้นเสร็จแล้วกับขั้นที่สามรอ พร้อมใบรับผล
ภาพประกอบแนวคิด: ทำต่อจากขั้นที่ยืนยันผลแล้ว และตรวจรายการที่ยังไม่ทราบผลก่อนสั่งซ้ำ

แยกสาเหตุก่อนตัด⁠สิน⁠ใจทำซ้ำ

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

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

การยกเลิกต้องมีความหมายชัดด้วย การหยุดงานในระบบเราไม่ได้ยกเลิกคำสั่งที่ปลายทางรับไปแล้วเสมอ ต้องแสดงว่าส่วนใดหยุดแล้ว ส่วนใดยังไม่ทราบผล และย้อนกลับได้ด้วยวิธีใด บางงานต้องทำรายการชดเชยทางธุรกิจแทนการย้อนข้อมูลทาง​เ⁠ท⁠ค⁠นิ⁠ค

ให้คนมีทางกู้งานที่ไม่สร้างปัญหาซ้ำ

หน้า⁠จอกู้งานควรมีคำ⁠ขอเดิม รุ่นปัจจุบัน ขั้นที่จบแล้ว รหัสปลายทาง และข้อ⁠ผิด⁠พลาดล่าสุดที่มีความหมาย ให้ผู้⁠มีสิทธิ์ตรวจเทียบผล แก้คำ⁠ขอ หรือยกเลิกงานที่เหลือได้ หลีกเลี่ยงปุ่มเริ่มทุกอย่างใหม่เมื่อมีเพียงขั้นเดียวที่ต้องตรวจ

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

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

ตรวจสถานะธุรกิจหลังจบด้วยวิธีอิสระ ดูใบงานซ้ำ การแจ้งที่ขาด การแก้ข้อมูลผิด และงานที่ค้างโดยไม่มีคน​รั⁠บ⁠ผิ⁠ด⁠ช⁠อ⁠บ จาก⁠นั้นดูว่าหน้า⁠จอให้ข้อมูลเจ้าหน้าที่พอจะกู้ได้หรือไม่ ความเชื่อ⁠ถือ⁠ได้รวม⁠ถึงคนที่ดูแลงาน ไม่ใช่เฉพาะตัว Worker

หากกำลังเลือกฐานระบบ อ่านต่อเรื่อง n8n, LangGraph และ​โ⁠ค้⁠ด​เฉพาะ และนำกรณีกู้เหล่า⁠นี้เข้า Evals ที่ตรวจผลทางธุรกิจ เพื่อใช้เป็นส่วน⁠หนึ่งของเกณฑ์เปิด⁠ใช้⁠งาน

Talvyn Labs ช่วย​พั⁠ฒ⁠น⁠า Agent ที่มีสถานะงานคงทน การอนุ⁠มัติชัดเจน วิธีลองใหม่ตามข้อตกลงปลายทาง และหน้า⁠จอให้ทีมดูแล นำ Workflow ที่ค้างหรือทำรายการซ้ำมาเริ่มวิเคราะห์ช่วงที่อาจผิด⁠พลาด แล้วเชื่อมระบบให้บอกได้ว่าเกิดอะไรขึ้นและทำต่อจากผลที่ยืนยันแล้ว

แก้ Workflow ที่ค้างและทำรายการซ้ำให้พร้อมใช้⁠งาน⁠จริง

ให้ Talvyn Labs ออก⁠แบบสถานะงาน การอนุ⁠มัติ การ⁠ตรวจเทียบผล และวิธีกู้ พร้อม​พั⁠ฒ⁠น⁠า Agent กับหน้า⁠จอที่ทีมรู้ว่าจะทำอะไรต่อ

พั⁠ฒ⁠น⁠า Agent ที่ทำงานต่อได้

มีโจทย์ธุรกิจ ที่ต้องการ⁠ปรึกษา?

ไม่ว่าจะเป็น​เ⁠ว็⁠บ⁠ไ⁠ซ⁠ต์​ใหม่ การ⁠พั⁠ฒ⁠น⁠า​ผลิตภัณฑ์ หรือการ⁠เชื่อม⁠ต่อระบบ สามารถแจ้งราย⁠ละเอียดทาง​อี⁠เ⁠ม⁠ล เพื่อนัดเวลาปรึกษาได้

ข้อมูลเบื้อง⁠ต้นก็เพียงพอ ราย⁠ละเอียดอื่นสามารถหารือร่วม⁠กันได้ภายหลัง

ติดต่อเรา
ส่ง​อี⁠เ⁠ม⁠ล​ถึงเรา
hello@talvynlabs.com
Facebook