category
多智能体协作是我在最近几封信中描述的四种关键人工智能智能智能体设计模式中的最后一种。给定像编写软件这样的复杂任务,多智能体方法会将任务分解为由不同角色执行的子任务,如软件工程师、产品经理、设计师、QA(质量保证)工程师等,并让不同的代理完成不同的子任务。
可以通过提示一个LLM(或者,如果您愿意,可以提示多个LLM)执行不同的任务来构建不同的代理。例如,要构建软件工程师代理,我们可能会提示LLM:“您是编写清晰高效代码的专家。编写代码来执行任务……”
尽管我们对同一LLM进行了多次调用,但我们应用了使用多个代理的编程抽象,这似乎违反了直觉。我想提供几个理由:
它有效!许多球队都用这种方法取得了好成绩,没有什么比这更好的结果了!此外,消融研究(例如,在下面引用的AutoGen论文中)表明,多种药剂比单一药剂具有更好的性能。
尽管今天的一些LLM可以接受非常长的输入上下文(例如,Gemini 1.5 Pro接受100万个令牌),但它们真正理解长而复杂输入的能力参差不齐。一个代理工作流,其中LLM被提示一次只关注一件事,可以提供更好的性能。通过告诉它什么时候应该扮演软件工程师,我们还可以指定在该角色的子任务中什么是重要的。例如,上面的提示强调了清晰、高效的代码,而不是可扩展和高度安全的代码。通过将整个任务分解为子任务,我们可以更好地优化子任务。
也许最重要的是,作为开发人员,多智能体设计模式为我们提供了一个将复杂任务分解为子任务的框架。当编写在单个CPU上运行的代码时,我们经常将程序分解为不同的进程或线程。这是一个有用的抽象,可以让我们将任务(如实现web浏览器)分解为更易于编码的子任务。我发现思考多智能体角色也是一种有用的抽象。
在许多公司,经理们通常会决定雇佣什么角色,然后如何将复杂的项目(如编写一个大型软件或准备一份研究报告)拆分为较小的任务,分配给不同专业的员工。使用多个代理是类似的。每个代理都实现自己的工作流程,有自己的内存(这本身就是代理技术中一个快速发展的领域:代理如何记住足够多的过去的交互,以便在即将到来的交互中表现得更好?),并可能向其他代理寻求帮助。代理商还可以参与计划和工具使用。这会导致LLM调用和代理之间的消息传递不和谐,从而导致非常复杂的工作流。
虽然管理人员很难,但这是一个非常熟悉的想法,它为我们提供了一个如何“雇佣”和分配任务给人工智能代理的心理框架。幸运的是,人工智能代理管理不善所造成的损害远低于人类管理不善所带来的损害!
AutoGen、Crew AI和LangGraph等新兴框架提供了构建多智能体问题解决方案的丰富方法。如果你有兴趣玩一个有趣的多智能体系统,也可以看看ChatDev,这是一个运行虚拟软件公司的一组代理的开源实现。我鼓励您查看他们的GitHub回购,也许可以克隆回购并自己运行系统。虽然它可能并不总是能产生你想要的东西,但你可能会惊讶于它的效果。
与规划的设计模式一样,我发现多智能体协作的输出质量很难预测,尤其是当允许智能体自由交互并为它们提供多种工具时。反射和工具使用的模式越成熟,就越可靠。我希望你喜欢玩这些代理设计模式,它们会为你带来惊人的结果!
如果您有兴趣了解更多信息,我建议您:
- “Communicative Agents for Software Development,” Qian et al. (2023) (the ChatDev paper)
- “AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation,” Wu et al. (2023)
- “MetaGPT: Meta Programming for a Multi-Agent Collaborative Framework,” Hong et al. (2023)
- 登录 发表评论
- 77 次浏览
最新内容
- 1 week 5 days ago
- 2 weeks 6 days ago
- 3 weeks 2 days ago
- 3 weeks 2 days ago
- 3 weeks 5 days ago
- 3 weeks 6 days ago
- 4 weeks ago
- 4 weeks 1 day ago
- 4 weeks 1 day ago
- 4 weeks 1 day ago