从“手动编码”到“框架真香”:LangGraph实战入门,3步解锁Agent核心能力
从“手动编码”到“框架真香”:LangGraph实战入门,3步解锁Agent核心能力
提及大模型开发框架,你是否也有过这样的困惑:明明调用大模型只需几行Python代码就能实现,像LangChain这类工具似乎显得有些“多余”?甚至会忍不住质疑——引入框架是不是反而增加了开发复杂度,完全没必要?
我曾经就是这类“手搓党”的坚定拥护者,总觉得自己写代码能精准控制每一个环节,框架的封装反而会束缚手脚。直到一次项目开发中,我偶然尝试了LangGraph,才彻底被它的便捷性“打脸”:无论是多轮工具调用的逻辑串联,还是复杂流程的分支控制,它都能处理得丝滑流畅,完全不用像之前那样反复调试代码逻辑。也是从那时起,我对大模型框架的认知被彻底刷新。
今天,我想带大家亲身体验用LangGraph开发的效率飞跃,不仅会拆解核心实战步骤,还会分享我踩过的“手动编码坑”(比如多轮对话时手动维护上下文导致的逻辑混乱、工具调用失败后难以回溯问题等),帮大家避开不必要的弯路,更快上手框架开发。
LangGraph官方提供的教程共分为6个步骤,从基础功能搭建到进阶能力拓展,覆盖了大部分开发场景。不过不用急于求成,今天我们先聚焦前3个核心步骤——别小看这三步,它们看似基础,却能解决80%的Agent开发需求:从搭建能正常对话的基础机器人,到为其集成实用工具(比如联网查询、数据计算),再到赋予它记住多轮对话内容的“记忆”,一套流程下来,就能掌握Agent开发的核心能力,应对日常大部分开发场景。
LangGraph官方教程全步骤(含进阶)
- 构建基础聊天机器人(Build a basic chatbot):实现最核心的对话功能,让机器人能理解并回应简单指令。
- 为机器人集成工具(Add tools):打破“纯对话”限制,让机器人能调用外部工具完成特定任务(如查询天气、处理Excel)。
- 赋予机器人对话记忆(Add memory):解决“对话断档”问题,让机器人能记住历史对话内容,实现连贯交互。
- (进阶) 加入人工干预控制(Add human-in-the-loop controls):在关键流程节点引入人工审核,避免机器人自主决策出错(适用于高风险场景)。
- (进阶) 自定义状态管理(Customize state):根据业务需求灵活定义对话状态,比如区分“用户咨询中”“工具调用中”“任务完成”等状态。
- (进阶) 实现状态回溯功能(Time travel):当流程出错时,可回溯到之前的对话状态重新执行,无需从头开始。
理论说得再多,不如动手实践来得直观。接下来,我们直接进入实战环节,一步步搭建起属于自己的Agent!🚀
1、Langgraph 的基本概念
LangGraph 就是专门为 Agent 量身打造的 “工程蓝图”—— 它在抽象层级上比 LangChain 更高,更聚焦于复杂流程的可视化与可控性。
要理解 LangGraph,首先得明确它对 “Agent” 的定义,官方给出的解释非常清晰:
智能体(Agent)由三大核心组件构成:大型语言模型(LLM)、一组可调用工具、以及提供指令的提示词(prompt)。LLM 会在循环中持续运行:每次迭代时,它会选择要调用的工具、传入输入参数、接收执行结果(观察值),并根据观察值调整下一次操作。这个循环会一直持续,直到满足停止条件 —— 通常是 Agent 收集到足够信息,能为用户生成准确回答时。
LangGraph 的底层架构是有向无环图(DAG),整个图由 “节点” 和 “边” 构成,再配合 “状态” 实现数据流转,三者共同构成了 Agent 的核心骨架:
1. State(状态)
State 是一个共享的数据结构,相当于 Agent 的 “大脑内存”,用来存储整个图运行过程中的关键信息,比如对话历史、工具调用参数、执行结果等。所有节点都能读取 State 中的数据,也能在执行后更新 State,大模型的上下文信息也主要保存在这里。
2. Node(节点)
Node 代表一段具体的处理逻辑,本质是一个函数。它会接收当前的 State 作为输入,执行特定任务(比如调用 LLM 生成回答、触发工具执行),完成后返回更新后的 State。一个 Agent 中可以有多个 Node,比如 “聊天节点” 负责生成对话内容,“工具节点” 负责调用外部工具。
3. Edge(边)
Edge 是连接节点的有向线段,代表状态的流转方向。它定义了 Node 之间的执行顺序,比如 “从 START 节点流向聊天节点”“从工具节点流回聊天节点”,确保整个流程按预期执行。
在 LangGraph 中,只要定义好 State、Node、Edge 并构建成 DAG,就相当于完成了 Agent 的开发。更方便的是,它还支持自动生成 DAG 的可视化图表,能直观看到 Agent 的流程结构,调试时非常高效。
下面我们就基于这三个核心概念,一步步实现 Agent 的基础功能。
第一步:构建基础聊天机器人(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
。
长期记忆主要是通过业务自己来实现的,官方文档给出了一个思路框架,如下的类别内容可以通过长期记忆来保存:
语义记忆:记住事实或概念,用于个性化。
情景记忆:记住如何完成任务的步骤。
程序性记忆:记住执行任务所使用的规则。
这三类记忆官方建议通过长期记忆来保存。下面我们也来实际看一下,如何通过长期记忆来实现。
长期记忆保存类似于字典的存储方式,我们需要定义 namespace
、key
、value
。
读取时,通过 namespace
和 key
来精确获取 value
。或者通过语义检索的方式,通过namespace
、query
来获取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 官方的嵌入器,如果你用的不是官方的接口,就要自己实现了。
2、总结
所以,LangGraph 到底‘香’在哪里呢?我总结了几个让我爱不释手的点:
- 流程控制灵活:支持条件分支、循环等复杂流程控制
- 工具集成简单:工具调用逻辑更加可靠,减少了提示词工程的工作量
- 记忆功能强大:内置短期记忆和长期记忆,方便管理对话状态
通过这三个步骤,你已经掌握了LangGraph的核心用法。下一步可以探索更高级的功能,如人类参与控制、自定义状态管理和时间旅行等特性。
LangGraph 确实是一个强大的 Agent 开发框架,它让复杂的多步骤推理变得更加可控和可靠。对于需要调用多个工具、维护对话状态的场景,LangGraph 绝对是构建复杂 Agent 的一把瑞士军刀。希望这篇入门能帮你打开新世界的大门!
🛠️ 本文所有代码都已开源在 TinyCodeBase 仓库中:
(https://github.com/codemilestones/TinyCodeBase)
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套 AI 大模型突围资料包:
- ✅ 从零到一的 AI 学习路径图
- ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
- ✅ 百度/阿里专家闭门录播课
- ✅ 大模型当下最新行业报告
- ✅ 真实大厂面试真题
- ✅ 2025 最新岗位需求图谱
所有资料 ⚡️ ,朋友们如果有需要 《AI大模型入门+进阶学习资源包》,下方扫码获取~
① 全套AI大模型应用开发视频教程
(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)
② 大模型系统化学习路线
作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
③ 大模型学习书籍&文档
学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
④ AI大模型最新行业报告
2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
⑤ 大模型项目实战&配套源码
学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
⑥ 大模型大厂面试真题
面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
以上资料如何领取?
为什么大家都在学大模型?
最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!
不出1年,“有AI项目经验”将成为投递简历的门槛。
风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!
这些资料真的有用吗?
这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
以上全套大模型资料如何领取?
更多推荐
所有评论(0)