Workflow SDK 5: งาน AI ที่รันนานต้องมีสัญญาการยกเลิก
งาน AI ที่รันนานไม่ได้ยากเพราะเวลานานอย่างเดียว แต่ยากเมื่อไม่มีใครอธิบายได้ว่าอะไรยังทำงานหลังการยกเลิก โมเดลยังถูกเรียก upload ยังจบหลัง timeout หรือ retry ยังใช้ต้นทุนหลัง quota เต็ม
วันที่ 16 มิถุนายน 2026 Vercel ประกาศว่า Workflow SDK 5 beta รองรับ AbortController และ AbortSignal ข้าม workflow และ step เมื่อ agent รันได้นานขึ้น ก็ต้องหยุดได้แม่นขึ้น
มีอะไรเปลี่ยน
workflow สร้าง AbortController ส่ง signal ไปยัง step และเรียก abort() เมื่อ timeout, race, hook หรือ quota monitor ตัดสินใจ เอกสารระบุว่า signal คงทนข้าม suspension, replay และ invocation แยกกัน
การยกเลิกเป็น cooperative: step ต้องส่ง signal ให้ fetch/API ตรวจ throwIfAborted หรือตรวจ aborted
ทำไมสำคัญ
OCR รายงาน browser automation multi-model agent และ test pipeline ต้องการ runtime ยาว หากไม่มีสัญญายกเลิกจะเสีย token, API call และเกิดสถานะคลุมเครือ
คำถามชุมชนเรื่อง production และ cleanup สะท้อนปัญหา operation
ผลต่อ operation
timeout กลายเป็น policy ของ product, parallel work ยกเลิกตัวแพ้ได้, abort error ไม่ retry ทำให้ log ชัดขึ้น
Checklist
แยก user, timeout, admin, quota, parent request
ส่ง signal ให้ทุก step ที่มีต้นทุน
แยก run.cancel() กับ AbortSignal
บันทึก cancelled_by_user, timed_out, quota_exceeded
ทดสอบ cleanup ภายนอก
ความเสี่ยง
SDK 5 ยัง beta/pre-release ควรเริ่มเล็กและมี rollback
Signal ไม่ย้อน side effect และไม่หยุด code ที่ไม่ฟัง signal
ทำตอนนี้
วาด boundary การยกเลิกก่อนทำปุ่ม cancel: ต้นทุน การแก้ state ภายนอก และงานที่ retry ไม่ได้
เช็ก 30 นาที
✓ ตั้งชื่อเหตุผลยกเลิกชัดเจน
✓ step ที่แพงรับหรือตรวจ signal
✓ abort และ retry ไม่ชนกัน
✓ side effect ภายนอกมี idempotency key
✓ observability แยก cancelled กับ failed
const controller = new AbortController();
const result = await Promise.race([
expensiveStep(controller.signal),
sleep("30s").then(() => null),
]);
if (result === null) controller.abort();
แหล่งข้อมูล
- Vercel Changelog: Workflow SDK now supports inflight cancellation
- Workflow SDK v5 docs: Cancellation
- MDN: AbortController
- MDN: AbortSignal.any()
- Vercel Changelog: Vercel Sandbox can now run for up to 24 hours
- Reddit r/vercel: Is Workflow Development Kit production ready?
- Reddit r/vercel: Workflow devkit cleanup/cancel discussion
- Reddit r/vercel: 30 minute Functions and 24 hour Sandbox