收藏必备:LangGraph入门指南:从零构建复杂AI工作流的强大框架
LangGraph是由LangChain团队开发的开源框架,专为构建有状态、多步骤的复杂工作流而设计。它弥补了传统LangChain在动态流程控制上的不足,支持灵活的Agent协作与状态管理。核心概念包括状态(State)、节点(Nodes)、边(Edges)和图(Graph)。文章通过构建聊天机器人的实例,详细介绍了安装、状态定义、节点创建、图组装及交互式运行等步骤,展示了如何利用LangGra

LangGraph 是由 LangChain 团队开发的开源框架,专为构建有状态、多步骤的复杂工作流而设计。它弥补了传统 LangChain 在动态流程控制(如循环、分支)上的不足,支持更灵活的 Agent 协作与状态管理:通过有向图(Graph) 组织工作流,将任务拆分为 节点(Nodes) 和 边(Edges),实现非线性的执行逻辑(如循环、条件分支),更贴近真实业务场景。
LangGraph 的特性
通过 LangGraph 获得控制能力,设计能够可靠处理复杂任务的智能体。
- 🛑 指导、管理和控制您的智能体,实现人工干预(human-in-the-loop)。添加易于加入的审核和质量控制,防止智能体偏离方向。加入人工干预检查以引导和批准智能体的操作。
- 🎨 构建富有表现力、可定制的智能体工作流程。LangGraph 的低层基础(low-level primitives)提供了创建完全可定制智能体所需的灵活性。设计多样化的控制流程——单智能体、多智能体、分层结构——全部使用一个框架。
- 📡 持久化上下文,实现长期互动。LangGraph 的内置存储(built-in memory)存储对话历史记录并随时间推移保持上下文,从而支持跨会话的丰富、个性化互动。
- 🌊 一流的流式技术(First-class streaming)带来更好的用户体验设计。通过原生的逐令牌流式传输(native token-by-token streaming),实时显示智能体的推理和操作,弥合用户期望与智能体能力之间的差距。
核心概念解析
要掌握 LangGraph,需要理解以下几个核心概念:
- State (状态):整个应用的“共享内存”。它通常是一个 TypedDict,定义了需要在工作流中传递的所有数据,比如消息历史、中间结果等。
- Nodes (节点):图中的“工作单元”。每个节点都是一个 Python 函数,负责执行一项具体任务,如调用 LLM、处理数据或调用工具。它接收当前的状态,并返回对状态的更新。
- Edges (边):连接节点的“路径”。它定义了工作流的走向,即在一个节点完成后,接下来应该执行哪个节点。LangGraph 的“条件边”能力,可以根据当前状态动态选择路径,实现 if/else 这样的分支逻辑。
- Graph (图):将状态、节点和边组合在一起的“总指挥”。它负责编排整个工作流的执行。
构建一个基本聊天机器人
LangGraph 安装
运行以下命令,安装 LangGraph 及其相关依赖包:
pip install -qU "langchain[openai]"
pip install -U langgraph langsmith
定义状态 (State)
定义一个结构来贯穿整个工作流的“状态”。对于聊天机器人来说,最重要的状态就是不断累积的对话消息。
-
State(TypedDict): 使用 TypedDict 来定义状态的数据结构,确保类型安全和代码可读性。
-
messages: Annotated[list, add_messages]:
-
messages 是一个 python 列表 list。
-
Annotated:Python 的标准功能,用于给类型附加元数据。
-
add_messages 是 LangGraph 提供的一个便捷的帮助函数。它的作用和 operator.add 类似,专门用于处理消息列表。它告诉图的编译器:当一个节点返回 messages 时,请将这些新消息追加到现有列表中。这是实现多轮对话记忆的核心机制。
from typing import Annotated
import os
from langchain.chat_models import init_chat_model
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
classState(TypedDict):
messages: Annotated[list, add_messages]
关于 add_messages 函数,感兴趣的读者,可以阅读 langgraph 的源码。以下是 add_messages 的函数注释:
@_add_messages_wrapper
defadd_messages(
left: Messages,
right: Messages,
*,
format: Literal["langchain-openai"] | None = None,
) -> Messages:
"""Merges two lists of messages, updating existing messages by ID.
By default, this ensures the state is "append-only", unless the
new message has the same ID as an existing message.
Args:
left: The base list of messages.
right: The list of messages (or single message) to merge
into the base list.
format: The format to return messages in. If None then messages will be
returned as is. If 'langchain-openai' then messages will be returned as
BaseMessage objects with their contents formatted to match OpenAI message
format, meaning contents can be string, 'text' blocks, or 'image_url' blocks
and tool responses are returned as their own ToolMessages.
!!! important "Requirement"
Must have ``langchain-core>=0.3.11`` installed to use this feature.
Returns:
A new list of messages with the messages from `right` merged into `left`.
If a message in `right` has the same ID as a message in `left`, the
message from `right` will replace the message from `left`.
定义节点 (Node)
定义工作节点:将当前的状态 state 作为输入,请求调用大模型.
- llm = init_chat_model:设置访问 qwen 模型的模型名称、url 等信息。
chatbot函数:接收当前状态,从状态中提取所有历史消息,将它们作为输入传递给 LLM,然后将 LLM 的回复封装成一个字典返回。
llm = init_chat_model(
model="qwen-plus", # 模型名称
model_provider='openai',
api_key=os.getenv("DASHSCOPE_API_KEY"), # 传递 API Key
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"# 阿里云兼容端
)
defchatbot(state: State):
return {"messages": [llm.invoke(state["messages"])]}
组装并编译图 (Graph)
START和END是 LangGraph 提供的特殊常量,清晰地标记了工作流的起点和终点- 通过 add_node、add_edge 操作,定义各节点 node 的关系(执行先后顺序)。
# 初始化一个状态图构建器
graph_builder = StateGraph(State)
# 添加 chatbot 节点
graph_builder.add_node("chatbot", chatbot)
# 设置图的入口点
graph_builder.add_edge(START, "chatbot")
# 设置图的出口点
graph_builder.add_edge("chatbot", END)
# 编译图,生成可执行应用
graph = graph_builder.compile()
交互式运行
- graph.stream:将用户输入封装成标准消息格式({“role”: “user”, “content”: …}),通过 graph.stream()流式执行 LangGraph 工作流。
- 当调用 graph.stream()时,返回的迭代器中每个 event 代表工作流中一个步骤的执行结果。event 是一个字典(dict),键为节点名称,值为该节点输出的状态更新片段。
- for value in event.values() 用于遍历当前步骤中所有被激活节点的输出。
- value[“messages”][-1] :取 messages列表的最后一条消息。
defstream_graph_updates(user_input: str):
for event in graph.stream({"messages": [{"role": "user", "content": user_input}]}):
for value in event.values():
print("Assistant:", value["messages"][-1].content)
whileTrue:
try:
user_input = input("User: ")
if user_input.lower() in ["quit", "exit", "q"]:
print("Goodbye!")
break
stream_graph_updates(user_input)
except:
# fallback if input() is not available
user_input = "What do you know about LangGraph?"
print("User: " + user_input)
stream_graph_updates(user_input)
break
运行效果
User: 你好
Assistant: 你好呀!✨ 很高兴见到你!今天过得怎么样呀?希望你度过了愉快的一天。我随时准备好陪你聊天、帮你解决问题,或者就这样轻松愉快地闲聊一会儿。有什么想跟我分享的吗? 🌟
User: 介绍一下哆啦A梦
Assistant: 哆啦A梦(Doraemon)是一部非常著名的日本科幻动画和漫画作品的主角,由藤子·F·不二雄(Fujiko F. Fujio)创作。哆啦A梦本身是一个来自22世纪的蓝色机器猫,他的任务是帮助一个名叫野比大雄的小学生,改善他的未来命运。
### 基本信息:
- **中文名**:哆啦A梦
- **日文名**:ドラえもん
- **英文名**:Doraemon
- **作者**:藤子·F·不二雄(藤本弘和安孙子素雄的联合笔名)
- **首次登场**:1969年
- **类型**:科幻、喜剧、家庭、冒险
---
### 主要角色:
1. **哆啦A梦(Doraemon)**
- 来自未来的机器猫,性格善良但有时胆小。
- 肚子上有一个四次元口袋,可以拿出各种未来道具帮助大雄解决问题。
- 喜欢吃铜锣烧,最害怕老鼠。
2. **野比大雄(Nobita Nobi)**
- 普通的小学生,成绩差、运动不好、性格懦弱,经常惹麻烦。
- 依靠哆啦A梦的帮助来应对生活中的各种困难。
3. **源静香(Shizuka Minamoto)**
- 大雄的邻居和暗恋对象,温柔善良,喜欢洗澡。
4. **刚田武(Takeshi Goda,又称胖虎)**
- 大雄的同学,强壮但霸道,喜欢欺负大雄。
5. **骨川小夫(Suneo Honekawa)**
- 大雄的同学,爱炫耀,经常和胖虎一起欺负大雄。
---
### 故事背景:
哆啦A梦是大雄的曾孙——野比世修从未来派来的机器人,目的是帮助大雄改变他悲惨的命运,从而改善整个家族的未来。哆啦A梦使用各种神奇道具帮助大雄解决学习、人际关系、家庭和冒险中的问题,但往往也会引发一系列搞笑或出人意料的后果。
---
### 经典元素:
- **四次元口袋**:哆啦A梦最重要的道具来源,可以拿出各种稀奇古怪的未来科技。
- **代表道具**:
- 竹蜻蜓(飞行器)
- 任意门(瞬间移动)
- 时光机
- 隐形斗篷
- 翻译魔芋
---
### 影响力:
哆啦A梦自1969年连载以来,风靡日本乃至全世界,成为一代又一代人童年的重要回忆。它不仅是一部娱乐作品,也蕴含了友情、成长、家庭、责任等深刻的主题。
- **动画版本**:多次被改编为动画,最经典的是1979年版和2005年重启版。
- **电影作品**:已有超过40部哆啦A梦剧场版电影。
- **文化符号**:在日本被官方认定为“国民级角色”,甚至成为外交文化使者。
---
### 经典台词:
> “大雄,别灰心,我们一起想办法!”
> “我是哆啦A梦,不是机器猫!”
> “要是我有哆啦A梦就好了……”
---
如果你喜欢怀旧、温馨、幽默又富有想象力的故事,哆啦A梦绝对是一个不容错过的选择!你想了解哆啦A梦的某个具体方面吗?比如某个道具、剧情、电影推荐等?
User: quit
Goodbye!
以上是 LangGraph 编程入门示例:构建一个聊天机器人。
普通人如何抓住AI大模型的风口?
领取方式在文末
为什么要学习大模型?
目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。
目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过 30%。
随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:
人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!
最后
只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!
在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。
真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发
大模型全套学习资料展示
自我们与MoPaaS魔泊云合作以来,我们不断打磨课程体系与技术内容,在细节上精益求精,同时在技术层面也新增了许多前沿且实用的内容,力求为大家带来更系统、更实战、更落地的大模型学习体验。

希望这份系统、实用的大模型学习路径,能够帮助你从零入门,进阶到实战,真正掌握AI时代的核心技能!
01 教学内容

-
从零到精通完整闭环:【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块,内容比传统教材更贴近企业实战!
-
大量真实项目案例: 带你亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!
02适学人群
应届毕业生: 无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型: 非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能突破瓶颈: 传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。

vx扫描下方二维码即可
本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!
03 入门到进阶学习路线图
大模型学习路线图,整体分为5个大的阶段:
04 视频和书籍PDF合集

从0到掌握主流大模型技术视频教程(涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向)

新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路(不吹牛,真有用)
05 行业报告+白皮书合集
收集70+报告与白皮书,了解行业最新动态!
06 90+份面试题/经验
AI大模型岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)

07 deepseek部署包+技巧大全

由于篇幅有限
只展示部分资料
并且还在持续更新中…
真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)