Mô hình PRG cho các AI Agent
Các AI agent đang gặp phải một vấn đề cũ. Đó chính là lỗi từng làm hỏng các biểu mẫu web vào những năm 90.
Trong thời kỳ web sơ khai, người dùng sẽ gửi một biểu mẫu. Nếu họ nhấn làm mới (refresh), trình duyệt sẽ gửi lại dữ liệu đó. Điều này dẫn đến việc tạo ra hai đơn hàng, hai lần thanh toán, hoặc hai email.
Giải pháp chính là mô hình Post/Redirect/Get (PRG).
Logic rất đơn giản:
- Người dùng gửi một yêu cầu POST.
- Máy chủ xử lý công việc.
- Máy chủ gửi một lệnh Redirect 302 đến một URL mới.
- Trình duyệt thực hiện chuyển hướng bằng một yêu cầu GET.
Giờ đây, việc nhấn làm mới chỉ tải lại trang kết quả. Nó không lặp lại hành động đó nữa.
Các AI agent đã mang lỗi này trở lại ở một tầng mới.
Khi một agent gọi một công cụ để thanh toán thẻ hoặc tạo một bản ghi, mọi thứ có thể đi chệch hướng. Một sự cố mất mạng xảy ra. Một container khởi động lại. Một giới hạn tốc độ (rate limit) được kích hoạt. Agent không biết liệu lần gọi cuối cùng có thành công hay không. Vì vậy, nó thử lại (retry).
Nếu không có giải pháp khắc phục, agent sẽ tạo ra các đơn hàng trùng lặp và khiến khách hàng tức giận vì bị tính phí nhiều lần.
Bạn phải áp dụng mô hình PRG vào các pipeline của agent bằng cách sử dụng các khóa idempotency.
Khóa idempotency chính là lệnh chuyển hướng của bạn. Nó tách biệt hành động khỏi kết quả.
Cách triển khai:
- Mọi công cụ thay đổi trạng thái (mutating tool) đều phải chấp nhận một khóa idempotency.
- Tạo khóa trước lần thử đầu tiên.
- Dẫn xuất khóa từ ý định của người dùng (user intent), thay vì từ dấu thời gian (timestamp).
- Máy chủ phải kiểm tra xem nó đã từng thấy khóa này trước đó chưa.
- Nếu khóa đã tồn tại, hãy trả về kết quả đã lưu thay vì chạy lại tác vụ.
Đối với các tác vụ kéo dài, bạn cần nhiều hơn là chỉ một chiếc khóa. Bạn cần checkpointing.
Checkpointing lưu lại trạng thái ở mỗi bước. Nếu agent bị sập khi đang thực hiện một tác vụ kéo dài 20 phút, nó sẽ tiếp tục từ nơi nó vừa dừng lại thay vì phải bắt đầu lại từ đầu.
Nếu bạn chỉ có thể làm một việc, hãy đảm bảo mọi lần gọi công cụ đều an toàn để có thể chạy hai lần.
Hãy xây dựng các agent của bạn với năm bước kiểm tra sau:
- Mọi công cụ có chấp nhận khóa idempotency không?
- Khóa có dựa trên ý định thay vì thời gian không?
- Khóa có được tái sử dụng trong mỗi lần thử lại không?
- Máy chủ có trả về kết quả đã lưu cho các khóa trùng lặp không?
- Các bước trung gian có được lưu lại cho các tác vụ dài không?
Mô hình vẫn vậy. Chỉ có tầng (layer) là thay đổi.
