基础概念
什么是 LangGraph?
深入了解 LangGraph 的核心概念、设计理念和与传统链式结构的区别
📚 学习目标
学完这篇文章后,你将能够:
- 理解 LangGraph 的定义和核心理念
- 辨析图结构与链式结构的区别
- 掌握 LangGraph 的四大核心构建块(状态、节点、边、图)
- 初步了解 LangGraph 应用的执行流程
前置知识
在开始学习之前,建议先阅读:
你需要了解:
- 基本的 JavaScript/TypeScript 语法
- 对 Mermaid 图表有基本阅读能力
1️⃣ LangGraph 的定义
LangGraph 是一个用于构建智能代理(Agent)应用的 JavaScript/TypeScript 框架。它将 LLM 应用的控制流程建模为图结构,其中:
- 节点(Nodes) 代表不同的功能组件
- 边(Edges) 代表信息流和控制流
- 状态(State) 代表应用的当前快照
[!TIP] 核心理念:LangGraph 的核心理念是让 LLM 能够自主决定应用的执行路径,而不是按照预定义的固定步骤执行。
2️⃣ 图结构 vs 链式结构
让我们通过可视化图表来理解两种架构的区别:
关键特性对比
| 特性 | 链式结构 (Chain) | 图结构 (Graph) |
|---|---|---|
| 特点 | ✅ 高度可靠和可预测 ✅ 易于理解和调试 ❌ 执行路径固定 ❌ 缺乏动态决策能力 | ✅ 动态控制流 ✅ LLM 自主决策 ✅ 支持复杂交互 ⚠️ 需要更多的设计考虑 |
| 适用场景 | 简单的数据处理流程 固定的业务逻辑 | 智能代理系统 复杂的多步骤任务 需要动态决策的应用 |
3️⃣ LangGraph 的核心构建块
理解 LangGraph 需要掌握四个核心概念:
1. 状态(State)
状态是贯穿整个图执行过程的数据容器。所有节点都可以读取和修改状态。
// 使用 Annotation 定义状态结构
const StateAnnotation = Annotation.Root({
messages: Annotation<BaseMessage[]>({
reducer: messagesStateReducer,
default: () => [],
}),
step: Annotation<number>({
default: () => 0,
}),
});2. 节点(Node)
节点是执行具体逻辑的函数。每个节点接收当前状态,返回状态更新(部分更新)。
const analyzeInput = (state: typeof StateAnnotation.State) => {
return {
step: state.step + 1,
};
};3. 边(Edge)
边定义了节点之间的连接关系:
- 普通边:
addEdge('nodeA', 'nodeB') - 条件边:
addConditionalEdges('nodeA', routeFunction)
4. 图(Graph)
图是将状态、节点、边组合在一起的容器,必须经过 .compile() 才能执行。
const graph = new StateGraph(StateAnnotation)
.addNode('analyze', analyzeInput)
.addEdge(START, 'analyze')
.compile();4️⃣ 执行流程可视化
💡 练习题
-
选择题:LangGraph 中的节点函数通常返回什么?
- A. 完整的全新状态对象
- B. 部分状态更新对象
- C. 布尔值
- D. 空值
-
分析题:在上面的“执行流程可视化”流程图中,状态是在哪里被维护的?这与无状态的 API 调用有什么本质区别?
📚 参考资源
官方文档
✅ 总结
本章要点:
- LangGraph 将应用流程建模为图,提供了比传统链式结构更高的灵活性。
- 核心构建块包括状态(数据)、节点(逻辑)、边(流转)和图(容器)。
- 状态在整个图的执行过程中被持久化维护,这是实现多轮对话和复杂逻辑的关键。
下一步:在下一篇文章中,我们将详细拆解《核心概念》,深入每个组件的具体用法。
登录以继续阅读
解锁完整文档、代码示例及更多高级功能。