AI编程新工具!使用 LangGraph 构建复杂工作流
我们都知道,现实世界是复杂的,有可能会遇到很多非线性的决策,即使在一个垂直领域里面,也有可能需要考虑很多条件。
还有一种情况就是,我们有些任务希望在本地运行,但是本地只能跑一些小模型,有可能是一些专用的领域模型,或者,有时候我们希望组合这些小模型的能力来完成复杂的任务。
这个时候,小编觉得 LangGraph 是一个很好的解决问题的工具。
LangGraph 是 LangChain 下面开源的一个工具,它将有向图(Directed Graph)的概念引入到了由大语言模型(LLM)驱动的 agent 工作流中,我们可以把它想象为:
“LangChain + 状态 + 网络图可视化”的组合。
核心概念
状态图(State Graph)
LangGraph 的基础是“状态图”,它由节点和有向边组成。每条边代表在当前状态下模型可能进入的下一步。这种设计非常适合构建:
- 多轮对话系统
- 多 agent 协同系统
- 工作流(例如:RAG 检索增强生成、问答流程、数据整理流程)
- 异常处理(如重试机制、fallback 分支)
- 模型自我反思(Self-Reflection)
节点
每个节点是一个“函数”或“步骤”,它接受当前状态作为输入,返回新的状态。这些节点可以是:
- 普通的 Python 函数
- LangChain agent
- 工具函数
- 子图(也称为复合节点)
边(Transitions)
你可以为每个节点定义条件,以决定下一个状态应该指向哪个节点。这使得你可以根据模型的输出或状态的某些条件构建复杂的分支逻辑。
状态(State)
LangGraph 在每次执行图的过程中,都会维护一个“状态字典”,这个字典在节点间传递。你可以把它理解为一个上下文对象,记录了执行流程中的所有数据。
循环与回退(Loops and Retry)
LangGraph 支持在图中引入循环结构。你可以定义最大循环次数、防止死循环,并实现反思机制(如 ReAct 模型的 retry 机制)。
可视化
LangGraph 有内置的可视化功能,可以生成完整的 DOT 图,或通过网页交互式展示图结构。这对于调试大型工作流非常有帮助。
典型案例
- 多 agent 协同: 比如一个写作 agent + 一个检索 agent + 一个审阅 agent 协作完成任务。
- 自我反思 agent: 模型先输出草稿,再调用自己的校验器 agent 来判断是否需要修正。
- 嵌套图(Subgraph): 在主图中插入另一个图,使流程更模块化。
- LangChain + LangGraph 联合使用: 你可以在 LangChain 中嵌入 LangGraph,或反过来在 LangGraph 中调用 LangChain 工具链。
优点总结
- 模块化: 每个节点都是独立的,可复用。
- 流程清晰: 图结构使控制流可视、可调试。
- 强扩展性: 支持条件跳转、循环、反思、多 agent。
- 无框架依赖: 虽然是 LangChain 团队开发,但你完全可以脱离 LangChain 使用它。
后面我会通过 LangChain 一步一步搭建一个企业级的工作流。