1.
背景


qiang~
关注到
OpenAI
两周前发布的轻量级多代理框架
Swarm
,因此想要深入了解了一下,运行了官方提供的例子,整理并总结一些心得体会
~

源码非常简单,各位看官们可以小读一下,本文采用
gpt-4o-mini
进行验证,如果想免费使用
gpt-4o-mini
,可私信沟通。

Ps:
发布之后,便在
X
引起了
Swarm
涉嫌抄袭,但吃瓜的我还是关注技术内部本身。

2.
简介

Swarm
项目是一个轻量级
multi-agent

编排框架,当前主要是为了实验及教学,而非用于生产

Swarm
专注于使
agent
协调和运行变得轻量级、高度可控且易于测试。

有两个主要抽象模块:
Agent

handoffs(
切换
)

Agent
封装了
instructions

tools
,且可以随时选择将对话移交给另一个代理。

3.
适用场景

适用于大量的独立功能和指令难以整合到一个
prompt
的场景,而是将独立功能和指令通过
agent, functions, tools
等方式进行链接。

4.
Swarm
核心模块

4.1 Swarm.run()

类似于
openai

chat completions api
中的
create()
函数,接收并返回
messages
,并在调用之间不保存任何状态。注意,该方法也处理
Agent
函数执行、切换、上下文变量引用,且可以在返回最终输出前进行多轮对话。

其核心实现了如下循环:

(1)
从当前
Agent
调用模型返回结果

(2) 执行工具调用并且保存结果

(3) 必要时切换代理

(4) 必要时更新上下文变量

(5) 如果没有新的函数调用,则返回

该方法执行完毕后,会返回一个
Response
,包含所有相关的更新状态,包括新的
messages,
最后被调用的
agent
以及最新的上下文变量
context_variables

4.2 Agents

Agent
简单封装了一组
instructions

functions
,且具有将执行移交给另一个
agent
的能力。这些
instructions

functions
可用于表示非常具体的工作流程或步骤。

Instructions
将被直接转化为一个对话的
system
提示,任何时候,只会存在活跃
agent

instructions

instructions
可以是普通的字符串,也可以是返回字符串的函数,该函数可以选择一个
context_variables
参数,进而传入到
swarm.run()
中。

Swarm

Agent
可以直接调用
python
函数,通常
function
应返回一个
str
,但也可以是一个
Agent
,如果返回
Agent
的话,则将执行转移到该
Agent
。如果
Agent
的函数调用出现错误,错误响应会添加到聊天中,以便
Agent
可以正常恢复。如果
Agent
调用多个函数,他们将按顺序进行。

4.3
切换
Agent
及更新上下文变量

一个
agent
可以通过在
function
中返回它来将其移交给另一个代理。还可以通过返回更完整的
Result
对象来更新
context_variables

5.
实战

本次实战主要运行项目自带的例子
airline
。这个例子能够很好地说明
Swarm
的运行机理。

5.1
Agent
之间的整体交互流程

交互步骤如下:

  1. 首先经过意图识别
    Agent
    ,判断是处理航班变更还是行李丢失,并分别通过
    transfer_to_flight_modification, transfer_to_lost_baggage
    切换到对应的
    Agent
  2. 如果是航班变更,则进一步判断是航班取消,还是航班更换,如果是航班取消,通过
    transfer_to_flight_cancel
    切换到

    航班取消
    Agent

    进行处理,该
    Agent
    支持退款、兑换飞行积分、向上级反馈、问题已解决、切换到意图识别
    Agent

    5
    个方法;如果是航班更换,通过
    transfer_to_flight_change
    切换到

    航班更换
    Agent

    ,该
    Agent
    支持更换有效性验证、更换成功、向上级反馈、问题已解决、切换到意图识别
    Agent

    5
    个方法。
  3. 如果是行李的相关问题,则切换至”
    行李丢失
    Agent

    ,该
    Agent
    包含行李搜寻、向上级反馈、问题已解决、切换到意图识别
    Agent

    4
    个方法

5.2
实战效果

其中
User
是我的输出

[2024...]
是打印的日志,
Triage Agent

Flight Modification Agent

Flight cancel traversal
是对应的
Agent
或方法

调用大模型后返回的结果。

Starting Swarm CLI
��

User:
我想要退票

[2024-10-22 09:38:14] Ending turn.

Triage Agent:
请问您能提供一下您的航班号以及您希望退票的原因吗?

User:
航班号是
1919
,我的时间有些冲突了

[2024-10-22 09:38:48] Processing tool call: transfer_to_flight_modification with arguments {}

[2024-10-22 09:38:49] Processing tool call: transfer_to_flight_cancel with arguments {}

[2024-10-22 09:38:50] Ending turn.

Triage Agent: transfer_to_flight_modification()

Flight Modification Agent: transfer_to_flight_cancel()

Flight cancel traversal:
您提到的航班号是
1919
。请确认您是否确实是要取消这个航班。如果是的话,我将继续进行处理。

User:
是的

[2024-10-22 09:38:57] Ending turn.

Flight cancel traversal:
请问您是希望申请退款还是希望获得航班积分?

User:
退款吧

[2024-10-22 09:39:05] Processing tool call: initiate_refund with arguments {}

[2024-10-22 09:39:06] Ending turn.

Flight cancel traversal: initiate_refund()

Flight cancel traversal:
您的退款请求已被处理,退款将在
3-5
个工作日内完成。请您耐心等待。请问您还有其他问题吗?

User:
没有了,谢谢

[2024-10-22 09:39:16] Processing tool call: case_resolved with arguments {}

[2024-10-22 09:39:20] Ending turn.

Flight cancel traversal: case_resolved()

Flight cancel traversal:
感谢您的联系!如果将来有任何问题,请随时与我们联系。祝您有美好的一天!

User:

6.
总结

一句话足矣
~

本文主要是
OpenAI
开源
multi-agent
框架
swarm
进行介绍,包括其核心组件
Agent, instructions,functions
,多个
Agent
之间如何进行切换,以及针对其中的
examples
进行验证,框架及源码非常简单,看官们可以亲自尝试一下。

Multi-agent
的适用场景非常丰富,比如客服、工作流处理等

如果想免费获取使用
openai
的看官,可私信沟通。

7.
参考

(1)
Swarm
仓库
: https://github.com/openai/swarm

标签: none

添加新评论