Home
Login

OpenAI开发的轻量级多智能体编排教育框架,专注于智能体协调和执行

MITPython 20.0kopenaiswarm Last Updated: 2025-03-11

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://git@github.com/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()函数实现以下循环:

  1. 从当前智能体获取完成响应
  2. 执行工具调用并添加结果
  3. 必要时切换智能体
  4. 更新上下文变量
  5. 如果没有新的函数调用,返回结果

参数配置

参数 类型 描述 默认值
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替代,但其设计理念和教育价值依然重要。

Star History Chart