【大模型开发】OpenAI 开源多模态智能体(AI Agent)Swarm详解

以下是关于开源多代理框架 Swarm 的详细介绍,包含核心设计、工作机制、代码案例及扩展应用。


一、Swarm 框架概述

Swarm 是由 OpenAI 开源的多代理协作框架,专注于轻量级、可控的代理(Agent)协调与任务切换。其设计目标是探索多代理系统的人体工学接口,适用于教育、实验及复杂工作流的快速原型开发,而非生产环境。

核心特性

  1. 轻量级:代码仅约 500 行,依赖 OpenAI 的 Chat Completions API,调用间无状态存储。
  2. Handoffs 机制:允许代理通过函数调用动态移交对话任务,实现多代理协作。
  3. 完全透明性:支持调试日志打印上下文变量、工具调用步骤,便于开发者跟踪执行流程。

二、核心组件与工作机制

1. 核心类

  • Swarm 客户端:管理代理调度、工具调用及上下文更新。
  • Agent:封装指令(instructions)和工具函数(functions),可动态切换代理。
  • Response:存储对话历史、当前活跃代理及上下文变量。
  • Result:代理函数调用的返回结果,可携带新代理实例或更新上下文变量。

2. 执行流程

Swarm 的运行循环如下:

  1. 模型响应生成:基于当前代理的指令和对话历史调用 LLM 生成回复。
  2. 工具调用处理:执行代理注册的函数(如切换代理、调用 API)。
  3. 上下文更新与代理切换:根据函数返回结果更新上下文或切换活跃代理。

三、案例代码与详细解释

案例 1:基础代理切换

以下代码实现用户请求由 Agent A 转交至 Agent B,后者以特定格式(如诗歌)回复:

from swarm import Swarm, Agent

# 初始化 Swarm 客户端
client = Swarm()

# 定义 Agent B 的指令(以 Haiku 诗歌格式回复)
agent_b = Agent(
    name="Agent B",
    instructions="Only respond in Haiku format."
)

# 定义 Agent A 的切换函数
def transfer_to_agent_b():
    return agent_b  # 返回目标代理实例

agent_a = Agent(
    name="Agent A",
    instructions="You are a helpful assistant. Transfer to Agent B when requested.",
    functions=[transfer_to_agent_b]  # 注册切换函数
)

# 启动对话
response = client.run(
    agent=agent_a,
    messages=[{"role": "user", "content": "I want to speak with Agent B."}]
)

# 输出最终回复
print("Agent Response:", response.messages[-1]["content"])

代码解析

  1. 代理定义
       - Agent Atransfer_to_agent_b 函数返回 Agent B 实例,触发切换。
       - Agent B 的指令要求以 Haiku 诗歌格式回复(如:“Silent moonlit night / Whispers of the wind speak true / How may I assist?”)。
  2. 执行流程
       - 用户请求触发 Agent A 调用 transfer_to_agent_b,Swarm 将活跃代理切换为 Agent B
       - 后续对话由 Agent B 处理,生成符合指令的回复。

案例 2:上下文变量与工具调用

以下示例展示如何通过上下文变量动态调整代理行为:

def get_user_preference(context_variables: dict) -> str:
    return context_variables.get("preference", "default")

# 定义 Agent C,动态生成指令
agent_c = Agent(
    name="Agent C",
    instructions=lambda ctx: f"Recommend products based on user preference: {get_user_preference(ctx)}",
    functions=[]
)

# 传递上下文变量
response = client.run(
    agent=agent_c,
    messages=[{"role": "user", "content": "Suggest a product."}],
    context_variables={"preference": "eco-friendly"}
)

print("Recommendation:", response.messages[-1]["content"])

代码解析

  • Agent C 的指令通过 lambda 函数动态生成,结合上下文变量 preference
  • 用户偏好从 context_variables 中提取,实现个性化推荐(如:“Based on your eco-friendly preference, I recommend bamboo toothbrushes.”)。

四、应用场景与优势对比

1. 典型应用场景

  • 客服自动化:多代理协作处理用户请求(如订单修改、退款),通过意图识别代理分流转接。
  • 复杂工作流:将独立功能拆分为多个代理,如天气查询、航班改签等。

2. 对比其他框架

框架Swarm 优势
LangGraph更轻量,适合精细控制代理切换和上下文管理。
CrewAI提供透明化调试日志,便于追踪执行步骤。

五、扩展功能与源码解析

1. 流式处理与调试

启用流式响应和调试日志:

response = client.run(
    agent=agent_a,
    messages=[{"role": "user", "content": "Hello"}],
    stream=True,
    debug=True  # 打印执行步骤日志
)
for chunk in response:
    print(chunk.content)

2. 源码关键逻辑

  • handle_tool_calls:解析工具调用,执行函数并更新代理状态。
  • get_chat_completion:合并指令与对话历史,调用 OpenAI API 生成响应。

六、总结

Swarm 通过轻量级设计和灵活的代理切换机制,为多代理协作提供了高效的实验平台。其透明性和可控性使其在教育、复杂工作流场景中具有独特优势。开发者可通过简洁的接口快速构建多代理系统,并结合实际需求扩展功能。

项目地址GitHub - OpenAI Swarm  
进一步学习:参考官方示例库(如 triage_agentweather_agent)深入探索复杂应用场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值