基于大语言模型(LLM)多智能体(Multi Agent)实战:从工具调用到任务执行的完整指南(Python)
在AI系统中,单代理设计在处理简单任务时表现良好,但随着任务复杂性和工具数量的增加,其局限性逐渐显现。首先,工具过多会导致AI面临选择困难,尤其是在工具数量超过10个时,AI可能难以快速选择最合适的工具。其次,任务差异大时,单一的系统提示难以覆盖所有场景,导致系统复杂度急剧上升。为了解决这些问题,模块化与专业化成为自然的选择,通过多代理系统将任务分解,每个代理专注于特定领域,从而提升整体效率。此外
在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系统的效率和灵活性。未来,随着多代理技术的不断发展,其在更多领域的应用潜力将得到进一步挖掘。
更多推荐


所有评论(0)