LLM应用实战: OpenAI多代理新作-Swarm
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
之间的整体交互流程
交互步骤如下:
- 首先经过意图识别
Agent
,判断是处理航班变更还是行李丢失,并分别通过
transfer_to_flight_modification, transfer_to_lost_baggage
切换到对应的
Agent - 如果是航班变更,则进一步判断是航班取消,还是航班更换,如果是航班取消,通过
transfer_to_flight_cancel
切换到
”
航班取消
Agent
”
进行处理,该
Agent
支持退款、兑换飞行积分、向上级反馈、问题已解决、切换到意图识别
Agent
等
5
个方法;如果是航班更换,通过
transfer_to_flight_change
切换到
”
航班更换
Agent
”
,该
Agent
支持更换有效性验证、更换成功、向上级反馈、问题已解决、切换到意图识别
Agent
等
5
个方法。 - 如果是行李的相关问题,则切换至”
行李丢失
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: [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: 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: 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