本章介绍: LangGraph 框架基础
开篇寄语
欢迎来到 LangGraph 学习之旅的第一站。作为一位见证了从专家系统到深度学习,再到大语言模型变革的研究者,我深知选择正确的工具框架对于构建成功的 AI 系统至关重要。LangGraph 不仅仅是又一个 Agent 框架,它代表了我们对可控性、可观测性和生产级质量的全新追求。
本章在课程中的定位
在 Module 0 中,你已经掌握了 Python 基础、工程实践和 AI 工具生态。现在,是时候进入 LangGraph 的核心世界了。
本章核心目标
完成本章学习后,你将能够:
- 理解框架选择的本质 - 为什么 LangGraph 而不是其他框架?
- 掌握 LangChain 生态 - LangGraph 的基础设施
- 构建第一个图应用 - 从理论到实践
- 建立系统性认知 - 理解图、节点、状态的深层含义
为什么 Module 1 如此重要?
这一章不仅是技术学习,更是思维模式的转变:
传统思维: 线性调用链 → LLM → 工具 → 输出
图思维: 状态驱动 → 节点网络 → 条件路由 → 可控循环关键洞察:
LangGraph 的本质是将 Agent 的执行过程从"黑盒"变为"白盒",从"希望它工作"变为"确保它按预期工作"。这是从实验室原型到生产系统的根本转变。
本章内容结构
本章采用从对比到实践的渐进式学习路径:
1.1 LangGraph 与其它框架对比
核心问题: 在众多 Agent 框架中,为什么选择 LangGraph?
这一节将带你深入分析主流框架:
对比维度
| 框架特性 | LangGraph | CrewAI | AutoGen | Swarm |
|---|---|---|---|---|
| 架构理念 | 图状态机 | 角色协作 | 对话编排 | 轻量协调 |
| 状态管理 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| 可控性 | 精确控制 | 中等 | 自主性强 | 简单 |
| 生产就绪 | ✅ 完全 | ⚠️ 部分 | ✅ 企业级 | ❌ 实验性 |
| 学习曲线 | 陡峭但值得 | 平缓 | 中等 | 极简 |
关键决策点
选择 LangGraph 的场景:
- ✅ 需要精确控制执行流程
- ✅ 复杂的条件分支和循环
- ✅ 生产环境的可靠性要求
- ✅ 需要 Human-in-the-Loop
- ✅ 可观测性和调试能力
其他框架更适合:
- CrewAI: 快速原型,角色分工明确的简单场景
- AutoGen: 代码生成,Microsoft 生态系统
- Swarm: 实验性项目,最小化实现
关键洞察:
框架选择不是"最好",而是"最合适"。LangGraph 的优势在于将灵活性和可控性结合,这在生产环境中至关重要。
学习重点:
- 理解图状态机 vs 线性执行的本质差异
- 认识到可控性在生产环境中的价值
- 建立框架选择的决策思维
时间投入: 1-2 小时
1.2 LangGraph 上手案例
核心问题: 如何快速构建第一个 LangGraph 应用?
这一节通过一个情绪生成器案例,让你立即动手实践:
案例架构
用户输入: "Hi, this is Lance."
↓
[START]
↓
[Node 1: add_i_am] 添加 "I am"
↓
[条件边: decide_mood] 随机选择
↓
┌─────────┐
↓ ↓
[happy] [sad]
↓ ↓
└────┬────┘
↓
[END]
↓
输出: "Hi, this is Lance. I am happy!"你将学到
图的基本组成
- State: 数据容器
- Node: 执行单元
- Edge: 流程控制
第一次编码体验
pythonfrom langgraph.graph import StateGraph, START, END # 定义状态 class State(TypedDict): graph_state: str # 定义节点 def node_1(state): return {"graph_state": state['graph_state'] + " I am"} # 构建图 graph = StateGraph(State) graph.add_node("node_1", node_1) graph.add_edge(START, "node_1")条件路由
pythondef decide_mood(state) -> Literal["happy", "sad"]: return random.choice(["happy", "sad"]) graph.add_conditional_edges("node_1", decide_mood)
关键洞察:
图不是静态的流程图,而是动态的执行引擎。每个节点都是状态转换函数:
State → State。
学习重点:
- 理解 StateGraph 的构建模式
- 掌握条件边的使用方法
- 建立"状态驱动"的思维
时间投入: 2-3 小时(含动手实践)
1.3 LangChain 快速回顾
核心问题: LangGraph 依赖于 LangChain,我需要了解哪些基础?
这一节是知识桥梁,回顾 LangChain 的核心组件:
必须掌握的概念
1. Chat Models (聊天模型)
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4", temperature=0.7)
response = llm.invoke("Hello, world!")为什么重要: LangGraph 的节点通常会调用 LLM 生成响应。
2. Messages (消息类型)
from langchain_core.messages import HumanMessage, AIMessage, SystemMessage
messages = [
SystemMessage(content="You are a helpful assistant"),
HumanMessage(content="What is LangGraph?"),
AIMessage(content="LangGraph is...")
]为什么重要: LangGraph 的状态经常包含 messages 字段。
3. Tools (工具调用)
from langchain_core.tools import tool
@tool
def multiply(a: int, b: int) -> int:
"""Multiply two numbers."""
return a * b
tools = [multiply]
llm_with_tools = llm.bind_tools(tools)为什么重要: Agent 通过工具与外部世界交互。
4. Prompts (提示模板)
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "You are a {role}"),
("human", "{input}")
])为什么重要: 结构化的提示是 Agent 行为的基础。
关键洞察:
LangChain 提供"零件",LangGraph 提供"组装图纸"。理解 LangChain 组件是使用 LangGraph 的前提。
学习重点:
- 熟悉 Chat Models 的基本用法
- 理解 Messages 的结构
- 掌握 Tools 的定义和绑定
时间投入: 2-3 小时
1.4 LangGraph 基础入门
核心问题: 如何系统性地理解和使用 LangGraph?
这是本章的核心章节,系统讲解 LangGraph 的基础知识:
核心概念深度解析
1. 图的本质
LangGraph 中的图是一个有向图 (Directed Graph):
- 节点 (Nodes): 执行具体操作
- 边 (Edges): 定义执行顺序
- 状态 (State): 在节点间流动的数据
数学定义:
G = (V, E, S)
其中:
V = {节点集合}
E = {边集合: (vi, vj) | vi, vj ∈ V}
S = {状态空间}2. 状态管理机制
from typing_extensions import TypedDict
class AgentState(TypedDict):
messages: list[BaseMessage] # 对话历史
user_info: dict # 用户信息
next_action: str # 下一步动作状态更新规则:
def node(state: AgentState) -> dict:
# 读取状态
current_messages = state["messages"]
# 处理逻辑
new_message = process(current_messages)
# 返回部分更新(重要!)
return {"messages": [new_message]} # LangGraph 会自动合并3. 节点设计模式
模式 1: LLM 调用节点
def llm_node(state):
response = llm.invoke(state["messages"])
return {"messages": [response]}模式 2: 工具调用节点
def tool_node(state):
tool_calls = state["messages"][-1].tool_calls
results = [tool.invoke(call) for call in tool_calls]
return {"messages": results}模式 3: 决策节点
def router(state) -> Literal["tools", "end"]:
last_message = state["messages"][-1]
if hasattr(last_message, "tool_calls"):
return "tools"
return "end"4. 边的三种类型
# 1. 普通边 (Normal Edge)
graph.add_edge("node_a", "node_b")
# 2. 条件边 (Conditional Edge)
graph.add_conditional_edges(
"decision_node",
router_function,
{"tools": "tool_node", "end": END}
)
# 3. 入口/出口边
graph.add_edge(START, "first_node")
graph.add_edge("last_node", END)关键洞察:
LangGraph 的强大之处在于显式建模。每个决策点、每个状态变化都是可见、可控、可调试的。
学习重点:
- 深入理解 State Schema 的设计
- 掌握节点函数的编写模式
- 熟练使用条件边实现路由
时间投入: 4-6 小时(含深度实践)
学习方法论
推荐学习路径
Week 1: Day 1-2
├─ 1.1 框架对比 (理解选择)
└─ 1.2 上手案例 (建立感觉)
Week 1: Day 3-5
├─ 1.3 LangChain 回顾 (夯实基础)
└─ 1.4 基础入门 (系统学习)
Week 1: Day 6-7
└─ 综合实践: 构建自己的第一个 Agent实践建议
先运行,再理解
- 复制示例代码,观察输出
- 修改参数,观察变化
- 提出假设,验证假设
绘制概念图
LangGraph 核心概念 ├── StateGraph │ ├── State Schema │ ├── Nodes │ └── Edges ├── Compilation └── Invocation建立代码模板
python# 我的 LangGraph 模板 from langgraph.graph import StateGraph, START, END from typing_extensions import TypedDict class State(TypedDict): # 定义你的状态 pass def node_function(state: State) -> dict: # 实现你的逻辑 return {} graph = StateGraph(State) graph.add_node("node_name", node_function) graph.add_edge(START, "node_name") graph.add_edge("node_name", END) app = graph.compile() result = app.invoke(initial_state)
常见陷阱与避坑指南
❌ 陷阱 1: "我需要先完全理解才能开始编码"
正解: 先动手,在实践中理解。LangGraph 的很多概念只有运行代码才能真正领悟。
❌ 陷阱 2: "条件边太复杂,我先跳过"
正解: 条件边是 LangGraph 的精髓。它决定了 Agent 的智能程度,必须掌握。
❌ 陷阱 3: "状态设计随意,后期再优化"
正解: 状态设计是架构决策。一个好的状态设计事半功倍,后期修改成本极高。
❌ 陷阱 4: "直接跳到 Multi-Agent,单 Agent 太简单"
正解: 单 Agent 的模式是 Multi-Agent 的基础。基础不牢,地动山摇。
本章知识图谱
Module 1: LangGraph 框架基础
│
├─ 框架对比与选择
│ ├─ 架构理念差异
│ ├─ 适用场景分析
│ └─ 决策思维模型
│
├─ LangGraph 核心概念
│ ├─ Graph (图)
│ │ ├─ StateGraph
│ │ └─ MessageGraph
│ ├─ State (状态)
│ │ ├─ TypedDict 定义
│ │ ├─ Channels 机制
│ │ └─ 更新规则
│ ├─ Nodes (节点)
│ │ ├─ 函数签名
│ │ ├─ 状态转换
│ │ └─ 设计模式
│ └─ Edges (边)
│ ├─ Normal Edge
│ ├─ Conditional Edge
│ └─ 动态路由
│
├─ LangChain 基础
│ ├─ Chat Models
│ ├─ Messages
│ ├─ Tools
│ └─ Prompts
│
└─ 实践案例
├─ 情绪生成器
├─ 简单 Agent
└─ 条件路由示例给不同背景学习者的建议
如果你是 Python 新手 + AI 初学者
学习路径:
- 先完成 Module 0 - 确保 Python 基础扎实
- 重点关注 1.2 和 1.4 - 通过案例建立直觉
- 暂时跳过 1.1 - 等有实践经验后再回来理解对比
- 多运行代码 - 每个示例至少运行 3 次,修改参数观察变化
预计时间: 2 周,每天 3-4 小时
如果你有 Python 经验,但 AI 是新领域
学习路径:
- 快速浏览 1.3 - 了解 LangChain 基础
- 重点学习 1.4 - 系统理解 LangGraph 架构
- 深入研究 1.1 - 建立框架选择的决策思维
- 动手改造案例 - 在 1.2 的基础上实现自己的需求
预计时间: 1 周,每天 3-4 小时
如果你是 AI/ML 研究者
学习路径:
- 重点阅读 1.1 - 理解 LangGraph 在 Agent 框架谱系中的位置
- 快速过 1.2 - 建立基础认知
- 深入 1.4 - 理解图执行引擎的实现原理
- 思考研究问题: 如何将你的研究成果集成到 LangGraph?
预计时间: 3-5 天,每天 2-3 小时
如果你是架构师/技术 Leader
学习路径:
- 深入研究 1.1 - 框架选择的技术和商业考量
- 重点理解 1.4 的架构设计 - 状态管理、可观测性、可扩展性
- 评估生产就绪度:
- 如何监控?
- 如何调试?
- 如何扩展?
- 成本如何?
预计时间: 2-3 天,每天 2-3 小时
推荐资源
官方资源 (必读)
- LangGraph 官方文档: https://langchain-ai.github.io/langgraph/
- LangChain Academy: https://academy.langchain.com/
- GitHub 仓库: https://github.com/langchain-ai/langgraph
论文与博客 (深入理解)
- ReAct: Reasoning and Acting: 理解 Agent 的思考和行动循环
- LangGraph Blog: 官方博客的最佳实践文章
社区资源
- LangChain Discord: 最活跃的讨论社区
- GitHub Discussions: 技术问题和案例分享
学习成果检验
完成本章后,你应该能够:
✅ 理论检验
- [ ] 能够解释 LangGraph 与 CrewAI、AutoGen 的本质区别
- [ ] 能够画出一个典型 LangGraph 应用的架构图
- [ ] 能够说明为什么需要状态管理
- [ ] 能够解释条件边的执行机制
✅ 实践检验
- [ ] 能够独立构建一个 3 节点以上的图
- [ ] 能够实现至少 1 个条件边
- [ ] 能够定义合理的 State Schema
- [ ] 能够调试图的执行流程
✅ 综合检验
挑战任务: 构建一个"智能客服路由系统"
需求:
- 接收用户消息
- 分析消息意图(问候/问题/投诉/其他)
- 根据意图路由到不同的处理节点
- 返回合适的响应
评分标准:
- 基础(60分): 能运行,有条件路由
- 良好(80分): 状态设计合理,代码清晰
- 优秀(100分): 有错误处理,可扩展
下一步
完成 Module 1 后,你已经具备了:
- ✅ LangGraph 的核心知识
- ✅ 构建简单图的能力
- ✅ 框架选择的判断力
但这只是开始! 在 Module 2 中,我们将学习:
- 如何构建生产级的 Agent
- Chain、Router、Agent 的架构模式
- 记忆管理和持久化
- 部署和监控
结语
作为一位研究者,我想分享一个洞察:
框架只是工具,思维才是核心。 LangGraph 的价值不在于它提供了什么 API,而在于它引导我们用"图"的方式思考 Agent 系统。这种思维模式的转变,比任何具体技术都更有价值。
不要追求完美,要追求理解。 不必一开始就写出完美的代码,重要的是理解每个组件的作用,理解状态如何流动,理解决策如何做出。
实践是唯一的老师。 读再多文档,都不如动手写一个简单的 Agent。遇到问题,调试,解决,这个过程才是真正的学习。
准备好了吗?让我们开始 Module 1 的学习之旅!
➡️ [1.1 LangGraph 与其它框架对比](./1.1 LangGraph 1.x.md)
Bryce Wang一位相信"理解本质"胜过"记忆 API"的研究者2025 年 12 月