- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
本qiang~关注到OpenAI两周前发布的轻量级多代理框架Swarm,因此想要深入了解了一下,运行了官方提供的例子,整理并总结一些心得体会~ 。
源码非常简单,各位看官们可以小读一下,本文采用gpt-4o-mini进行验证,如果想免费使用gpt-4o-mini,可私信沟通.
Ps: 发布之后,便在X引起了Swarm涉嫌抄袭,但吃瓜的我还是关注技术内部本身.
Swarm项目是一个轻量级multi-agent编排框架,当前主要是为了实验及教学,而非用于生产.
Swarm专注于使agent协调和运行变得轻量级、高度可控且易于测试.
有两个主要抽象模块:Agent和handoffs(切换),Agent封装了instructions和tools,且可以随时选择将对话移交给另一个代理.
适用于大量的独立功能和指令难以整合到一个prompt的场景,而是将独立功能和指令通过agent, functions, tools等方式进行链接.
类似于openai的chat completions api中的create()函数,接收并返回messages,并在调用之间不保存任何状态。注意,该方法也处理Agent函数执行、切换、上下文变量引用,且可以在返回最终输出前进行多轮对话.
其核心实现了如下循环:
(1) 从当前Agent调用模型返回结果 。
(2) 执行工具调用并且保存结果 。
(3) 必要时切换代理 。
(4) 必要时更新上下文变量 。
(5) 如果没有新的函数调用,则返回 。
该方法执行完毕后,会返回一个Response,包含所有相关的更新状态,包括新的messages, 最后被调用的agent以及最新的上下文变量context_variables.
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调用多个函数,他们将按顺序进行.
一个agent可以通过在function中返回它来将其移交给另一个代理。还可以通过返回更完整的Result对象来更新context_variables 。
本次实战主要运行项目自带的例子airline。这个例子能够很好地说明Swarm的运行机理.
。
。
交互步骤如下:
其中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 |
。
。
一句话足矣~ 。
本文主要是OpenAI开源multi-agent框架swarm进行介绍,包括其核心组件Agent, instructions,functions,多个Agent之间如何进行切换,以及针对其中的examples进行验证,框架及源码非常简单,看官们可以亲自尝试一下.
Multi-agent的适用场景非常丰富,比如客服、工作流处理等 。
如果想免费获取使用openai的看官,可私信沟通.
(1) Swarm仓库: https://github.com/openai/swarm 。
。
。
最后此篇关于LLM应用实战:OpenAI多代理新作-Swarm的文章就讲到这里了,如果你想了解更多关于LLM应用实战:OpenAI多代理新作-Swarm的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在通过 labrepl 工作,我看到了一些遵循此模式的代码: ;; Pattern (apply #(apply f %&) coll) ;; Concrete example user=> (a
我从未向应用商店提交过应用,但我会在不久的将来提交。 到目前为止,我对为 iPhone 而非 iPad 进行设计感到很自在。 我了解,通过将通用PAID 应用放到应用商店,客户只需支付一次就可以同时使
我有一个应用程序,它使用不同的 Facebook 应用程序(2 个不同的 AppID)在 Facebook 上发布并显示它是“通过 iPhone”/“通过 iPad”。 当 Facebook 应用程序
我有一个要求,我们必须通过将网站源文件保存在本地 iOS 应用程序中来在 iOS 应用程序 Webview 中运行网站。 Angular 需要服务器来运行应用程序,但由于我们将文件保存在本地,我们无法
所以我有一个单页客户端应用程序。 正常流程: 应用程序 -> OAuth2 服务器 -> 应用程序 我们有自己的 OAuth2 服务器,因此人们可以登录应用程序并获取与用户实体关联的 access_t
假设我有一个安装在用户设备上的 Android 应用程序 A,我的应用程序有一个 AppWidget,我们可以让其他 Android 开发人员在其中以每次安装成本为基础发布他们的应用程序推广广告。因此
Secrets of the JavaScript Ninja中有一个例子它提供了以下代码来绕过 JavaScript 的 Math.min() 函数,该函数需要一个可变长度列表。 Example:
当我分别将数组和对象传递给 function.apply() 时,我得到 NaN 的 o/p,但是当我传递对象和数组时,我得到一个数字。为什么会发生这种情况? 由于数组也被视为对象,为什么我无法使用它
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章ASP转换格林威治时间函数DateDiff()应用由作者收集整理,如果你
我正在将列表传递给 map并且想要返回一个带有合并名称的 data.frame 对象。 例如: library(tidyverse) library(broom) mtcars %>% spl
我有一个非常基本的问题,但我不知道如何实现它:我有一个返回数据框,其中每个工具的返回值是按行排列的: tmp<-as.data.frame(t(data.frame(a=rnorm(250,0,1)
我正在使用我的 FB 应用创建群组并邀请用户加入我的应用群组,第一次一切正常。当我尝试创建另一个组时,出现以下错误: {"(OAuthException - #4009) (#4009) 在有更多用户
我们正在开发一款类似于“会说话的本”应用程序的 child 应用程序。它包含大量用于交互式动画的 JPEG 图像序列。 问题是动画在 iPad Air 上播放正常,但在 iPad 2 上播放缓慢或滞后
我关注 clojure 一段时间了,它的一些功能非常令人兴奋(持久数据结构、函数式方法、不可变状态)。然而,由于我仍在学习,我想了解如何在实际场景中应用,证明其好处,然后演化并应用于更复杂的问题。即,
我开发了一个仅使用挪威语的应用程序。该应用程序不使用本地化,因为它应该仅以一种语言(挪威语)显示。但是,我已在 Info.plist 文件中将“本地化 native 开发区域”设置为“no”。我还使用
读完 Anthony's response 后上a style-related parser question ,我试图说服自己编写单体解析器仍然可以相当紧凑。 所以而不是 reference ::
multicore 库中是否有类似 sapply 的东西?还是我必须 unlist(mclapply(..)) 才能实现这一点? 如果它不存在:推理是什么? 提前致谢,如果这是一个愚蠢的问题,我们深表
我喜欢在窗口中弹出结果,以便更容易查看和查找(例如,它们不会随着控制台继续滚动而丢失)。一种方法是使用 sink() 和 file.show()。例如: y <- rnorm(100); x <- r
我有一个如下所示的 spring mvc Controller @RequestMapping(value="/new", method=RequestMethod.POST) public Stri
我正在阅读 StructureMap关于依赖注入(inject),首先有两部分初始化映射,具体类类型的接口(interface),另一部分只是实例化(请求实例)。 第一部分需要配置和设置,这是在 Bo
我是一名优秀的程序员,十分优秀!