Sự tham gia của con người trong quy trình hoạt động của các tác nhân AI: Soạn thảo → Phê duyệt → Thực thi
Bạn muốn trợ lý ảo của mình thực hiện các tác vụ trong thế giới thực: gửi email, hoàn tiền, xóa hàng dữ liệu lỗi. Đây là những hành động không thể đảo ngược. Bạn lo sợ agent sẽ “ảo tưởng” và gửi mã giảm giá 90% cho toàn bộ khách hàng. Giải pháp thường thấy: thêm bước phê duyệt thủ công. Nhưng điều đó dẫn đến hai kiểu lỗi kinh điển.
Lỗi #1: Yêu cầu phê duyệt quá nhiều
Hệ thống hỏi bạn cho phép viết tiêu đề → nhấn “Có”. Cho phép soạn nội dung → “Có”. Cho phép chọn đối tượng → “Có”. Bạn mệt mỏi, ngừng đọc nội dung thực sự, và quá trình phê duyệt trở nên vô nghĩa.
Lỗi #2: Chế độ tự động im lặng
Bạn khó chịu vì thư rác và loại bỏ hoàn toàn các phê duyệt. Agent chạy ngầm. Một tuần sau, nó khởi chạy chiến dịch sai đối tượng → bạn phải viết báo cáo hậu sự đáng xấu hổ và khôi phục lại phê duyệt.

Giải pháp: Cổng phê duyệt “tín hiệu cao, nhanh chóng”
Chúng tôi đã dành vài tháng qua để xây dựng cơ sở hạ tầng cho các agent đáng tin cậy:
- Lưu trữ trạng thái agent trong Postgres → hoạt động bình thường ngay cả khi máy chủ gặp sự cố.
- Kết nối với Temporal để xử lý các vòng lặp dữ liệu lớn.
- Xây dựng các khóa bất biến ngăn chặn việc tính phí hai lần cho khách hàng.
Giờ chúng ta thiết kế một cổng phê duyệt hiếm gặp – nơi con người đưa ra quyết định an toàn trong vòng 30 giây, đồng thời đảm bảo agent thực hiện hành động chính xác một lần.

Gói phê duyệt duy nhất (Single Approval Package)
Thay vì phê duyệt từng bước nhỏ, agent tạo ra một gói phê duyệt duy nhất bao gồm toàn bộ nội dung chiến dịch: tiêu đề, nội dung email, đối tượng nhận (kèm kích thước phân khúc thực tế), các liên kết, danh sách kiểm tra tuân thủ (ví dụ: đường dẫn hủy đăng ký). Con người chỉ cần xem gói đó và bấm “Phê duyệt” hoặc “Từ chối”.
// Mô phỏng gói phê duyệt trong n8n workflow (dạng JSON)
{
"campaign_id": "camp_042",
"proposal_id": "prop_9f3a2b",
"created_at": "2025-03-18T10:00:00Z",
"ttl_hours": 24,
"content": {
"subject": "Ưu đãi đặc biệt dành cho thành viên thân thiết",
"body": "Chào {{first_name}}, ...",
"segment_size": 15000,
"unsubscribe_link": "//...",
"fallback_for_null_name": "Quý khách hàng"
},
"actions": ["send_email", "track_conversion"]
}
TTL (Time To Live) – chống “trôi trạng thái”
Nếu người phê duyệt đi nghỉ 3 ngày, phân khúc có thể thay đổi từ 10.000 lên 15.000. Giải pháp: Gắn TTL 24 giờ vào mỗi proposal. Quá hạn → UI từ chối phê duyệt, buộc agent chạy lại nút xác thực và tạo gói mới.
Khóa bất biến & xử lý đồng thời
Hai người quản lý cùng nhấn “Phê duyệt” trên cùng một proposal? Không vấn đề. Nhờ proposal_id là khóa bất biến, lần nhấp đầu tiên khởi chạy thực thi, lần thứ hai bị chặn ngay lập tức với thông báo: “Chiến dịch đang được thực thi”.

Phân loại các cổng phê duyệt (chọn đúng mô hình)
- Phê duyệt cấp độ kế hoạch (chúng ta đang xây dựng): Phê duyệt toàn bộ chiến dịch trước khi có tác dụng phụ. Người dùng thấy nội dung đầy đủ trong một lần.
- Phê duyệt cấp độ hành động: Agent chạy tự do, nhưng ngay khi gọi công cụ nguy hiểm (ví dụ:
drop_table), workflow tạm dừng chờ phê duyệt. - Phê duyệt cấp độ chính sách: Chuyển đổi các quyết định lặp lại thành quy tắc vĩnh viễn. Ví dụ: sau 5 chiến dịch với phân khúc < 1000 người, hệ thống đề xuất tự động phê duyệt cho các chiến dịch tương lai.
- Xem xét sau chuyến bay: Dành cho hành động rủi ro thấp (gắn thẻ ticket, log). Người phụ trách xem lại nhật ký vào sáng hôm sau.
Các cạm bẫy thường gặp – và cách chúng tôi giải quyết
Thiếu các trường cá nhân hóa
LLM viết “Chào {{first_name}}” nhưng 20% cơ sở dữ liệu có NULL ở cột tên. Nút xác thực của chúng tôi kiểm tra lược đồ DB so với template, buộc agent định nghĩa hành vi dự phòng rõ ràng (ví dụ: dùng “Quý khách hàng”) và in đậm hành vi đó trong gói phê duyệt.
Phê duyệt đồng thời
Như đã đề cập: khóa bất biến + proposal_id giúp chỉ một lần thực thi được chấp nhận.
Lỗi “ôi, chúng ta đã gửi email cho tất cả mọi người rồi”
Agent kiểm tra tính hợp lệ của phân khúc, liên kết, nội dung trước khi tạo gói phê duyệt. Chỉ sau khi có chữ ký thủ công, gói mới được chuyển sang bước thực thi – nơi Temporal đảm bảo chạy đúng một lần và ghi nhật ký kiểm toán đầy đủ.
Tiếp theo: Khi phê duyệt không đủ – leo thang vấn đề
Điều gì xảy ra khi agent bị kẹt và không biết nên đề xuất hành động nào? Trong bài tiếp theo (bài thứ 12 của loạt bài này), chúng tôi sẽ thiết kế quy trình chuyển giao cho người điều hành: trạng thái NEEDS_HUMAN, chuyển ngữ cảnh liền mạch từ agent sang operator, cho phép operator khắc phục sự cố cơ bản và trả lại quyền điều khiển cho agent để hoàn thành công việc.
Bài viết dựa trên kinh nghiệm thực tế xây dựng hạ tầng agent tin cậy (Postgres + Temporal + khóa bất biến). Dành cho cộng đồng n8n – những người muốn tự động hóa có kiểm soát, không sợ “tận thế email”.
Thảo luận và chia sẻ workflow tại: #n8n-agent-approval (kênh cộng đồng chính thức)

Bài viết liên quan: