Human-in-the-Loop: Khi Nào AI Agent Cần Hỏi Con Người
Posted on: 5/25/2026 2:06:26 PM
Table of contents
- 1. Vì sao "tự chủ hoàn toàn" là một cái bẫy
- 2. In-the-loop, On-the-loop và Out-of-the-loop
- 3. Bốn chiều rủi ro: khi nào cần con người?
- 4. Ngưỡng confidence và bài toán hiệu chỉnh
- 5. Kiến trúc một cổng phê duyệt (approval gate)
- 6. Cài đặt kỹ thuật: tạm dừng bền vững và khôi phục
- 7. Escalation và hàng đợi phê duyệt ở quy mô lớn
- 8. Những cái bẫy ai cũng vấp (oversight under load)
- 9. Góc nhìn Quản lý dự án: HITL là một quyết định quản trị
- 10. Kết luận
Một AI agent có thể đọc cả nghìn dòng log, vạch ra phương án, rồi tự tin nhấn nút "xoá toàn bộ production database" — chỉ vì nó "khá chắc" rằng đó là cách dọn dẹp tốt nhất. Năm 2026, khi agent đã đủ thông minh để hành động thật chứ không chỉ gợi ý, câu hỏi quan trọng nhất không còn là "agent có làm được không" mà là "khi nào thì con người phải đứng giữa agent và nút bấm đó". Human-in-the-Loop (HITL) chính là kiến trúc trả lời câu hỏi này: biến sự giám sát của con người từ một cái phanh tay vội vã thành một quyết định thiết kế có chủ đích.
1. Vì sao "tự chủ hoàn toàn" là một cái bẫy
Làn sóng agent 2024–2025 bị ám ảnh bởi mức độ tự chủ: agent càng ít cần con người càng "xịn". Nhưng đến 2026, các đội triển khai thực tế đã rút ra một bài học đắt giá: tự chủ không phải là mục tiêu, mà là một thanh trượt cần được điều chỉnh theo rủi ro. Những deployment thành công nhất không loại bỏ con người — họ đặt con người vào đúng chỗ.
Vấn đề cốt lõi nằm ở chỗ LLM tự tin một cách đồng đều: nó nói "tôi chắc chắn" với cùng giọng điệu dù đang trả lời đúng hay đang ảo giác (hallucinate). Một agent có thể đúng 95% số lần, nhưng nếu 5% còn lại rơi vào hành động không thể hoàn tác — chuyển tiền, xoá dữ liệu, gửi email cho toàn bộ khách hàng, merge một pull request lên main — thì kỳ vọng toán học của thiệt hại có thể vượt xa toàn bộ giá trị 95% kia mang lại.
⚠️ Nghịch lý của agent giỏi
Agent càng giỏi, con người càng dễ buông lơi giám sát — và đúng lúc đó sai lầm hiếm hoi lại gây hậu quả nặng nhất. Đây gọi là automation bias: chúng ta có xu hướng tin máy một cách phản xạ. HITL được thiết kế tốt phải chống lại chính xu hướng này, chứ không chỉ "thêm một bước xác nhận".
2. In-the-loop, On-the-loop và Out-of-the-loop
"Human-in-the-loop" thường bị dùng như một thuật ngữ chung chung. Thực tế có ba mô hình giám sát khác biệt rõ rệt, và chọn sai mô hình cho một ngữ cảnh là nguồn gốc của hầu hết các sự cố.
| Mô hình | Con người làm gì | Agent chờ? | Phù hợp khi |
|---|---|---|---|
| In-the-loop (HITL) | Phê duyệt / từ chối / chỉnh sửa trước mỗi hành động rủi ro | Có — agent dừng và chờ | Hành động không thể hoàn tác, rủi ro cao |
| On-the-loop (HOTL) | Giám sát thời gian thực, can thiệp khi thấy sai | Không — agent tự chạy | Quy trình nhanh, có thể dừng/rollback |
| Out-of-the-loop | Xem lại nhật ký sau khi agent đã hành động (audit) | Không | Hành động reversible, khối lượng lớn, rủi ro thấp |
Cách hữu ích để định khung là mượn thang đo mức độ tự chủ của ngành xe tự lái: không có hệ thống nào "tự chủ" tuyệt đối, chỉ có các mức tự chủ theo từng loại hành động.
| Mức | Tên | Mô tả |
|---|---|---|
| L1 | Hỗ trợ | AI đề xuất, con người tự tay thực hiện |
| L2 | Phê duyệt từng bước | AI lập kế hoạch, con người duyệt từng hành động |
| L3 | Giám sát (HITL) | AI thực thi, chỉ dừng lại ở các hành động rủi ro cao |
| L4 | On-the-loop | AI tự chạy trong phạm vi, con người có thể can thiệp |
| L5 | Tự chủ + audit | AI tự quyết, con người review hậu kỳ |
💡 Nguyên tắc vàng
Mức tự chủ không gắn với agent, mà gắn với loại hành động. Cùng một agent có thể ở L5 khi gắn nhãn ticket, nhưng phải tụt về L2 khi hoàn tiền cho khách. Thiết kế HITL nghĩa là vẽ ra ma trận "hành động × mức tự chủ", không phải gắn một con số cho cả hệ thống.
3. Bốn chiều rủi ro: khi nào cần con người?
Câu hỏi "hành động này có cần phê duyệt không?" nên được trả lời bằng một hàm rõ ràng trên bốn chiều rủi ro, thay vì cảm tính của lập trình viên:
- Tính bất khả hồi (irreversibility): Có hoàn tác được không? Xoá file có backup khác với
DROP DATABASE. - Bán kính ảnh hưởng (blast radius): Tác động tới bao nhiêu người/bản ghi? Sửa 1 dòng khác với gửi email cho 2 triệu user.
- Phơi nhiễm tuân thủ (compliance exposure): Hành động có tạo nghĩa vụ pháp lý/quy định không? (GDPR, hợp đồng, tài chính)
- Độ tự tin (confidence): Agent chắc chắn tới mức nào về tính đúng đắn?
flowchart TD
A[Agent đề xuất hành động] --> B{Bất khả hồi?}
B -- Không --> C{Blast radius lớn?}
B -- Có --> G[Bắt buộc phê duyệt]
C -- Không --> D{Liên quan tuân thủ?}
C -- Có --> G
D -- Có --> G
D -- Không --> E{Confidence >= ngưỡng?}
E -- Có --> F[Tự động thực thi]
E -- Không --> H[Escalate cho con người]
G --> I[Hàng đợi phê duyệt]
H --> I
style G fill:#e94560,stroke:#fff,color:#fff
style F fill:#4CAF50,stroke:#fff,color:#fff
style I fill:#2c3e50,stroke:#fff,color:#fff
4. Ngưỡng confidence và bài toán hiệu chỉnh
Confidence là chiều "rẻ" nhất để tự động hoá, nhưng cũng nguy hiểm nhất nếu dùng sai. Một thực hành tốt năm 2026 là đặt ngưỡng theo chi phí lỗi của từng loại hành động, không phải một ngưỡng chung:
Ngưỡng khuyến nghị (điểm khởi đầu)
- Hành động bất khả hồi: yêu cầu confidence ≥ 0.85 mới được tự chạy, dưới ngưỡng → con người.
- Hành động hoàn tác được: ngưỡng ≥ 0.70.
- Sau khoảng 30 ngày chạy production, hiệu chỉnh lại ngưỡng dựa trên Expected Calibration Error (ECE) — đo xem "confidence 0.8" của agent có thực sự đúng 80% số lần hay không.
Cạm bẫy lớn nhất: điểm confidence do chính LLM tự báo cáo thường không được hiệu chỉnh (uncalibrated). Một mô hình có thể nói "0.95" cho cả câu trả lời đúng lẫn sai. Vì vậy đừng tin con số thô — hãy đo ECE trên dữ liệu thật, hoặc dùng tín hiệu gián tiếp (self-consistency giữa nhiều lần sinh, độ phân tán của ensemble, verifier model) thay cho lời tự khai của model.
5. Kiến trúc một cổng phê duyệt (approval gate)
Một cổng phê duyệt production cần đủ bốn thành phần — thiếu bất kỳ phần nào đều dẫn tới lỗi:
sequenceDiagram
participant Ag as Agent
participant Gate as Cổng phê duyệt
participant Q as Hàng đợi + State Store
participant H as Người phê duyệt
Ag->>Gate: Đề xuất hành động + lý do
Gate->>Q: Tạm dừng & lưu trạng thái (checkpoint)
Q->>H: Thông báo (Slack/email/UI)
Note over H: Có thể mất vài phút
tới vài ngày
H->>Q: Duyệt / Từ chối / Chỉnh sửa
Q->>Gate: Khôi phục từ checkpoint
Gate->>Ag: Tiếp tục hoặc huỷ
- Cơ chế tạm dừng (interrupt): dừng agent trước hành động bị gắn cờ, mà không mất ngữ cảnh.
- Hệ thống thông báo: đẩy yêu cầu tới đúng người (định tuyến theo loại/rủi ro).
- Giao diện review: hiển thị hành động đề xuất kèm lý do (reasoning) của agent — người duyệt cần đủ ngữ cảnh để không "bấm bừa".
- Cơ chế khôi phục (resume): tiếp tục, sửa đổi rồi tiếp tục, hoặc huỷ — từ đúng điểm đã dừng.
6. Cài đặt kỹ thuật: tạm dừng bền vững và khôi phục
Thử thách kỹ thuật cốt lõi: agent có thể phải chờ phê duyệt hàng giờ, hàng ngày. Bạn không thể giữ một process sống và một context window mở suốt thời gian đó. Lời giải là state persistence + durable execution.
LangGraph: interrupt() và checkpointer
Trong LangGraph — nền tảng phổ biến cho agentic workflow 2026 — HITL được hiện thực bằng interrupt(): hàm này tạm dừng đồ thị tại một node, lưu toàn bộ state vào checkpointer, và chỉ khôi phục khi nhận được phản hồi của con người. Quan trọng: nó không cần khởi động lại workflow — đồ thị tiếp tục từ đúng checkpoint đã dừng.
from langgraph.types import interrupt, Command
def approval_node(state: State):
# Agent dừng tại đây, state được lưu vào checkpointer
decision = interrupt({
"action": "transfer_funds",
"amount": state["amount"],
"to": state["recipient"],
"reasoning": state["agent_reasoning"], # ngữ cảnh cho người duyệt
})
if decision["approved"]:
return Command(goto="execute")
return Command(goto="cancel")
# Khi con người trả lời (có thể vài ngày sau), khôi phục từ checkpoint:
graph.invoke(
Command(resume={"approved": True}),
config={"configurable": {"thread_id": "txn-9821"}},
)
Vì state nằm ở checkpointer (Postgres/Redis...), bạn còn được thêm một khả năng mạnh: time-travel — tua ngược về một bước chẩn đoán trước đó để agent thử một giả thuyết khác, mà không mất lịch sử hội thoại.
Temporal: phê duyệt bằng signal, chờ vô hạn không tốn compute
Với workflow chạy lâu, Temporal (và Semantic Kernel) dùng mô hình signal-based. Workflow có thể wait_condition chờ phê duyệt hàng giờ, hàng ngày, hoặc vô thời hạn — mà không tiêu tốn tài nguyên compute trong lúc chờ, vì trạng thái được durable hoá và "đánh thức" khi có signal.
@workflow.defn
class AgentWorkflow:
def __init__(self):
self._approved: bool | None = None
@workflow.signal
def approve(self, decision: bool):
self._approved = decision
@workflow.run
async def run(self, action: Action):
plan = await workflow.execute_activity(plan_action, action,
start_to_close_timeout=TIMEOUT)
if plan.risk == "high":
# Chờ con người -- có thể vài ngày, không tốn compute
await workflow.wait_condition(lambda: self._approved is not None)
if not self._approved:
return "cancelled"
return await workflow.execute_activity(execute_action, plan,
start_to_close_timeout=TIMEOUT)
💡 Mẹo triển khai
Luôn đặt timeout cho chính bước chờ phê duyệt. Một hành động "chờ mãi" sẽ kẹt hàng đợi và làm hỏng SLA. Hết hạn → mặc định an toàn (huỷ/escalate lên cấp cao hơn), không bao giờ mặc định "tự động duyệt".
7. Escalation và hàng đợi phê duyệt ở quy mô lớn
Khi số lượng yêu cầu phê duyệt tăng, một người không thể xử lý hết. Mẫu escalation định tuyến hành động lên các cấp thẩm quyền cao dần — hoặc tới chuyên gia theo lĩnh vực — dựa trên phân loại rủi ro và điểm confidence.
flowchart LR
A[Yêu cầu phê duyệt] --> B{Phân loại rủi ro}
B -- Thấp --> C[Trực ban L1
SLA: phút]
B -- Trung bình --> D[Chuyên gia lĩnh vực
SLA: giờ]
B -- Cao / tuân thủ --> E[Quản lý + Compliance
SLA: ngày]
C --> F[Quyết định + ghi audit]
D --> F
E --> F
style E fill:#e94560,stroke:#fff,color:#fff
style F fill:#2c3e50,stroke:#fff,color:#fff
8. Những cái bẫy ai cũng vấp (oversight under load)
HITL thất bại không phải vì thiếu công nghệ, mà vì yếu tố con người dưới áp lực. Đây là những lỗi mô hình phổ biến nhất:
⚠️ Bốn cái bẫy giết chết HITL
- Mệt mỏi cảnh báo (alert fatigue): quá nhiều yêu cầu phê duyệt khiến người duyệt bấm "Approve" theo phản xạ. Giải pháp: lọc gắt bằng 4 chiều rủi ro để chỉ những gì thực sự cần mới tới tay con người.
- Đóng dấu cao su (rubber-stamping): người duyệt không có đủ ngữ cảnh nên duyệt cho xong. Giải pháp: giao diện review phải hiển thị reasoning + tác động dự kiến.
- Thiên kiến tự động hoá (automation bias): tin máy một cách phản xạ. Giải pháp: thỉnh thoảng chèn "kiểm tra ngược" và đo tỷ lệ con người phản đối agent.
- Giám sát quá tải (oversight under load): một người gánh hàng trăm quyết định/giờ thì không còn là "giám sát" thực chất. Giải pháp: giới hạn tải bằng SLA + escalation, đo throughput của người duyệt như một tài nguyên có hạn.
9. Góc nhìn Quản lý dự án: HITL là một quyết định quản trị
HITL không chỉ là vấn đề kỹ thuật — nó là một khế ước quản trị. Khi đưa agent vào quy trình, đội ngũ cần trả lời rõ ràng:
- Ai phê duyệt cái gì? Lập ma trận RACI cho từng loại hành động của agent, y như với một thành viên mới trong nhóm.
- Audit trail bất biến: mọi hành động (tự động hay được duyệt) phải để lại dấu vết: ai/cái gì quyết định, dựa trên reasoning nào, lúc nào. Đây là nền tảng cho tuân thủ và cho việc hậu kiểm.
- Lộ trình tăng tự chủ dần (progressive autonomy): bắt đầu bằng "phê duyệt mọi thứ", rồi nới quyền tự chủ theo từng loại hành động khi agent tích luỹ được "lý lịch tin cậy" qua dữ liệu thật.
💡 Khung tư duy cho Tech Lead / PM
Hãy coi agent như một nhân sự junior cực nhanh nhưng thiếu phán đoán bối cảnh. Bạn không cho junior mới quyền xoá database ngày đầu tiên; bạn cũng review PR của họ kỹ hơn ở giai đoạn đầu rồi nới dần. HITL chính là phiên bản có cấu trúc của quá trình "xây dựng niềm tin" đó — chỉ khác là nó được mã hoá thành ngưỡng, hàng đợi và audit log.
10. Kết luận
Năm 2026, lợi thế cạnh tranh không thuộc về đội nào "loại bỏ con người nhanh nhất", mà thuộc về đội đặt con người vào đúng chỗ với chi phí giám sát thấp nhất. Human-in-the-Loop trưởng thành nghĩa là:
- Định tuyến hành động qua bốn chiều rủi ro, không phải cảm tính.
- Đặt ngưỡng confidence theo chi phí lỗi và hiệu chỉnh bằng ECE trên dữ liệu thật.
- Dùng interrupt + durable execution (LangGraph, Temporal) để chờ phê duyệt mà không đốt tài nguyên.
- Thiết kế chống lại alert fatigue và automation bias — vì HITL hỏng ở con người trước khi hỏng ở code.
- Quản trị bằng RACI, audit trail và progressive autonomy.
Agent giỏi nhất không phải agent tự chủ nhất, mà là agent biết khi nào nên dừng lại và hỏi.
Nguồn tham khảo
- Anthropic — Effective context engineering for AI agents
- MyEngineeringPath — Human-in-the-Loop Patterns for AI Agents (2026)
- Abstract Algorithms — HITL Workflows with LangGraph: Interrupts, Approvals, Async
- Galileo — How to Build Human-in-the-Loop Oversight for AI Agents
- CallSphere — AI Agent Human-in-the-Loop Patterns for Critical Decisions
- Massimo Mistretta — Human Oversight Under Load in the Age of AI Agents
Small Language Model: Mô Hình Nhỏ Mới Là Tương Lai Của AI Agent
Spec-Driven Development: Khi Đặc Tả Trở Thành Source Code
Disclaimer: The opinions expressed in this blog are solely my own and do not reflect the views or opinions of my employer or any affiliated organizations. The content provided is for informational and educational purposes only and should not be taken as professional advice. While I strive to provide accurate and up-to-date information, I make no warranties or guarantees about the completeness, reliability, or accuracy of the content. Readers are encouraged to verify the information and seek independent advice as needed. I disclaim any liability for decisions or actions taken based on the content of this blog.