原创 ElliotBai 2024-10-12 13:53 上海
OpenAI终于自己下场做多智能体框架了,虽然还只是实验性的,但是很有用。
今天早上,OpenAI实施团队的 @shyamal在Github上开源了Swarm这个OpenAI官方的多智能体框架。Swarm 里面定义了两个核心「Agents」和「Handoffs」。但是一个「Handoffs」,就把多智能体的关键,点的透透的。大概过了一下文章和代码,简单看了下examples,不得不说,官方下场,就是不一样,下面就来带大家看看不一样在什麼地方,地址放在最后面。
纯Prompt对话
单个工具调用
多个工具调用
通过workflow来执行复杂流程
Multi-Agent 多智能体协同
虽然单个Agent配上多个Tools,Workflow之后也能处理不同的问题,但是一个Agent的System Prompt是只有一个,能携带的Tools也是有数量限制的。如果我们需要处理很多不同类别的复杂问题,要怎麼办?相信大家都有打过10086客服电话的经验,或者电商客服咨询的经验:如果你只是简单的问个常规问题,接线的客服直接就给你回答了,但是如果你问了一些其它业务线的问题时,比如宽带,那客服小姐姐就会温柔地跟你说“请稍等,我帮你转接到宽带部门”,一阵美妙的音乐声之后,另外一位专业的客服小姐姐接起了电话...
术业有专攻,智能体也一样。不能逮住一个牛马就使劲薅。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 地址查看原文