人机回环:Agent 关键操作的人工确认设计
Agent 再聪明,也有失控的时候。 如果一个 Agent 说:“我要删掉生产环境数据库了。” 你敢让它自动执行吗? 这就是 Human-in-the-loop (HITL) 的必要性。 在关键决策点,必须把控制权交还给人类。
1. 为什么需要 HITL?
1.1 安全性 (Safety)
防止 Agent 执行高危操作(rm -rf, delete database, transfer money)。 这是 Agent 落地的红线。
1.2 准确性 (Accuracy)
Agent 可能对需求理解有偏差。 让用户在中途确认一下理解是否正确,避免做无用功。
1.3 合规性 (Compliance)
有些操作必须有人类签字(如财务审批)。
2. 交互模式设计
2.1 阻塞式确认 (Blocking Confirmation)
Agent 暂停执行,等待用户输入 Yes/No。
- Prompt: "I plan to delete user 'Alice'. Proceed? (y/n)"
- UI: 弹出一个确认框。
2.2 修改式确认 (Editable Confirmation)
允许用户修改 Agent 的计划。
- Prompt: "I plan to email: 'Hello Alice...'. Is this okay?"
- User: "Change 'Hello' to 'Dear'."
- Agent: "Updated. Sending now."
2.3 持续反馈 (Continuous Feedback)
Agent 每做一步,都输出 Observation。 用户随时可以插嘴:“停!别这么做。”(Interrupt)。
3. LangGraph 中的 HITL
LangGraph 完美支持 HITL。 你可以在图中插入一个 Human Node。 当流程走到这个节点时,它会暂停,并将状态(State)暴露给前端。 前端拿到状态后,展示给用户。 用户操作后,更新状态,并发送 Resume 信号,继续执行。
3.1 代码示例
python
def human_review_node(state):
# This node does nothing but wait for external input
pass
workflow = StateGraph(AgentState)
workflow.add_node("agent", agent_node)
workflow.add_node("human", human_review_node)
# 定义条件边
workflow.add_conditional_edges(
"agent",
should_continue,
{
"continue": "action",
"review": "human", # 需要审核
"end": END
}
)
# 编译
app = workflow.compile(interrupt_before=["human"]) # 在进入 human 节点前中断4. 最佳实践
4.1 明确边界
哪些操作需要审核?哪些不需要?
- Read-only: 不需要(查天气)。
- Write: 需要(发邮件,改代码)。
4.2 提供上下文
让用户知道 Agent 为什么要这么做。 "因为上一步查询失败,所以我打算尝试这个新方法..."
4.3 超时处理
如果用户一直不理 Agent,怎么办?
- Timeout: 自动取消任务。
- Retry: 发送提醒。
HITL 不是对 Agent 的不信任,而是人机协作的最高境界。 它让 Agent 成为人类的Copilot,而不是 Autopilot。 只有当人类在环中,Agent 才能真正融入人类的工作流,成为可靠的伙伴。