OpenAI Swarm - 多智能体编排框架详细介绍
项目概述
OpenAI Swarm是一个教育性框架,用于探索符合人体工程学的轻量级多智能体编排。该项目由OpenAI解决方案团队管理,旨在为开发者提供一个简单、灵活且可控的多智能体系统构建工具。
重要更新: Swarm现已被OpenAI Agents SDK替代,后者是Swarm的生产就绪版本。OpenAI团队建议所有生产用例迁移到Agents SDK。
核心特性
1. 设计理念
- 轻量级: 专注于简单性和易用性
- 高度可控: 提供精确的智能体控制机制
- 易于测试: 支持简单的测试和调试流程
- 教育导向: 作为学习多智能体编排的教育资源
2. 核心抽象概念
Swarm通过两个核心抽象实现智能体协调:
Agent(智能体)
- 包含指令(instructions)和工具(tools)
- 可以在任何时点将对话交接给另一个智能体
- 支持动态指令和上下文变量
Handoffs(交接)
- 智能体之间的无缝转换机制
- 支持复杂的智能体网络和工作流程
- 保持对话连续性
安装和基本使用
系统要求
- Python 3.10+
安装方式
pip install git+ssh://[email protected]/openai/swarm.git
# 或者
pip install git+https://github.com/openai/swarm.git
基本示例
from swarm import Swarm, Agent
client = Swarm()
def transfer_to_agent_b():
return agent_b
agent_a = Agent(
name="Agent A",
instructions="You are a helpful agent.",
functions=[transfer_to_agent_b],
)
agent_b = Agent(
name="Agent B",
instructions="Only speak in Haikus.",
)
response = client.run(
agent=agent_a,
messages=[{"role": "user", "content": "I want to talk to agent B."}],
)
print(response.messages[-1]["content"])
输出示例:
Hope glimmers brightly,
New paths converge gracefully,
What can I assist?
技术架构
客户端运行机制
Swarm的client.run()函数实现以下循环:
- 从当前智能体获取完成响应
- 执行工具调用并添加结果
- 必要时切换智能体
- 更新上下文变量
- 如果没有新的函数调用,返回结果
参数配置
| 参数 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| agent | Agent | 要调用的(初始)智能体 | (必需) |
| messages | List | 消息对象列表 | (必需) |
| context_variables | dict | 上下文变量 | {} |
| max_turns | int | 最大轮次 | float("inf") |
| model_override | str | 模型覆盖 | None |
| execute_tools | bool | 是否执行工具 | True |
| stream | bool | 是否启用流式响应 | False |
| debug | bool | 是否启用调试日志 | False |
智能体配置
Agent类字段
| 字段 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| name | str | 智能体名称 | "Agent" |
| model | str | 使用的模型 | "gpt-4o" |
| instructions | str或函数 | 智能体指令 | "You are a helpful agent." |
| functions | List | 可调用函数列表 | [] |
| tool_choice | str | 工具选择策略 | None |
动态指令示例
def instructions(context_variables):
user_name = context_variables["user_name"]
return f"Help the user, {user_name}, do whatever they want."
agent = Agent(instructions=instructions)
response = client.run(
agent=agent,
messages=[{"role":"user", "content": "Hi!"}],
context_variables={"user_name":"John"}
)
函数调用机制
基本函数调用
def greet(context_variables, language):
user_name = context_variables["user_name"]
greeting = "Hola" if language.lower() == "spanish" else "Hello"
print(f"{greeting}, {user_name}!")
return "Done"
agent = Agent(functions=[greet])
智能体交接
sales_agent = Agent(name="Sales Agent")
def transfer_to_sales():
return sales_agent
agent = Agent(functions=[transfer_to_sales])
复杂结果返回
def talk_to_sales():
print("Hello, World!")
return Result(
value="Done",
agent=sales_agent,
context_variables={"department": "sales"}
)
示例项目
Swarm提供了多个示例项目,展示不同的应用场景:
1. basic - 基础示例
演示设置、函数调用、交接和上下文变量的基本用法
2. triage_agent - 分流智能体
简单的分流设置,将请求转发给合适的智能体
3. weather_agent - 天气智能体
展示函数调用的简单示例
4. airline - 航空客服
多智能体设置,处理航空公司不同类型的客户服务请求
5. support_bot - 支持机器人
包括用户界面智能体和带有多种工具的帮助中心智能体
6. personal_shopper - 个人购物助手
帮助进行销售和退款订单处理的个人购物智能体
流式处理
Swarm支持流式响应,使用与Chat Completions API相同的事件:
stream = client.run(agent, messages, stream=True)
for chunk in stream:
print(chunk)
新增事件类型:
{"delim":"start"}和{"delim":"end"}- 标记智能体处理单个消息的开始和结束{"response": Response}- 在流结束时返回完整的Response对象
测试和评估
开发测试
使用run_demo_loop进行命令行测试:
from swarm.repl import run_demo_loop
run_demo_loop(agent, stream=True)
评估建议
- 项目鼓励开发者自带评估套件
- 在airline、weather_agent和triage_agent示例中提供了评估参考
- 支持自定义性能测试指标
与其他OpenAI产品的区别
与Assistants API的对比
- Assistants API: 提供完全托管的线程和内置内存管理
- Swarm: 完全在客户端运行,无状态设计,更适合学习和实验
技术特点
- 基于Chat Completions API构建
- 调用之间不保存状态
- 轻量级客户端实现
- 专注于教育和学习目的
适用场景
Swarm特别适合以下情况:
- 需要处理大量独立功能和指令的场景
- 难以编码到单个提示中的复杂任务
- 学习多智能体编排概念
- 快速原型开发和实验
项目状态
注意: 虽然Swarm已被OpenAI Agents SDK替代,但它仍然是一个优秀的教育资源,帮助开发者理解多智能体系统的基本概念和实现方式。对于生产环境,建议迁移到官方的Agents SDK。
总结
OpenAI Swarm为多智能体系统的学习和开发提供了一个简洁而强大的框架。通过智能体和交接这两个核心概念,开发者可以构建复杂的AI工作流程,同时保持代码的可读性和可维护性。虽然已被新的SDK替代,但其设计理念和教育价值依然重要。