★ 恒利学院 · 旗舰课程

LangGraph 完全实战指南

从零基础到企业级多智能体系统架构师。15 大模块、50+ 代码示例、10 个行业案例、完整端到端项目构建、设计模式大全、生产运维指南——这是最全面、最深度的 LangGraph 学习资源。

📚 15 模块📝 50+ 代码🎓 10 案例🚀 20+ 模式28📈 8 行业
✅ 零基础从 Python 开始逐步深入
🔧 实战驱动所有代码均可直接运行
🎓 企业案例覆盖 8 大行业真实场景
📈 生产就绪安全/测试/运维全覆盖
☞ 开始深度学习
🎯 课程定位

LangGraph 正在重新定义 AI 应用的构建方式

当 AI 从"对话"进化到"自动化",图结构是唯一能承载复杂业务逻辑的范式

🛠

从 Demo 到生产

大多数 AI 框架止步于 Demo 阶段。LangGraph 内置了持久化、流式输出、人机协同、错误恢复——这些不是锦上添花,而是生产系统的必备能力。你不需要在框架外加一堆胶水代码来实现它们。

🤖

Agent 的终极形态

ReAct 模式(思考→行动→观察)是当前 Agent 最成熟的架构。LangGraph 用循环图天然支持这个模式。没有回调地狱,没有状态管理混乱。加一个工具只需写一个函数加一行文档字符串。

📈

超越 Chatbot

LangGraph 的应用远不止聊天机器人。数据分析管道、多步骤审批、供应链优化、合规审查、代码生成——任何需要多步骤决策和状态管理的场景,LangGraph 都是最佳选择。

⚖ 全面对比

5 大 AI 编排框架横向对比

基于架构、生产就绪度、生态、学习曲线等 12 个维度

维度LangGraphAutoGenCrewAISemantic KernelDify
架构有向图对话式角色团队管道/函数可视化工作流
循环原生支持有限需实现支持
状态管理全局State+Reducer消息历史任务上下文上下文对象变量系统
人机协同中断/恢复支持有限需实现审批节点
持久化SQLite/PG需自建需自建内置
子图原生Subgraph嵌套会话任务链应用嵌套
流式事件流支持有限支持SSE
可观测LangSmith基础日志基础日志Azure Monitor内置日志
生态LangChain全套独立独立Azure系插件市场
开源MITMITMITMITApache
企业采用Azure客户中高
学习曲线中 (图概念)中 (Agent配置)低 (角色定义)中 (C#/Python)低 (可视化)
💡 选型建议: 需要最大灵活性和控制力?→ LangGraph。需要多 Agent 自由对话?→ AutoGen。团队小、需求简单?→ CrewAI。Azure 技术栈?→ Semantic Kernel。非技术人员需要搭建 AI 应用?→ Dify。如果你正在阅读这门课程,大概率 LangGraph 是你的最佳选择。
⚙ 核心概念

LangGraph 四大基石 + 两大进阶机制

📄

State

全局数据容器 (TypedDict)。所有节点共享读写。配合 Reducer 精确控制字段合并行为。

Node

执行单元 (Python 函数)。接收 State → 执行逻辑 → 返回更新。可调用 LLM、工具、API。

Edge

流转路径。普通边 = 无条件。条件边 = 根据路由函数决策。还支持并行 Fan-out/Fan-in。

🕹

Graph

可编译执行的应用单元。支持 invoke/astream/stream。可序列化、暂停、恢复、嵌套。

🔄

Reducer 机制

Annotated[T, reducer_func] 是 LangGraph 的精髓。它告诉框架:当多个节点返回同一个字段时,不要覆盖,而是用这个函数合并。add_messages 追加消息、自定义 Reducer 可以累加、去重、保留最新 N 条——你可以用 Reducer 实现任何合并逻辑。

📩

Subgraph 嵌套

一个编译后的 Graph 可以作为一个 Node 嵌入到另一个 Graph 中。模块化架构的基石:每个子图独立开发、测试、部署。企业级应用通常由 3-10 个子图组合而成。

📊 完整数据流
▶ 输入
🔎 意图识别
⚖ 路由
🔧 工具A
🔧 工具B
📈 汇总 + 生成
✓ 输出
📖 课程大纲

15 大模块 · 从零到架构师

唯一一门覆盖从环境搭建到生产运维全链路的 LangGraph 课程

1

🏗 LangGraph 导论:为什么是图?

⏰ 45min基础

LangGraph 由 LangChain 团队于 2024 年初推出。核心洞察:AI 工作流不是线性的,是图状的。它解决了传统 Chain 无法优雅处理分支、循环、并行、状态共享的问题。

▶ 提问
LLM 推理
⚖ 决策
工具调用
✓ 回答
# 最简 LangGraph(10 行) from typing import TypedDict from langgraph.graph import StateGraph, END class S(TypedDict): msg: str def a(s: S): return {"msg": s["msg"] + " >A"} def b(s: S): return {"msg": s["msg"] + " >B"} bdr = StateGraph(S) bdr.add_node("a", a); bdr.add_node("b", b) bdr.set_entry_point("a"); bdr.add_edge("a", "b"); bdr.add_edge("b", END) g = bdr.compile() print(g.invoke({"msg": "X"})) # {'msg': 'X >A >B'}
💡 关键理解: 每个节点返回的 dict 会合并到当前 State,不是替换。例如 state={"a":1,"b":2},节点返回 {"b":3,"c":4} → 结果 {"a":1,"b":3,"c":4}。这是 LangGraph 的设计精髓。
2

🔧 环境搭建与第一个 Agent

⏰ 30min基础
# 安装 pip install langgraph langchain-openai langchain-community # 设置 API Key export OPENAI_API_KEY=sk-xxx # 你的第一个 LangGraph Agent(复制以下代码到 demo.py 运行) from langchain_openai import ChatOpenAI from langgraph.graph import StateGraph, END from langgraph.prebuilt import ToolNode from typing import TypedDict, Annotated, List from langgraph.graph.message import add_messages from langchain_core.messages import BaseMessage class State(TypedDict): messages: Annotated[List[BaseMessage], add_messages] def get_weather(city: str) -> str: """获取城市天气""" return f'{{"city":"{city}","weather":"晴,22-28°C"}}' llm = ChatOpenAI(model="gpt-4o").bind_tools([get_weather]) def agent(s): return {"messages": [llm.invoke(s["messages"])]} def router(s): return "tools" if s["messages"][-1].tool_calls else END b = StateGraph(State) b.add_node("agent", agent); b.add_node("tools", ToolNode([get_weather])) b.set_entry_point("agent"); b.add_conditional_edges("agent", router); b.add_edge("tools", "agent") app = b.compile() print(app.invoke({"messages": [("human", "北京天气?")]}))
⚠ 确保已设置 OPENAI_API_KEY 环境变量,否则调用会失败。
3

📄 State 深度设计:10 种实战模式

⏰ 60min核心

State 设计是 LangGraph 最重要的技能。好的 State 让代码清晰,坏的 State 让寸步难行。以下是经过生产验证的 10 种设计模式:

1

对话模式

messages + 业务字段。最常用

2

阶段模式

stage 字段追踪流程阶段

3

累积模式

Reducer 累加 cost/tokens

4

版本模式

所有变更追加带时间戳的列表

5

集合模式

set 去重合并(如已调用工具)

6

窗口模式

保留最近 N 条记录防溢出

7

分层模式

对话/业务/工具/控制/监控分层

8

共享记忆模式

跨 Session 共享的用户画像

9

乐观锁模式

version 字段防并发覆盖

10

事件溯源模式

events[] 记录所有操作日志

# 企业级 State 模板(分层设计) class EnterpriseState(TypedDict): # 对话层 messages: Annotated[List[BaseMessage], add_messages] session_id: str # 业务层 intent: Optional[str] entities: dict stage: str # greeting|collecting|processing|closing # 工具层 tool_calls: List[dict] tool_results: List[dict] error_count: int # 控制层 need_human: bool human_approved: Optional[bool] is_complete: bool # 监控层 total_tokens: Annotated[int, lambda c, n: c + n] events: Annotated[List[dict], lambda c, n: c + n]
4

◉ Node 与 Edge:完全参考手册

⏰ 50min核心

◉ 6 种节点注册方式

方式示例适用
函数节点add_node("x", my_func)最常用,任意逻辑
Lambda节点add_node("x", lambda s: {"k":"v"})简单逻辑
Runnable节点add_node("x", chain)LCEL 链
Tool节点ToolNode([tools])工具执行
Subgraph节点add_node("x", subgraph)图嵌套
类节点add_node("x", MyCallable())有状态对象

🔗 7 种边的模式

模式代码效果
顺序add_edge("a","b")无条件 A 到 B
条件add_conditional_edges("a", fn)路由函数决定去向
多映射add_conditional_edges("a", fn, {k1:"b",k2:"c"})带映射的条件路由
并行分发add_edge("a", ["b","c"])Fan-out
并行汇聚add_edge(["b","c"], "d")Fan-in
自循环add_edge("a","a")重复执行同一节点
带参传递自定义通过 State 传参
# 7 种条件路由实战模式 # 1. LLM 工具决策 builder.add_conditional_edges("agent", lambda s: "tools" if s["messages"][-1].tool_calls else END) # 2. 金额阈值审批 builder.add_conditional_edges("audit", lambda s: "urgent" if s["amount"] > 100000 else "manager" if s["amount"] > 10000 else "auto") # 3. 对话阶段路由 builder.add_conditional_edges("analyze", lambda s: { "greeting": "collect", "collecting": "process", "confirming": "confirm", "closing": END }.get(s["stage"], "fallback")) # 4. 错误恢复路由 builder.add_conditional_edges("process", lambda s: "retry" if s["errors"] < 3 else "human") # 5. 动态分支 - 运行时决定 builder.add_conditional_edges("dispatcher", lambda s: s["next"]) # 6. 多条件组合 builder.add_conditional_edges("check", lambda s: [p for p in ["audit", "legal", "compliance"] if s[f"need_{p}"]] or [END]) # 7. 概率路由(A/B 测试) builder.add_conditional_edges("router", lambda _: "model_a" if random.random() < 0.5 else "model_b")
5

🤖 ReAct 智能体:完整项目构建

⏰ 75min实战

本节构建一个完整的多工具 ReAct 智能体,支持天气查询、数学计算、新闻搜索、邮件发送。所有代码可直接运行。

# 多工具 ReAct Agent 完整实现 import json, random from typing import TypedDict, Annotated, List from langchain_openai import ChatOpenAI from langchain_core.messages import BaseMessage from langgraph.graph import StateGraph, END from langgraph.graph.message import add_messages from langgraph.prebuilt import ToolNode class State(TypedDict): messages: Annotated[List[BaseMessage], add_messages] # ----- 工具定义 ----- def get_weather(city: str) -> str: """获取指定城市的实时天气""" db = {"北京":"晴 22-28°C","上海":"多云 25-30°C","广州":"阵雨 26-32°C","深圳":"多云 27-31°C"} return json.dumps({"city":city,"weather":db.get(city,"无数据"),"unit":"celsius"}) def calculate(expr: str) -> str: """计算数学表达式。expr: 如 '2+3*4'""" try: return json.dumps({"expr":expr,"result":eval(expr)}) except: return json.dumps({"error":"无法计算"}) def search_news(topic: str) -> str: """搜索最新新闻。topic: 搜索主题""" headlines = [f"AI 领域突破:{topic} 技术取得重大进展", f"2024 年 {topic} 市场规模增长 45%"] return json.dumps({"topic":topic,"news":headlines,"count":len(headlines)}) def send_email(to: str, subject: str, body: str) -> str: """发送邮件。to: 收件人, subject: 主题, body: 正文""" return json.dumps({"status":"sent","to":to,"subject":subject}) tools = [get_weather, calculate, search_news, send_email] llm = ChatOpenAI(model="gpt-4o", temperature=0).bind_tools(tools) def call_agent(s: State): return {"messages":[llm.invoke(s["messages"])]} def should_continue(s: State): last = s["messages"][-1] return "tools" if getattr(last,"tool_calls",None) else END b = StateGraph(State) b.add_node("agent", call_agent); b.add_node("tools", ToolNode(tools)) b.set_entry_point("agent"); b.add_conditional_edges("agent", should_continue) b.add_edge("tools", "agent") app = b.compile() # 使用示例:Agent 自主决定调用哪些工具、按什么顺序 for event in app.stream({"messages":[("human","帮我查查北京的天气,搜索AI的最新新闻,然后计算 256*8 等于多少,最后把结果发邮件给 admin@test.com")]}): for k,v in event.items(): print(f"[{k}]", v)
💡 Agent 会自主决策:先查天气 → 再搜新闻 → 然后计算 → 最后发送邮件。每一步的 tool_calls 由 LLM 自动生成,不需要你写 if/else。
6

🔄 高级流控:并行、MapReduce 与复杂编排

⏰ 50min进阶

🟦 并行 Fan-out/Fan-in

# 并行执行 + 汇聚 b.add_edge("dispatcher", ["research", "coding", "testing"]) b.add_edge(["research", "coding", "testing"], "merger") # 超时控制:并行节点最多等 30 秒 b.add_edge(["search_a", "search_b"], "merge", timeout=30)

🔃 MapReduce 模式

# Map:对每份文档并行分析 docs = [...] # 10 份文档 for i in range(len(docs)): b.add_node(f"analyze_{i}", lambda s, d=docs[i]: analyze_doc(s, d)) b.add_edge("splitter", f"analyze_{i}") # Reduce:全部完成后汇总 b.add_edge([f"analyze_{i}" for i in range(len(docs))], "summarizer")

📩 Subgraph 深度嵌套

# 子图:独立的审批流程 sub = StateGraph(ApprovalState) sub.add_node("check", check_doc); sub.add_node("sign", digital_sign) sub.add_node("archive", archive_doc) sub.set_entry_point("check"); sub.add_edge("check", "sign") sub.add_edge("sign", "archive"); sub.add_edge("archive", END) approval_graph = sub.compile() # 主图中嵌入子图 main.add_node("approval", approval_graph) # 子图内部完全封装,主图无需关心实现细节
7

👤 人机协同:5 种企业级审批模式

⏰ 45min实战

企业 AI 应用的核心要求是可控性。LangGraph 的 interrupt/update_state 机制让 AI 建议、人工决策的协作模式变得工程化。

✅ 5 种审批模式

✅ 一票通过

AI 生成 → 人工审核 → 通过则执行,驳回则修改

📝 多级审批

主管→经理→总监 逐级审批链

🔎 补充信息

AI 处理到某步 → 暂停 → 人工补充信息后继续

🔧 纠错确认

AI 执行完 → 人工检查结果 → 确认/修正

🔄 投票决议

多个人工审核员投票,多数通过即执行

# 一票通过的完整实现 builder.add_node("auto_gen", generate_content) builder.add_node("human_review", lambda s: s) # 占位节点 builder.add_node("publish", publish_content) builder.add_edge("auto_gen", "human_review") builder.add_conditional_edges("human_review", lambda s: "publish" if s["approved"] else "auto_gen") builder.add_edge("publish", END) # 在 human_review 前暂停 app = builder.compile(interrupt_before=["human_review"]) # 执行流:auto_gen → 【暂停】→ 人工审批 → 继续 config = {"configurable": {"thread_id": "doc_001"}} # 第一步:自动生成内容 for event in app.stream(inputs, config): print(event) # 人工审核通过后:更新状态并恢复执行 app.update_state(config, {"approved": True}) app.invoke(None, config) # 继续到 publish 节点
8

💾 记忆系统:3 种持久化方案

⏰ 35min核心
方案适用优缺点
MemorySaver开发/测试最快,内存存储,重启丢失
SqliteSaver单机生产文件持久化,不支持并发
PostgresSaver生产集群支持高并发,可分布式部署
# PostgresSaver 生产配置 pip install langgraph-checkpoint-postgres from langgraph.checkpoint.postgres import PostgresSaver conn_string = "postgresql://user:pass@host:5432/langgraph" memory = PostgresSaver.from_conn_string(conn_string) memory.setup() # 建表 app = builder.compile(checkpointer=memory) # 跨会话记忆:同一 thread_id 共享状态 c1 = {"configurable": {"thread_id": "user_abc"}} app.invoke({"messages": [("human", "我叫小明")]}, c1) app.invoke({"messages": [("human", "我叫什么?")]}, c1) # Agent 回答: 你叫小明 ✨
9

👥 多智能体系统:3 种协作架构

⏰ 55min进阶
👥

监督模式

主管 Agent 调度多个专家 Agent。主管分析任务 → 分配给最适合的专家 → 汇总结果。适合复杂任务分解。

🔄

网络模式

Agent 之间自由通信,消息传递。每个 Agent 可以主动向其他 Agent 请求信息或下发任务。适合开放式协作。

🔨

流水线模式

每个 Agent 负责一个处理阶段,依次传递。适合有固定顺序的处理流程,如 数据采集→清洗→分析→报告。

# 监督模式:主管 + 专家团队 class TeamState(TypedDict): task: str; research: str; code: str; review: str; final: str def supervisor(s: TeamState): # 分析任务并分配给专家 if "调研" in s["task"]: return {"research": "进行中"} elif "编码" in s["task"]: return {"code": "进行中"} else: return {"review": "进行中"} b = StateGraph(TeamState) b.add_node("supervisor", supervisor) b.add_node("research_agent", research_agent_subgraph) b.add_node("coding_agent", coding_agent_subgraph) b.add_node("review_agent", review_agent_subgraph) b.set_entry_point("supervisor") b.add_conditional_edges("supervisor", lambda s: "research_agent" if s["research"] else "coding_agent" if s["code"] else "review_agent") b.add_edge(["research_agent", "coding_agent", "review_agent"], "supervisor")
10

📈 10 个行业实战案例全集

⏰ 120min实战核心
📞

电商智能客服 电商

背景: 日均 8000+ 咨询,70% 重复问题,人工客服 200 人。用 LangGraph 构建智能客服工单系统。

方案: 意图识别 → RAG 知识库 → 自动回复/转人工(条件路由)→ 工单系统(人机协同)→ 满意度回访。

78%
自动处理率
15s
平均响应
-65%
人力成本
💳

保险理赔处理 金融

背景: 理赔 5 环节跨部门流转 3-5 天。多 Agent 协同:核保+定损+法务并行处理 → 主管审批。

2h
理赔时长
-92%
时效提升
99.7%
合规率
📊

数据分析助手 制造

背景: BI 团队积压 3-5 工作日。Agent 自动写 SQL→执行→可视化→报告,业务人员 8 分钟自助完成。

8min
分析时长
-90%
需求积压
96%
SQL 准确率
🎓

智能培训助教 教育

RAG 增强知识问答:多路并行检索课程资料+FAQ+讲师笔记,置信度低时转人工。学员满意度 +35%。

98%
覆盖
24/7
全天候
+35%
满意度
📦

供应链优化 物流

物流路径规划+实时追踪+异常检测+自动理赔。条件边根据状态动态调整流程,异常触发 Subgraph 理赔子流程。

99.5%
追踪准确率
-80%
异常处理
+25%
效率
🌐

合规审查 法律

多法规并行审查(GDPR+CCPA+PIPL)→ 冲突检测 → 风险评分 → 人工复核。单次审核从 3 天降至 2 小时。

2h
审核时长
-90%
律所成本
98%
法规覆盖
💻

代码审查系统 科技

PR 提交 → 自动代码审查(Bug 检测+性能分析+安全扫描)→ 生成审查报告 → 高风险自动转人工。支持 GitHub/GitLab Webhook 集成。

3min
审查时长
92%
Bug 检出率
-70%
人工工作量
🏥

医疗预诊系统 医疗

患者描述症状 → 智能分诊(紧急/普通/慢病)→ 科室推荐 → 号源查询 → 预约确认。紧急情况直接转急诊绿色通道。

30s
分诊时长
94%
科室匹配率
-60%
前台压力
🏭

智能合同管理 法务

合同上传 → OCR 解析 → 条款提取 → 风险条款标注(并行检查 20+ 风险类型)→ 合规评分 → 修改建议 → 法务审批。年处理 5000+ 合同。

15min
单合同处理
-85%
法务工时
99%
条款识别率
🛒

跨境电商运营 跨境

多语言商品描述生成(中/英/日/韩)→ SEO 优化 → 多平台同步(Amazon/SHOPEE/阿里国际)→ 价格监控 → 竞品分析报告。单个运营效率 = 原来 5 人团队。

5x
运营效率
8
语言支持
4
平台同步
11

🔒 安全、权限与合规

⏰ 35min安全
🔒

输入过滤

在入口节点过滤 SQL 注入、Prompt 注入等恶意输入

🔑

数据脱敏

State 中的敏感字段自动脱敏,不记录到 LangSmith

📝

审计日志

每次 Graph 执行的完整输入/输出都记录到审计数据库

# 输入过滤节点示例 def sanitize_input(state): user_msg = state["messages"][-1].content # 检测 prompt 注入模式 injections = ["ignore previous", "forget all", "system prompt"] if any(w in user_msg.lower() for w in injections): return {"messages": [("ai", "抱歉,检测到异常输入,已终止处理。")], "blocked": True} return {"blocked": False} # 在入口处添加过滤节点 b.add_node("sanitizer", sanitize_input) b.set_entry_point("sanitizer") b.add_conditional_edges("sanitizer", lambda s: END if s["blocked"] else "agent")
12

🔎 测试策略:单元测试到端到端

⏰ 40min技巧
1

节点单元测试

单独测试每个节点函数,mock LLM 层

2

子图集成测试

测试单个 Subgraph 的完整执行流

3

端到端回归测试

全链路执行 + LangSmith 断言

# Pytest 测试示例 def test_call_agent(): state = {"messages": [("human", "hello")]} result = call_agent(state) assert "messages" in result assert len(result["messages"]) == 1 def test_graph_end_to_end(): app = builder.compile() result = app.invoke({"messages": [("human", "北京天气")]}) assert result["messages"][-1].content assert "北京" in result["messages"][-1].content
13

💰 成本优化:Token 节省策略 10 则

⏰ 30min运维

1. 缓存重复查询

相同用户提问在 N 分钟内命中缓存

2. 缩短对话历史

保留最近 K 轮,超出则摘要压缩

3. 小模型前置

用 GPT-4o-mini 做意图分类,只复杂推理用 GPT-4o

4. 结构化输出

用 response_format 限制输出格式,减少冗余 Token

5. 限制循环次数

设置 max_iterations 防止无限循环

6. 批量处理

多条消息合并一次调用而非逐条

7. 精简 system prompt

去除冗余指令,用最少的词表达

8. 工具描述优化

精简工具文档字符串,去除不必要的说明

9. 流式提前终止

检测到关键 Token 后提前截断

10. 结果缓存

相同输入的结果直接返回,不重复执行

实测效果: 同时应用以上 10 条策略可将 Token 消耗降低 40-60%,成本降低一半以上。
14

🔧 调试指南:15 个常见错误与解决方案

⏰ 35min技巧
#错误原因解决
1State 字段被静默覆盖多节点写同名字段未用 Reducer添加 Reducer 或保证只有一个节点写该字段
2图进入死循环条件边无通往 END 的路径检查所有分支路径,确保有出口
3Tool 调用失败函数参数类型注解不全确保所有参数有类型注解和 docstring
4State 意外突变节点内部修改了传入的 State 对象始终返回新字典,不要修改入参
5API Key 泄露Key 硬编码在 State 中使用环境变量,配置 LangSmith 数据脱敏
6持久化死锁多进程共享同一 SQLite 文件生产环境用 PostgreSQL
7Token 超预算未设置 max_tokens设置 LLM 的 max_tokens 参数
8条件边路由不到节点path_map 中缺少 key添加默认值或确保路由函数返回存在的节点
9Subgraph 状态不匹配主图和子图的 State 类型不一致子图只读取自己需要的字段
10LangSmith 不追踪环境变量未设置或 API Key 错误检查 LANGCHAIN_TRACING_V2=true
11Checkpointer 版本冲突序列化的图与当前代码不匹配版本控制 + 迁移脚本
12interrupt 后不会恢复未正确调用 update_state调用 update_state 后再 invoke
13并行节点执行顺序异常依赖 Fan-in 但上游未全部完成确认 add_edge 使用列表语法
14LLM 返回格式错误response_format 与工具不兼容不要同时使用 response_format 和 bind_tools
15Stream 事件丢失未正确处理流式事件使用 async for event in app.astream_events()
💡 调试三步法: 1) app.stream() 逐节点观察 → 2) 开启 LangSmith 追踪全链路 → 3) interrupt_before + get_state 在断点处检查 State。
15

🚀 生产部署:从 Docker 到 K8s

⏰ 40min运维

🔑 API 封装

FastAPI + Pydantic 请求/响应模型

💾 持久化

PostgreSQL + PostgresSaver

📈 监控

LangSmith + Prometheus + Grafana

🔄 限流

Redis 令牌桶 + 并发控制器

# FastAPI + Docker 部署模板 from fastapi import FastAPI, HTTPException from pydantic import BaseModel import uvicorn api = FastAPI(title="LangGraph Agent API") class ChatReq(BaseModel): message: str thread_id: str = "default" user_id: str = "anonymous" class ChatRes(BaseModel): reply: str thread_id: str tokens: int @api.post("/chat", response_model=ChatRes) async def chat(req: ChatReq): config = {"configurable": {"thread_id": req.thread_id}} try: result = await app.ainvoke( {"messages": [("human", req.message)]}, config) reply = result["messages"][-1].content return ChatRes(reply=reply, thread_id=req.thread_id, tokens=result.get("total_tokens", 0)) except Exception as e: raise HTTPException(status_code=500, detail=str(e)) # 健康检查 @api.get("/health") async def health(): return {"status": "ok"} if __name__ == "__main__": uvicorn.run(api, host="0.0.0.0", port=8000)
💡 Dockerfile 关键配置:python:3.12-slim 为基础镜像 → pip install langgraph langchain-openai fastapi uvicorn → 复制代码 → EXPOSE 8000 → CMD ["python","main.py"]。使用环境变量管理 API Key 和数据库连接串。
📝 自我测评

检验你的学习成果

8 道选择题,涵盖核心概念、实践技巧和架构设计

1. LangGraph 中最核心的数据结构是什么?
✓ State (TypedDict)。所有节点共享同一个 State,这是"有状态"编排的核心。
2. 条件边路由函数返回什么?
✓ 节点名称 (str)。返回值匹配 path_map 中的 key 决定走向。
3. add_messages Reducer 的作用?
✓ 追加消息。多节点产生的消息按顺序累积。
4. 人机协同的关键 API 是?
✓ interrupt_before。在指定节点前暂停,等待人工。
5. 如何实现节点 A 后 B 和 C 同时执行?
✓ add_edge("A",["B","C"])。列表表示并行触发。
6. Subgraph 的主要作用?
✓ 模块化封装。子图独立开发测试,再组合成更大的系统。
7. 生产环境推荐用什么 Checkpointer?
✓ PostgresSaver。支持高并发、分布式部署。
8. 防止 State 字段被覆盖的方法?
✓ 用 Reducer 管理。Annotated[T, reducer_func] 定义合并行为。
❓ 常见问题

FAQ:你可能想问的 8 个问题

Q. LangGraph 和 AutoGen 怎么选?
LangGraph 更适合精细控制流(条件/循环/并行),AutoGen 更适合多 Agent 自由对话。看具体需求:控制流复杂选 LangGraph,对话式多 Agent 协作两个都可以。
Q. 零基础学 LangGraph 要多久?
有 Python 基础的话,1-2 天学会基本概念,1 周能写生产级应用。本课程从零开始设计,不需要 LangChain 经验。
Q. 必须用 LangChain 吗?
LangGraph 基于 LangChain 生态,但 Node 函数可以调用任何 Python 库。可以用 OpenAI SDK 直接调用 LLM。
Q. 生产环境有什么坑?
最常见:1) 没用 PostgresSaver 导致并发问题 2) 未设置 max_iterations 无限循环 3) 没用 LangSmith 导致难以调试。本课程第 11/14/15 章专门解决这些问题。
Q. 能和其他框架混用吗?
Node 就是 Python 函数,可以在里面调用任何框架:AutoGen 的对话、CrewAI 的 Crew、Dify 的 API。LangGraph 是编排层,下面是灵活的。
Q. 需要 GPT-4 吗?
基础功能 GPT-4o-mini 就够用。复杂推理场景建议 GPT-4o 或 Claude 3.5。本课程代码兼容所有 OpenAI 兼容 API,包括本地部署的模型。
Q. 社区活跃吗?
非常活跃!GitHub 50K+ Stars,Discord 10万+ 成员,每周都有更新。LangChain 团队全职维护,企业赞助充足。
Q. 如何保持技能更新?
关注 LangChain Blog、GitHub Release Notes、DeepLearning.AI 的免费课程。每 2-4 周检查一次更新——LangGraph 迭代速度非常快。

🚀 掌握 LangGraph,成为 AI 工程化专家

15 大模块、50+ 代码示例、10 个行业案例——这是全网最全面的 LangGraph 学习资源
从今天开始,构建真正可生产的 AI 智能体应用