Hi~新朋友,记得关注我们哟
亲爱的朋友们,
多智能体协作是我在最近的来信中描述的四个关键AI智能体设计模式中的最后一个。对于编写软件这样的复杂任务,多智能体方法会将任务分解为子任务,由不同的角色——如软件工程师、产品经理、设计师、QA(质量保证)工程师等来执行,并让不同的智能体完成不同的子任务。
可以通过提示一个LLM(如果你愿意,也可以提示多个LLM)执行不同的任务来构建不同的智能体。例如,要构建一个软件工程师智能体,我们可能会提示LLM:“你是编写清晰、高效代码的专家。编写代码来执行任务......”
虽然我们对同一个LLM进行了多次调用,使用多个智能体来进行编程抽象,这似乎不合常理。但我想提供几个理由:
✴它是有效的!许多团队使用这种方法获得了很好的结果,没有什么比结果更好的了!此外,消融研究(例如,下面引用的AutoGen论文)表明,多智能体比单一智能体具有更好的性能。
✴尽管今天一些LLM可以接受很长的输入上下文(例如,Gemini 1.5 Pro可以接受100万个token),但它们真正理解长而复杂的输入的能力参差不齐。在一个智能体工作流中,LLM被提示一次只专注于一件事就可以提供更好的性能。通过告诉它什么时候应该扮演软件工程师,我们还可以指定在该角色的子任务中什么是重要的。例如,上面的提示强调清晰、高效的代码,而不是可伸缩和高度安全的代码。通过将整体任务分解为子任务,可以更好地优化子任务。
✴可能重要的是,作为开发人员,多智能体设计模式为我们提供了一个将复杂任务分解为子任务的框架。当编写在单个CPU上运行的代码时,我们经常将程序分解为不同的进程或线程。这是一个有用的抽象,可以让我们将一个任务分解成更容易编程的子任务,比如实现一个web浏览器。我发现通过多智能体角色进行思考也是一种有用的抽象。
在许多公司,管理者通常会决定雇佣什么角色(职位),然后决定如何将复杂的项目——比如编写一大型软件或准备一份研究报告——分成更小的任务,并分配给擅长不同领域的员工。使用多个智能体也是一样的。每个智能体会实现自己的工作流程,拥有自己的记忆(这本身就是智能体技术中一个快速发展的领域:一个智能体如何能够记住足够多的历史交互,以便在即将到来的交互中表现得更好?),并且可以向其他智能体寻求帮助。智能体还可以参与规划和工具使用。这将导致LLM调用和智能体之间消息传递的不和谐,从而导致非常复杂的工作流。
虽然管理人员很困难,但这是一个非常熟悉的想法,它为我们提供了一个如何“雇用”和分配任务给我们的AI智能体的心理框架。幸运的是,对AI智能体管理不善造成的伤害比对人类员工管理不善造成的伤害要小得多!
新兴框架,如AutoGen, Crew AI和LangGraph,为构建多智能体解决方案提供了丰富的方法。如果你对有趣的多智能体系统感兴趣,也可以了解一下ChatDev,它是一组运营一家虚拟软件公司的智能体的开源实现。我推荐你试试他们的GitHub repo,或者克隆repo并自己运行系统。虽然它可能并不总能产生你想要的结果,但你可能会对它的效果感到惊讶。
就像规划的设计模式一样,我发现多智能体协作的输出质量很难预测,特别是当允许智能体自由交互并为它们提供多种工具时。更成熟的反思模式和工具使用模式会更可靠。希望你能喜欢使用这些智能体设计模式,并为你带来惊人的结果!
如果你有兴趣了解更多,请参阅一下内容:
✅“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)
请不断学习!
吴恩达
点击下方阅读原文查看更多有趣内容哦~