LangGraph: Multi-Agent Workflows

LangGraph:多智能体工作流

6 分钟阅读

链接

上周我们重点介绍了 LangGraph - 一个新的软件包(在 PythonJS 中均可用),以更好地支持创建包含循环的 LLM 工作流,循环是大多数代理运行时的关键组成部分。 作为发布的一部分,我们重点介绍了两个简单的运行时:一个等同于 langchain 中的 AgentExecutor,第二个是旨在消息传递和聊天模型的版本。

今天,我们很高兴重点介绍 langgraph 的第二组用例 - 多智能体工作流。 在这篇博客中,我们将介绍

  • “多智能体”是什么意思?
  • 为什么“多智能体”工作流有趣?
  • 使用 LangGraph 构建多智能体工作流的三个具体示例
  • 使用多智能体工作流构建在 LangGraph 之上的第三方应用程序的两个示例(GPT-Newspaper 和 CrewAI)
  • 与其他框架的比较(Autogen 和 CrewAI)

什么是“多智能体”?

💡
当我们谈论“多智能体”时,我们指的是 多个独立的行动者 由语言模型驱动 以特定方式连接

每个智能体都可以有自己的提示、LLM、工具和其他自定义代码,以便与其他智能体更好地协作。

这意味着在考虑不同的多智能体工作流时,有两个主要的考虑因素

  1. 什么是多个独立的智能体?
  2. 这些智能体是如何连接的?

这种思维方式非常适合图表示,例如 langgraph 提供的图表示。 在这种方法中,每个智能体都是图中的一个节点,它们的连接表示为边。 控制流由边管理,它们通过添加到图的状态来通信。

注意:这里一个非常相关的概念是状态机的概念,我们明确将其称为认知架构的一个类别。 从这个角度来看,独立的智能体节点成为状态,而这些智能体如何连接则是转换矩阵。 由于状态机可以被视为一个带标签的有向图,我们将以相同的方式看待这些事物。

多智能体设计的优势

“如果一个智能体无法正常工作,那么为什么多智能体有用呢?”

  • 对工具/职责进行分组可以带来更好的结果。 与必须从数十种工具中进行选择相比,智能体更有可能在专注的任务上取得成功。
  • 单独的提示可以带来更好的结果。 每个提示都可以有自己的说明和少量示例。 每个智能体甚至可以由单独微调的 LLM 提供支持!
  • 有助于开发的概念模型。 您可以单独评估和改进每个智能体,而不会破坏更大的应用程序。

多智能体设计允许您将复杂的问题划分为易于处理的工作单元,这些工作单元可以由专门的智能体和 LLM 程序来处理。

多智能体示例

我们在 langgraph 仓库中添加了三个不同的多智能体工作流示例。 这些示例中的每一个对于上述两个问题都有略微不同的答案,我们将在重点介绍这些示例时进行讨论。 重要的是要注意,这三个示例只是我们可以重点介绍的少数几个可能示例 - 几乎可以肯定还有其他示例,我们期待看到社区提出什么!

多智能体协作

代码链接:

在此示例中,不同的智能体在消息的共享草稿本上进行协作。 这意味着他们中的任何一个所做的所有工作对另一个都是可见的。 这样做的好处是其他智能体可以看到完成的所有单个步骤。 这样做的不利之处是,有时传递所有这些信息过于冗长且不必要,有时只需要来自智能体的最终答案。 由于草稿本的共享性质,我们称之为协作

什么是多个独立的智能体?

在这种情况下,独立的智能体实际上只是一个 LLM 调用。 具体来说,它们是一个特定的提示模板(用于以特定方式使用特定系统消息格式化输入)加上一个 LLM 调用。

这些智能体是如何连接的?

以下是这些智能体如何连接的可视化

控制状态转换的主要因素是路由器,但它是一个基于规则的路由器,因此非常简单。 基本上,在每次 LLM 调用之后,它都会查看输出。 如果调用了工具,则调用该工具。 如果未调用任何工具且 LLM 响应“FINAL ANSWER”,则它返回给用户。 否则(如果未调用任何工具且 LLM 未响应“FINAL ANSWER”),则它会转到另一个 LLM。

智能体主管

示例

在此示例中,连接了多个智能体,但与上面相比,它们不共享共享的草稿本。 相反,它们有自己独立的草稿本,然后它们的最终响应被附加到全局草稿本。

什么是多个独立的智能体?

在这种情况下,独立的智能体是 LangChain 智能体。 这意味着它们有自己单独的提示、LLM 和工具。 调用时,它不仅仅是单个 LLM 调用,而是 AgentExecutor 的运行。

这些智能体是如何连接的?

智能体主管负责路由到各个智能体。

通过这种方式,主管也可以被认为是工具是其他智能体的智能体!

分层智能体团队

示例

这与上面的示例类似,但现在节点中的智能体实际上是其他 langgraph 对象本身。 这比使用 LangChain AgentExecutor 作为智能体运行时提供了更大的灵活性。 我们称之为分层团队,因为子智能体在某种程度上可以被认为是团队。

什么是多个独立的智能体?

这些现在是其他 langgraph 智能体。

这些智能体是如何连接的?

主管智能体将它们连接起来。

YouTube 演示

我们添加了一个 YouTube 视频来演示这三个示例。 希望这有助于使这些复杂的主题更容易理解!

第三方应用程序

作为本次发布的一部分,我们也很高兴重点介绍一些构建在 LangGraph 之上并利用多智能体概念的应用程序。

GPT-Newspaper

这是由 GPT-Researcher 的团队推出的一个新项目。 GPT-Newspaper 是一款创新的自主智能体,旨在创建根据用户偏好量身定制的个性化报纸。 GPT Newspaper 通过利用 AI 的力量来策划、编写、设计和编辑基于个人品味和兴趣的内容,彻底改变了我们消费新闻的方式。 该架构由六个专门的子智能体组成。 其中一个关键步骤是作者 <> 评论循环,它增加了一个有用的循环。

其他框架

LangGraph 不是第一个支持多智能体工作流的框架。 这些框架之间的大部分差异主要在于它们引入的心智模型和概念。

Autogen

Autogen 可能是第一个出现的多智能体框架。 LangGraph 和 Autogen 之间心智模型的最大区别在于智能体的构建。 LangGraph 更倾向于显式定义不同智能体和转换概率的方法,更倾向于将其表示为图形。 Autogen 更多地将其框架化为“对话”。 我们认为,这种“图形”框架使其更直观,并为构建更复杂和更主观的工作流提供了更好的开发者体验,在这些工作流中,您真正想要控制节点之间的转换概率。 它还支持被“对话”显式捕获的工作流。

Autogen 和 LangGraph 之间的另一个主要区别是 LangGraph 完全集成到 LangChain 生态系统中,这意味着您可以充分利用所有 LangChain 集成和 LangSmith 可观察性。

CrewAI

我们想要重点介绍的另一个关键框架是 CrewAI。 CrewAI 最近兴起,成为创建多智能体“团队”的一种流行方式。 与 LangGraph 相比,CrewAI 是一个更高级别的框架,而 LangGraph 为您的智能体提供了更低级别的可控性。