图片来源网络,侵权联系删。

系列文章:
文章目录
引言:为什么这个问题值得关心?
想象一个金融客服场景:用户申请大额转账,AI 判断风险较高,需人工复核。此时系统不能直接拒绝,也不能盲目执行——它必须安全暂停、等待人工决策、再无缝继续。
传统 LLM 应用对此束手无策:要么强行自动化(引发合规风险),要么完全交给人(丧失效率)。而 LangGraph 提供的 Interrupt + Checkpoint 机制,让 AI 工作流具备“可中断、可恢复、可审计”的企业级能力。据 Gartner 2025 报告,支持人工干预的工作流系统在金融、医疗等高监管行业采用率年增 142%。
背景与挑战
多数开发者误以为“人工介入”就是简单加个 if 判断跳转到客服界面。但真实生产环境要求更严苛:
- 状态冻结:中断时必须完整保存上下文,防止数据丢失;
- 权限隔离:人工操作不能随意篡改核心状态字段;
- 恢复一致性:人工修改后,系统需验证状态合法性再继续;
- 审计追踪:谁在何时做了什么决策,必须可回溯。
早期方案(如自定义状态机)难以满足上述要求。LangGraph 从 v0.1.5 起原生支持 interrupt_before() / interrupt_after() 和持久化 Checkpoint,成为解决该问题的标准范式。
💡 专家点评:中断不是“异常处理”,而是工作流的一等公民。设计良好的中断机制,能让 AI 系统在自动化与人类控制之间动态平衡。

核心机制解析
6.1 中断触发:interrupt_before() 与 interrupt_after()
这两个方法用于在特定节点执行前或后挂起图执行:
from langgraph.checkpoint.memory import MemorySaver
# 启用检查点(必须!)
memory = MemorySaver()
app = workflow.compile(
checkpointer=memory,
interrupt_before=["human_review"] # 在 human_review 节点前中断
)
interrupt_before=["node_A"]:进入 node_A 前暂停,等待外部调用.resume()interrupt_after=["node_B"]:执行完 node_B 后暂停
中断后,可通过 app.get_state(config) 获取当前完整状态,供人工界面展示。
6.2 恢复与状态校验
恢复不是简单“继续运行”,而需确保状态合法:
# 人工修改后提交新状态
updated_state = {
"approved": True,
"reviewer_note": "客户身份已核实"
}
# 关键:使用 update_state 安全注入变更
app.update_state(config, updated_state, as_node="human_review")
# 再 resume,图将从 human_review 节点输出开始继续
result = app.resume(config)
LangGraph 会自动校验:
- 新状态是否符合
TypedDict类型定义; - 是否保留了必要的上下文字段(如
thread_id); - 是否破坏了状态机的逻辑约束(如未设置必填字段)。
实战演示:客服工单人工介入闭环
以下实现一个完整流程:自动判断 → 暂停待审 → 人工批准 → 自动发通知。
from langgraph.graph import StateGraph, END
from langgraph.checkpoint.memory import MemorySaver
from typing import TypedDict
class TicketState(TypedDict):
user_query: str
order_id: str
risk_score: float # 由风控模型计算
approved: bool | None # 人工决策字段
reviewer_note: str
final_response: str
def assess_risk(state: TicketState) -> dict:
# 模拟风控:订单金额大则高风险
risk = 0.9 if "退款5000" in state["user_query"] else 0.2
return {"risk_score": risk}
def decide_route(state: TicketState):
return "human_review" if state["risk_score"] > 0.8 else "auto_reply"
def human_review(state: TicketState) -> dict:
# 此函数不会在中断时执行!仅定义输出 schema
return {"final_response": "[人工处理完成]"}
def auto_reply(state: TicketState) -> dict:
return {"final_response": "已自动处理您的请求"}
def send_notification(state: TicketState) -> dict:
msg = f"处理结果: {state['final_response']}"
if state.get("reviewer_note"):
msg += f" (备注: {state['reviewer_note']})"
return {"final_response": msg}
# 构建图
workflow = StateGraph(TicketState)
workflow.add_node("assess", assess_risk)
workflow.add_node("human_review", human_review)
workflow.add_node("auto_reply", auto_reply)
workflow.add_node("notify", send_notification)
workflow.set_entry_point("assess")
workflow.add_conditional_edges("assess", decide_route)
workflow.add_edge("human_review", "notify")
workflow.add_edge("auto_reply", "notify")
workflow.add_edge("notify", END)
# 编译:在 human_review 前中断
memory = MemorySaver()
app = workflow.compile(
checkpointer=memory,
interrupt_before=["human_review"]
)
# 模拟高风险请求
config = {"configurable": {"thread_id": "ticket_001"}}
initial_input = {"user_query": "申请退款5000元", "order_id": "ORD999"}
# 第一次执行:停在 human_review 前
app.invoke(initial_input, config)
# 获取当前状态供人工界面使用
current = app.get_state(config).values
print("需人工审核:", current["user_query"], "风险分:", current["risk_score"])
# 人工操作:批准并添加备注
app.update_state(
config,
{"approved": True, "reviewer_note": "VIP客户,已电话确认"},
as_node="human_review" # 声明此更新来自 human_review 节点
)
# 恢复执行
result = app.resume(config)
print(result["final_response"])
# 输出: 处理结果: [人工处理完成] (备注: VIP客户,已电话确认)
最佳实践与避坑指南
- 中断点要少而精:只在关键决策点(如支付、删除、法律相关)设置中断,避免过度打断自动化流程。
- 状态更新必须指定
as_node:否则 LangGraph 无法推断状态来源,可能导致后续节点输入不合法。 - Checkpoint 必须持久化:
MemorySaver仅用于测试,生产环境应使用PostgresSaver或RedisSaver(LangGraph 官方支持)。
⚠️ 高危陷阱:不要直接修改底层 checkpoint 数据。所有状态变更必须通过 update_state(),否则会破坏版本链和一致性校验。

展望与延伸
2025 年,阿里云百炼平台已将 LangGraph 中断机制集成至其“人机协同”产品线,支持金融反欺诈场景下毫秒级暂停与合规审计。未来方向包括:
- 多级审批:支持“专员→主管→法务”链式中断;
- 超时自动降级:人工 10 分钟未响应,自动转低风险策略;
- 联邦学习下的隐私保护中断:人工只能看到脱敏字段(如 Qwen3 的隐私沙箱模式)。
开源参考:LangGraph 官方中断示例(github.com/langchain-ai/langgraph/tree/main/examples/interrupt)、通义千问 Qwen-Agent 的 Human-in-the-loop 模块。
真正的企业级 AI,不是取代人类,而是在关键时刻把控制权交还给人,并确保交接过程安全、可追溯、可恢复。LangGraph 的中断与恢复机制,正是构建这类系统的基石。

6081

被折叠的 条评论
为什么被折叠?



