解锁 LangGraph:通过 3 个迷你程序学习 Agent 编程的基本思想
LangGraph 是一种基于图的编程框架,用于组织和管理复杂任务的工作流。它的核心思想是将任务分解为“节点”(Node),并通过“边”(Edge)定义这些节点之间的逻辑关系。相比于传统的线性流程控制,LangGraph 的图结构更适合处理动态任务分支、多任务协作等复杂场景。主要优势包括:模块化设计:任务逻辑清晰且易于扩展。灵活的状态管理:通过图的结构实现动态任务切换和条件处理。多工具集成:支持接
LangGraph 是一种将任务流程模块化的编程框架,通过状态图(StateGraph)构建灵活且高效的智能对话系统。本篇文章将通过 3 个迷你程序逐步深入 LangGraph 的图编程核心思想,帮助您快速上手并了解其实际应用潜力,初步了解 Agent 工作流控制的方法。
1. LangGraph 简介
LangGraph 是一种基于图的编程框架,用于组织和管理复杂任务的工作流。它的核心思想是将任务分解为“节点”(Node),并通过“边”(Edge)定义这些节点之间的逻辑关系。
相比于传统的线性流程控制,LangGraph 的图结构更适合处理动态任务分支、多任务协作等复杂场景。
主要优势包括:
-
模块化设计:任务逻辑清晰且易于扩展。
-
灵活的状态管理:通过图的结构实现动态任务切换和条件处理。
-
多工具集成:支持接入外部工具和大模型(如 OpenAI 和 Google Gemini)。
2. 为什么选择 LangGraph?
在传统的对话系统中,开发者常常面临以下挑战:
-
任务分支逻辑复杂,难以维护;
-
多工具协作的集成成本高;
-
大规模上下文处理缺乏高效解决方案。
LangGraph 则通过状态图和内存管理等特性,解决了这些痛点。例如,LangGraph 支持通过条件逻辑选择合适的工具或模型,同时保留会话上下文,显著提升开发效率。
3. LangGraph 编程的 6 个基本步骤
-
定义任务的状态结构(State)。
-
创建各任务逻辑的节点函数(Node)。
-
初始化任务的状态图(StateGraph)。
-
定义节点之间的连接关系(Edge)。
-
添加内存管理或条件处理(可选)。
-
编译图并运行任务流。
4. 通过 3 个迷你程序掌握 LangGraph
以下我们设计了 3 个渐进式的迷你程序,涵盖基础对话、上下文记忆和工具调用等核心功能。
4.1 程序一:基础对话系统
目标:实现一个简单的聊天机器人,处理用户输入并返回回复。
from typing import Annotated, TypedDict
from langgraph.graph import StateGraph, START
from langgraph.graph.message import add_messages
from llm_utils import get_llm
# 定义状态类型
class State(TypedDict):
messages: Annotated[list, add_messages]
def chatbot(state: State):
"""简单聊天机器人"""
llm = get_llm()
return {"messages": [llm.invoke(state["messages"])]}
# 创建并编译图
graph = (
StateGraph(State)
.add_node("chatbot", chatbot)
.add_edge(START, "chatbot")
.compile()
)
def chat():
"""运行聊天界面"""
while True:
user_input = input("User: ")
if user_input.lower() in ["quit", "exit", "q"]:
print("Goodbye!")
break
# 通过图处理用户输入
for output in graph.stream({"messages": [("user", user_input)]}, {}):
for value in output.values():
print("Assistant:", value["messages"][-1].content)
if __name__ == "__main__":
chat()
程序亮点:
-
使用 LangGraph 的
StateGraph模块,构建了一个简单的线性任务流。 -
定义了消息的输入输出格式。
Graph

本程序只有一个节点
运行结果
model_type: azure
Azure OpenAI Configuration:
Deployment Name: gpt-4o
API Version: 2024-08-01-preview
User: 你好!我是“非"
Assistant: 你好!“非”,很高兴认识你。有什么我可以帮忙的吗?
User: 请讲一个 AI 智能体的笑话吧
Assistant: 当然可以!这是一个关于AI智能体的笑话:
有一天,一个程序员问他的AI助手:“你知道什么是幽默吗?”
AI助手回答:“当然知道!幽默是一种通过语言、动作或其他方式引发笑声的艺术。”
程序员笑了笑,说:“那你能讲个笑话吗?”
AI助手思考了一下,然后说:“为什么计算机喜欢冷饮?”
程序员好奇地问:“为什么?”
AI助手回答:“因为它们总是需要一些‘冷却’!”
程序员忍不住笑了:“看来你真的懂幽默!”
AI助手自豪地说:“当然,我可是经过‘深度学习’的!”
希望你喜欢这个笑话!
User: 还记得我的名字吗?
Assistant: 对不起,我无法记住或访问之前的对话内容。因此,我不知道你的名字。你可以告诉我你的名字吗?
User: quit
Goodbye!
4.2 程序二:带记忆功能的对话系统
目标:实现上下文记忆功能,使机器人能够记住多轮对话的内容。
import os
from typing import Annotated, TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from langgraph.checkpoint.memory import MemorySaver
from llm_utils import get_llm
from dotenv import load_dotenv
# 从.env加载环境变量
load_dotenv()
# 定义状态类型
class State(TypedDict):
messages: Annotated[list, add_messages]
# 初始化内存管理器和大模型
memory = MemorySaver()
llm = get_llm()
def chatbot(state: State):
"""支持记忆的聊天机器人"""
response = llm.invoke(state["messages"])
return {"messages": [response], "next": END}
# 创建并编译图
graph = (
StateGraph(State)
.add_node("chatbot", chatbot)
.add_edge(START, "chatbot")
.add_edge("chatbot", END)
.compile(checkpointer=memory)
)
def chat(thread_id: str = "default"):
"""运行支持记忆的聊天界面"""
config = {"configurable": {"thread_id": thread_id}}
while True:
user_input = input("User: ")
if user_input.lower() in ["quit", "exit", "q"]:
print("Goodbye!")
break
# 通过图处理输入,自动保存上下文
for output in graph.stream({"messages": [("human", user_input)]}, config=config):
for value in output.values():
print("Assistant:", value["messages"][-1].content)
if __name__ == "__main__":
chat()
程序亮点:
-
使用
MemorySaver实现会话记忆功能。 -
支持通过
thread_id管理不同用户的会话。
Graph

虽然增加了记忆功能,本程序也只有一个节点
运行结果
model_type: azure
Azure OpenAI Configuration:
Deployment Name: gpt-4o
API Version: 2024-08-01-preview
User: 你好!我的名字是“非”
Assistant: 你好,非!很高兴认识你。有什么我可以帮忙的吗?
User: 讲个 AI 智能体的笑话吧
Assistant: 当然可以!这是一个关于AI智能体的笑话:有一天,一个程序员问他的AI助手:“你知道什么是递归吗?”
AI助手回答:“当然知道!递归就是当你问我什么是递归时,我会告诉你递归就是当你问我什么是递归时,我会告诉你递归就是当你问我什么是递归时……”
程序员打断道:“好了好了,我明白了!”
希望你喜欢这个笑话!如果还有其他问题或需要帮助的地方,请随时告诉我。
User: 记得我的名字吗?
Assistant: 当然记得!你的名字是“非”。有什么我可以帮忙的吗?
User: quit
Goodbye!
4.3 程序三:工具调用与任务分支
目标:集成外部工具,并根据条件动态选择任务分支。
from typing import Annotated
from langgraph.graph import StateGraph, START
from langgraph.graph.message import add_messages
from langgraph.prebuilt import ToolNode, tools_condition
from langgraph.checkpoint.memory import MemorySaver
from llm_utils import get_llm
from langchain_community.tools.tavily_search import TavilySearchResults
# 定义状态类型
class State(TypedDict):
messages: Annotated[list, add_messages]
llm = get_llm()
tool = TavilySearchResults(max_results=2)
tools = [tool]
llm_with_tools = llm.bind_tools(tools)
def chatbot(state: State):
return {"messages": [llm_with_tools.invoke(state["messages"])]}
graph_builder = StateGraph(State)
graph_builder.add_node("chatbot", chatbot)
graph_builder.add_node("tools", ToolNode(tools=[tool]))
graph_builder.add_conditional_edges("chatbot", tools_condition)
graph_builder.add_edge("tools", "chatbot")
graph_builder.add_edge(START, "chatbot")
memory = MemorySaver()
graph = graph_builder.compile(checkpointer=memory)
def chat():
"""运行带工具集成的聊天界面"""
while True:
user_input = input("User: ")
if user_input.lower() in ["quit", "exit", "q"]:
print("Goodbye!")
break
for output in graph.stream({"messages": [("human", user_input)]}):
for value in output.values():
print("Assistant:", value["messages"][-1].content)
if __name__ == "__main__":
chat()
程序亮点:
-
集成 Tavily 搜索工具,支持多轮任务动态分支处理。
-
通过条件判断(tools_condition)实现灵活的任务切换。
Graph

本程序增加了一个 tools 条件节点
运行结果
model_type: azure
Azure OpenAI Configuration:
Deployment Name: gpt-4o
API Version: 2024-08-01-preview
User: 你好!我叫非
Assistant: 你好,非!很高兴认识你。有什么我可以帮忙的吗?
User: 北京明天冷吗?
Assistant:
Assistant: [{“url”: “http://bj.cma.gov.cn/fzlm/index.html”, “content”: “北京市气象局. 36小时天气预报(2024-11-27 05:37:05北京市气象台发布) 今天白天 最高气温3℃ 晴转多云,山区有零星小雪 3、4级,阵风6、7级 偏北风; 今天夜间 最低气温-4℃ 多云转晴 3级左右,阵风5级 偏北风; 明天白天 最高气温7℃ 晴间多云 3、4级转2级 偏北风”}, {“url”: “https://tianqi.2345.com/tomorrow-54511.htm”, “content”: “全国天气 15天天气 明天天气 40天天气 空气质量 历史天气 国际天气 天气资讯 万年历 景点天气 当前:全国天气> 北京天气预报7天 今天天气 明天天气 一周天气 15天天气 昨天 11/18 多云 -1~8° 东南风2级 优 今天 11/19 多云 0~10° 东北风1级 优 明天 11/20 晴 1~13° 西北风2级 优 周六 11/23 多云 0~8° 东南风1级 良 周日 11/24 阴转小雨 1~7° 东南风1级 良 01:00 北风 1级 优 02:00 北风 1级 优 03:00 北风 1级 优 04:00 东北风 1级 优 05:00 东北风 1级 优 06:00 东北风 1级 优 07:00 北风 1级 优 08:00 北风 1级 优 14:00 西北风 2级 良 15:00 西北风 2级 良 17:00 西南风 1级 良 更多> PM2.5 _20_优 PM10 _35_优 _3_优 _26_优 _3_优 更多> 国际天气 PM2.5 历史天气 生活指数 更多> 全国天气 国际天气 历史天气 景点天气 万年历 天气资讯 空气质量 天气地图 手机网页版 手机APP官网 天气插件 XML地图 更正您的地理位置 意见反馈”}]
Assistant: 根据最新的天气预报,北京明天天气如下:
白天:晴间多云,最高气温7℃,偏北风3、4级转2级。
夜间:多云转晴,最低气温-4℃,偏北风3级左右,阵风5级。
总体来说,明天北京的气温较低,尤其是夜间会比较冷,建议注意保暖。
User: 还记得我的名字吗?
Assistant: 当然记得,你的名字是非。有什么其他需要帮忙的吗?
User: quit
Goodbye!
5. 总结
LangGraph 通过模块化设计、高效的状态管理和强大的工具集成能力,帮助开发者轻松构建复杂的任务工作流。从简单的对话系统到支持记忆和工具调用的多功能智能体,LangGraph 展现了其强大的灵活性和扩展性。
未来,您可以探索更复杂的场景,例如多智能体协作或任务自动化,实现更高效的 AI 系统开发。
希望本文能帮助您快速入门 LangGraph,并激发您的创造力!
如何学习AI大模型 ?
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。【保证100%免费】🆓
CSDN粉丝独家福利
这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以扫描下方二维码&点击下方CSDN官方认证链接免费领取 【保证100%免费】
读者福利: 👉👉CSDN大礼包:《最新AI大模型学习资源包》免费分享 👈👈
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
👉1.大模型入门学习思维导图👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过AI大模型的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。(全套教程文末领取哈)
👉2.AGI大模型配套视频👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。


👉3.大模型实际应用报告合集👈
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(全套教程文末领取哈)

👉4.大模型落地应用案例PPT👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(全套教程文末领取哈)

👉5.大模型经典学习电子书👈
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。(全套教程文末领取哈)

👉6.大模型面试题&答案👈
截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。(全套教程文末领取哈)

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习
CSDN粉丝独家福利
这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以扫描下方二维码&点击下方CSDN官方认证链接免费领取 【保证100%免费】
读者福利: 👉👉CSDN大礼包:《最新AI大模型学习资源包》免费分享 👈👈
更多推荐

所有评论(0)