人工介入:在高风险动作前暂停、审批、恢复并留痕
Human-in-the-loop(HITL)让 Agent 在关键节点暂停,等待人工确认/补充信息后再继续。它适合不可逆、涉及资金/权限/隐私、或模型置信度低的动作。HITL 不是“所有步骤都让人点一下”,那会造成审批疲劳并拖慢流程;要按风险分级,只拦住真正需要负责人的决策。
实现方式:工具层审批(执行前检查)、工作流中断/恢复(LangGraph interrupt)、任务队列 + 人工处理、以及输出后的人工复核。关键是保存上下文、支持超时/拒绝、记录审批人和理由,并能在恢复后继续执行。
# 工具层审批:高风险动作执行前暂停
HIGH_RISK = {"send_email", "delete_record", "run_shell", "transfer_funds"}
def execute_with_approval(tool, args, user, context):
if tool.name in HIGH_RISK:
ticket = create_approval(
user=user, tool=tool.name, args=redact(args),
context=context, expires_in="30m",
)
return {"status": "pending_approval", "ticket_id": ticket.id}
return tool.run(**args)
# LangGraph:中断后由人工恢复
from langgraph.types import interrupt, Command
def review_node(state):
decision = interrupt({"question": "是否发送这封邮件?",
"draft": state["draft"]})
if decision["approved"]:
return {"status": "approved"}
return {"status": "rejected", "reason": decision.get("reason")}
# 恢复:graph.invoke(Command(resume={"approved": True}), config)
审批设计:
- 风险分级:只拦高风险,低风险自动执行
- 展示上下文:Agent 想做什么、参数、影响范围、可回滚性
- 超时默认拒绝(fail closed)
- 审批人、时间、理由、结果写审计日志
- 拒绝后给出可执行的下一步(修改/取消/转人工)
合上页面,先回答,再展开对照。
小程序版
微信扫码,随时查命令