【前言】
学习过LangChain,我们已经知道AI世界是如何初步搭建的。实际我们已经用过:ChatGPT原生模型 :对话式AI,一问一答。DeepSeek客户端 :类似的对话助手。一些AI工具:比如AI画画、AI写文章等...
在LangChain篇章中,我们接入LLM构建的AI系统有以下特点:1、单次对话,"记不住"太多上下文。2、主要是问答模式。3、相对简单的任务
1.1 什么是 Agent Server 智能服务?
想象一个虚拟的"小助手",它不仅能回答问题,还能:
- 记住和你聊过的所有事情:
- 执行一连串任务(比如:查天气一>推荐穿搭一>提醒带伞)
- 中途可以等你给出反馈:
- 运行很长时间不会"忘记"
AgentServer 就是这样一个聪明的AI助手。
【举个 Agent Server 的例子】------ 我说 "帮我规划周末旅行"
1、AgentServer 界面显示回应:"好的,我们一步步来"
2、AgentServer 第一步 "查天气",屏幕显示天气预报界面。
3、AgentServer 第二步 "找景点",屏幕显示景点列表和图片。
4、AgentServer 第三步 "订酒店",屏幕显示酒店预订页面。
5、AgentServer 第四步 "规划路线",屏幕呈现地图路线图。
6、AgentServer 第五步 "打包建议",屏幕列出物品清单。
1.2 构建 Agent Server 时遇到的四大难题

1.3 LangGraph的三大超能力
构建Agent Server 遇到的问题怎么解决呢???这时候就轮到LangGraph出场了,简单来说,LangGraph是一个专门用于构建和管理Agent Server的底层框架。
LangGraph是一个强大且灵活的"Agent Server操作系统内核 "。它不关心我们具体用什么模型或提示词,而是为我们解决构建复杂、可靠、可交互的Agent Server时所面临的状态管理、流程编排、持久化和人工监督等底层工程难题 。
如果把Agent Server比作一个公司,那么:
- AI 模型 = 员工(干活的人)
- Tool 工具 = 办公设备(电脑、电话)
- LangGraph = 项目经理+流程系统
1.3.1 记忆大师
#传统AI:每次对话都是新的开始
AI回答("你好")"你好!"
AI回答("我叫小明")"很高兴认识你!"
AI回答("我叫什么?")-"我不知道你的名字"
# LangGraph Agent Server:记住一切
Agent Server("你好") "你好!"
Agent Server("我叫小明")"你好小明!"
Agent Server("我叫什么?")- "你叫小明!"
无论过了多久,会话了多少次,LangGraph 都可以记住!
1.3.2 流程指挥官
把复杂任务分解成小步骤:

1.3.3 容错卫士
LangGraph还提供了以下关键基础设施,保障Agent Server的执行过程:
- 持久执行:构建能从故障中恢复、长时间运行的Agent Server。
- 人工介入:允许在流程中随时检查和修改Agent Server状态。
- 强大的调试能力:与LangSmith集成,提供可视化追踪和深度洞察。
- 生产就绪的部署:为有状态、长时工作流提供可扩展的部署方案。
LangGraph生态系统
LangGraph 是 LangChain 产品家族的一部分。可以与 LangSmith (用于追踪、评估、监控) 、LangGraph部署平台(用于轻松部署和扩展Agent Server)以及LangChain(提供大量集成和组件)结合使用,形成完整的开发、调试、部署工作流。
LangGraph与LangChain顺利集成,但也可以在没有LangChain的情况下使用。
2. LangGraph 的核心概念
2.1 常见概念区分
2.1.1 Agent
Agent(智能体)是一个能够感知环境输入、自主决策、规划行动路径,并可调用工具或执行操作以达成目标的自主性软件实体。其核心在于:由大语言模型(LLM)动态控制流程走向。
想象你有一个超级聪明的程序员助手,你只需要说一句:"把这个项目的单元测试覆盖率提升到80%.然后他就自己去看代码、写测试、运行构建、检查结果......直到达标为止,中间不需要你插手。这个"能独立完成任务"的程序,就是我们说的Agent(智能体).
想象一个私人助理机器人:你说:"帮我安排下周去上海的差旅."它不会傻傻地只回复"好的",而是会:
a.查天气:决定带什么衣服
b.查航班/高铁时间:比较价格
c.预订酒店:发送日程到你的手机
d.提醒你带身份证
整个过程没有固定的流程图,它自己"想"出来的步骤------这就是典型的Agent行为
2.1.2 工作流workflow
工作流定义了"先做什么、后做什么、在什么条件下跳转或终止。" 其核心在于:预设的、可重复的流程路径。
Workflow(工作流)是一个将复杂过程分解为定义明确、顺序执行的任务流程,并在其中自动化传递数据与任务的状态,用户完成特定目标。
如果说Agent是聪明的执行者,那工作流就是它的行动蓝图------
比如公司的报销流程:提交发票一>领导审批一>财务审核一>财务结算一>归档完成
或者一个自动化客服工单系统:用户提交问题一>系统自动分类一>分配给对应客服一>客服处理一>用户评价一>工单关闭
这个固定路径,整个过程沿着预设的流程运行,就是典型的工作流行为。
LangGraph是实现的就是工作流!
2.1.3 工作流和Agent区别
从概念上来讲,工作流workflow的流程固定,步骤预设,适合明确流程的任务。Agent是由大模型(LLM)动态控制流程走向,灵活度高。

Workflow 像是"炒菜机器人"------按步骤进行炒菜。比如放油--->炒蛋--->加盐--->出锅,即使鸡蛋坏了,也不会停下来。
Agent 像是"米其林主厨"------他会思考:"今天食材新鲜吗?客人忌口吗?要不要换做法?"自主决定菜单、调整火候和配料、品尝后返工改进。
但无论是Workflow 还是Agent,对于他们做出来的AI应用,在LangChain中,可以统称为Agent Server!
2.2 工作流
2.2.1 工作流介绍
工作流具有预先确定的代码路径,并设计为按特定顺序运行。当需要设计更高复杂性的AI应用时,工作流为定义明确的任务提供可预测性和一致性。
例如,现在需要研发一款主打城市通勤的智能电动自行车,具有导航、社交、防盗等功能。在开始研发前需要进行多维度分析,如:
- 市场分析:用户关注续航里程、车身重量、防盗能力,并对"骑行社交"(组队、分享路线)有新兴兴趣。
- 竞品分析:传统品牌车型智能化不足;互联网品牌车型续航和线下售后服务是其短板。
- 技术分析:评估更轻量化的电池材料与车身设计以提升续航和便携性,并开发基于GPS和移动网络的智能防盗系统与社交功能App的集成。
- 最终汇总分析结果。
则我们可以将多维度分析设定为具体的流程(工作流),从而达到先分析再汇总的特定运行顺序。如下图所示:

在LangGraph中,工作流基于LLM,以及添加到其中的各种增强功能(如工具调用、结构化输出和短期记忆)而实现:

再次强调:LangGraph是一个强大且灵活的"Agent Server操作系统内核"。它不关心我们具体用什么模型或提示词,而是为我们解决构建复杂、可靠、可交互的Agent Server时所面临的状态管理、流程编排、持久化和人工监督等底层工程难题。
2.2.2 理解图计算
如何实现工作流逻辑?------图计算是一种用节点和边来表示复杂系统的方法。在AI领域,它特别适合构建多步骤、有状态的智能工作流。
想象一个快递配送系统,包裹从输入(揽收站)到输出(配送站)的过程:
- 配送站、揽收站、分拣中心 = 节点(Node)
- 运输路线 = 边(Edge)
- 包裹信息 = 状态(State)
- 完整配送网 = 图(Graph)
2.3 图模型的三大核心要素
2.3.1 State(状态)
State就像快递包裹上的标签,快递的包裹信息,记录着包裹的当前位置、目的地、配送状态等信息。在整个配送过程中,所有站点都能查看和更新这个信息。
特性:
-
共享性:所有节点(快递站点)都能读取和修改
-
持久性:在整个工作流(快递运输)执行期间持续存在
-
结构化:有明确的字段定义
from typing import TypedDict
class PackageState(TypedDict):
"""包裹状态,对应工作流里的State(包裹信息)"""
# 包裹基本信息
package_id: str # 包裹id
origin: str # 始发站
destination: str # 目的地
# 配送流转状态
status: str # "待揽收","运输中","派送中","已签收"
history: list[str] # 流转历史
total_distance: int # 总里程
# 配送优先级
priority: str # "普通","加急"
所有配送站点共享的包裹信息卡就是LangGraph中的State!
2.3.2 Nodes(节点)
节点就像快递配送网络中的各个站点,每个站点负责特定的处理步骤。
特征:
-
单一职责:每个节点只做一件事
-
输入输出:接收状态,返回状态更新
-
独立性:节点间不直接通信,通过State交互
from typing import TypedDict
class PackageState(TypedDict):
"""包裹状态,对应工作流里的State(包裹信息)"""
package_id: str # 包裹id
origin: str # 始发站
destination: str # 目的地
status: str # "待揽收","运输中","派送中","已签收"
history: list[str] # 流转历史
total_distance: int # 总里程
priority: str # "普通","加急"def receive_package(state: PackageState):
"""揽收站节点:完成包裹揽收操作"""
return {
"status": "已揽收",
"history": [f"在{state['origin']}揽收"]
}def sort_package(state: PackageState):
"""分拣中心节点:根据目的地分拣"""
destination = state["destination"]
if "北京" in destination:
next_station = "北京分拣中心"
elif "上海" in destination:
next_station = "上海分拣中心"
else:
next_station = "其他地区分拣中心"
return {
"status": "已分拣",
"history": [f"分拣至{next_station}"]
}def final_delivery(state: PackageState):
"""派送站节点:完成最终派送签收"""
return {
"status": "已签收",
"history": [f"已送达{state['destination']}"]
}
2.3.3 Edges(边)
边定义了包裹在站点之间的流动路径,就像快递公司的运输路线图。对于路线,一般类型有:
- 开始/结束路线:流程的开始和结束点(包裹的开始站,与结束站)
- 固定路线:包裹可以从揽收站分拣中心(所有包裹都走这条路),而不能从配送站揽收站,而是配送站一家。
- 条件路线:根据目的地选择不同的分拣中心
实际上在LangGraph中,边就定义了节点之间的连接关系,决定了工作流的执行顺序。边的类型有:
- 固定边:总是从A到B
- 条件边:根据状态决定下一步
- 以及图的开始和结束点,标志了工作流的入口和出口。
因此,LangGraph通过节点(每个处理步骤)、边(步骤之间的连接)和状态(保存执行过程),就可以构建出一个任务工作流(图)。