产品白苏GLBai 06月12日 10:34
突发!OpenAI官方开源多智能体框架「Swarm」
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

OpenAI 官方开源多智能体框架 Swarm,引发广泛关注。该框架核心在于定义 Agents 和 Handoffs,简化了多智能体之间的协作流程。文章深入解读了 Swarm 的设计理念,并结合实际案例,阐述了 Handoffs 在智能体间信息传递中的关键作用。作者还对比了传统多智能体框架的不足,强调了 Swarm 在效率和 Token 消耗方面的优势。总而言之,Swarm 为构建复杂智能体应用提供了新的思路和工具。

💡Swarm 框架的核心在于 Agents 和 Handoffs 的设计。 Agents 代表不同的智能体,Handoffs 则负责处理智能体之间的交接逻辑,简化了多智能体之间的通信和协作。

🔨 Handoffs 的关键在于信息的传递和上下文的维护。当一个智能体需要将任务交给另一个智能体时,Handoffs 能够确保相关信息(如对话记录、用户提问等)被正确传递,并保持上下文的连贯性。

🗣️Swarm 框架在设计上避免了传统多智能体框架中常见的效率问题。 传统框架通常采用 Room/Group 的模式,导致信息冗余和 Token 消耗过高。Swarm 通过按需调用和精确的信息传递,提高了效率。

👩‍💻文章通过 10086 客服的例子,生动展示了 Swarm 的应用。普通客服接到用户咨询宽带问题的请求后,通过 Handoffs 将任务转交给宽带客服,实现了智能体之间的无缝协作。

原创 ElliotBai 2024-10-12 13:53 上海

OpenAI终于自己下场做多智能体框架了,虽然还只是实验性的,但是很有用。

一句话总结:

OpenAI终于自己下场做多智能体框架了,虽然还只是实验性的,但是很有用。


今天早上,OpenAI实施团队的 @shyamal在Github上开源了Swarm这个OpenAI官方的多智能体框架。

Swarm 里面定义了两个核心「Agents」「Handoffs」。但是一个「Handoffs」,就把多智能体的关键,点的透透的。

大概过了一下文章和代码,简单看了下examples,不得不说,官方下场,就是不一样,下面就来带大家看看不一样在什麼地方,地址放在最后面。

我在之前的血泪史系列文章里有断断续续提到过很多关于Agent Tools调用和编排相关的内容,有兴趣的同学可以先读读我之前的一些内容:

AI Agent产品经理血泪史:一年来我摸过的那些石头【Tools篇】

AI Agent 产品经理血泪史(二)-欲知方圆,则必规矩【Workflow篇】

这两篇内容讲到,如何构建不同类型的Agent来满足不同的需求,复杂度从易到难,分别是:

纯Prompt对话

单个工具调用

多个工具调用

通过workflow来执行复杂流程

Multi-Agent 多智能体协同

虽然单个Agent配上多个Tools,Workflow之后也能处理不同的问题,但是一个Agent的System Prompt是只有一个,能携带的Tools也是有数量限制的。

如果我们需要处理很多不同类别的复杂问题,要怎麼办?

相信大家都有打过10086客服电话的经验,或者电商客服咨询的经验:

如果你只是简单的问个常规问题,接线的客服直接就给你回答了,但是如果你问了一些其它业务线的问题时,比如宽带,那客服小姐姐就会温柔地跟你说“请稍等,我帮你转接到宽带部门”,一阵美妙的音乐声之后,另外一位专业的客服小姐姐接起了电话...

术业有专攻,智能体也一样。不能逮住一个牛马就使劲薅。

脚趾头:

因为是OpenAI出的。(君不见现在大多数大模型都在遵循OpenAI的接口规范...他们对自己做的东西更了解)

脑门:

其实单Agent这块,没有啥花里胡哨的东西,简单业务,OpenAI就一个 /api/completions 接口。但是「Handoffs」这块,Swarm的确做的非常优雅。(这里不得不给自己吹个牛,年初我就写了Swarm类似的多智能体了。)

多智能体的核心难题其实是不同智能体之间的通信问题。怎麼传递,传哪些信息,这些都很重要。

其实之前很多多智能体开源框架,走的都是Room/Group的思路,就是把各个智能体都扔到一个大空间里,然后每个智能体都接收信息,每个智能体都存储信息。不说效率低下,光token的消耗都扛不住。

实际上,多智能体,也只要在必要的时候被call起就可以,回到我们上文10086客服的例子。

当接线小姐姐识别到这是个宽带问题需要转接的时候,她需要做2个事情:

找到宽带部门的小姐姐,把会话权限交接过去;

把记录「Messages」和我的问题「Query」交接过去(实际上会自动记录,共享查阅)

那如果我们需要构建这样的一个客服多智能体,是不是只需要准备两个Agent:一个普通接线客服,一个宽带客服。

Swarm的「Handoffs」处理了交接的逻辑。下面我用官方的例子魔改一下客服例子,方便大家理解。

from swarm import Swarm, Agentclient = Swarm() 
# 定义一个交接函数,作为普通客服的工具def transfer_to_agent_kuandai():
    return agent_kuandai
# 定义一个普通客服小姐姐 little_sister_a = Agent(
    name="普通客服小姐姐",
    instructions="你是10086的客服小姐姐,你负责处理基础的业务问题",
    # 这里就给普通客服一个转接宽带客服的工具,当需要处理宽带业务的时候会被调用
    functions=[transfer_to_agent_kuandai],)little_sister_kuandai = Agent(
    name="宽带客服小姐姐",
    instructions="你负责处理宽带业务问题",)response = client.run(    agent=little_sister_a,
    messages=[{"role": "user", "content": "我想要咨询一下宽带问题"}],)
print(response.messages[-1]["content"])
执行这段代码,打印出来的对话记录就可能会是

用户:你好,我想要咨询一下宽带问题普通客服:请稍等,我帮你转接(转给宽带客服)宽带客服:你好,请问有什麼宽带问题需要查询咨询?
是不是就变得非常清晰了?

总得来说就是:

Agent部分其实大同小异;

handoffs通过封装一个tools给到agent,当用户的query意图触发的时候,调用这个工具,处理交接的一系列逻辑(可以理解是把另外一个agent的prompt,tools,拿过来,结果了a的上下文记录,再重新请求一遍

好了,剩下的自己看吧,标黑的都是重点,着急发文章。

Github 地址查看原文

阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

OpenAI 多智能体 Swarm Handoffs Agent
相关文章