初识LangGraph - 从零开始
本文介绍了LangGraph框架的特性与应用价值。LangGraph是专为构建有状态AI应用设计的框架,通过状态图模型将应用流程可视化,节点代表处理步骤,边代表状态流转。相比传统if-else方式,LangGraph具有代码结构清晰、自动生成流程图、内置状态持久化等优势。文章以游戏开发为喻,解释了LangGraph的核心概念:状态(背包系统)、节点(任务点)、边(道路系统)和检查点(存档系统),并
初识LangGraph - 从零开始
AI冒险之旅
嘿,各位程序员大大们!👋
想象一下,你正在玩一款超复杂的RPG游戏。游戏里有无数个NPC,每个NPC都有自己的任务线,而且这些任务线还会根据你的选择产生分支。
更麻烦的是,你还要记住和每个NPC的对话历史,因为后续任务可能要用到之前的信息…

这就是我们传统程序员在AI时代遇到的真实困境:
如何管理复杂的多轮对话流程!
传统的if-else大法就像用木剑打Boss,虽然能打,但是:
- 代码越写越长,像迷宫一样绕来绕去
- 状态管理混乱,像背包里塞满了各种道具却找不到
- 难以维护,改一个地方可能影响全局
- 无法可视化,就像在黑暗中摸索
这时候,LangGraph登场了!✨

它就像游戏里的"神器"——
不仅能帮你管理复杂的对话流程,还能自动生成流程图,让你一眼看清整个系统的运行逻辑。
更重要的是,它内置了"存档系统"(状态持久化),让你的对话可以随时暂停和恢复。
什么是LangGraph?—— 你的AI应用构建神器
LangGraph是LangChain团队推出的一个框架,专门用来构建有状态的AI应用。它将你的应用建模为一个状态图(State Graph),其中节点代表处理步骤,边代表状态流转。
把LangGraph想象成一个任务系统🎮:
- 状态图(State Graph) = 游戏地图🗺️
- 整个游戏世界的地图,告诉你所有可去的地方和路线
- 节点(Node) = 游戏中的NPC或关卡🏰
- 每个节点就是一个任务点,比如"和村长对话"、“击败Boss”、“收集道具”
- 每个节点都有自己的功能,接收信息,处理后输出结果
- 边(Edge) = 道路或传送门🚪
- 连接各个节点的路径
- 可以是固定的(无条件),也可以是动态的(根据条件选择)
- 状态(State) = 角色的背包和存档💼
- 存储所有需要的信息:对话历史、用户数据、当前进度等
- 就像游戏里的背包,随时可以查看和更新
- 检查点(Checkpoint) = 存档系统💾
- 可以随时保存当前进度
- 支持断点续传,就像游戏里的存档点
核心概念详解
1. 状态(State)- 你的"背包系统"
状态就像游戏角色的背包,里面装着所有需要的信息。
在我们的SurveyEase项目中,状态长这样:
class SurveyGraphState(TypedDict): messages: List[BaseMessage] # 对话记录(就像任务日志) steps: List[Dict[str, Any]] # 调研步骤配置(任务清单) system_prompt: str # 系统提示词(游戏规则) max_turns: int # 最大对话轮数(任务时限) current_step: str # 当前步骤(你在哪个任务点) current_step_messages: List[BaseMessage] # 当前步骤的消息(当前任务的对话) thread_id: str # 会话ID(存档编号) end_message: str # 结束语(任务完成后的台词)
为什么需要状态?
想象你在玩一个多分支剧情的游戏:
- 你需要记住之前和NPC说了什么(
messages) - 你需要知道当前进行到哪个任务(
current_step) - 你需要知道任务的总进度(
steps)
没有状态管理,就像每次对话都要从头开始,那用户体验就太糟糕了!😱
2. 节点(Node)- 你的"任务点"
节点就像游戏中的任务点,每个节点负责一个具体的功能。
在我们的项目中,主要有三种节点:
问题生成节点(_generate_question) 🤖
- 功能:根据当前步骤生成问题
- 比喻:就像游戏中的"对话NPC",会根据剧情向你提问
- 特点:可以调用LLM生成智能问题,支持多轮追问
用户回答节点(_get_user_answer) 👤
- 功能:接收并处理用户的回答
- 比喻:就像游戏中的"输入框",等待玩家输入
- 特点:使用
interrupt机制暂停执行,等待用户输入
结束节点(_end_survey) 🏁
- 功能:结束调研并保存记录
- 比喻:就像游戏中的"任务完成"界面
- 特点:自动保存对话记录,输出结束语
3. 边(Edge)- 你的"道路系统"
边定义了节点之间的流转关系,就像游戏地图上的道路。
固定边(Fixed Edge) 🛣️
- 无条件跳转,就像游戏中的主线剧情
- 例如:
workflow.add_edge("step1", "step2") - 意思:完成step1后,无条件进入step2
条件边(Conditional Edge) 🚪
- 根据状态动态决定下一节点,就像游戏中的分支剧情
- 例如:根据用户回答,决定进入不同的任务线
- 实现:使用
add_conditional_edges方法
workflow.add_conditional_edges( "0_q", # 从哪个节点出发 self._should_continue, # 判断函数(就像游戏中的选择判断) edge_map # 可能的目标节点(就像不同的剧情分支))
4. 检查点(Checkpoint)- 你的"存档系统"
检查点机制让LangGraph支持状态持久化,就像游戏里的存档功能。
为什么需要检查点?
-
状态恢复
:用户刷新页面后,可以从上次中断的地方继续
-
多线程支持
:多个用户同时使用,不会互相干扰
-
断点续传
:长时间对话可以暂停和恢复
在我们的项目中,使用MemorySaver实现:
from langgraph.checkpoint.memory import MemorySaverself.checkpointer = MemorySaver(serde=CustomSerializer())
就像游戏里的自动存档,每次状态更新都会自动保存。
为什么选择LangGraph?—— 传统方式 vs LangGraph
在引入LangGraph之前,我们是这样写的:
# 传统方式:像在迷宫里绕来绕去if current_step == 1: if user_answer == "yes": current_step = 2 if some_condition: current_step = 3 else: current_step = 4 else: current_step = 5 if another_condition: current_step = 6elif current_step == 2: # 更多嵌套... if nested_condition: # 更深层的嵌套...
问题就像游戏里的Bug:
- 难以扩展 🚫
- 想加一个新步骤?要改很多地方的if-else
- 就像游戏更新要改整个地图,容易出错
- 状态管理混乱 📦
- 状态分散在各个地方,不知道当前状态是什么
- 就像背包里的道具乱放,找不到想要的东西
- 难以可视化 👀
- 代码就是流程图,但很难一眼看懂
- 就像没有地图的游戏,只能靠记忆摸索
- 不支持状态持久化 💾
- 用户刷新页面,对话就丢失了
- 就像游戏没有存档,每次都要从头开始

LangGraph的"神器优势" ✨
使用LangGraph后,代码变得清晰优雅:
# LangGraph方式:像搭积木一样清晰workflow = StateGraph(SurveyGraphState)workflow.add_node("0_q", self._generate_question) # 添加问题节点workflow.add_node("0_a", self._get_user_answer) # 添加回答节点workflow.add_conditional_edges("0_q", self._should_continue, edge_map) # 添加条件边
优势就像游戏里的神器属性:
- 代码结构清晰 📐
- 每个节点职责单一,就像游戏里的技能树
- 想加新功能?加个节点就行,不影响其他部分
- 自动生成流程图 🗺️
- LangGraph可以自动生成可视化流程图
- 就像游戏里的地图系统,一目了然
- 内置状态持久化 💾
- 使用检查点机制,自动保存和恢复状态
- 就像游戏里的自动存档,再也不用担心丢失进度
- 易于测试和调试 🐛
- 每个节点可以独立测试
- 就像游戏里的训练场,可以单独练习每个技能
- 支持流式响应 🌊
- 可以实时返回AI的回复,提升用户体验
- 就像游戏里的实时对话,不用等待全部加载完

项目架构概览 - SurveyEase的"世界地图"
SurveyEase是一个智能调研平台,就像一款专门做调研的"游戏"。
整体架构 🎮
┌─────────────────┐│ 前端界面 │ ← 游戏UI界面│ (React + TS) │└────────┬────────┘ │ HTTP/WebSocket ← 网络连接┌────────▼──────────────────┐│ FastAPI 后端 │ ← 游戏服务器│ ┌────────────────────┐ ││ │ SurveyGraph │ │ ← LangGraph核心(任务系统)│ │ (状态图) │ ││ └────────────────────┘ ││ ┌────────────────────┐ ││ │ LLM Provider │ │ ← AI引擎(NPC对话系统)│ └────────────────────┘ │└───────────────────────────┘
核心流程 📋
-
用户发起对话
→ 就像开始一个新任务
-
SurveyGraph初始化
→ 加载任务配置
-
进入第一个节点
→ 开始第一个任务点
-
生成问题
→ NPC向你提问
-
等待用户回答
→ 暂停执行,等待输入
-
处理回答
→ 根据回答决定下一步
-
条件跳转
→ 根据情况选择不同的任务线
-
继续或结束
→ 完成任务或进入下一任务
下篇预告:实战演练 - 成为LangGraph大师 🎯
在下一篇文章中,我们将:
-
实战准备
:装备你的开发环境(安装和配置)
-
构建第一个LangGraph
:从零开始搭建你的状态图
-
核心功能详解
:深入理解节点、边、状态的实际应用
-
融入你的项目
:手把手教你如何在自己的项目中使用
-
进阶技巧
:成为LangGraph高手的秘密武器
准备好开始你的LangGraph冒险了吗?让我们在下篇见!🚀
小贴士 💡
-
LangGraph官方文档
:https://langchain-ai.github.io/langgraph/
-
SurveyEase项目
:https://github.com/senga07/SurveyEase.git
-
学习建议
:先理解概念,再动手实践,最后优化改进
记住:**最好的学习方式就是动手实践!**就像玩游戏一样,光看攻略不如自己上手玩一遍。🎮
最近这几年,经济形式下行,IT行业面临经济周期波动与AI产业结构调整的双重压力,很多人都迫于无奈,要么被裁,要么被降薪,苦不堪言。但我想说的是一个行业下行那必然会有上行行业,目前AI大模型的趋势就很不错,大家应该也经常听说大模型,也知道这是趋势,但苦于没有入门的契机,现在他来了,我在本平台找到了一个非常适合新手学习大模型的资源。大家想学习和了解大模型的,可以**点击这里前往查看**
更多推荐

所有评论(0)