先读为快,看一看 Agent 哪家强,介绍 OpenAI 的 swarm 框架

224 阅读4分钟

最近在关注 Agent 框架,会带来一波关于当下流行 Agent 的介绍,让我们今天先从 swarm 开始。

介绍 swarm

好的,很乐意为您介绍 OpenAI 的 Swarm 框架。swarm 定位为一个轻量级多 Agent 的框架。Swarm 安装比较简单,通过一行命令就可以轻松地完成安装

Swarm 一切从实际出发,设计之初就聚焦解决实际问题。

  • Agent: Agent 包含了指令和工具,
  • handoffs: 也就是 Agent 之间传递的一种机制

Swarm 可以表达 tool 和 Agent 网络之间一个复杂动态关系,从而可以构建可扩展的、框架。

003.jpg

想象一下, 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 以及函数的一些性质例如 namedescription 以及 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 会有所帮助。