搭建多智能体系统需要考虑以下几个方面:
多智能体(Multi-Agent)是由多个自主、独立的智能体(Agent)组成的系统。在这个系统中,每个智能体都能够感知环境、进行决策并执行任务,同时它们之间可以进行信息共享、任务协调以及协同行动,以实现整体的目标。[heading2]关于Multi-Agent[content]随着大型语言模型(LLM)的出现,以LLM为核心构建的Agent系统近期受到了广泛关注。Agent系统旨在利用LLM的归纳推理能力,为不同的Agent分配角色和任务信息,并配备相应的工具插件,以完成复杂的任务。目前,更常见的框架主要集中在单Agent场景下。单Agent的核心在于LLM与工具的协同配合。LLM根据用户任务的理解,推理出需要调用的工具,并根据调用结果向用户提供反馈。在任务完成过程中,Agent可能需要与用户进行多轮交互。与此同时,越来越多的Agent框架开始关注多Agent场景。为了完成任务,多Agent会为不同的Agent指定不同的角色,并通过Agent之间的协作来完成复杂的任务。与单Agent相比,在任务完成过程中,与用户的交互可能会减少一些。[heading2]主要组成部分[content]为构建一个多Agent框架,我们需要思考相对于单Agent,框架中增加了哪些组件。环境(environment):所有Agent应该处于同一个环境中。环境中包含全局状态信息,Agent与环境之间存在信息的交互与更新。阶段(stage):为了完成复杂任务,现有多Agent框架通常采用SOP思想,将复杂任务分解为多个子任务。控制器(controller):控制器可以是LLM,也可以是预先定义好的规则。它主要负责环境在不同Agent和阶段之间的切换。记忆:在单Agent中,记忆只包括用户、LLM回应和工具调用结果等部分。而在多Agent框架中,由于Agent数量增多,导致消息数量增多。同时,每条消息可能需要记录发送方、接收方等字段。
如果我们希望让一台计算机表现得像人类一样,需要在计算机内模拟人类的思维方式。因此,我们需要理解是什么造就了人类的“智能”。我们必须理解自己的决策过程是如何进行的,才能够为机器编写智能程序。如果你稍微做一下自我觉察,就会发现有些过程是下意识发生的,例如我们可以不假思索地区分出猫和狗,而有些过程则需要推理。解决这个问题有两种可能的方法:|自上而下的方法(符号推理)|自下而上的方法(神经网络)||-|-||自上而下的方法模拟人类通过推理来解决问题的方式。它包括对人类知识的提炼,并用计算机可读的形式来表示,此外还需要开发一种在计算机内部模拟推理的方法。|自下而上的方法模拟人脑的结构,由大量称为神经元的简单单元组成。每个神经元的行为取决于输入数据的加权平均值,我们可以提供训练数据来训练神经元网络,从而解决有用的问题。|还有一些其他可能实现智能的方法:新兴的、依靠协同的多智能体系统(multi-agent),它基于这样一个事实,即复杂的智能行为可以来自大量简单智能系统的相互作用。根据进化控制论,在元系统跃迁的过程中,智能可以从更简单的反应行为中产生。进化方法或遗传算法(genetic algorithm),是一种基于进化原理的优化过程。[1]译者注:元系统跃迁,[Metasystem Transition](https://en.wikipedia.org/wiki/Metasystem_transition),是指通过演化涌现出更高层次的组织或者控制。我们将在课程的后续部分考虑这些方法,但现在我们将重点关注自上而下、自下而上两个主要方向。
脚趾头:因为是OpenAI出的。(君不见现在大多数大模型都在遵循OpenAI的接口规范...他们对自己做的东西更了解)脑门:其实单Agent这块,没有啥花里胡哨的东西,简单业务,OpenAI就一个/api/completions接口。但是「Handoffs」这块,Swarm的确做的非常优雅。(这里不得不给自己吹个牛,年初我就写了Swarm类似的多智能体了。)多智能体的核心难题其实是不同智能体之间的通信问题。怎麼传递,传哪些信息,这些都很重要。其实之前很多多智能体开源框架,走的都是Room/Group的思路,就是把各个智能体都扔到一个大空间里,然后每个智能体都接收信息,每个智能体都存储信息。不说效率低下,光token的消耗都扛不住。实际上,多智能体,也只要在必要的时候被call起就可以,回到我们上文10086客服的例子。当接线小姐姐识别到这是个宽带问题需要转接的时候,她需要做2个事情:1.找到宽带部门的小姐姐,把会话权限交接过去;2.把记录「Messages」和我的问题「Query」交接过去(实际上会自动记录,共享查阅)那如果我们需要构建这样的一个客服多智能体,是不是只需要准备两个Agent:一个普通接线客服,一个宽带客服。Swarm的「Handoffs」处理了交接的逻辑。下面我用官方的例子魔改一下客服例子,方便大家理解。执行这段代码,打印出来的对话记录就可能会是是不是就变得非常清晰了?总得来说就是: