swarm

GitHub
21.3k 2.3k 非常简单 1 次阅读 2天前MIT语言模型开发框架Agent
AI 解读 由 AI 自动生成,仅供参考

Swarm 是由 OpenAI 解决方案团队推出的一个实验性教育框架,旨在探索如何以轻量、符合人体工学的方式协调多个 AI 智能体(Multi-Agent)协同工作。它主要解决了在复杂任务中,将大量独立能力或指令硬编码进单个提示词(Prompt)难以维护且缺乏灵活性的问题。通过引入“智能体”与“交接(Handoffs)”这两个核心概念,Swarm 让不同的智能体能够根据任务需求,动态地将对话控制权移交给更合适的伙伴,从而实现高效的任务编排与执行。

该工具特别适合开发者和技术研究人员使用,尤其是那些希望深入理解多智能体协作机制、构建可扩展原型或进行相关技术探索的人群。需要注意的是,Swarm 目前已被功能更强大且适用于生产环境的"OpenAI Agents SDK"所取代,官方建议新项目直接迁移至新 SDK。

Swarm 的技术亮点在于其极简的设计哲学:它完全基于 Chat Completions API 构建,不在服务端存储状态,所有逻辑均在客户端运行。这种无状态设计不仅降低了学习门槛,还赋予了开发者极高的控制权和测试便利性,使其成为学习多智能体架构理想的入门教具。

使用场景

某电商初创团队正在构建一个能同时处理售前咨询、订单修改及售后退款的智能客服系统,需灵活应对用户多变的需求。

没有 swarm 时

  • 逻辑耦合严重:所有业务规则(如退款政策、物流查询)必须塞进同一个提示词中,导致指令过长且容易相互干扰,模型经常混淆任务边界。
  • 维护成本高昂:每当新增一种业务场景(如“节日特惠”),就需要重新调整整个系统的提示词逻辑,极易引发旧功能的回归错误。
  • 流程控制僵硬:难以实现自然的上下文流转,用户从“查订单”切换到“要退款”时,系统往往需要重启对话或丢失关键信息,体验割裂。
  • 测试调试困难:由于缺乏明确的代理分工,定位具体是哪个业务环节出错如同大海捞针,无法单独验证某个特定能力的准确性。

使用 swarm 后

  • 职责清晰解耦:利用 Agent 原语将客服拆分为“导购专家”、“订单管家”和“售后专员”,每个代理只专注特定指令,大幅降低幻觉率。
  • 动态无缝交接:通过 handoff 机制,当用户提出退款时,“导购专家”可自动将对话权移交给“售后专员”并携带完整上下文,流程丝滑自然。
  • 迭代灵活高效:新增业务只需定义一个新的 Agent 并注册交接函数,无需触碰现有代码逻辑,实现了真正的模块化扩展。
  • 单元测试便捷:开发者可针对单个 Agent 的指令和工具进行独立测试,快速定位并修复特定领域的逻辑漏洞,显著提升稳定性。

swarm 通过轻量级的多代理协作与动态交接机制,将复杂的单体客服逻辑转化为可维护、可扩展的模块化网络,极大提升了开发效率与用户体验。

运行环境要求

GPU

未说明

内存

未说明

依赖
notes该工具是一个实验性、教育性的多智能体协调框架,现已由 OpenAI Agents SDK 取代,建议生产环境迁移至新 SDK。工具完全基于 Chat Completions API,客户端运行且无状态存储。
python3.10+
openai
swarm hero image

快速开始

Swarm Logo

Swarm(实验性、教育用途)

[!重要] Swarm 现已由 OpenAI Agents SDK 取代,它是 Swarm 的生产就绪版本。Agents SDK 具有关键改进,并将由 OpenAI 团队积极维护。

我们建议所有生产环境的使用都迁移到 Agents SDK。

安装

需要 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="你是一个乐于助人的智能体。",
    functions=[transfer_to_agent_b],
)

agent_b = Agent(
    name="Agent B",
    instructions="只用俳句表达。",
)

response = client.run(
    agent=agent_a,
    messages=[{"role": "user", "content": "我想和 Agent B 联系。"}],
)

print(response.messages[-1]["content"])
希望熠熠生辉,
新路优雅交汇,
有何可以帮您?

目录

概述

Swarm 致力于使智能体之间的协调执行轻量级、高度可控且易于测试。

它通过两种基本抽象实现这一目标:Agent交接。一个 Agent 包含 instructionstools,并且可以在任何时候选择将对话交接给另一个 Agent

这些基本抽象足够强大,能够表达工具与智能体网络之间的丰富动态,使您能够在避免陡峭学习曲线的同时构建可扩展的现实世界解决方案。

[!注意] Swarm 中的智能体与 Assistants API 中的 Assistants 无关。它们之所以名称相似只是为了方便,但实际上完全不相关。Swarm 完全由 Chat Completions API 提供支持,因此在每次调用之间是无状态的。

为什么选择 Swarm

Swarm 探索的是设计上轻量级、可扩展且高度可定制的模式。类似 Swarm 的方法最适合处理大量独立能力以及难以编码到单个提示中的复杂指令的情况。

对于希望使用完全托管的线程以及内置记忆管理和检索功能的开发者来说,Assistants API 是一个很好的选择。然而,Swarm 则是为那些对多智能体编排感兴趣的开发者提供的教育资源。Swarm 几乎完全在客户端运行,而且与 Chat Completions API 类似,在每次调用之间不会存储状态。

示例

请查看 /examples 获取灵感!每个示例的详细信息请参阅其 README 文件。

  • basic:基础示例,包括设置、函数调用、交接和上下文变量等基本内容。
  • triage_agent:简单的分诊示例,用于将用户引导至合适的智能体。
  • weather_agent:简单的函数调用示例。
  • airline:一个多智能体系统,用于在航空公司环境中处理不同的客户服务请求。
  • support_bot:一个包含用户界面智能体和帮助中心智能体的客服机器人,配备多种工具。
  • personal_shopper:一个个人购物助手,可以帮助完成销售并处理订单退款。

文档

Swarm 流程图

运行 Swarm

首先实例化一个 Swarm 客户端(内部只是实例化了一个 OpenAI 客户端)。

from swarm import Swarm

client = Swarm()

client.run()

Swarm 的 run() 函数类似于 Chat Completions API 中的 chat.completions.create() 函数——它接收 messages 参数并返回 messages,且在每次调用之间不会保存任何状态。然而,更重要的是,它还负责处理 Agent 的函数执行、任务交接、上下文变量引用,并且可以在返回给用户之前进行多轮交互。

从本质上讲,Swarm 的 client.run() 实现了以下循环:

  1. 从当前 Agent 获取响应
  2. 执行工具调用并将结果附加到消息中
  3. 如有必要,切换 Agent
  4. 如有必要,更新上下文变量
  5. 如果没有新的函数调用,则返回结果

参数

参数 类型 描述 默认值
agent Agent 要调用的(初始)Agent。 (必填)
messages List 消息对象列表,与 Chat Completions 的 messages 完全相同 (必填)
context_variables dict 一组额外的上下文变量字典,可供函数和 Agent 指令使用 {}
max_turns int 允许的最大对话轮次数 float("inf")
model_override str 可选字符串,用于覆盖 Agent 使用的模型 None
execute_tools bool 如果为 False,当 Agent 尝试调用函数时,将中断执行并立即返回包含 tool_calls 的消息 True
stream bool 如果为 True,则启用流式响应 False
debug bool 如果为 True,则启用调试日志 False

一旦 client.run() 完成(可能经过多次 Agent 和工具的调用),它将返回一个 Response 对象,其中包含所有相关的更新状态。具体来说,包括新的 messages、最后被调用的 Agent 以及最新的 context_variables。您可以将这些值(加上新的用户消息)传递到下一次 client.run() 调用中,以从中断的地方继续交互——这与 chat.completions.create() 的行为非常相似。(run_demo_loop 函数在 /swarm/repl/repl.py 中实现了一个完整的执行循环示例。)

Response 字段

字段 类型 描述
messages List 在对话过程中生成的消息对象列表。与 Chat Completions 的 messages 非常相似,但增加了一个 sender 字段,用于指示消息来自哪个 Agent
agent Agent 最后处理消息的 Agent。
context_variables dict 与输入变量相同,但包含了任何已发生的变更。

Agents

一个 Agent 简单地封装了一组 instructions 和一组 functions(以及一些额外的设置),并且具备将执行权移交给他者的能力。

尽管我们倾向于将 Agent 比作“做某事的人”,但它也可以用来表示由一组 instructionsfunctions 定义的非常具体的流程或步骤(例如一系列步骤、复杂的检索操作、单一的数据转换步骤等)。这使得 Agent 可以组合成一个由“代理”、“工作流”和“任务”组成的网络,而所有这些都可以用相同的原语来表示。

Agent 字段

字段 类型 描述 默认
name str Agent 的名称。 "Agent"
model str Agent 使用的模型。 "gpt-4o"
instructions strfunc() -> str Agent 的指令,可以是字符串,也可以是一个返回字符串的可调用函数。 "You are a helpful agent."
functions List Agent 可以调用的函数列表。 []
tool_choice str Agent 的工具选择(如果有)。 None

指令

Agentinstructions 会直接转换为对话的 system 提示(作为第一条消息)。在任何给定时刻,只有当前活动的 Agentinstructions 才会存在(例如,如果发生 Agent 接手,system 提示会发生变化,但聊天历史不会改变)。

agent = Agent(
   instructions="你是一个乐于助人的智能体。"
)

instructions 可以是普通的 str,也可以是一个返回 str 的函数。该函数可以选择性地接收一个 context_variables 参数,这个参数将由传递给 client.run()context_variables 填充。

def instructions(context_variables):
   user_name = context_variables["user_name"]
   return f"帮助用户 {user_name} 完成他们想要做的事情。"

agent = Agent(
   instructions=instructions
)
response = client.run(
   agent=agent,
   messages=[{"role":"user", "content": "你好!"}],
   context_variables={"user_name":"John"}
)
print(response.messages[-1]["content"])
你好 John,今天有什么可以帮您的吗?

函数

  • Swarm 的 Agent 可以直接调用 Python 函数。
  • 函数通常应返回 str(其他类型的值会被尝试转换为 str)。
  • 如果函数返回一个 Agent,执行将转移到该 Agent
  • 如果函数定义了 context_variables 参数,它将由传递给 client.run()context_variables 填充。
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 "完成"

agent = Agent(
   functions=[greet]
)

client.run(
   agent=agent,
   messages=[{"role": "user", "content": "请使用 greet()。"}],
   context_variables={"user_name": "John"}
)
Hola, John!
  • 如果 Agent 调用函数时出现错误(函数不存在、参数错误或运行时错误),错误信息会被添加到聊天记录中,以便 Agent 能够优雅地恢复。
  • 如果 Agent 调用了多个函数,这些函数将按照顺序依次执行。

接手与更新上下文变量

Agent 可以通过在函数中返回另一个 Agent 来进行接手。

sales_agent = Agent(name="销售代理")

def transfer_to_sales():
   return sales_agent

agent = Agent(functions=[transfer_to_sales])

response = client.run(agent, [{"role":"user", "content":"把我转接到销售部门。"}])
print(response.agent.name)
销售代理

它也可以通过返回一个更完整的 Result 对象来更新 context_variables。这个对象还可以包含 valueagent,这样你就可以让一个函数同时返回值、更新 Agent 并更新上下文变量(或者其中任意一部分)。

sales_agent = Agent(name="销售代理")

def talk_to_sales():
   print("你好,世界!")
   return Result(
       value="完成",
       agent=sales_agent,
       context_variables={"department": "sales"}
   )

agent = Agent(functions=[talk_to_sales])

response = client.run(
   agent=agent,
   messages=[{"role": "user", "content": "把我转接到销售部门"}],
   context_variables={"user_name": "John"}
)
print(response.agent.name)
print(response.context_variables)
销售代理
{'department': 'sales', 'user_name': 'John'}

[!注意] 如果一个 Agent 调用多个函数来进行接手,最终只会采用最后一个接手函数。

函数 Schema

Swarm 会自动将函数转换为 JSON Schema,并将其传递给 Chat Completions 的 tools

  • 文档字符串会变成函数的 description
  • 没有默认值的参数会被设置为 required
  • 类型提示会被映射到参数的 type(默认为 string)。
  • 虽然不显式支持每个参数的描述,但如果直接在文档字符串中添加,效果应该类似。(未来可能会增加对文档字符串参数解析的支持)
def greet(name, age: int, location: str = "New York"):
   """向用户问好。调用前请确保获取用户的姓名和年龄。

   Args:
      name: 用户的姓名。
      age: 用户的年龄。
      location: 地球上最好的地方。
   """
   print(f"你好 {name}, 很高兴你在 {age} 岁时身处 {location}!")
{
   "type": "function",
   "function": {
      "name": "greet",
      "description": "向用户问好。调用前请确保获取用户的姓名和年龄。\n\nArgs:\n   name: 用户的姓名。\n   age: 用户的年龄。\n   location: 地球上最好的地方。",
      "parameters": {
         "type": "object",
         "properties": {
            "name": {"type": "string"},
            "age": {"type": "integer"},
            "location": {"type": "string"}
         },
         "required": ["name", "age"]
      }
   }
}

流式处理

stream = client.run(agent, messages, stream=True)
for chunk in stream:
   print(chunk)

使用与 Chat Completions API 流式处理 相同的事件。可参考 /swarm/repl/repl.py 中的 process_and_print_streaming_response 作为示例。

新增了两种事件类型:

  • {"delim":"start"}{"delim":"end"},用于标记每次 Agent 处理单条消息(响应或函数调用)的开始和结束。这有助于识别 Agent 之间的切换。
  • {"response": Response} 会在流结束时返回一个 Response 对象,其中包含聚合后的完整响应,以方便使用。

评估

评估对于任何项目都至关重要,我们鼓励开发者使用自己的评估套件来测试其 Swarm 的性能。作为参考,我们在 airlineweather_agenttriage_agent 快速入门示例中提供了一些评估方法。更多详情请参阅各项目的 README 文件。

工具

使用 run_demo_loop 来测试你的 Swarm!这将在命令行上运行一个 REPL。支持流式处理。

from swarm.repl import run_demo_loop
...
run_demo_loop(agent, stream=True)

核心贡献者

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架