Human-in-the-Loop — Khi nào AI Agent cần xin phép con người
Điểm nổi bật
Nhấn để đến mục tương ứng
- 1 Nếu quá thấp (duoi 70%), agent cần cải thiện độ chính xác.
- 2 Chính sách hoàn tiền cho phép hoàn 100% trong 7 ngày.
- 3 Phù hợp cho workflow tuần tự nơi bước tiếp theo phụ thuộc vào kết quả phê duyệt.
- 4 Feedback loop: Dữ liệu từ quyết định của con người nên được dùng để cải thiện agent.
- 5 Hãy thiết kế approval gates dựa trên mức độ rủi ro, sử dụng confidence thresholds để routing thông minh, xây dựng audit trail cho mọi quyết định, và liên tục cải thiện dựa trên dữ liệu thực tế.
AI Agent ngày càng tự chủ hơn trong việc thực thi tác vụ phức tạp. Nhưng tự chủ không có nghĩa là không cần giám sát. Trong các hệ thống production thực tế, một agent tự ý xóa dữ liệu, chuyển tiền, hoặc publish nội dung sai có thể gây thiệt hại nghiêm trọng. Human-in-the-Loop (HITL) là mô hình thiết kế đảm bảo rằng ở những bước quan trọng, agent sẽ dừng lại và xin phép con người trước khi tiếp tục. Bài viết này phân tích chi tiết khi nào cần HITL, cách thiết kế approval gates, confidence thresholds, và xây dựng quy trình audit trail hoàn chỉnh.
Tại sao AI Agent cần giám sát của con người?
Có ba lý do cốt lõi khiến HITL trở thành yêu cầu bắt buộc trong các hệ thống agent production:
1. Rủi ro không thể đảo ngược (Irreversible Actions)
Một số hành động khi đã thực hiện thì không thể hoàn tác: xóa dữ liệu, chuyển khoản ngân hàng, gửi email cho hàng nghìn khách hàng, hoặc deploy code lên production. Agent có thể hiểu sai yêu cầu hoặc gặp edge case mà không được lường trước. Một lớp phê duyệt của con người ở đây là tấm lưới an toàn cuối cùng.
2. Giới hạn hiểu biết ngữ cảnh
Agent hoạt động dựa trên thông tin được cung cấp, nhưng không phải lúc nào cũng có đầy đủ ngữ cảnh kinh doanh. Ví dụ, agent có thể đề xuất hủy đơn hàng của một khách VIP vì đơn quá hạn thanh toán, nhưng không biết rằng khách này đang trong chương trình ưu đãi đặc biệt. Con người nắm giữ ngữ cảnh mà dữ liệu không thể hiện hết.
3. Yêu cầu pháp lý và compliance
Nhiều ngành (tài chính, y tế, pháp lý) yêu cầu quyết định quan trọng phải có sự phê duyệt của con người. Đây không chỉ là best practice mà là yêu cầu pháp luật. EU AI Act và các quy định tương tự đang ngày càng siết chặt yêu cầu human oversight cho AI systems.
Mô hình HITL: Các cấp độ giám sát
Không phải mọi hành động đều cần cùng mức độ giám sát. Một hệ thống HITL hiệu quả phân loại hành động theo cấp độ rủi ro:
Cấp 1: Fully Autonomous (Tự động hoàn toàn)
Agent thực hiện mà không cần xin phép. Áp dụng cho các tác vụ rủi ro thấp, có thể đảo ngược: đọc dữ liệu, tìm kiếm thông tin, tạo bản nháp, tính toán.
Cấp 2: Notify After Action (Thông báo sau khi thực hiện)
Agent thực hiện rồi thông báo cho người giám sát. Áp dụng cho các tác vụ rủi ro trung bình thấp: gửi tin nhắn nội bộ, cập nhật trạng thái ticket, tạo báo cáo.
Cấp 3: Approval Required (Yêu cầu phê duyệt)
Agent chuẩn bị hành động, trình bày cho con người duyệt, và chỉ thực hiện khi được phê duyệt. Áp dụng cho các tác vụ rủi ro cao: chuyển tiền, publish nội dung, thay đổi cấu hình hệ thống.
Cấp 4: Human Takes Over (Con người tiếp quản)
Agent dừng hoàn toàn và chuyển giao cho con người. Áp dụng khi agent không đủ tự tin, gặp tình huống chưa từng xử lý, hoặc phát hiện xung đột trong yêu cầu.
Thiết kế Approval Gates
Approval gate là điểm kiểm soát trong workflow của agent nơi hành động bị tạm dừng chờ phê duyệt. Thiết kế tốt một approval gate cần đảm bảo ba yếu tố: rõ ràng, đầy đủ thông tin, và dễ hành động.
Cấu trúc một Approval Request
// Cấu trúc approval request gửi đến người phê duyệt
const approvalRequest = {
// ID duy nhất để tracking
request_id: "apr_20260328_001",
// Agent nào yêu cầu
agent_id: "order-processing-agent",
// Hành động cần phê duyệt
action: {
type: "REFUND_TRANSACTION",
description: "Hoàn tiền đơn hàng #ORD-2026-1234",
amount: 5500000, // 5.5 triệu VND
currency: "VND",
target: "Nguyen Van A - VCB ****5678"
},
// Lý do agent đề xuất hành động này
reasoning: "Khách hàng phản hồi sản phẩm bị lỗi. Đã xác minh qua ảnh chụp. Chính sách hoàn tiền cho phép hoàn 100% trong 7 ngày. Đơn hàng được đặt cách đây 3 ngày.",
// Confidence score của agent
confidence: 0.87,
// Dữ liệu hỗ trợ quyết định
supporting_data: {
order_date: "2026-03-25",
product: "Tai nghe Bluetooth XYZ",
customer_history: "12 đơn hàng, 0 lần hoàn tiền trước đó",
evidence_urls: ["https://storage.example.com/evidence/img_001.jpg"]
},
// Các lựa chọn cho người phê duyệt
options: ["APPROVE", "REJECT", "MODIFY", "ESCALATE"],
// Thời hạn phê duyệt
expires_at: "2026-03-28T18:00:00+07:00",
// Hành động mặc định nếu hết hạn
default_on_expiry: "ESCALATE"
};
Nguyên tắc thiết kế Approval Gate
Khi thiết kế approval gates, cần tuân thủ các nguyên tắc sau:
- Cung cấp đủ ngữ cảnh: Người phê duyệt phải hiểu được tình huống mà không cần tra cứu thêm. Bao gồm reasoning của agent, dữ liệu liên quan, và lịch sử tương tác.
- Cho phép hành động nhanh: Giao diện phê duyệt phải cho phép approve/reject bằng một thao tác. Tránh yêu cầu người dùng điền form phức tạp.
- Có thời hạn rõ ràng: Mỗi approval request phải có deadline. Nếu hết hạn mà chưa được phê duyệt, hệ thống cần có hành động mặc định (thường là escalate hoặc reject).
- Hỗ trợ modify: Ngoài approve/reject, cho phép người phê duyệt chỉnh sửa hành động trước khi approve (ví dụ: giảm số tiền hoàn, thay đổi nội dung email).
Confidence Thresholds: Khi nào agent tự tin và khi nào không
Không phải mọi hành động cùng loại đều cần approval. Agent có thể tự đánh giá mức độ tự tin (confidence) và quyết định có cần xin phép hay không dựa trên ngưỡng đã cấu hình.
Thiết kế Confidence-Based Routing
// Cấu hình confidence thresholds theo loại hành động
const confidenceConfig = {
actions: {
"SEND_EMAIL": {
auto_approve_threshold: 0.95, // >= 95% tự thực hiện
review_threshold: 0.70, // 70-95% cần review
escalate_threshold: 0.70 // < 70% escalate
},
"PROCESS_REFUND": {
auto_approve_threshold: 0.98,
review_threshold: 0.80,
escalate_threshold: 0.80,
max_auto_amount: 500000 // Tối đa 500k VND tự duyệt
},
"DELETE_DATA": {
auto_approve_threshold: 1.0, // Không bao giờ tự duyệt
review_threshold: 0.0, // Luôn cần review
escalate_threshold: 0.0
},
"PUBLISH_CONTENT": {
auto_approve_threshold: 0.99,
review_threshold: 0.85,
escalate_threshold: 0.85
}
}
};
// Hàm quyết định routing dựa trên confidence
function routeAction(action, confidence, metadata) {
const config = confidenceConfig.actions[action.type];
if (!config) {
// Hành động không được cấu hình -> luôn escalate
return { route: "ESCALATE", reason: "Unknown action type" };
}
// Kiểm tra điều kiện đặc biệt (ví dụ: giới hạn số tiền)
if (config.max_auto_amount && action.amount > config.max_auto_amount) {
return { route: "REVIEW", reason: "Amount exceeds auto-approve limit" };
}
if (confidence >= config.auto_approve_threshold) {
return { route: "AUTO_APPROVE", reason: "High confidence" };
}
if (confidence >= config.review_threshold) {
return { route: "REVIEW", reason: "Moderate confidence" };
}
return { route: "ESCALATE", reason: "Low confidence" };
}
Cách tính Confidence Score
Confidence score nên kết hợp nhiều yếu tố, không chỉ dựa vào xác suất đầu ra của model:
- Model confidence: Xác suất từ LLM cho câu trả lời được chọn
- Data completeness: Tỷ lệ dữ liệu đầu vào có sẵn so với yêu cầu. Thiếu dữ liệu quan trọng sẽ hạ confidence
- Historical accuracy: Agent đã từng xử lý tình huống tương tự chưa? Kết quả ra sao?
- Policy compliance: Hành động có nằm trong phạm vi chính sách cho phép không?
- Anomaly detection: Yêu cầu hiện tại có bất thường so với pattern bình thường không?
Escalation Triggers: Khi nào agent phải dừng lại
Ngoài confidence thresholds, có những tình huống agent phải escalate ngay lập tức, bất kể mức độ tự tin:
Danh sách Escalation Triggers phổ biến
const escalationTriggers = {
// Trigger dựa trên nội dung
content_triggers: [
"Yêu cầu liên quan đến thông tin cá nhân nhạy cảm (PII)",
"Phát hiện ý định gian lận hoặc lạm dụng",
"Nội dung có thể vi phạm pháp luật",
"Khách hàng yêu cầu nói chuyện với con người",
"Phát hiện mâu thuẫn trong yêu cầu"
],
// Trigger dựa trên ngưỡng
threshold_triggers: [
"Số tiền giao dịch vượt giới hạn cho phép",
"Số lượng hành động trong một session vượt ngưỡng",
"Thời gian xử lý vượt quá timeout cho phép",
"Số lần retry vượt ngưỡng"
],
// Trigger dựa trên hệ thống
system_triggers: [
"API bên thứ ba trả về lỗi không mong đợi",
"Dữ liệu đầu vào không nhất quán với database",
"Phát hiện thay đổi schema hoặc format",
"Rate limit gần đạt ngưỡng"
],
// Trigger dựa trên người dùng
user_triggers: [
"Người dùng thể hiện sự không hài lòng",
"Người dùng hỏi cùng câu hỏi nhiều lần (loop detection)",
"Người dùng sử dụng ngôn ngữ khẩn cấp",
"Người dùng đề cập đến vấn đề pháp lý"
]
};
Approval UI Patterns
Giao diện phê duyệt cần được thiết kế cho tốc độ và độ chính xác. Dưới đây là các pattern phổ biến:
Pattern 1: Inline Approval (Trong chat)
Agent hiển thị thẻ phê duyệt ngay trong cuộc hội thoại. Phù hợp cho ứng dụng chatbot nội bộ nơi người giám sát theo dõi conversation.
Pattern 2: Dashboard Queue
Tất cả approval requests được gom vào một dashboard riêng. Người phê duyệt có thể xử lý hàng loạt. Phù hợp cho team operations xử lý nhiều request mỗi ngày.
Pattern 3: Notification-Based
Agent gửi notification (Slack, email, SMS) đến người phê duyệt phù hợp. Người đó click vào link để xem chi tiết và phê duyệt. Phù hợp cho các hành động không thường xuyên nhưng quan trọng.
Triển khai Approval Queue
// Hệ thống approval queue với routing thông minh
class ApprovalQueue {
constructor(notificationService, storageService) {
this.notifications = notificationService;
this.storage = storageService;
}
async submitForApproval(request) {
// Lưu request vào storage
await this.storage.save("approvals", request);
// Tìm người phê duyệt phù hợp
const approver = await this.findApprover(request);
// Gửi notification
await this.notifications.send(approver, {
title: "Yêu cầu phê duyệt mới",
summary: request.action.description,
urgency: this.calculateUrgency(request),
approve_url: this.generateApproveUrl(request.request_id),
reject_url: this.generateRejectUrl(request.request_id)
});
// Thiết lập timeout
this.scheduleExpiry(request);
return { status: "PENDING", request_id: request.request_id };
}
async findApprover(request) {
// Routing dựa trên loại hành động và số tiền
const rules = [
{
condition: (r) => r.action.amount > 10000000,
approver_role: "finance_manager"
},
{
condition: (r) => r.action.type === "PUBLISH_CONTENT",
approver_role: "content_lead"
},
{
condition: (r) => r.action.type === "DELETE_DATA",
approver_role: "data_admin"
}
];
for (const rule of rules) {
if (rule.condition(request)) {
return await this.storage.findByRole(rule.approver_role);
}
}
return await this.storage.findByRole("default_approver");
}
calculateUrgency(request) {
const hoursUntilExpiry =
(new Date(request.expires_at) - new Date()) / 3600000;
if (hoursUntilExpiry < 1) return "CRITICAL";
if (hoursUntilExpiry < 4) return "HIGH";
if (hoursUntilExpiry < 24) return "MEDIUM";
return "LOW";
}
}
Async Approval Flow
Trong thực tế, người phê duyệt không phải lúc nào cũng có mặt ngay. Hệ thống cần hỗ trợ asynchronous approval flow:
Kiến trúc Async Approval
// Async approval flow với state machine
const approvalStates = {
PENDING: {
transitions: {
APPROVE: "APPROVED",
REJECT: "REJECTED",
MODIFY: "MODIFIED",
ESCALATE: "ESCALATED",
EXPIRE: "EXPIRED"
}
},
APPROVED: {
onEnter: async (request) => {
await executeAction(request.action);
await notifyAgent(request.agent_id, "APPROVED");
await logAudit(request, "APPROVED");
}
},
REJECTED: {
onEnter: async (request) => {
await notifyAgent(request.agent_id, "REJECTED");
await logAudit(request, "REJECTED");
}
},
MODIFIED: {
onEnter: async (request, modifications) => {
const modifiedAction = applyModifications(
request.action, modifications
);
await executeAction(modifiedAction);
await notifyAgent(request.agent_id, "MODIFIED");
await logAudit(request, "MODIFIED", modifications);
}
},
ESCALATED: {
onEnter: async (request) => {
const nextApprover = await findEscalationTarget(request);
await reassignApproval(request, nextApprover);
await logAudit(request, "ESCALATED");
}
},
EXPIRED: {
onEnter: async (request) => {
const defaultAction = request.default_on_expiry;
await handleExpiry(request, defaultAction);
await logAudit(request, "EXPIRED");
}
}
};
Xử lý khi agent đang chờ phê duyệt
Khi agent gửi approval request và đang chờ, có hai chiến lược:
- Blocking: Agent tạm dừng hoàn toàn, chờ đến khi có kết quả. Phù hợp cho workflow tuần tự nơi bước tiếp theo phụ thuộc vào kết quả phê duyệt.
- Non-blocking: Agent tiếp tục xử lý các tác vụ khác trong khi chờ. Phù hợp cho agent xử lý nhiều yêu cầu song song. Agent sẽ quay lại xử lý khi nhận được callback từ approval system.
Audit Trail: Ghi lại mọi quyết định
Audit trail là yêu cầu bắt buộc cho mọi hệ thống HITL trong production. Mỗi quyết định -- dù là tự động hay qua phê duyệt -- đều phải được ghi lại.
Cấu trúc Audit Log
// Schema cho audit log entry
const auditLogEntry = {
// Metadata
log_id: "audit_20260328_001",
timestamp: "2026-03-28T14:30:00+07:00",
// Agent information
agent_id: "order-processing-agent",
agent_version: "2.3.1",
session_id: "sess_abc123",
// Action details
action: {
type: "REFUND_TRANSACTION",
target: "order_ORD-2026-1234",
parameters: {
amount: 5500000,
reason: "defective_product"
}
},
// Decision information
decision: {
type: "HUMAN_APPROVED", // AUTO | HUMAN_APPROVED | HUMAN_REJECTED | ESCALATED
decided_by: "user_nguyen_thi_b",
decided_at: "2026-03-28T14:28:00+07:00",
time_to_decision_ms: 45000,
modifications: null
},
// Context tại thời điểm quyết định
context: {
agent_confidence: 0.87,
routing_reason: "Amount exceeds auto-approve limit",
input_data_hash: "sha256_abc...",
supporting_evidence: ["evidence/img_001.jpg"]
},
// Kết quả thực thi
execution: {
status: "SUCCESS",
executed_at: "2026-03-28T14:30:00+07:00",
result: { refund_id: "REF-2026-5678" },
side_effects: [
"Email confirmation sent to customer",
"Inventory updated"
]
}
};
Truy vấn Audit Trail
Audit trail cần hỗ trợ truy vấn linh hoạt để phục vụ compliance review, incident investigation, và cải thiện hệ thống:
// Các truy vấn audit phổ biến
const auditQueries = {
// Tất cả quyết định của một agent trong 24h qua
recentDecisions: {
agent_id: "order-processing-agent",
timestamp: { $gte: "2026-03-27T14:30:00+07:00" }
},
// Tất cả hành động bị reject
rejectedActions: {
"decision.type": "HUMAN_REJECTED",
timestamp: { $gte: "2026-03-01" }
},
// Hành động có confidence thấp nhưng được approve
lowConfidenceApproved: {
"context.agent_confidence": { $lt: 0.7 },
"decision.type": "HUMAN_APPROVED"
},
// Thời gian phê duyệt trung bình theo loại hành động
avgApprovalTime: {
$group: {
_id: "$action.type",
avg_time: { $avg: "$decision.time_to_decision_ms" }
}
}
};
Ví dụ thực tế: HITL cho các tình huống cụ thể
Tình huống 1: Giao dịch tài chính
Một agent xử lý hoàn tiền cho khách hàng e-commerce. Quy tắc HITL:
- Hoàn tiền duoi 500.000 VND cho sản phẩm lỗi xác nhận bằng ảnh: tự động approve
- Hoàn tiền 500.000 - 5.000.000 VND: cần approval của team lead
- Hoàn tiền trên 5.000.000 VND: cần approval của finance manager
- Khách hàng đã hoàn tiền 3 lần trong 30 ngày: luôn escalate bất kể số tiền
Tình huống 2: Content Publishing
Agent tự động tạo và đăng bài blog. Quy tắc HITL:
- Bài viết dạng cập nhật sản phẩm, confidence trên 95%: tự động publish
- Bài viết có nhắc đến đối thủ cạnh tranh: luôn cần review
- Bài viết chứa số liệu tài chính hoặc tuyên bố pháp lý: luôn cần review từ legal team
- Bài viết dài hơn 2000 từ: cần review từ content lead
Tình huống 3: Xóa dữ liệu
Agent xử lý yêu cầu xóa tài khoản theo GDPR/PDPA. Quy tắc HITL:
- Xóa dữ liệu cá nhân: luôn cần approval, không bao giờ tự động
- Agent chuẩn bị danh sách dữ liệu sẽ bị xóa và ảnh hưởng
- Yêu cầu approval từ data protection officer
- Sau khi approve, agent thực hiện soft delete trước, hard delete sau 30 ngày
Xây dựng Approval Flow với Claude Agent SDK
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
// Định nghĩa tools với approval gates
const tools = [
{
name: "read_customer_data",
description: "Đọc thông tin khách hàng. Không cần approval.",
input_schema: {
type: "object",
properties: {
customer_id: { type: "string" }
},
required: ["customer_id"]
}
},
{
name: "process_refund",
description: "Xử lý hoàn tiền. CẦN APPROVAL nếu số tiền trên 500.000 VND.",
input_schema: {
type: "object",
properties: {
order_id: { type: "string" },
amount: { type: "number" },
reason: { type: "string" }
},
required: ["order_id", "amount", "reason"]
}
}
];
// Approval gate middleware
function requiresApproval(toolName, toolInput) {
const rules = {
process_refund: (input) => input.amount > 500000,
delete_account: () => true, // Luôn cần approval
publish_content: (input) => input.contains_claims === true
};
const rule = rules[toolName];
return rule ? rule(toolInput) : false;
}
// Agent loop với HITL
async function agentWithHITL(userMessage) {
let messages = [{ role: "user", content: userMessage }];
while (true) {
const response = await client.messages.create({
model: "claude-sonnet-4-20250514",
max_tokens: 4096,
tools: tools,
messages: messages
});
if (response.stop_reason === "end_turn") {
return response.content;
}
// Xử lý tool calls
for (const block of response.content) {
if (block.type === "tool_use") {
if (requiresApproval(block.name, block.input)) {
// Tạm dừng và xin phép
const approval = await requestHumanApproval({
tool: block.name,
input: block.input,
reasoning: extractReasoning(response.content)
});
if (approval.status === "REJECTED") {
messages.push({
role: "assistant",
content: response.content
});
messages.push({
role: "user",
content: [{
type: "tool_result",
tool_use_id: block.id,
content: "Hành động bị từ chối bởi người phê duyệt. "
+ "Lý do: " + approval.reason
}]
});
continue;
}
}
// Thực thi tool call
const result = await executeTool(block.name, block.input);
messages.push({
role: "assistant",
content: response.content
});
messages.push({
role: "user",
content: [{
type: "tool_result",
tool_use_id: block.id,
content: JSON.stringify(result)
}]
});
}
}
}
}
Metrics và monitoring cho HITL
Theo dõi hiệu quả của hệ thống HITL qua các metrics quan trọng:
- Approval rate: Tỷ lệ phê duyệt / từ chối. Nếu approval rate quá cao (trên 99%), có thể threshold quá thấp, gây lãng phí thời gian. Nếu quá thấp (duoi 70%), agent cần cải thiện độ chính xác.
- Time to decision: Thời gian trung bình từ khi gửi request đến khi có quyết định. Nếu quá lâu, cần cải thiện notification hoặc tăng số người phê duyệt.
- Escalation rate: Tỷ lệ request bị escalate. Escalation rate cao cho thấy agent gặp nhiều tình huống ngoài khả năng xử lý.
- False positive rate: Tỷ lệ request bị yêu cầu review nhưng thực tế không cần. Giúp tinh chỉnh confidence thresholds.
- Post-approval incidents: Số vụ việc xảy ra sau khi đã approve. Đây là metric quan trọng nhất, phản ánh chất lượng thực sự của quy trình review.
Best practices cho HITL trong production
- Bắt đầu với ngưỡng cao: Khi mới triển khai, yêu cầu approval cho nhiều hành động hơn cần thiết. Sau đó nới lỏng dần dựa trên dữ liệu thực tế.
- Tách biệt approval logic: Đừng hard-code approval rules vào agent code. Sử dụng cấu hình bên ngoài để có thể điều chỉnh mà không cần deploy lại.
- Feedback loop: Dữ liệu từ quyết định của con người nên được dùng để cải thiện agent. Nếu một loại request luôn được approve, xem xét hạ threshold.
- Fallback rõ ràng: Luôn có quy trình xử lý khi không có người phê duyệt (cuối tuần, ngoài giờ). Thường là queue lại hoặc reject với thông báo cho người dùng.
- Test kỹ edge cases: Test các tình huống: approval timeout, người phê duyệt offline, nhiều request cùng lúc, request mâu thuẫn nhau.
- Gradual autonomy: Theo thời gian, tăng dần quyền tự chủ cho agent dựa trên track record. Đây là quá trình xây dựng trust giữa tổ chức và hệ thống AI.
Tổng kết
Human-in-the-Loop không phải là sự thừa nhận rằng AI yếu kém. Ngược lại, đây là biểu hiện của một hệ thống AI trưởng thành, biết giới hạn của mình và biết khi nào cần sự hỗ trợ của con người. Một agent tốt không phải là agent làm mọi thứ tự động, mà là agent biết khi nào nên tự làm, khi nào nên hỏi, và khi nào nên dừng lại. Hãy thiết kế approval gates dựa trên mức độ rủi ro, sử dụng confidence thresholds để routing thông minh, xây dựng audit trail cho mọi quyết định, và liên tục cải thiện dựa trên dữ liệu thực tế.
Bai viet co huu ich khong?
Bản quyền thuộc về tác giả. Vui lòng dẫn nguồn khi chia sẻ.




