在AI系统中,单代理设计在处理简单任务时表现良好,但随着任务复杂性和工具数量的增加,其局限性逐渐显现。首先,工具过多会导致AI面临选择困难,尤其是在工具数量超过10个时,AI可能难以快速选择最合适的工具。其次,任务差异大时,单一的系统提示难以覆盖所有场景,导致系统复杂度急剧上升。为了解决这些问题,模块化与专业化成为自然的选择,通过多代理系统将任务分解,每个代理专注于特定领域,从而提升整体效率。此外,不同代理可以使用不同的模型、系统提示和工具,进一步优化任务处理能力。

基于之前的Agent类(参考文章LLM单智能体实战:从工具调用到任务执行的完整指南),我们可以通过多代理系统来实现任务的分工与协作。以下是一个简单的示例,展示了如何定义两个代理:销售助理退款代理,并通过消息传递实现任务交接。

图片

任务交接与代理切换

在实际应用中,任务可能需要多个代理协作完成。例如,用户可能先下单,随后又要求退款。通过消息传递机制,可以在同一个消息串中切换代理。以下代码展示了如何通过调用run_full_turn实现代理切换:

图片

代理切换的关键:Handoff机制

为了实现代理之间的无缝切换,关键在于Handoff机制。常见的做法是将代理切换功能封装为一个工具,由AI决定何时调用。例如,销售助理可以在需要时调用transfer_to_refunds函数,将任务交接给退款代理:

图片

核心程序的优化

为了支持代理切换功能,核心程序需要进行相应调整。以下代码展示了如何在run_full_turn_v2中实现代理切换逻辑:

图片

使用方式

图片

恭喜,我们发明了“OpenAI Swarm” 这个多代理框架。

图片

Swarm案例:双层客服

图片

图片

客户支持机器人示例(LangGraph)

图片

Swarm案例:研究报告

让代理自动搜索资料,然后撰写报告。

图片

图片

实际执行

图片

多代理设计关键一:协作方式

网络模式:让每个代理元件决定交接给谁,常见用function calling来实现。

监督者模式:很多多代理框架用这种方式。

 - Phidata 的 team

 - Autogen 的 Group Chat

 - CrewAI 的 Hierarchical

图片

监督者:每轮对话都需要先挑选代理

图片

挑选的提示通常长这样:

图片

多代理设计关键二

代理之间的数据如何共享和传递

在Swarm中,会在function call交接时,自定义要传递哪些上下文变量。

图片

在Swarm示例中,你会看到完整的聊天历史,像是多代理轮流跟你对话,只是代理会换人,因此你和代理都看到了所有聊天历史。

图片

代理之间互相对话会怎样?

也就是聊天历史不共享,每个代理有自己的消息记录。

图片

恭喜,我们发明了“Autogen” 这个多代理对话框架

图片

Autogen

图片

双代理聊天和聊天结果

图片

顺序聊天

图片

群 聊

图片

多代理系统在以下场景中表现出色:

  • 客户支持:通过分流代理、销售代理和退款代理的协作,提供高效的客户服务。

  • 研究报告生成:通过草稿代理、搜索代理和报告代理的分工,自动完成资料搜索与报告撰写。

  • 自动化评估:通过多个代理的协作,完成复杂任务的自动化处理。

多代理系统通过模块化与专业化的设计,有效解决了单代理系统在处理复杂任务时的局限性。通过合理的协作机制和数据共享策略,多代理系统能够显著提升AI系统的效率和灵活性。未来,随着多代理技术的不断发展,其在更多领域的应用潜力将得到进一步挖掘。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐