Node · State · Edge
LangGraph 工作流入门:从写故事 Demo 理解 AI 如何“办事”
把一次模型调用升级成“生成、审核、判断、重试、终止”的可控流程。本文跳过抽象定义,直接从一个写故事案例拆解 LangGraph 的运行原理。
不是让模型回答一次,而是让模型进入一个有规则、有反馈、有出口的工作流。
大语言模型可以生成内容,但一个真正可用的 AI 应用,往往不只是“调用一次模型”。在实际业务中,我们更常需要的是:让模型先执行任务,再检查结果,如果不合格就修正,直到通过或达到停止条件。
LangGraph 正是为这类可控 AI 工作流设计的框架。它把一次 AI 任务拆成多个节点,用共享状态记录过程,再用边来决定流程如何流转。
项目结构不复杂,但分工很清楚
langgraph_story_demo/
├── main.py
├── state.py
├── nodes.py
├── router.py
└── graph.pyLangGraph 的基本原理:带记忆的流程图执行器
LangGraph 并不是简单地把几个函数顺序执行一遍。它真正提供的是“状态驱动的流程控制”。
[ Start / 输入 ]
│
▼
┌──────────────┐
│ State (状态) │ <─── 状态更新(story / attempts / review / approved)
└──────────────┘
│
▼
[ writer_node ] ── 调用本地模型生成故事
│
▼
[ reviewer_node ] ── 审核故事质量,并把 review / approved 写回 State
│
▼
< 条件判断边 should_continue >
│
├───────(审核不通过,且 attempts < MAX_ATTEMPTS)───────┐
│ │
│ ▼
│ 回到 writer_node
│
└───────(审核通过 / 达到最大次数)──────────────────────┐
│
▼
[ End / 输出最终结果 ]State 是共享记忆:它让流程能自我修正
`State` 是整个 graph 在运行过程中的共享记忆。本案例中,`StoryState` 保存故事内容、尝试次数、审核意见和是否通过。
class StoryState(TypedDict):
story: str
attempts: int
review: str
approved: bool| 字段 | 含义 |
|---|---|
story | 当前生成出来的故事内容。 |
attempts | 已经尝试生成的次数。 |
review | 审核节点给出的审核意见。 |
approved | 故事是否通过审核。 |
Node 是动作:每个节点只做好一步
`Node` 是 LangGraph 中真正干活的单元。一个 Node 通常就是一个 Python 函数,模式很统一:读取当前 State,执行当前任务,返回需要更新的 State 字段。
Edge 是控制流:决定下一步去哪里
`Edge` 是节点之间的连接关系。普通边表示固定顺序,条件边则根据当前 State 动态选择下一步。
普通边
graph.add_edge(START, "writer")
graph.add_edge("writer", "reviewer")条件边
graph.add_conditional_edges(
"reviewer",
should_continue,
{
"writer": "writer",
"end": END,
},
)一次真实运行:系统自己检查、判断、重试
本案例的一次真实运行中,模型一共被调用了两次。第一次故事太短且缺少明确情节,审核失败;第二次带着审核意见重新生成,最终通过。
Prompt 长度:134 字符 输出故事长度:76 字符 审核结果:失败 失败原因:故事太短,且缺少更明确的情节或品质关键词。
Prompt 长度:174 字符 输出故事长度:127 字符 审核结果:通过。
第一次生成不合格
-> reviewer_node 写入审核意见
-> State 保存失败原因
-> Edge 判断需要重试
-> writer_node 根据反馈再次生成
-> 第二次通过审核
-> 流程结束LangChain 与 LangGraph:组件工具箱 vs 流程控制器
LangChain 更像 LLM 组件工具箱。
LangGraph 更像 AI 工作流流程控制器。LangChain 常用于连接 Prompt、Model、Parser、Tool、Retriever、Chain 等组件;而 LangGraph 更关注状态管理、多节点流程、条件分支、循环重试、人工审核、任务编排和可控 Agent 工作流。
在本案例中,LangChain / langchain-ollama 负责调用本地模型;LangGraph 负责组织 writer -> reviewer -> 判断 -> 重试或结束。
把写故事案例抽象成通用 Agent 模式
生成
-> 评估
-> 判断
-> 修正
-> 终止| 场景 | writer_node | reviewer_node |
|---|---|---|
| 写邮件 | 生成邮件草稿 | 检查语气、长度、收件人信息 |
| 写报告 | 生成报告内容 | 检查结构、数据和结论 |
| 写代码 | 生成代码 | 运行测试、检查 lint |
| 客服回复 | 生成回复 | 检查是否符合政策和事实 |
| 文档总结 | 生成摘要 | 检查是否覆盖关键点 |
学习 LangGraph 时最该抓住的三句话
用 State 保存上下文,
用 Node 执行任务,
用 Edge 控制流程。AI 应用可以拥有分支、循环、审核、重试和终止条件
这也是 LangGraph 比“一次性模型调用”更接近真实应用的地方。一个 AI 应用不一定只能从输入走到输出,它可以像普通软件流程一样,根据状态做判断,根据结果走不同路径。
if approved:
goto END
elif attempts >= MAX_ATTEMPTS:
goto END
else:
goto writer_node十一、总结
LangGraph_story_demo 用一个很小的故事生成案例,展示了 LangGraph 最核心的工作方式:生成内容、记录状态、审核结果、根据条件分支、失败后带反馈重试、成功后及时结束、达到上限后停止。
LangGraph 的价值,不只是把节点连起来,而是让 AI 应用拥有状态、判断、循环和边界。
普通 LLM 调用:让模型回答一次。
LangGraph 工作流:让模型在一个可控流程中完成任务。