程序员必看!LangGraph:大模型Agent开发的“瑞士军刀“,手把手教程(收藏必学)

提及大模型开发框架,你是否也曾和我有过同样的想法——觉得LangChain这类工具有些“画蛇添足”?毕竟凭借几行Python代码,似乎就能实现不少功能,没必要特意依赖框架。

我之前一直抱着这样的心态,直到接触到LangGraph才彻底改变看法。毫不夸张地说,它在工具调用场景中的流畅体验,连我这种习惯“手写代码解决问题”的开发者都忍不住感叹“好用到超出预期”。今天,我就结合自己的使用经历和踩坑经验,带大家一步步了解LangGraph的核心优势,顺便拆解它的入门用法。

官方文档将LangGraph的使用教程分为6个步骤,考虑到实用性和学习效率,我们先聚焦前3个基础步骤。别小看这三步,掌握它们之后,80%的常规Agent开发需求都能轻松应对。剩下的3个进阶步骤(添加人工干预循环、自定义状态结构、实现“时间旅行”功能),后续再慢慢深入探索。

  1. 搭建基础聊天机器人(Build a basic chatbot)
  2. 为机器人集成工具调用能力(Add tools)
  3. 给机器人赋予记忆功能(Add memory)

LangGraph的核心概念解析

如果把LangChain比作大模型开发的“通用工具箱”,里面装满了各种零散但实用的组件,那么LangGraph更像是专门为Agent开发设计的“工程蓝图”——它不仅整合了必要的功能,还提供了清晰的流程框架,在设计维度上比LangChain更聚焦、更高级。

要理解LangGraph的工作逻辑,首先得明确它对“智能体(Agent)”的定义。官方文档中是这样描述的:

智能体(Agent)由三大核心部分构成:大型语言模型(LLM)、一组可调用的工具,以及用于传递指令的提示词(prompt)。LLM会在一个循环流程中持续运行:每次迭代时,它会根据当前信息选择要调用的工具、传入对应的输入参数,待接收工具返回的结果(即“观察值”)后,再基于这个结果规划下一次操作。这个循环会一直持续,直到满足预设的停止条件——通常是智能体收集到足够信息,能够向用户输出最终答案时停止。

从技术架构来看,LangGraph的核心是一个有向无环图(DAG) 。这个图里包含多个“节点”,每个节点对应一段具体的处理逻辑;节点之间通过“有向边”连接,这些边则代表了逻辑流程的转换关系。而支撑整个图运行的,是“状态”这一关键数据结构。下面我们就详细拆解这三个核心概念:

1. State(状态)

State是整个LangGraph系统中的“数据中枢”,它以共享数据结构的形式,存储着Agent运行过程中的所有关键信息,比如对话历史记录、工具调用返回的结果、用户输入的原始需求等。无论是哪个节点,都能读取State中的数据,也能在执行完自身逻辑后更新State——可以说,State是串联起所有节点的“桥梁”。比如大模型需要的上下文信息,就会统一保存在State中,方便每次调用时直接读取。

2. Node(节点)

Node本质上是一段封装好的处理逻辑函数,它的核心作用是“处理数据并更新状态”。每个Node都会接收当前的State作为输入,在执行完自身逻辑(比如调用LLM生成回答、调用外部工具获取数据等)后,返回一个更新后的State。举个例子:如果某个Node负责“调用天气查询工具”,它会先从State中读取用户的地理位置信息,然后调用工具获取天气数据,最后将获取到的天气结果写入State,传递给下一个节点。

3. Edge(边)

Edge是连接不同Node的“路径标识”,它明确了State在不同节点之间的流转方向,也就是逻辑流程的转换关系。比如,当“天气查询Node”完成数据获取后,State需要传递给“结果整理Node”来生成自然语言回答,这两个节点之间的连接就由一条Edge来定义。

值得一提的是,LangGraph还有一个非常实用的功能:在定义完DAG结构后,它可以自动生成对应的图形化示意图。这个示意图能直观展示Agent的整体流程——哪个节点负责什么功能、数据如何在节点间流转,一目了然,大大降低了我们理解和调试Agent结构的成本。

接下来,我们就基于State、Node、Edge这三个核心元素,从最基础的“搭建聊天机器人”开始,动手实践LangGraph的用法。

第一步:Build a basic chatbot

让我们从一个最简单的聊天机器人开始。LangGraph 的核心是状态管理,所以我们首先需要定义状态结构和节点函数。

from langgraph.graph import StateGraph, START, END
from typing_extensions import TypedDict
from typing import Annotated, Callable, Any, Dict
from langgraph.graph.message import add_messages
from langchain_openai import ChatOpenAI

from config import AgentConfig

main_agent_config = AgentConfig(
    model_name="Doubao-1.5-lite-32k",
    temperature=0.1,
    max_tokens=4000,
)

classState(TypedDict):
    messages: Annotated[list, add_messages]

if __name__ == "__main__":
    graph = StateGraph(State)

    llm = ChatOpenAI(
        model=main_agent_config.model_name,
        temperature=main_agent_config.temperature,
        max_tokens=main_agent_config.max_tokens,
        openai_api_key=main_agent_config.openai_api_key,
        openai_api_base=main_agent_config.openai_base_url,
    )

    def 
chat_node(state: State):
        result = llm.invoke(state["messages"])
        return {"messages": [result]}
    
    graph.add_node("chat", chat_node)

    graph.add_edge(START, "chat")
    graph.add_edge("chat", END)

    app = graph.compile()
    result = app.invoke({"messages": [{"role": "user", "content": "你好呀朋友"}]})
    print(result.get("messages", [])[-1].content)

看,我们定义了一个 chat 节点,然后把 START(起点)和 END(终点)这两个特殊节点连接到它上面,就完成了整个图的构建。每个 LangGraph 都会有 START 和 END 节点,作为 Agent 的起点和终点。

这个简单的例子展示了LangGraph的基本结构:状态定义、节点函数、图构建和编译

还可以执行 app.get_graph() 来获取图的结构,这对于调试复杂流程非常有帮助。

# 生成图的可视化图片
graph_image= app.get_graph().draw_mermaid_png(output_file_path="agent_graph.png")

Agent基本流程图

第二步:Add tools

现在让我们添加工具调用能力,这是Agent的核心功能。

和之前手写 ReAct 框架不同,使用 LangGraph 调用工具十分简单,我们只需要定义一个专门处理工具调用的节点,并设置好条件路由(Conditional Edges)即可。

    tools = [Tools.google_search, Tools.code_check]
    llm_with_tools = llm.bind_tools(tools)

    defchat_node(state: State):
        result = llm_with_tools.invoke(state["messages"])
        return {"messages": [result]}
    
    graph.add_node("chat", chat_node)
    graph.add_node("tools", ToolNode(tools))

    graph.add_edge(START, "chat")
    graph.add_conditional_edges(
        "chat",
        tools_condition,  # Routes to "tools" or "__end__"
        {"tools": "tools", "__end__": "__end__"}
    )
    graph.add_edge("tools", "chat")
    graph.add_edge("chat", END)

    app = graph.compile()
    result = app.invoke({"messages": [{"role": "user", "content": "你好呀朋友"}]})
    print(result.get("messages", [])[-1].content)

我们新增了一个 tools 节点,并用 add_conditional_edges 定义了条件:当 chat 节点输出的消息包含工具调用请求时,流程就走向 tools 节点;否则就走向 END。工具执行完毕后,再流回 chat 节点,形成一个循环。

我们再来看看现在的图结构:

Agent和工具节点流程图

第三步:Add memory

一个能记住对话历史的 Agent 才算得上是合格的。LangGraph 的记忆模式一共提供了两种,短期记忆和长期记忆。

短期记忆

短期记忆主要保存了当前对话的上下文,包括了用户的问题和Agent的回答。

短期记忆主要挑战是,长对话难以存储,如何管理长上下文还是一个值得研究的问题。

LangGraph 中,短期记忆是基于 Checkpointer 来实现的。下面看一下具体的实现方式。

最后添加记忆功能,让Agent能够记住对话历史,首先创建一个记忆体。教程里面使用的 InMemorySaver,我们使用SqliteSaver来尝试下。

import sqlite3
from langgraph.checkpoint.sqlite import SqliteSaver

conn = sqlite3.connect("checkpoints.sqlite", check_same_thread=False)
memory = SqliteSaver(conn)

app = graph.compile(checkpointer=memory)

除此之外,在推理时,还需要添加如下的config配置,使用 thread_id 来表示对话的唯一性。

config = {"configurable": {"thread_id": "1"}}

result = app.invoke(
    input = {"messages": [{"role": "user", "content": "你好呀朋友"}]},
    config = config
)

我们来尝试下记忆功能的效果如何:

user: 我是代码里程碑,你记住了吗?
assistant: 用户表明身份为代码里程碑,希望调用具有记忆功能的工具来记住用户身份,但当前工具列表中没有此类工具,因此直接回答用户。记住啦,你是代码里程碑。 请问你有代码相关的问题需要我帮忙吗?比如要不要调用 `code_check` 工具来检查一段代码?你可以告诉我代码的语言类型和具体内容。 

user: 你知道我是谁吗?
assistant: 你是代码里程碑呀。 如果你有代码相关需求,比如想检查某种语言的代码是否存在问题,我可以帮你调用 `code_check` 函数,你只需要告诉我代码的语言类型和具体代码内容就行。

✅ 成功!Agent 已经能记住我们的身份了。LangGraph 的记忆机制通过 thread_id 自动管理了会话状态的存取,非常方便。

长期记忆

LangGraph 中的长期记忆允许系统在不同对话或会话中保留信息。与短期记忆不同,长期记忆保存在自定义的"命名空间"中。

长期记忆在Langgraph中主要使用了store来实现。典型实例是 InMemoryStore

长期记忆主要是通过业务自己来实现的,官方文档给出了一个思路框架,如下的类别内容可以通过长期记忆来保存:

语义记忆:记住事实或概念,用于个性化。

情景记忆:记住如何完成任务的步骤

程序性记忆:记住执行任务所使用的规则

这三类记忆官方建议通过长期记忆来保存。下面我们也来实际看一下,如何通过长期记忆来实现。

长期记忆保存类似于字典的存储方式,我们需要定义 namespacekeyvalue

读取时,通过 namespacekey 来精确获取 value。或者通过语义检索的方式,通过namespacequery来获取value

下面是一个使用长期记忆的例子:

embeddings = AIHubMixEmbedding()
store = InMemoryStore(index={"embed": embeddings, "dims": 1536})

namespace = ("users", "memories")
store.put(  
    namespace,  
    "user_123",  
    {
        "name": "John Smith",
        "language": "English",
        "food_preference" : "I like pizza",
    } 
)
store.put(
    namespace,
    "user_124",
    {
        "food_preference" : "I like apple",
    }
)

defget_rules(query: str)-> str:
    """
    获取用户规则, 用于回答用户问题
    """
    from langgraph.config import get_store
    return get_store().search(namespace, query=query, limit=1)

tools = [get_rules]
llm_with_tools = llm.bind_tools(tools)

app = graph.compile(store=store)
result = app.invoke(
    input = {"messages": [{"role": "user", "content": "do you know my name?"}]},
    config = config
)
print(result.get("messages", [])[-1].content)

graph 在编译时传入的 store 就是长期记忆的存储。可以在任何地方通过 get_store() 来获取 store,然后进行保存和检索。

说实话,我感觉这个内置的长期记忆功能有点“鸡肋”。它本质上是提供了一个基础的 RAG 能力(存储、语义检索),但功能比较初级。如果你的项目中已经有更强大的外部 RAG 系统,我更建议直接在工具函数(如 get_rules)里调用你自己的 RAG 服务。

对了,还有个蛋疼的事情,AIHubMixEmbedding 是我自己实现的,Langchain 只有 openai 官方的嵌入器,如果你用的不是官方的接口,就要自己实现了。

总结

所以,LangGraph 到底‘香’在哪里呢?我总结了几个让我爱不释手的点:

  1. 流程控制灵活:支持条件分支、循环等复杂流程控制
  2. 工具集成简单:工具调用逻辑更加可靠,减少了提示词工程的工作量
  3. 记忆功能强大:内置短期记忆和长期记忆,方便管理对话状态

通过这三个步骤,你已经掌握了LangGraph的核心用法。下一步可以探索更高级的功能,如人类参与控制、自定义状态管理和时间旅行等特性。

LangGraph 确实是一个强大的 Agent 开发框架,它让复杂的多步骤推理变得更加可控和可靠。对于需要调用多个工具、维护对话状态的场景,LangGraph 绝对是构建复杂 Agent 的一把瑞士军刀。希望这篇入门能帮你打开新世界的大门!

🛠️ 本文所有代码都已开源在仓库中:

(https://github.com/codemilestones/TinyCodeBase)

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

在这里插入图片描述

为什么要学习大模型?

我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年,人才缺口已超百万,凸显培养不足。随着AI技术飞速发展,预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。

在这里插入图片描述

在这里插入图片描述

大模型入门到实战全套学习大礼包

1、大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!

img


2、大模型学习书籍&文档

学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。

在这里插入图片描述

3、AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

img

4、大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。

img

5、大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余

img

适用人群

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值