链载Ai

标题: Agent框架大比拼:谁将引领智能应用的未来? [打印本页]

作者: 链载Ai    时间: 4 小时前
标题: Agent框架大比拼:谁将引领智能应用的未来?

1. 引言

代理框架(Agentic Frameworks)通过使自主系统能够动态地感知、推理和行动,彻底改变了人工智能领域。本节探讨了代理框架的核心概念,并强调了为什么开源解决方案对于现代人工智能开发中的创新和可扩展性至关重要。

1.1 什么是代理框架?

代理框架代表了人工智能系统设计范式的转变。与依赖于静态、预定义工作流的传统人工智能应用不同,代理框架引入了能够自主感知、推理和行动的动态、自适应系统。这些框架使复杂任务能够被分解为更小的子任务,由专门的代理协作完成更广泛的目标。通过利用大型语言模型(LLMs),代理框架能够管理工作流、做出决策并无缝集成工具,使其成为动态决策和实时问题解决等高级应用的理想选择。

关键参考:像 LangGraph 和 CrewAI 这样的代理框架体现了这种动态方法,使开发人员能够超越单代理、线性工作流,进入多代理、协作系统的领域。

1.2 为什么它们很重要?

从头开始构建代理并非易事。像 LangGraph、CrewAI 和 OpenAI Swarm 这样的框架简化了这一过程,使开发人员能够专注于他们的应用逻辑,而不是为状态管理、编排和工具集成重新发明轮子。

在核心层面,代理框架提供了:

我们将在接下来的部分中逐一介绍这些内容。

2. 流行的代理框架与库

现在,让我们深入了解目前可用的一些最突出的人工智能代理框架和工具:

2.1 LangChain

LangChain 是一个强大且灵活的框架,使开发大型语言模型(LLMs)驱动的应用程序变得更加容易。凭借其丰富的工具集和抽象层,开发人员可以设计出具备复杂推理、任务执行以及与外部数据源和 API 交互的强大人工智能代理。

从根本上说,开发人员在与 LLMs 协作时面临诸多挑战,例如在长时间对话中保持上下文、整合外部信息以及协调多步骤项目。LangChain 正是为解决这些问题而设计的。由于其模块化架构,该框架可以轻松组合各种组件,并用于多种用途。

GitHub 链接:LangChain GitHub
文档链接:LangChain 官方文档

2.2 LangGraph

LangGraph 是 LangChain 的一个扩展,用于创建基于大型语言模型(LLMs)的状态化、多代理应用。它特别适合构建涉及规划、反思和多代理协调的复杂、交互式人工智能系统。

GitHub 链接:LangGraph GitHub
文档链接:LangGraph 官方文档

2.3 CrewAI

CrewAI 是一个用于编排角色扮演人工智能代理的框架。它允许开发人员创建一个“团队”,每个代理都有特定的角色和职责,共同完成复杂任务。这个框架特别适合构建能够解决多面问题的协作人工智能系统,这些问题需要多样化的专业知识和协调一致的努力。

GitHub 链接:CrewAI GitHub
文档链接:CrewAI 官方文档

2.4 Microsoft Semantic Kernel

Microsoft Semantic Kernel 旨在弥合传统软件开发与人工智能能力之间的差距。它特别关注将大型语言模型(LLMs)集成到现有应用中。这个框架为开发人员提供了在不完全推翻现有代码库的情况下,整合人工智能功能的工具。

SDK 的轻量级特性和对多种编程语言的支持使其能够高度适应各种开发环境。其编排器能够管理复杂的多步骤人工智能任务,使开发人员能够在应用中创建复杂的人工智能驱动工作流。

GitHub 链接:Microsoft Semantic Kernel GitHub
文档链接:Microsoft Semantic Kernel 官方文档

2.5 Microsoft AutoGen

Microsoft AutoGen 是一个开源框架,用于构建高级人工智能代理和多代理系统。由微软研究院开发,AutoGen 提供了一个灵活且强大的工具集,用于创建对话式和任务完成型人工智能应用。它强调模块化、可扩展性和易用性,使开发人员能够高效地构建复杂的人工智能系统。

文档链接:Microsoft AutoGen 官方文档
GitHub 链接:Microsoft AutoGen GitHub

2.6 Smolagents

Smolagents 是一个前沿的开源框架,旨在彻底改变人工智能代理的开发。它为开发人员提供了一个全面的工具包,用于构建智能的、协作的多代理系统。该框架专注于灵活性和模块化,能够创建独立运行或在人类监督下协作的复杂人工智能系统。

文档链接:Smolagents 官方文档
GitHub 链接:Smolagents GitHub

2.7 Agno (Phidata)

我们讨论的最后一个代理框架是 Phidata。它是一个多模态代理框架,能够开发协作运行的代理系统。它还设计了与组件(如内存和工具)协同工作的功能,帮助它们自主且一致地运行。

Phidata 代理默认支持多模态数据,如文本、图像和音频数据,使其无需依赖外部工具即可发挥价值。该框架还提供了代理的可视化界面(Agentic UI),以便用户与代理进行视觉交互。它也是率先引入代理检索增强生成(Agentic RAG)的框架,代理可以搜索知识库以获取所需信息。

文档链接:Phidata 官方文档
GitHub 链接:Phidata GitHub

3. 代理框架的比较

下图提供了一个高层次的比较,涵盖了本文讨论的关键人工智能代理框架。此比较旨在突出每个框架的独特优势和关注领域,帮助开发人员和研究人员为特定需求选择最合适的工具。

4. 深入了解 LangGraph

LangGraph 是由 LangChain 团队开发的一个库,旨在帮助开发人员创建基于图的单代理或多代理人工智能应用。作为一个低级框架,LangGraph 让你能够控制代理之间的交互方式、使用的工具以及应用内的信息流动。

4.1 什么是图?

想象你有一组数据,可以表示为一个网络,其中每个数据或实体与其他数据或实体存在关系,这种关系可以有多种类型(一对一、一对多、多对多等)。图的两个主要组成部分是节点和边。

这种类型数据的一些例子包括交通数据或社交媒体网络,其中每个实体或用户与其他实体或用户存在关系,这就是图在可视化这种数据时的优势所在。

图有两种类型:

4.2 核心概念

4.2.1 图结构

LangGraph 的设计核心是基于图的应用工作流表示。这个图包含两个主要元素:

4.2.2 状态管理

管理多代理系统的一个关键方面是确保所有代理对当前任务的状态有一个共同的理解。LangGraph 通过自动状态管理来解决这一问题。这意味着该库会自动处理跟踪和更新代理执行任务时的中心状态对象。

这个状态对象充当一个存储库,用于存储需要在工作流的不同点之间共享的关键信息。这可能包括:

5. 动手实践 LangGraph

5.1 安装

要开始使用 LangGraph,你需要安装它。

在终端或命令提示符中运行以下命令以安装 LangGraph:

pip install -U langgraph

此命令将下载并安装 LangGraph 的最新版本。-U标志确保你获得最新版本。

5.2 使用 LangGraph 创建一个基础聊天机器人

这个示例是理解 LangGraph 基本概念的良好起点。

1. 导入必要的库

首先,从 LangGraph 和其他相关库中导入所需的类和模块。

fromtypingimportAnnotated
fromtyping_extensionsimportTypedDict
fromlanggraph.graphimportStateGraph, START, END
fromlanggraph.graph.messageimportadd_messages

2. 定义状态结构

创建一个类来定义状态对象的结构,该状态对象将在图的节点之间共享和更新信息。

classState(TypedDict):
# 'messages' 用于存储聊天机器人的对话历史。
# 'add_messages' 函数确保新消息被追加到列表中。
messages: Annotated[list, add_messages]

# 创建一个 StateGraph 实例,传入 State 类。
graph_builder = StateGraph(State)

3. 初始化 LLM

实例化你选择的 LLM 模型,并提供必要的 API 密钥或配置参数。这个 LLM 将用于为聊天机器人的回应提供支持。

# pip install -U langchain_anthropic
fromlangchain_anthropicimportChatAnthropic

llm = ChatAnthropic(model="claude-3-5-sonnet-20240620")

4. 创建聊天机器人节点

定义一个封装聊天机器人逻辑的 Python 函数。这个函数将接收当前状态作为输入,并根据 LLM 的输出生成回应。

defchatbot(state: State):
# 使用 LLM 根据当前对话历史生成回应。
response = llm.invoke(state["messages"])

# 返回更新后的状态,其中包含新追加的消息。
return{"messages": [response]}

# 将 'chatbot' 节点添加到图中。
graph_builder.add_node("chatbot", chatbot)

5. 定义入口和结束点

指定图内工作流的起点和终点。

# 对于这个基础聊天机器人,'chatbot' 节点既是入口点也是结束点。
graph_builder.add_edge(START,"chatbot")
graph_builder.add_edge("chatbot", END)

6. 编译图

通过编译创建一个可运行的图实例。

graph = graph_builder.compile()

7. 可视化图

通过运行简单的 Python 代码,你可以可视化图中的节点和边。

fromIPython.displayimportImage, display

try:
display(Image(graph.get_graph().draw_mermaid_png()))
exceptException:
# 这需要一些额外的依赖项,是可选的
pass

8. 运行聊天机器人

实现一个循环以与用户交互,将用户输入传递给图,并显示聊天机器人的回应。

whileTrue:
user_input = input("用户:")
ifuser_input.lower()in["退出","退出","q"]:
print("再见!")
break

# 通过 LangGraph 处理用户输入。
foreventingraph.stream({"messages": [("用户", user_input)]}):
forvalueinevent.values():
print("助手:", 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
fromtypingimportAnnotated
fromlangchain_anthropicimportChatAnthropic
fromlangchain_community.tools.tavily_searchimportTavilySearchResults
fromlangchain_core.messagesimportBaseMessage
fromtyping_extensionsimportTypedDict

fromlanggraph.graphimportStateGraph
fromlanggraph.graph.messageimportadd_messages
fromlanggraph.prebuiltimportToolNode, tools_condition
classState(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)

defchatbot(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()

解释:

现在,当你运行聊天机器人并提出需要外部信息的问题时,LLM 可以选择调用网络搜索工具,检索相关信息,并将其纳入回应中。

6. 为聊天机器人添加记忆功能

记忆对于创建能够通过记住过去互动来进行有意义对话的聊天机器人至关重要。

LangGraph 的检查点系统

使用检查点实现记忆

在前面的代码基础上,以下是如何使用 LangGraph 的检查点功能添加记忆:

# ... (前面定义 State、graph_builder、节点和边的代码)

fromlanggraph.checkpoint.memoryimportMemorySaver

# 创建一个 MemorySaver 对象作为检查点器。
memory = MemorySaver()

# 编译图时,传入 'memory' 对象作为检查点器。
graph = graph_builder.compile(checkpointer=memory)

解释:

现在,当你运行聊天机器人时,首先使用一个thread_id作为此对话的键:

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

每个唯一的thread_id将存储其对话历史。

现在开始对话:

whileTrue:
user_input = input("用户:")
ifuser_input.lower()in["退出","退出","q"]:
print("再见!")
break

# 通过 LangGraph 处理用户输入。
foreventingraph.stream({"messages": [("用户", user_input)]}, config):
forvalueinevent.values():
print("助手:", value["messages"][-1].content)

注意config在调用图时作为第二个位置参数提供。

7. 人机协作(Human-in-the-Loop)

人机协作工作流对于需要在人工智能应用中纳入人类监督、验证或决策的情况至关重要。

使用中断实现人机协作

以下代码展示了如何使用 LangGraph 的interrupt_beforeinterrupt_after功能实现人机协作。以下是代码分解:

fromtypingimportAnnotated

fromlangchain_anthropicimportChatAnthropic
fromlangchain_community.tools.tavily_searchimportTavilySearchResults
fromlangchain_core.messagesimportBaseMessage
fromtyping_extensionsimportTypedDict

fromlanggraph.checkpoint.memoryimportMemorySaver
fromlanggraph.graphimportStateGraph
fromlanggraph.graph.messageimportadd_messages
fromlanggraph.prebuiltimportToolNode, tools_condition
classState(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)

defchatbot(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,以更详细地了解人机协作。

8. LangGraph 的实际应用场景

LangGraph 让你能够构建比简单问答机器人更复杂、更具互动性的人工智能系统,通过管理状态、协调多个代理以及允许人类反馈来实现。以下是 LangGraph 可能的一些应用场景:

这些示例突显了 LangGraph 如何弥合人工智能能力与现实世界复杂性之间的差距。

9. 结论

代理框架正在彻底改变人工智能系统的工作方式,使得能够推理、规划和动态交互的智能自主代理成为可能。在这篇博客中,我们探讨了代理框架的重要性,调查了一些最流行的库,并比较了它们的优势。我们深入研究了 LangGraph,了解了其基于图的架构、状态管理和实际应用场景。动手实践部分展示了如何使用 LangGraph 构建具有记忆功能、人机协作能力和可扩展工作流的人工智能代理。

随着人工智能的不断发展,像 LangGraph、LangChain、CrewAI 等代理框架将在塑造下一代智能应用中发挥关键作用。无论你是开发聊天机器人、自动化工具还是研究助手,这些框架都提供了构建更具适应性和高效人工智能系统的基石。

人工智能的未来是自主的、结构化的和互动的——而代理框架正在引领这一潮流。现在正是开始实验、构建和创新的绝佳时机。






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5