AI创想

标题: 【大模型Agent】LangGraph 深度科普:为智能体而生的“有状态”编排框架 [打印本页]

作者: 米落枫    时间: 昨天 08:04
标题: 【大模型Agent】LangGraph 深度科普:为智能体而生的“有状态”编排框架
作者:CSDN博客
(, 下载次数: 0)


LangGraph 深度科普:为智能体而生的“有状态”编排框架



在 2023-2024 年,大语言模型(LLM)应用从单次问答快速走向了多步骤推理、工具调用和自主智能体。一个典型场景是:你需要一个 AI 助手,能先查数据库、再做判断,如果信息不够就上网搜索,最后汇总生成报告。这个流程不再是一条直线,而是一个带分支、循环和状态的LangGraph 正是为这类场景设计的底层框架。它把 LLM 应用的执行流建模成有向图,核心使命是——让智能体应用拥有可靠的状态管理和可控的流程编排
一、LangGraph 是什么

LangGraph 是由 LangChain 团队推出的一个库,专门用于构建有状态、多角色、可循环的 LLM 应用。你可以把它理解为:
一个专门为 AI 工作流设计的“状态机 + 图执行引擎”。
它的底层不是 DAG(有向无环图),而是有向有环图,因此天然支持 循环。这对于智能体(Agent)那种“思考→行动→观察→再思考”的循环至关重要。
如果用一句话总结定位:

二、为什么需要 LangGraph

单纯的 Chain(链)只能按固定顺序执行。一旦遇到下面这些需求,链式调用就不够用了:
LangGraph 的设计初衷就是把上述能力做成一个通用、可扩展的基础设施,让开发者不再需要为每一次流程控制重新造轮子。

三、核心概念:图、节点、边、状态

LangGraph 的世界观建立在“图”之上。理解下面四个核心概念,就理解了整个框架。
1. 状态(State)

状态是整个图的共享存储器,是一份可在节点之间传递、更新的数据字典。典型的状态字段包括:
在代码层面,State 通常被定义为一个 TypedDict 或 Pydantic 模型。每个节点函数都会接收当前 State,并返回一个包含更新字段的字典,LangGraph 会自动将更新合并进去。
关键设计: 状态更新默认是“追加”还是“覆盖”可由 Reducer 控制。比如 messages 字段默认会追加新消息,而 current_step 则覆盖旧值。
2. 节点(Nodes)

节点是图的执行单元,通常是 Python 函数(同步或异步)。节点可以做任何事:
每个节点的签名类似:def my_node(state: State) -> dict,输入整个 State,返回需要对 State 做的部分更新。
3. 边(Edges)

边定义了节点之间的控制流。LangGraph 中有三种边:
4. 图(Graph)

StateGraph 实例就是整张图。你通过 .add_node()、.add_edge()、.add_conditional_edges() 方法构建图结构,然后 .compile() 编译成一个可执行的应用。
编译时,LangGraph 会验证图的完整性,并附加运行时引擎,包括状态管理、检查点等能力。

四、工作流程:从构建到运行

下面是一个简化版的“自主研究助手”图构建过程,帮助你感受代码节奏。
  1. from typing import TypedDict, Annotated
  2. from langgraph.graph import StateGraph, END
  3. import operator
  4. # 1. 定义 StateclassResearchState(TypedDict):
  5.     messages: Annotated[list, operator.add]# 自动追加
  6.     web_search_count:int
  7.     final_report:str# 2. 创建 StateGraph
  8. graph = StateGraph(ResearchState)# 3. 定义节点函数defdecide_action(state):# 调用 LLM 决定下一步做什么:搜索还是生成报告
  9.     last_message = state["messages"][-1]# 伪逻辑:如果模型要求搜索则返回 "search",否则 "write_report"if"需要搜索"in last_message:return{"next_action":"search"}else:return{"next_action":"write_report"}defweb_search(state):# 执行网络搜索,将结果追加到 messages
  10.     results ="搜索结果..."return{"messages":[{"role":"tool","content": results}],"web_search_count": state["web_search_count"]+1}defwrite_report(state):# 生成最终报告return{"final_report":"综合报告内容..."}# 4. 添加节点
  11. graph.add_node("decide_action", decide_action)
  12. graph.add_node("web_search", web_search)
  13. graph.add_node("write_report", write_report)# 5. 添加边
  14. graph.set_entry_point("decide_action")# 条件路由:从 decide_action 根据字段决定下一步
  15. graph.add_conditional_edges("decide_action",lambda s: s["next_action"],{"search":"web_search","write_report":"write_report"})# web_search 执行完后回到决策节点,形成循环
  16. graph.add_edge("web_search","decide_action")# write_report 结束后到 END
  17. graph.add_edge("write_report", END)# 6. 编译
  18. app = graph.compile()
复制代码
运行时,你只需提供初始状态并流式读取:
  1. initial_state ={"messages":[{"role":"user","content":"研究 LangGraph 并写报告"}],"web_search_count":0}for output in app.stream(initial_state):print(output)
复制代码
图引擎会自动按照边定义的规则执行节点、更新状态,直到遇见 END。

五、关键能力详解

1. 状态持久化与检查点

graph.compile() 时可以传入一个 checkpointer(内存版或 SQLite/Postgres 版)。每执行完一个“超步骤”,图状态就会被保存。这意味着:
2. 人在回路(Human-in-the-Loop)

LangGraph 引入了 interrupt 机制。你可以在某个节点前设置中断点:
  1. graph.compile(checkpointer=checkpointer, interrupt_before=["write_report"])
复制代码
当运行到 write_report 前,执行会暂停,将控制权返回给调用者。开发者可以展示生成的内容给用户确认,然后通过 app.stream(None, config) 提供修正后继续。这正是实现审批流的基础。
3. 流式执行(Streaming)

.stream() 方法支持多种模式:
这让你能方便地构建实时 UI 更新。
4. 嵌套图(Subgraphs)

你可以把一个图作为另一个图的节点使用,实现多层级复杂工作流。比如主图负责业务逻辑,子图负责专门的验证流程。子图也享受独立的状态管理和检查点。
5. 并行执行

当一个节点有多条出去的普通边,或者用 Send API 实现动态并行时,LangGraph 能并发执行目标节点,然后在汇聚节点(Reducer)中合并结果。这非常适合“扇出-扇入”模式,比如同时对三个搜索引擎发起请求。

六、LangGraph 在 Agent 架构中的位置

目前构建智能体有几大范式:
在 LangGraph 中,Agent 不再是一个黑箱,而是一个可观测、可控制、可干预的可视化拓扑。你可以轻松实现:

七、与其他框架的比较

框架侧重点状态管理循环支持
LangChain (Chain)线性链式调用弱,无内置持久化有限
OpenAI Assistant托管式 Agent平台端托管,黑盒内置,但控制度低
AutoGPT / BabyAGI经典自主 Agent 样例简陋,通常靠文件系统固定循环
LangGraph底层图执行引擎一级公民,检查点+时间旅行原生强大
可以看到,LangGraph 更像是 Agent 的“操作系统”,而不是一个具体的 Agent 实现。你可以在它之上构建任何架构,而框架本身负责所有流程控制的脏活累活。

八、适用场景举例


九、未来展望

LangGraph 正在快速迭代,目前已经支持:
它的目标很明确——成为 LLM 应用进入“生产级流程化”阶段的基础设施。如果你今天写的 Agent 还是一个脆弱的 while 循环加一堆 if 判断,那么 LangGraph 就是你跨入工程化的那扇门。

十、总结

LangGraph 并不神秘。它的本质是:
把一次 LLM 交互视为图上的一个“超步”,用显式的图结构管理状态如何在多个步骤(节点)间流转、合并和复写。
它的价值在于,当你的 AI 应用需要:
不再需要硬编码这些复杂的控制逻辑,而是描述一张图,让 LangGraph 替你可靠地运行它。
对于任何想在生产环境构建稳健、可观测、可中断恢复的 AI 智能体的团队,LangGraph 是目前最值得深入学习和掌握的基础组件之一。

原文地址:https://blog.csdn.net/weixin_43988131/article/details/160602155




欢迎光临 AI创想 (http://llms-ai.com/) Powered by Discuz! X3.4