Retry Budget và Exponential Backoff: 1 Cách Thiết Kế để AI Agent Ngừng Lặp Vô Hạn Khi Gặp Lỗi trong n8n
"Tỵ ơi, con bot của em chạy một luồng xử lý khách hàng rồi, nhưng hôm qua nó lặp lại cùng một action tới 73 lần liên tiếp vì API báo lỗi timeout. Tới cuối cùng thì token cạn, cost tăng gấp 5 lần, và cả luồng chết theo." — đây là câu chuyện mà chủ shop thời trang online nhắn lại cho mình hôm tuần trước.
Lỗi này rất "bình thường" khi ta để AI tự loop lại khi gặp lỗi mà không có giới hạn nổi — vừa số lượng (bao nhiêu lần được thử), vừa thời gian (nghỉ bao lâu giữa các lần). Đây không phải là bug của model, mà là thiết kế workflow chưa có Retry Budget.
Retry Budget = quyền lực tối đa mà AI có thể "chi" để thử lại một hành động. Khi hết budget, AI buộc phải dừng lại và báo cho người thật biết. Kết hợp với Exponential Backoff (ngày càng chờ lâu hơn) để tránh làm tê liệt API khi nó đang quá tải.
Mình đang áp dụng 1 template n8n chuẩn sau:
Retry Budget toàn cục bằng biến môi trường: Thay vì hardcode số lần retry trong từng node, mình khai một biến hệ thống
MAX_RETRY = 3và truyền vào mọi vòng lặp. Node "RetryCounter" (kiểu Function) đọc biến này, tăng dần và so sánh. AI chỉ được quay lại vòng trước nếuretry_count < MAX_RETRY. Cứ vượ quá là nhảy thẳng nhánh thất bại — không thể AI tự quyết định "thử tiếp". Quy tắc này thành cá nhân hoá với từng loại lỗi: timeout dễ dẫn đến retry, sai tham số thì không retry được.Exponential Backoff thông minh (có jitter): Khoảng thời gian chờ tăng theo cấp số nhân: 2s → 4s → 8s → 16s. Nhưng mình thêm "full jitter" theo công thức
delay = random(0, base * 2^attempt)để tránh thiên lệch khi nhiều workflow cùng gọi API vào lúc cao điểm. Node Wait trong n8n đặt thời gian này trước khi AI được phép gọi lại tool. Tôi cũng giới hạn thời gian tối đa (timeout) cho từng tool call — nếu tool mất hơn 30s thì tính như một lần retry và trừ vào budget.Circuit Breaker + Manual Override: Khi retry_count bằng MAX_RETRY, workflow không tự động báo lỗi. Thay vào đó nó tạo một thẻ công việc trong Notion kèm payload đầy đủ để người thật can thiệp. Rule: nếu lỗi liên quan tới số tiền >10 triệu, thẻ được đánh dấu "urgent" và bật thông báo vào Telegram. Cơ chế này biến "thất bại tự động" thành "chờ con người quyết định" một cách rõ ràng.
Sơ đồ n8n mình đang chạy cho một luồng xử lý đơn hàng: • Webhook nhận đơn hàng • AI Agent phân tích & gọi tool • Node RetryCounter kiểm tra count < MAX_RETRY • Nếu có → Wait (exponential backoff) → quay lại AI Agent • Nếu vượ quá → tạo ticket Notion → báo alert Telegram • Node Circuit Breaker ghi log mỗi lần retry thành công hoặc thất bại
Kết quả thực tế ở shop thời trang trên sau 1 tháng: • Thời gian downtime do loop vô hạn: từ 3.2 tiếng/tuần xuống 0 • Chi phí API do retry thừa lãi: giảm 78% • Số ticket cần can thiệp thủ công: tăng 15% (nhưng mỗi ticket đều có đủ dữ liệu để xử lý ngay lập tức, không cần điều tra lại từ đầu)
Nói ngắn gọn: một AI Agent thông minh là AI biết biết dừng lại. Retry Budget + Exponential Backoff + Circuit Breaker giúp nó không chỉ làm việc liệu xỉu mà còn biết ném cờ về khi có vẻ nó đang lạc mất.
Chi tiết công thức random(0, base * 2^attempt), đoạn code Node RetryCounter và cách config ticket Notion mình để tại blog dưới bình luận!
Anh em có đang để AI retry vô hạn không? Hay là các bạn đã có cơ chế giới hạn retry riêng rồi?
Bình luận
Chi tiết công thức Exponential Backoff có jitter, đoạn code Node Function RetryCounter và cách thiết lập Notion ticket + Circuit Breaker để AI Agent biết dừng lại mình chia sẻ đầy đủ tại Blog: https://tyauto.name.vn/posts/2026-09-14-personal-feed-retry-budget.html
Hostinger VPS — 9router proxy
Proxy định tuyến API AI: giảm chi phí token và tự phân phối yêu cầu qua hơn 40 nhà cung cấp LLM. Triển khai một cú nhấp, sao lưu tự động hằng tuần. giảm tới 69%
Hostinger VPS — n8n tự lưu trữ
Chạy n8n tự lưu trữ: workflow không giới hạn, số lệnh chạy đồng thời không giới hạn, dùng được node cộng đồng. Hoàn tiền trong 30 ngày. giảm tới 69%