You are viewing a single comment's thread from:

RE: LangGraph开发实战

in #starnote28 days ago

多代理系统其实就可以非常简单的理解为:将原本的应用程序拆分成多个较小的独立代理,从而组合而成的系统。这些小的独立代理可以是简单的大模型交互代理,也可以是复杂的 ReAct 代理。举个比较热门的案例,假设我们需要建立一个用于数据分析的Agent,则可以设计代理配置:Agent 1作为用户意图识别代理,集成大模型用来解析用户的查询和指令,理解其意图和需求,并将用户输入转化为具体的任务。Agent 2作为数据分析代理,集成大模型并绑定若干个处理不同数据和需求的工具,提供统计分析、趋势预测和数据可视化服务。当任务涉及到代码生成时,Agent 3,即代码执行代理,会接收用户输入的代码,在安全的Python环境中执行这些代码,并返回运行结果,用于代码测试、执行特定算法或自动化任务。

LangGraph利用基于图的结构来定义代理并在它们之间建立连接。在此框架中,每个代理都表示为图中的一个节点,并通过边链接到其它代理。每个代理通过接收来自其他代理的输入并将控制权传递给下一个代理来执行其指定的操作。在LangGraph 框架的设计中,主要通过如下几种方法来建立各个子代理之间的通信连接:

  • NetWork(网络):每个代理都可以与其他每个代理通信。任何代理都可以决定接下来要呼叫哪个其他代理。
  • Supervisor(主管):每个代理都与一个 Supervisor 代理通信。由 Supervisor 代理决定接下来应调用哪个代理。
  • Supervisor (tool-calling): Supervisor 架构的一个特例。每个代理都是一个工具。由Supervisor代理通过工具调用的方式来决定调用哪些子代理执行任务,以及要传递给这些代理程序的参数
  • Hierarchical(分层):定义具有 supervisor 嵌套 supervisor多代理系统。这是 Supervisor 架构的一种泛化,允许更复杂的控制流。

multiagents

-- Subgraphs
Subgraphs(子图)指的是能够用作另一个图中的节点的图。简单理解就是:把一个已经编译好的图,嵌入到另一个已经编译好的图中,并且两个独立图的中的状态可以信息共享。一个典型的应用就是构建多代理系统架构。它所做的事情是:当把每个独立的Agent图结构定义为一个子图时,只要遵守子图的接口(输入和输出模式)规范,那么子图中定义的共享状态就可以在父图中进行使用

添加子图主要解决的问题就是解决各Single-Agent之间的通信问题,即它们如何在图执行期间在彼此之间传递状态。这主要有两种情况:

  • 父、子图的状态模式中有共同的键(通道)。
  • 父、子图的状态模式中没有共同的键。(通道)