最近在关注 Agent 框架,会带来一波关于当下流行 Agent 的介绍,让我们今天先从 swarm 开始。
介绍 swarm
好的,很乐意为您介绍 OpenAI 的 Swarm 框架。swarm 定位为一个轻量级多 Agent 的框架。Swarm 安装比较简单,通过一行命令就可以轻松地完成安装
Swarm 一切从实际出发,设计之初就聚焦解决实际问题。
- Agent: Agent 包含了指令和工具,
- handoffs: 也就是 Agent 之间传递的一种机制
Swarm 可以表达 tool 和 Agent 网络之间一个复杂动态关系,从而可以构建可扩展的、框架。
想象一下, AI 完成一项复杂的任务,比如写一篇关于人工智能的科普文章。传统的方法可能需要你将所有要求和细节都放进一个的提示词中,这不仅繁琐,而且可能会带来 AI 对问题理解上的问题。
Swarm 框架则提供了一种更灵活的方法。可以将任务分解成多个子任务,每个子任务由一个专门的 Agent 来处理。例如,一个 Agent 负责收集信息,另一个 Agent 则负责组织结构,还有一个 Agent 专注去写文章。这些 Agent 可以相互协作,传递信息和任务,最终完成整个任务。
[003] 听起来有点抽象,那么我们就通过一个实际例子来解释一下,当用户来询问纽约的天气时,首先负责分流的 Agent,分析后调用方法,将任务传递给 weather Agent,这个 Agent 调用 get weather 工具获取到纽约的天气温度返回给用户从而完成了这个任务,通过 2 个 Agent 协作完成天气预报的任务。
[004]
通过一个例子来解释如何来使用 Swarm
首先是来实例化一个 swarm 的客户端,其内部就是实现了一个 OpenAI 的客户端以备调用。然后调用客户端的 run 方法来启动 swarm,run 方法接受 messages 的参数,这点有点类似 openAI 的客户端运行方式,还需要接受一个 Agent 作为参数。不过 swarm 的 run 方法除了启动了大语言模型还做以下几件事
from swarm import Swarm, Agent
client = Swarm()
- 根据任务需要调用提供的工具或者方法,来获取更多信息或者执行工具完成任务
- 如果有必要的话,还会求助于其他更加专业的 Agent,将任务进行转移
- 根据实际情况,也会更新 context 中的变量
- 如果已经得到了想要结果,并没有其他方法调用,就将结果直接返回
初始化 Agent
首先我们来创建两个 Agent 分别是 agent a 和 agent b,创建 Agent 时, name 参数给出了 Agent 的名字,instructions 参数可以理解为 system prompt 告诉 agent 能够做什么已经任务的背景信息。这里 instruction 可以是描述字符串也可以是一个函数,如何是函数,可以接受一个上下文对象作为参数,来实现对一些变量的操作。
工具调用
还有就是在创建 agent a 时,还多了一个参数 functions, functions 参数接受可以调用方法或者工具,这个方法就是用于将任务从 agent a 转移到 agent b,方法通常返回字符串,如果返回一个 Agent,就表示将任务转移给了这个 agent。如果函数在调用时发生了错误,例如参数不全,也会将这些信息告知 agent 便于 agent 对错误进行修复。
函数以及函数 schema
关于如何来定义一个工具,swarm 和其他 agent 框架类似,关于如何实现一个工具,并且让大语言模型认知工具,之前发布一系列视频已经给出了详细的解释,大家可以翻阅我之前的相关视频来了解更多相关信息
{
"type": "function",
"function": {
"name": "greet",
"description": "Greets the user. Make sure to get their name and age before calling.\n\nArgs:\n name: Name of the user.\n age: Age of the user.\n location: Best place on earth.",
"parameters": {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"},
"location": {"type": "string"}
},
"required": ["name", "age"]
}
}
}
上面就是函数 schema 其实就是一个 json ,type 表示工具类型为 function 以及函数的一些性质例如 name 、description 以及 parameters 参数 parameters 包含一些参数的属性。
stream
stream = client.run(agent, messages, stream=True)
for chunk in stream:
print(chunk)
在 Stream 连接了两个事件
{"delim": "start"}
{"delim": "end"}
- 用于每个 Agent 在处理和响应返回信息发出信号,这样可以清晰地不同 Agent 之间的切换
{"response": Response}
- 通过这个事件是可以获取到完整的 response 内容。
[010] 以上就是对 swarm 的一个简短的介绍希望对大家了解或者入门 swarm 会有所帮助。