【干货收藏】智能体框架入门指南:LangGraph从零到精通
智能体框架代表了人工智能系统设计方式的范式转变。与依赖静态、预定义工作流程的传统人工智能应用不同,智能体框架引入了动态、自适应的系统,这些系统能够自主感知、推理和行动。这些框架可以将复杂的任务分解成更小的子任务,由专门的智能体来处理,这些智能体协同工作以实现更广泛的目标。通过利用大型语言模型 (LLM),代理框架可以管理工作流程、做出决策并无缝集成工具,使其成为动态决策和实时问题解决等高级应用的理
本文介绍了智能体框架的概念、重要性及常用框架,重点讲解了LangGraph的架构、状态管理及实际应用。通过示例展示了如何使用LangGraph构建具有记忆功能、人机交互能力的智能体系统,以及在客户服务、研究助手等场景的应用。文章强调了智能体框架在推动AI自主性、结构化和交互性发展方面的重要作用。
一、引言
智能体框架通过赋予自主系统感知、推理和动态行动的能力,彻底革新了人工智能。本节将探讨智能体框架的核心概念,并重点阐述开源解决方案对于现代人工智能开发的创新和可扩展性至关重要的原因。
1.1 什么是智能体框架?
智能体框架代表了人工智能系统设计方式的范式转变。与依赖静态、预定义工作流程的传统人工智能应用不同,智能体框架引入了动态、自适应的系统,这些系统能够自主感知、推理和行动。这些框架可以将复杂的任务分解成更小的子任务,由专门的智能体来处理,这些智能体协同工作以实现更广泛的目标。 通过利用大型语言模型 (LLM),代理框架可以管理工作流程、做出决策并无缝集成工具,使其成为动态决策和实时问题解决等高级应用的理想选择。
1.2 它们为什么重要?
从零开始构建智能体绝非易事。像 LangGraph、CrewAI 和 OpenAI Swarm 这样的框架简化了这一过程,使开发人员能够专注于应用程序逻辑,而无需为状态管理、编排和工具集成重复造轮子。
二、常用的代理框架和库
现在,让我们深入了解一下目前最主要的 AI 代理框架和工具:
2.1 Langchain
LangChain 是一个强大且适应性强的框架,能够简化大型语言模型 (LLM) 应用的开发。凭借其丰富的工具集和抽象层,开发者可以设计出功能强大的 AI 代理,这些代理能够进行复杂的推理、任务执行,并与外部数据源和 API 进行交互。
Github 链接: https://github.com/langchain-ai/langchain/tree/master/libs/langchain/langchain/agents
文档链接: https://python.langchain.com/docs/introduction/
2.2 LangGraph
LangGraph 是 LangChain 的一个扩展,它支持使用大型语言模型 (LLM) 创建有状态的多参与者应用程序。它尤其适用于构建规划、反思、自反和多智能体协调的复杂交互式人工智能系统。
GitHub 链接: https://github.com/langchain-ai/langgraph
文档链接: https://langchain-ai.github.io/langgraph/
2.3 CrewAI
CrewAI 是一个用于编排角色扮演型AI agents的框架。它允许开发者创建一支由AI agents组成的“团队”,每个agents都拥有特定的角色和职责,共同协作完成复杂任务。该框架尤其适用于构建能够解决需要多元专业知识和协同努力的多方面问题的协作型人工智能系统。
GitHub 链接: https://github.com/crewAIInc/crewAI
文档链接: https://docs.crewai.com/
2.4 Microsoft Semantic Kernel
Microsoft Semantic Kernel旨在弥合传统软件开发与人工智能能力之间的鸿沟。它尤其专注于将大型语言模型(LLM)集成到现有应用程序中。该框架为开发人员提供了一系列工具,使他们无需彻底改造现有代码库即可集成人工智能功能。
该 SDK 轻量级且支持多种编程语言,使其能够高度适应各种开发环境。其编排器能够管理复杂的多步骤 AI 任务,使开发人员能够在应用程序中创建复杂的 AI 驱动工作流程。
GitHub 链接: https://github.com/microsoft/semantic-kernel
文档链接: https://learn.microsoft.com/en-us/semantic-kernel/
2.5 Microsoft AutoGen
Microsoft AutoGen 是一个开源框架,旨在构建高级 AI 代理和多代理系统。AutoGen 由微软研究院开发,提供了一套灵活而强大的工具包,用于创建对话式和任务完成型 AI 应用。它强调模块化、可扩展性和易用性,使开发人员能够高效地构建复杂的 AI 系统。
文档链接: https://microsoft.github.io/autogen/stable/user-guide/agentchat-user-guide/
GitHub 链接: https://github.com/microsoft/autogen
2.6 Smolagents
Smolagents 是一个前沿的开源框架,旨在革新人工智能代理的开发方式。它为开发者提供了一套全面的工具包,用于构建智能的、协作式的多代理系统。该框架注重灵活性和模块化,能够创建既可独立运行也可在人类监督下协作运行的复杂人工智能系统。
文档: https://huggingface.co/docs/smolagents/en/index
GitHub 链接: https://github.com/huggingface/smolagents
2.7 AutoGPT
AutoGPT 基于强大的 GPT-4 语言模型,能够通过语言输入执行目标导向型任务,代表了自主AI agents领域的一项重大进步。这款顶尖人工智能助手将决策能力提升到了一个全新的高度,超越了基本的反射型代理,并集成了诸多复杂功能,使其成为各种应用场景中不可或缺的工具。
文档: https://huggingface.co/docs/smolagents/en/index
GitHub 链接: https://github.com/huggingface/smolagents
2.8 Agno (Phidata)
我们将讨论的最后一个 AI 代理框架是 Phidata 。它是一个多模态代理框架,可以开发协同工作的代理系统。它还被设计成可以与内存和工具等组件配合使用,以帮助它们自主且稳定地运行。
默认情况下,Phidata 代理支持多模态数据,例如文本、图像和音频数据,无需依赖外部工具即可发挥其价值。该框架还提供 Agentic UI,方便用户与代理进行可视化交互。此外,他们还率先推出了 Agentic RAG(红黄绿蓝绿)功能,使代理能够搜索知识库。
文档: https://docs.phidata.com/introduction
GitHub 链接: https://github.com/agno-agi/phidata
三、智能体框架比较
下表对本文讨论的主要人工智能代理框架进行了概览式比较,旨在突出每个框架的独特优势和重点领域,帮助开发人员和研究人员根据自身需求选择最合适的工具。

四、深入了解 LangGraph
LangGraph 是由 LangChain 团队构建的一个库,旨在帮助开发者创建基于图的单智能体或多智能体 AI 应用。作为一个底层框架,LangGraph 允许您控制智能体之间的交互方式、使用的工具以及信息在应用内的流动方式。
4.1 什么是Graph?
想象一下,你有一堆数据,这些数据可以表示成一个网络,其中每个数据或实体都与其他数据或实体存在关联,这种关联可以是多种类型(一对一、一对多、多对多等等)。图中有两个主要组成部分:节点和边。
这类数据的例子包括交通运输数据或社交媒体网络,其中每个实体或用户都与其他实体或用户存在关联,而图则可以轻松地将这类数据可视化。
图分为两种类型:
- 有向图 ——在有向图中,边具有方向,表示节点之间的流动或关系(例如,在社交媒体上关注)。
- 无向图 ——在无向图中,边没有方向,表示对称关系(例如,LinkedIn 上的联系)。

4.2 关键概念
4.2.1 图结构
LangGraph 设计的核心在于以图的形式展现应用程序的工作流程。该图包含两个主要元素:
- Nodes ——工作的构建模块:LangGraph 中的每个节点代表应用程序中一个独立的工作单元或操作。这些节点本质上是封装特定任务的 Python 函数。该任务可能涉及多种操作,例如:
- 与LLM直接沟通,进行文本生成、摘要或其他语言相关任务。
- 与外部工具和 API 交互,以获取数据或在现实世界中执行操作。
- 通过格式化、过滤或转换等过程来处理数据。
- 与用户互动以收集意见或展示信息。
- Edges——引导信息和控制流:边在 LangGraph 中扮演着连接组织的角色,建立信息流路径并决定操作顺序。LangGraph 支持多种边类型:
- 简单边 :表示从一个节点到另一个节点的直接且无条件的流。第一个节点的输出作为后续节点的输入,形成线性级联。
- 条件边 :条件边引入了动态机制,使工作流能够根据特定节点的操作结果进行分支。例如,根据用户的响应,图可以决定终止交互或继续调用某个工具。这种决策能力对于创建能够适应不同情况的应用程序至关重要。

4.2.2 State管理
管理多智能体系统的一个关键方面是确保所有智能体对任务的当前状态达成共识。LangGraph 通过自动状态管理解决了这个问题。这意味着该库会自动跟踪和更新中央状态对象,并在智能体执行任务时自动完成。
此state对象充当关键信息的存储库,这些信息需要在工作流程的不同阶段访问。这些信息可能包括:
- 对话历史 :在聊天机器人应用程序中,状态可以存储用户和机器人之间正在进行的对话,从而实现上下文感知响应。
- 上下文数据 :与当前任务相关的信息,例如用户偏好、过去的行为或相关的外部数据,可以存储在状态中,供代理在决策时使用。
- 内部变量 :智能体可以使用状态来跟踪内部标志、计数器或其他变量,这些变量指导其行为和决策。
五、LangGraph 实战
5.1 安装
要开始使用 LangGraph,您需要先安装它,打开终端或命令提示符并运行以下命令:
pip install -U langgraph
-U 标志可确保您获得的是最新版本。
5.2 使用 LangGraph 创建基本聊天机器人
这个例子是理解 LangGraph 基本概念的一个很好的起点。
1)导入必要的库 :首先从 LangGraph 和其他相关库导入所需的类和模块。
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
2)定义状态结构:创建一个类来定义状态对象的结构,该对象将保存需要在图中的节点之间共享和更新的信息。
class State(TypedDict):
# 'messages' will store the chatbot conversation history.
# The 'add_messages' function ensures new messages are appended to the list.
messages: Annotated[list, add_messages]
# Create an instance of the StateGraph, passing in the State class
graph_builder = StateGraph(State)
3)初始化 LLM :实例化 LLM 模型,并提供必要的 API 密钥或配置参数。此 LLM 将用于生成聊天机器人的响应。
#pip install -U langchain_anthropic
from langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(model="claude-3-5-sonnet-20240620")
4)创建聊天机器人节点 :定义一个封装聊天机器人节点逻辑的 Python 函数。该函数将当前状态作为输入,并根据 LLM 的输出生成响应。
def chatbot(state: State):
# Use the LLM to generate a response based on the current conversation history.
response = llm.invoke(state["messages"])
# Return the updated state with the new message appended
return {"messages": [response]}
# Add the 'chatbot' node to the graph,
graph_builder.add_node("chatbot", chatbot)
5)定义入口点和终点点 :指定工作流在图中的起点和终点。
# For this basic chatbot, the 'chatbot' node is both the entry and finish point
graph_builder.add_edge(START, "chatbot")
graph_builder.add_edge("chatbot", END)
6)编译图 :通过编译图来创建图的可运行实例。
graph = graph_builder.compile()
7)可视化图:通过运行简单的 Python 代码,您可以可视化具有节点和边的图。
from IPython.display import Image, display
try:
display(Image(graph.get_graph().draw_mermaid_png()))
except Exception:
# This requires some extra dependencies and is optional
pass

8)运行聊天机器人 :实现一个循环来与用户交互,将用户的输入传递给图表并显示聊天机器人的响应。
while True:
user_input = input("User: ")
if user_input.lower() in ["quit", "exit", "q"]:
print("Goodbye!")
break
# Process user input through the LangGraph
for event in graph.stream({"messages": [("user", user_input)]}):
for value in event.values():
print("Assistant:", value["messages"][-1].content)
这段代码片段提供了一个 LangGraph 聊天机器人的基本结构。您可以在此基础上进行扩展,例如集成更复杂的状态管理和不同的 LLM 模型,或者连接外部工具和 API。关键在于为不同的任务定义清晰的节点,并使用边来建立聊天机器人内部所需的信息流和控制流。
5.3 LangGraph高级技术
工具集成: 将工具集成到 LangGraph 聊天机器人中,可以使其以您喜欢的方式访问和处理信息,从而显著增强其功能。
通过工具集成增强我们的基础聊天机器人
让我们修改上一节创建的基本聊天机器人,使其包含一个可以搜索网络信息的工具。我们将使用来自 langchain_community.tools.tavily_search 的 TavilySearchResults 工具。本示例需要 Tavily API 密钥 。
#pip install -U tavily-python langchain_community
from typing import Annotated
from langchain_anthropic import ChatAnthropic
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.messages import BaseMessage
from typing_extensions import TypedDict
from langgraph.graph import StateGraph
from langgraph.graph.message import add_messages
from langgraph.prebuilt import ToolNode, tools_condition
class State(TypedDict):
messages: Annotated[list, add_messages]
graph_builder = StateGraph(State)
tool = TavilySearchResults(max_results=2)
tools = [tool]
llm = ChatAnthropic(model="claude-3-5-sonnet-20240620")
llm_with_tools = llm.bind_tools(tools)
def chatbot(state: State):
return {"messages": [llm_with_tools.invoke(state["messages"])]}
graph_builder.add_node("chatbot", chatbot)
tool_node = ToolNode(tools=[tool])
graph_builder.add_node("tools", tool_node)
graph_builder.add_conditional_edges(
"chatbot",
tools_condition,
)
# Any time a tool is called, we return to the chatbot to decide the next step
graph_builder.add_edge("tools", "chatbot")
graph_builder.set_entry_point("chatbot")
graph = graph_builder.compile()

代码解释:
-
导入工具:导入必要的工具类,在本例中 TavilySearchResults 。
-
定义并绑定工具:创建工具实例并使用 llm.bind_tools() 将其绑定到 LLM,这会将可用工具及其使用情况告知 LLM。
-
创建 ToolNode:实例化 ToolNode ,传入可用工具列表。
-
将 ToolNode 添加到图中:使用 graph_builder.add_node() 将 ToolNode 合并到 LangGraph 中。
-
条件路由:使用 graph_builder.add_conditional_edges() 根据 LLM 是否决定调用工具来设置路由逻辑。tools_condition 检查 LLM 的响应是否包含工具调用指令。
-
回环:执行该工具后,使用 graph_builder.add_edge() 将流程重定向回 chatbot 节点,从而允许对话继续进行。
现在,当运行聊天机器人并提出需要外部信息的问题时,LLM 可以选择调用网络搜索工具,检索相关数据,并将其纳入其回复中。
六、为聊天机器人添加记忆
记忆力对于创建能够通过记住过去的互动来进行有意义对话的聊天机器人至关重要。
LangGraph 的Checkpointer系统
- Checkpointer :编译 LangGraph 时,您可以提供一个 checkpointer 对象,该对象负责保存图在不同时间点的状态。
- Thread ID :每次调用图时,都需要提供一个 thread_id ,checkpointer 使用此 ID 来跟踪不同的对话线程。
- 自动保存和加载 :LangGraph 会在给定 thread_id 的图执行完每一步后自动保存状态。当您使用相同的 thread_id 再次调用该图时,它会自动加载已保存的状态,使聊天机器人能够从上次中断的地方继续对话。
使用检查点实现内存
在前文代码的基础上,以下是如何使用 LangGraph 的检查点机制来添加记忆:
# ... (Previous code to define State, graph_builder, nodes, and edges)
from langgraph.checkpoint.memory import MemorySaver
# Create a MemorySaver object to act as the checkpointer
memory = MemorySaver()
# Compile the graph, passing in the 'memory' object as the checkpointer
graph = graph_builder.compile(checkpointer=memory)
# ... (Rest of the code to run the chatbot)
代码解释:
- 导入 MemorySaver :从 langgraph.checkpoint.memory 导入 MemorySaver 类。
- 创建一个 MemorySaver 对象:实例化一个 MemorySaver 对象,该对象将处理图表状态的保存和加载。
- 传递给 compile() :编译图形时,将 memory 对象作为 checkpointer 参数传递。
现在,运行聊天机器人时,首先使用 thread_id 作为本次对话的键:
config = {"configurable": {"thread_id": "1"}}
每个唯一的 thread_id 都会存储其对话历史记录。
现在开始对话:
while True:
user_input = input("User: ")
if user_input.lower() in ["quit", "exit", "q"]:
print("Goodbye!")
break
# Process user input through the LangGraph
for event in graph.stream({"messages": [("user", user_input)]}, config):
for value in event.values():
print("Assistant:", value["messages"][-1].content)
注意:在调用我们的图时,配置信息作为第二个位置参数提供。
七、人机交互
在人工智能应用中,如果需要加入人工监督、验证或决策,那么人机协作工作流程至关重要。
利用中断实现人机交互
以下代码演示如何使用 LangGraph 的 interrupt_before 或 interrupt_after 功能实现人机交互。以下是详细解析:
from typing import Annotated
from langchain_anthropic import ChatAnthropic
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.messages import BaseMessage
from typing_extensions import TypedDict
from langgraph.checkpoint.memory import MemorySaver
from langgraph.graph import StateGraph
from langgraph.graph.message import add_messages
from langgraph.prebuilt import ToolNode, tools_condition
class State(TypedDict):
messages: Annotated[list, add_messages]
graph_builder = StateGraph(State)
tool = TavilySearchResults(max_results=2)
tools = [tool]
llm = ChatAnthropic(model="claude-3-5-sonnet-20240620")
llm_with_tools = llm.bind_tools(tools)
def chatbot(state: State):
return {"messages": [llm_with_tools.invoke(state["messages"])]}
graph_builder.add_node("chatbot", chatbot)
tool_node = ToolNode(tools=[tool])
graph_builder.add_node("tools", tool_node)
graph_builder.add_conditional_edges(
"chatbot",
tools_condition,
)
graph_builder.add_edge("tools", "chatbot")
graph_builder.set_entry_point("chatbot")
memory = MemorySaver()
graph = graph_builder.compile(
checkpointer=memory,
# This is new!
interrupt_before=["tools"],
# Note: can also interrupt __after__ actions, if desired.
# interrupt_after=["tools"]
)

代码解释:
在这个例子中,程序会在执行 tools 节点之前暂停。该 tools 节点负责运行 LLM 在其回合中可能请求的任何工具。通过在此处中断,可以允许用户执行以下操作:
- 批准工具调用: 人工审核 LLM 想要调用的工具及其输入。如果审核员认为合适,只需允许图继续运行,工具即可执行。
- 修改工具调用: 如果用户认为需要调整 LLM 的工具调用(例如,细化搜索查询),他们可以修改图的状态,然后恢复执行。
- 绕过工具调用: 用户可能认为该工具并非必要。或许他们已经掌握了 LLM 试图查找的答案。在这种情况下,他们可以直接用相关信息更新图状态,LLM 会像工具返回了该信息一样接收到更新后的数据。
八、LangGraph 的实际应用
LangGraph 允许您构建比简单的问答机器人更复杂、更具交互性的 AI 系统,它能够管理状态、协调多个代理并允许人类反馈。以下是 LangGraph 的一些应用方式:
-
更智能的客户服务 :想象一下,一款用于在线购物的聊天机器人可以记住您过去的订单和偏好。它可以回答有关产品的问题,跟踪您的发货情况,甚至在需要时将您转接给人工客服。
-
AI 研究助手 :需要研究项目方面的帮助吗?基于 LangGraph 的助手可以搜索大量的学术论文和文章,总结关键发现,甚至可以帮助您整理笔记。
-
个性化学习 :LangGraph 有望为下一代教育平台提供强大支持。试想一下,如果系统能够适应你的学习风格,识别你需要额外帮助的领域,并推荐个性化的学习资源,那该有多好。
-
精简业务流程 :许多业务流程涉及多个步骤和人员。LangGraph 可以自动化这些工作流程中的部分环节,例如文档审批路由、数据分析或项目管理。
这些例子突显了 LangGraph 如何帮助弥合人工智能能力与现实世界复杂性之间的差距。
九、结论
智能体框架正在革新人工智能系统的运行方式,使智能体能够进行推理、规划和动态交互。在本博客中,我们探讨了智能体框架的重要性,调研了一些最流行的库,并比较了它们的优势。随后,我们深入研究了 LangGraph ,了解了其基于图的架构、状态管理以及实际应用。实践部分演示了如何使用 LangGraph 构建具有记忆功能、人机交互能力和可扩展工作流的人工智能智能体。
随着人工智能的不断发展,LangGraph、LangChain、CrewAI 等智能体框架将在塑造下一代智能应用方面发挥关键作用。无论是开发聊天机器人、自动化工具还是研究型智能体,这些框架都能提供构建模块,帮助您打造更具适应性和高效性的人工智能系统。
人工智能的未来在于自主性、结构化和交互性 ——而智能体框架正引领着这一发展方向。现在正是开始尝试、构建和创新这些框架的最佳时机。
限时免费!CSDN 大模型学习大礼包开放领取!
从入门到进阶,助你快速掌握核心技能!
资料目录
- AI大模型学习路线图
- 配套视频教程
- 大模型学习书籍
- AI大模型最新行业报告
- 大模型项目实战
- 面试题合集
👇👇扫码免费领取全部内容👇👇

📚 资源包核心内容一览:
1、 AI大模型学习路线图
- 成长路线图 & 学习规划: 科学系统的新手入门指南,避免走弯路,明确学习方向。

2、配套视频教程
- 根据学习路线配套的视频教程:涵盖核心知识板块,告别晦涩文字,快速理解重点难点。

课程精彩瞬间

3、大模型学习书籍

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

5、大模型项目实战&配套源码
学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。

6、大模型大厂面试真题
整理了百度、阿里、字节等企业近三年的AI大模型岗位面试题,涵盖基础理论、技术实操、项目经验等维度,每道题都配有详细解析和答题思路,帮你针对性提升面试竞争力。

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

更多推荐


所有评论(0)