用途
该技能面向使用 LangGraph 构建工作流的场景,帮助选择并实现合适的执行控制方式,包括工作流与智能体模式的选择、并行执行、人工介入中断和流式输出。
工作流与智能体
资料给出了两者的对比:工作流的控制流是固定、预先确定的,可预测性高,适合顺序任务;智能体由模型动态驱动决策,可预测性低,适合开放式问题。示例中给出了 ReAct 智能体模式:模型决定何时调用工具,循环直到结束;工具节点执行最后一条 AI 消息中的工具调用,条件边根据是否存在 tool_calls 决定回到工具节点还是结束。
Send API 并行执行
使用 Send API 将任务扇出到并行 worker,并在后续节点聚合并汇总结果。要点是并行 worker 写入的列表字段必须使用 reducer 进行累加(Python 用 Annotated[list, operator.add],TypeScript 用 ReducedValue 并配置 reducer),否则结果不会累积。
中断与人在回路
资料区分三种方式:
- interrupt()(推荐):写在节点代码内部,用于人在回路和条件性暂停,使用 Command(resume=value) 恢复。
- interrupt_before:在编译时设置,仅用于调试,不用于人在回路,用 invoke(None, config) 恢复。
- interrupt_after:在编译时设置,同样仅用于调试。
示例展示在节点中调用 interrupt 携带 action、data、question 等信息,通过结果中的 interrupt 判断是否暂停,再用 Command(resume="approve") 恢复;编译时需要 checkpointer,调用时需要带 thread_id 的 config。
流式输出
支持四种模式:values(每步后的完整状态)、updates(状态增量)、messages(LLM token 与元数据)、custom(用户自定义数据)。custom 模式需在节点内使用 stream writer 发送数据,例如 get_stream_writer() / getWriter(),直接 print 不会被流式输出。多模式可以以列表形式一次性指定。
限制与注意事项
资料明确列出不能配置或容易出错的点:没有 checkpointer 无法使用 interrupt;没有 thread_id 无法恢复;Send API 的消息传递模型不可更改;中断恢复必须使用 Command,直接传普通对象会重新启动图;智能体循环应增加最大迭代次数检查以避免无限循环;自定义流数据必须通过 stream writer 发送。
适用场景
需要并行 map-reduce 处理的工作流、需要人工审核暂停/恢复的流程、需要实时进度或 token 输出的聊天界面等。
语言支持
上述能力均提供 Python 与 TypeScript 两套示例代码。