news 2026/4/1 14:28:57

从 LangChain 到 LangGraph 构建可控 Agent 的工程实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从 LangChain 到 LangGraph 构建可控 Agent 的工程实践

在之前的文章中,我们深入讲解了如何使用LangChain + Ollama构建本地大模型调用方案。
但是,随着业务需求不断增长,我们发现仅仅调用模型已经远远不够——我们希望构建具备条件判断、流程控制、工具调用以及状态记忆的智能 Agent

这时候,LangChain 的create_agent+ LangGraph 的StateGraph就成为了真正面向工程的利器。

今天,我们就来讲清楚:

什么是 LangGraph?为什么它是构建可控 Agent 的未来?如何在最新 API 下用 create_agent 和 StateGraph 构建有状态智能体?


一、为什么要用 LangGraph 构建 Agent?

在 LangChain 最新版本中,Agent API 已经全面升级,官方推荐使用create_agent构建生产级智能体,并基于LangGraph对内部流程进行图结构编排。

create_agent
是一个高阶接口,用于构建图式 Agent。它内部依赖 LangGraph 执行器,在一个状态图中逐步完成模型推理、工具调用、决策流跳转等逻辑。

过去我们可能使用Chain + Logic组合来处理流程,但随着逻辑复杂度增加,线性写法很难维护、扩展和调试。
LangGraph 的图结构可以让我们:

  • 状态(state)表达全局对话或任务信息
  • 节点(nodes)表达流程逻辑
  • 边(edges)表达不同分支与条件
  • 记忆插件实现短期和长期记忆

这组合起来,就形成了一个可控、有状态流程的智能 Agent


二、什么是 StateGraph?

StateGraph是 LangGraph 的核心抽象,它表示一个具有全局状态和节点流转逻辑的图
每个节点本质上是一个函数,这个函数:

  • 接收当前全局状态
  • 返回修改后的状态或跳转指令

它非常适合把“复杂流程问题”映射为“图状态机”,无论是对话、工具调用还是多步骤任务。

简化后的 StateGraph 工作流程如下:

StateGraph(StateType) ├── add_node(name, function) ├── add_edge(source, target) └── compile() → graph.invoke({state input})

解释一下:

  • StateType:定义全局状态结构
  • add_node:定义节点行为逻辑
  • add_edge:定义节点间的流程跳转关系

三、新 API:create_agent如何使用?

从 LangChain 最新版本开始,旧的create_react_agent已被废弃,统一使用create_agent

一个最简单的示例:

from langchain.agents import create_agent from langchain_openai import ChatOpenAI model = ChatOpenAI( model="qwen3:8b", base_url="http://localhost:11434/v1", api_key="your api key", ) agent = create_agent( model=model, tools=[], system_prompt="你是一个智能助手,负责处理用户请求。", ) response = agent.invoke({ "messages": [{"role": "user", "content": "什么是 LangGraph?"}] }) print(response)

📌 重点说明:

  • model可以是任何支持工具调用的聊天模型
  • tools是 Agent 可调用的外部能力(如检索、代码执行等)
  • system_prompt是 Agent 的基础角色指令

实际上,create_agent内部会构建一个 StateGraph,并把模型 + 工具节点组合成可执行流程。


四、结合 StateGraph:构建更复杂的图式 Agent

如果你希望在 Agent 内部实现更复杂的流程(如输入校验、分支工具调用、状态记录等),可以直接使用StateGraph

下面是一个包含两个节点的示例:通过 LLM 生成回答并记录状态。

from typing import TypedDict, Annotated from langchain_openai import ChatOpenAI from langgraph.graph import StateGraph, END from langgraph.graph.message import add_messages from langchain_core.messages import HumanMessage # 1. 定义全局状态 class ChatState(TypedDict): messages: Annotated[list, add_messages] # 2. 初始化模型 llm = ChatOpenAI( model="qwen3:8b", base_url="http://localhost:11434/v1", api_key="your api key", ) # 3. 定义节点 def chat_node(state: ChatState): response = llm.invoke(state["messages"]) return {"messages": [response]} # 4. 构建 StateGraph graph = StateGraph(ChatState) graph.add_node("chat", chat_node) graph.set_entry_point("chat") graph.add_edge("chat", END) graph = graph.compile() # 生成可视化图 with open("/Users/zhoupb/workspace-ai/atnk-ai/data/demo.png", "wb") as f: f.write(graph.get_graph(xray=True).draw_mermaid_png()) # 5. 调用 result = graph.invoke( {"messages": [HumanMessage(content="用一句话介绍什么是 LangGraph?")]}, ) print(result["messages"][-1].content)

在这个例子中:

  • ChatState:全局状态结构
  • chat_node:处理模型逻辑的节点
  • edges:从起点直接进入chat_node,并更新消息状态

你可以在图内使用更复杂的节点连接和条件分支。([docs.langchain.org.cn][2])


五、记忆(Memory)如何集成?

智能体的核心能力之一,就是记住之前的对话或操作历史

LangGraph 提供了开箱即用的短期记忆机制,基于检查点(checkpoint)存储状态。以下是短期记忆的示例:

from langgraph.checkpoint.memory import InMemorySaver #...省略 # 使用检查点保存状态 checkpointer = InMemorySaver() graph = graph.compile(checkpointer=checkpointer) # 使用同一个 thread_id,触发“记忆” config = {"configurable": {"thread_id": "local-chat"}} # 第一轮 result = graph.invoke( {"messages": [HumanMessage(content="用一句话介绍什么是 LangGraph?")]}, config=config ) print(result["messages"][-1].content) print("-" * 100) # 第二轮(保留上下文) result = graph.invoke( {"messages": [HumanMessage(content="用一句话介绍它和 LangChain 的关系?")]}, config=config ) print(result["messages"][-1].content)

同一个thread_id下的状态会被持续保存,实现短期记忆,非常适合多轮对话场景。


六、工程化建议:可控、可视化与部署

在真实工程场景下,图式 Agent 的能力远不止示例那么简单:

1️⃣ 自定义状态扩展

可以在 Agent 内定义更多状态字段,比如用户偏好、执行路径、决策数据等:

class CustomState(TypedDict): messages: list user_settings: dict

调用create_agent时,通过state_schema参数传入,Agent 就会自动维护这些字段。


2️⃣ 集成工具能力

Agent 可以调用检索、代码执行、数据库查询等工具。
工具可以作为节点,或者直接传入tools列表,由 Agent 在执行过程中调用,显著增强实际能力。


3️⃣ 可观测与调试

结合LangSmith Trace等可观测平台,可以:

  • 可视化执行路径
  • 追踪状态变化
  • 调试复杂流程

大幅提高生产环境的可维护性。


七、工程化细节总结

技术点最新 API
构建 Agentcreate_agent()(替代旧的create_react_agent
状态管理StateGraph定义全局状态,并流转节点逻辑
记忆基于checkpoint机制实现短期记忆
自定义状态可通过state_schema扩展
可控流程用节点 + 边 + Command 控制流程

八、结语:从链到图

如果说传统Chain线性的能力组合,那么StateGraph就是有状态的全局控制流机
如果说 Chain 是工具驱动流程片段,Graph 就是工程级的智能协同平台

在 Agent 需求越来越复杂的今天,单靠 Chain 已无法应对多步骤决策、逻辑分支和记忆维护,而LangGraph 的图式设计正是为可控 Agent 而生。

如果你正在做:

  • 多步对话机器人
  • 带外部工具调用的智能体
  • 具有长期记忆的应用
  • 需要可视化与调试的生产系统

那么,从LangChain 到 LangGraph的升级,将是你最值得投入的一条路线

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/30 19:10:41

【无线传感器】动态加权WKNN-TOA融合定位附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

作者头像 李华
网站建设 2026/3/26 9:23:58

摆脱论文困扰!千笔,王者级的降AI率平台

在AI技术深度渗透学术写作的今天,越来越多的学生开始借助AI工具提升论文撰写效率。然而,随着知网、维普、万方等查重系统对AI生成内容的识别能力不断提升,以及Turnitin等国际平台对AIGC(人工智能生成内容)的严格审查&a…

作者头像 李华
网站建设 2026/3/26 18:49:01

告别论文焦虑!百考通AI:你的12000字本科毕业论文智能写作伙伴

对于每一位本科生而言,毕业论文都是一场必须通过的历练。从令人头疼的选题开题,到浩如烟海的文献搜集,再到长达万字的填充撰写,以及最后繁琐的格式调整与查重降重,每一个环节都足以消耗大量的时间和心力。你是否也曾在…

作者头像 李华
网站建设 2026/3/28 9:29:18

百考通AI PPT:用技术告别熬夜,让每一场汇报都专业出彩

你是否也有过这样的经历:为了准备一份开题报告或年终总结的PPT,四处搜寻模板、反复调整格式、熬夜填充内容,整个周末都被吞噬其中?PPT作为学习、工作和学术汇报中最常使用的工具,本应是高效表达的利器,却往…

作者头像 李华
网站建设 2026/3/23 11:48:24

AI写论文权威推荐!4款AI论文生成工具,提升你的论文撰写效率!

你还在为写期刊论文而烦恼吗?面对繁杂的文献、各式各样的格式要求,再加上反复的修订,许多学者都觉得效率低下是常态。不过不用害怕,接下来要给大家推荐的四款AI论文写作工具,经过真实测试,能够从论文文献的…

作者头像 李华
网站建设 2026/3/31 6:42:10

低查重AI教材编写秘籍!专业工具,让教材生成更简单!

编写教材需要依靠大量资料,但传统的资料整合方式已经无法满足现今的需求。过去,从课程标准、学术论文到教学案例,这些信息分散在不同的渠道上,如知网和教研平台,筛选有用信息往往耗时数天。即使资料收集齐全&#xff0…

作者头像 李华