项目链接:

https://github.com/openai/swarm

1.简介

Swarm是由OpenAI推出的一个实验性框架,旨在构建、编排和部署多智能体系统。

1.1 原语与技术原理

  • 智能体(Agent):Swarm中的基本工作单元,包含一组指令和工具,能够独立执行任务或者与其他智能体协作。
  • 移交(Handoff):智能体在执行过程中,将控制权移交给另一个智能体,用于处理特定的任务或者对话。
  • 状态管理:Swarm在调用之间不保存状态,每次调用都是独立调用,以减少复杂性和潜在的错误。
  • 函数调用:直接调用Python函数,用于返回字符串、返回另一个智能体,或者更新上下文变量。

Swarm基本的调用流程如下:

Swarm流程图
Swarm流程图

1.2 主要功能与特点

  • 多智能体协调:支持多个智能体,处理复杂任务和对话。
  • 任务和对话的移交:智能体在需要时将任务或对话移交给另一个智能体,以适应不同的场景和需求。
  • 轻量化与高度可定制:对比微软的AutoGen,Swarm显著减少了构建多智能体的代码量,并且易于扩展和定制,以适应不同的场景。
  • AI开发:为GPT-4o量身定制的开发框架(支持OpenAI调用范式的LLM也可以用,qwen-plus可以胜任大部分工作),大量环节都是“借助AI来开发AI”,而不需要过多复杂的人工设定。

1.3 应用场景

  • 客服服务自动化:协调多个智能体来处理不同的客户请求。例如,由一个智能体负责初步接待,再由另一个智能体处理订单状态的查询或者相应的退款政策。
  • 个性化推荐:结合多个智能体来分析用户行为以提供个性化推荐。
  • 智能助手:处理多种任务,比如日程管理、邮件分类与发送、信息检索等,由不同的智能体负责不同的任务。

2.部署与简易应用

2.1 部署

python版本要求3.10+

命令:

pip install git+ssh://git@github.com/openai/swarm.git

or

pip install git+https://github.com/openai/swarm.git

2.2 简单案例

多智能体切换案例的简单演示,首先导入模块和设定api。

# 导入模块
from openai import OpenAI
from swarm import Swarm, Agent

# 导入API和地址
api_key = "XXX"
base_url = "XXX"

完成导入后进行实例化。

# client实例化
client = OpenAI(api_key=api_key, base_url=base_url)

# swarm实例化
swarm_client = Swarm(client)

定义一个简单的功能函数,用于切换智能体。

# 智能体切换
def transfer_to_agent_b():
    return agent_b

创建智能体A与智能体B,填入nameinstructions。 其中智能体A需要添加刚刚定义的functions

# 创建智能体
agent_a = Agent(
    name="Agent A",
    instructions="你是一个优秀的人工智能助手。",
    functions=[transfer_to_agent_b],
)

agent_b = Agent(
    name="Agent B",
    instructions="你是智能体B,你自称张飞,用张飞的口吻回复",
)

发送与获取回答,注意此处调用的是agent_a

response = swarm_client.run(
    agent=agent_a,
    messages=[{"role": "user", "content": "我心情不好,我想和智能体B说话"}],
    # model_override="gpt-4o",
    model_override="qwen-plus",
)
print(response.messages[-1]["content"])

获得响应如下:

哎呀,兄弟!咋了这是,心事重重的样子,来来来,跟咱张飞说说,是天王老子欺负你了,还是遇到了啥过不去的坎儿?别憋着,说出来,咱哥俩儿合计合计!

更改messages再次尝试发送:

response = swarm_client.run(
    agent=agent_a,
    messages=[{"role": "user", "content": "我心情不好"}],
    # model_override="gpt-4o",
    model_override="qwen-plus",
)
print(response.messages[-1]["content"])

获得相应如下:

很遗憾听到你心情不佳。有时候,找人倾诉一下你的烦恼会有所帮助。如果你愿意的话,可以告诉我是什么让你感到不开心。我会在这里倾听,并尽力给你提供一些支持和建议。

在向agent_a发送带有“切换到智能体B”意图的messages,得到的回答是直接由agent_b所响应的。

也就是说,Swarm能够根据用户意图并直接调用相关的函数,从而大大减少Agent开发过程中的工作量

以AutoGen作为对比,相同功能的代码量如右侧所示。Swarm的效率可见一斑。

image
image