HITL là để agent dừng lại xin ý kiến người trước khi đi tiếp, thay vì chạy tự chủ hoàn toàn.
Khi bắt buộc phải có — quy về ba nhóm:
- Hành động không hoàn tác được: xoá dữ liệu, git push --force, merge PR, deploy production, chuyển tiền, gửi mail cho khách.
- Model không đủ chắc: tự đánh giá thấp, retrieval không ra tài liệu liên quan, câu hỏi mơ hồ.
- Vượt thẩm quyền hoặc thuộc ngành có quy định chặt: tư vấn y tế và pháp lý, hoặc nơi cần dấu vết kiểm toán kèm chữ ký người duyệt.
Các dạng thiết kế:
- Duyệt trước khi làm — phổ biến nhất: agent đề xuất hành động, giao diện hiện nút đồng ý / từ chối / sửa. Cần một primitive tạm dừng luồng rồi chạy tiếp khi có phản hồi.
- Sửa tại chỗ — agent ra bản nháp, người sửa thẳng, agent đi tiếp với bản đã sửa. Hợp việc viết lách và sinh code.
- Hậu kiểm — agent chạy hết và ghi log mọi hành động, người duyệt sau. Dùng khi rủi ro thấp và không chịu được độ trễ chờ duyệt.
- Chốt theo mốc — với việc chạy dài, dừng ở từng mốc logic để người xác nhận tiến độ rồi mới đi tiếp.
Điểm quyết định HITL có tác dụng thật hay chỉ hình thức:
- Đưa đủ thông tin cho người duyệt: hành động gì, vì sao agent chọn nó, hệ quả dự kiến. Bắt người bấm đồng ý mà không biết mình đang duyệt gì thì lớp bảo vệ này vô nghĩa.
- Lưu được trạng thái khi dừng — toàn bộ hội thoại, vùng nháp của agent, hành động đang chờ — không lưu thì không resume được.
- Có timeout: người không phản hồi trong X phút thì huỷ hoặc hoãn, đừng để treo vô hạn.
- Duyệt theo lô cho các hành động cùng loại. Bắt duyệt từng cái sẽ dẫn tới bấm đồng ý theo phản xạ, và mất luôn tác dụng.
- Nới quyền dần: khởi đầu chặt; khi số liệu đã chứng minh độ tin cậy thì tự động duyệt phần model chắc chắn và chỉ hỏi ở phần còn lại.
- Ghi log ai duyệt cái gì lúc nào cho phần kiểm toán.
Hỗ trợ sẵn: LangGraph có interrupt / interrupt_before, CrewAI có human_input, OpenAI Assistants có sự kiện required_action.