微信扫码
添加专属顾问
我要投稿
探索人工智能的未来,了解代理框架如何塑造智能应用的新纪元。 核心内容: 1. 代理框架的核心概念及其对AI领域的影响 2. 开源解决方案在代理框架中的重要性和优势 3. 流行的代理框架和工具:LangChain、LangGraph、CrewAI的特点与应用
代理框架(Agentic Frameworks)通过使自主系统能够动态地感知、推理和行动,彻底改变了人工智能领域。本节探讨了代理框架的核心概念,并强调了为什么开源解决方案对于现代人工智能开发中的创新和可扩展性至关重要。
代理框架代表了人工智能系统设计范式的转变。与依赖于静态、预定义工作流的传统人工智能应用不同,代理框架引入了能够自主感知、推理和行动的动态、自适应系统。这些框架使复杂任务能够被分解为更小的子任务,由专门的代理协作完成更广泛的目标。通过利用大型语言模型(LLMs),代理框架能够管理工作流、做出决策并无缝集成工具,使其成为动态决策和实时问题解决等高级应用的理想选择。
关键参考:像 LangGraph 和 CrewAI 这样的代理框架体现了这种动态方法,使开发人员能够超越单代理、线性工作流,进入多代理、协作系统的领域。
从头开始构建代理并非易事。像 LangGraph、CrewAI 和 OpenAI Swarm 这样的框架简化了这一过程,使开发人员能够专注于他们的应用逻辑,而不是为状态管理、编排和工具集成重新发明轮子。
在核心层面,代理框架提供了:
我们将在接下来的部分中逐一介绍这些内容。
现在,让我们深入了解目前可用的一些最突出的人工智能代理框架和工具:
LangChain 是一个强大且灵活的框架,使开发大型语言模型(LLMs)驱动的应用程序变得更加容易。凭借其丰富的工具集和抽象层,开发人员可以设计出具备复杂推理、任务执行以及与外部数据源和 API 交互的强大人工智能代理。
从根本上说,开发人员在与 LLMs 协作时面临诸多挑战,例如在长时间对话中保持上下文、整合外部信息以及协调多步骤项目。LangChain 正是为解决这些问题而设计的。由于其模块化架构,该框架可以轻松组合各种组件,并用于多种用途。
GitHub 链接:LangChain GitHub
文档链接:LangChain 官方文档
LangGraph 是 LangChain 的一个扩展,用于创建基于大型语言模型(LLMs)的状态化、多代理应用。它特别适合构建涉及规划、反思和多代理协调的复杂、交互式人工智能系统。
GitHub 链接:LangGraph GitHub
文档链接:LangGraph 官方文档
CrewAI 是一个用于编排角色扮演人工智能代理的框架。它允许开发人员创建一个“团队”,每个代理都有特定的角色和职责,共同完成复杂任务。这个框架特别适合构建能够解决多面问题的协作人工智能系统,这些问题需要多样化的专业知识和协调一致的努力。
GitHub 链接:CrewAI GitHub
文档链接:CrewAI 官方文档
Microsoft Semantic Kernel 旨在弥合传统软件开发与人工智能能力之间的差距。它特别关注将大型语言模型(LLMs)集成到现有应用中。这个框架为开发人员提供了在不完全推翻现有代码库的情况下,整合人工智能功能的工具。
SDK 的轻量级特性和对多种编程语言的支持使其能够高度适应各种开发环境。其编排器能够管理复杂的多步骤人工智能任务,使开发人员能够在应用中创建复杂的人工智能驱动工作流。
GitHub 链接:Microsoft Semantic Kernel GitHub
文档链接:Microsoft Semantic Kernel 官方文档
Microsoft AutoGen 是一个开源框架,用于构建高级人工智能代理和多代理系统。由微软研究院开发,AutoGen 提供了一个灵活且强大的工具集,用于创建对话式和任务完成型人工智能应用。它强调模块化、可扩展性和易用性,使开发人员能够高效地构建复杂的人工智能系统。
文档链接:Microsoft AutoGen 官方文档
GitHub 链接:Microsoft AutoGen GitHub
Smolagents 是一个前沿的开源框架,旨在彻底改变人工智能代理的开发。它为开发人员提供了一个全面的工具包,用于构建智能的、协作的多代理系统。该框架专注于灵活性和模块化,能够创建独立运行或在人类监督下协作的复杂人工智能系统。
文档链接:Smolagents 官方文档
GitHub 链接:Smolagents GitHub
我们讨论的最后一个代理框架是 Phidata。它是一个多模态代理框架,能够开发协作运行的代理系统。它还设计了与组件(如内存和工具)协同工作的功能,帮助它们自主且一致地运行。
Phidata 代理默认支持多模态数据,如文本、图像和音频数据,使其无需依赖外部工具即可发挥价值。该框架还提供了代理的可视化界面(Agentic UI),以便用户与代理进行视觉交互。它也是率先引入代理检索增强生成(Agentic RAG)的框架,代理可以搜索知识库以获取所需信息。
文档链接:Phidata 官方文档
GitHub 链接:Phidata GitHub
下图提供了一个高层次的比较,涵盖了本文讨论的关键人工智能代理框架。此比较旨在突出每个框架的独特优势和关注领域,帮助开发人员和研究人员为特定需求选择最合适的工具。
LangGraph 是由 LangChain 团队开发的一个库,旨在帮助开发人员创建基于图的单代理或多代理人工智能应用。作为一个低级框架,LangGraph 让你能够控制代理之间的交互方式、使用的工具以及应用内的信息流动。
想象你有一组数据,可以表示为一个网络,其中每个数据或实体与其他数据或实体存在关系,这种关系可以有多种类型(一对一、一对多、多对多等)。图的两个主要组成部分是节点和边。
这种类型数据的一些例子包括交通数据或社交媒体网络,其中每个实体或用户与其他实体或用户存在关系,这就是图在可视化这种数据时的优势所在。
图有两种类型:
LangGraph 的设计核心是基于图的应用工作流表示。这个图包含两个主要元素:
节点:工作单元的构建块
图中的每个节点代表应用内的一个独立工作单元或动作。这些节点本质上是封装特定任务的 Python 函数。这些任务可以包括:
边:信息和控制流的引导者
边是 LangGraph 内的连接组织,建立信息流动的路径并决定操作的顺序。LangGraph 支持多种边类型:
管理多代理系统的一个关键方面是确保所有代理对当前任务的状态有一个共同的理解。LangGraph 通过自动状态管理来解决这一问题。这意味着该库会自动处理跟踪和更新代理执行任务时的中心状态对象。
这个状态对象充当一个存储库,用于存储需要在工作流的不同点之间共享的关键信息。这可能包括:
要开始使用 LangGraph,你需要安装它。
在终端或命令提示符中运行以下命令以安装 LangGraph:
pip install -U langgraph
此命令将下载并安装 LangGraph 的最新版本。-U
标志确保你获得最新版本。
这个示例是理解 LangGraph 基本概念的良好起点。
首先,从 LangGraph 和其他相关库中导入所需的类和模块。
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
创建一个类来定义状态对象的结构,该状态对象将在图的节点之间共享和更新信息。
class State(TypedDict):
# 'messages' 用于存储聊天机器人的对话历史。
# 'add_messages' 函数确保新消息被追加到列表中。
messages: Annotated[list, add_messages]
# 创建一个 StateGraph 实例,传入 State 类。
graph_builder = StateGraph(State)
实例化你选择的 LLM 模型,并提供必要的 API 密钥或配置参数。这个 LLM 将用于为聊天机器人的回应提供支持。
# pip install -U langchain_anthropic
from langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(model="claude-3-5-sonnet-20240620")
定义一个封装聊天机器人逻辑的 Python 函数。这个函数将接收当前状态作为输入,并根据 LLM 的输出生成回应。
def chatbot(state: State):
# 使用 LLM 根据当前对话历史生成回应。
response = llm.invoke(state["messages"])
# 返回更新后的状态,其中包含新追加的消息。
return {"messages": [response]}
# 将 'chatbot' 节点添加到图中。
graph_builder.add_node("chatbot", chatbot)
指定图内工作流的起点和终点。
# 对于这个基础聊天机器人,'chatbot' 节点既是入口点也是结束点。
graph_builder.add_edge(START, "chatbot")
graph_builder.add_edge("chatbot", END)
通过编译创建一个可运行的图实例。
graph = graph_builder.compile()
通过运行简单的 Python 代码,你可以可视化图中的节点和边。
from IPython.display import Image, display
try:
display(Image(graph.get_graph().draw_mermaid_png()))
except Exception:
# 这需要一些额外的依赖项,是可选的
pass
实现一个循环以与用户交互,将用户输入传递给图,并显示聊天机器人的回应。
while True:
user_input = input("用户:")
if user_input.lower() in ["退出", "退出", "q"]:
print("再见!")
break
# 通过 LangGraph 处理用户输入。
for event in graph.stream({"messages": [("用户", user_input)]}):
for value in event.values():
print("助手:", value["messages"][-1].content)
此代码片段为 LangGraph 聊天机器人提供了基本结构。你可以通过引入更复杂的状态管理、不同的 LLM 模型或连接到外部工具和 API 来扩展它。关键是为不同任务定义清晰的节点,并使用边来建立聊天机器人内信息和控制流动的期望路径。
将工具集成到你的 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,
)
graph_builder.add_edge("tools", "chatbot")
graph_builder.set_entry_point("chatbot")
graph = graph_builder.compile()
解释:
TavilySearchResults
。llm.bind_tools()
将其绑定到 LLM。这会告知 LLM 可用的工具及其使用方式。ToolNode
,传入可用工具列表。graph_builder.add_node()
将 ToolNode
添加到 LangGraph 中。graph_builder.add_conditional_edges()
根据 LLM 是否决定调用工具来设置路由逻辑。tools_condition
函数会检查 LLM 的响应是否包含工具调用指令。graph_builder.add_edge()
将流程导向聊天机器人节点,以便对话继续进行。现在,当你运行聊天机器人并提出需要外部信息的问题时,LLM 可以选择调用网络搜索工具,检索相关信息,并将其纳入回应中。
记忆对于创建能够通过记住过去互动来进行有意义对话的聊天机器人至关重要。
在前面的代码基础上,以下是如何使用 LangGraph 的检查点功能添加记忆:
# ... (前面定义 State、graph_builder、节点和边的代码)
from langgraph.checkpoint.memory import MemorySaver
# 创建一个 MemorySaver 对象作为检查点器。
memory = MemorySaver()
# 编译图时,传入 'memory' 对象作为检查点器。
graph = graph_builder.compile(checkpointer=memory)
解释:
langgraph.checkpoint.memory
导入 MemorySaver
类。MemorySaver
对象,它将负责保存和加载图的状态。memory
对象作为 checkpointer
参数传入。现在,当你运行聊天机器人时,首先使用一个 thread_id
作为此对话的键:
config = {"configurable": {"thread_id": "1"}}
每个唯一的 thread_id
将存储其对话历史。
现在开始对话:
while True:
user_input = input("用户:")
if user_input.lower() in ["退出", "退出", "q"]:
print("再见!")
break
# 通过 LangGraph 处理用户输入。
for event in graph.stream({"messages": [("用户", user_input)]}, config):
for value in event.values():
print("助手:", value["messages"][-1].content)
注意:config
在调用图时作为第二个位置参数提供。
人机协作工作流对于需要在人工智能应用中纳入人类监督、验证或决策的情况至关重要。
以下代码展示了如何使用 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,
# 这是新的内容!
interrupt_before=["tools"],
# 注意:也可以在动作后中断,如果需要的话。
# interrupt_after=["tools"]
)
解释:
在本例中,图将在执行工具节点之前暂停。这个工具节点负责运行 LLM 在其回合中可能请求的任何工具。在这个点中断,你可以让人类:
资源:以下是 Notebook,以更详细地了解人机协作。
LangGraph 让你能够构建比简单问答机器人更复杂、更具互动性的人工智能系统,通过管理状态、协调多个代理以及允许人类反馈来实现。以下是 LangGraph 可能的一些应用场景:
这些示例突显了 LangGraph 如何弥合人工智能能力与现实世界复杂性之间的差距。
代理框架正在彻底改变人工智能系统的工作方式,使得能够推理、规划和动态交互的智能自主代理成为可能。在这篇博客中,我们探讨了代理框架的重要性,调查了一些最流行的库,并比较了它们的优势。我们深入研究了 LangGraph,了解了其基于图的架构、状态管理和实际应用场景。动手实践部分展示了如何使用 LangGraph 构建具有记忆功能、人机协作能力和可扩展工作流的人工智能代理。
随着人工智能的不断发展,像 LangGraph、LangChain、CrewAI 等代理框架将在塑造下一代智能应用中发挥关键作用。无论你是开发聊天机器人、自动化工具还是研究助手,这些框架都提供了构建更具适应性和高效人工智能系统的基石。
人工智能的未来是自主的、结构化的和互动的——而代理框架正在引领这一潮流。现在正是开始实验、构建和创新的绝佳时机。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-04-01
阿里巴巴开源:AI框架,快速落地大模型应用
2025-04-01
开源Manus替代:智谱AutoGLM沉思来了
2025-04-01
Heygem - Heygen的开源平替产品
2025-04-01
挖到一个Deep Research和Manus的替代品,是新发布的开源项目,香
2025-04-01
字节跳动MegaTTS 3!0.45B超轻量语音克隆模型,中英文混合输出+口音控制黑科技
2025-04-01
开源 Remote MCP Server 一站式托管来啦!
2025-04-01
MCP的配置文件解析。不过讲真,配置文件仍然是MCP最失败的设计之一!
2025-04-01
47.3K star!这款开源RAG引擎真香!文档理解+精准检索+可视化干预,一站式搞定!
2025-01-01
2024-07-25
2025-01-21
2024-05-06
2024-09-20
2024-07-20
2024-06-12
2024-07-11
2024-08-13
2024-12-26
2025-04-01
2025-03-31
2025-03-25
2025-03-25
2025-03-24
2025-03-22
2025-03-19
2025-03-17