openai-assistant-swarm
将 OpenAI 多个专属助手统一编排,一个 Manager 自动分发给最适合的子助手并行执行任务
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
将 OpenAI 多个专属助手统一编排,一个 Manager 自动分发给最适合的子助手并行执行任务
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你在 OpenAI 平台上配置了三个专属助手——天气机器人负责查询实时气象,股票机器人盯盘美股动态,海盗机器人专职讲冷笑话。某天用户发来一条请求:「帮我查一下纽约现在的天气,顺便告诉我今天涨幅最大的股票。」传统方案需要你手动判断该分发给哪个助手,再依次收集结果。而 OpenAI Assistant Swarm 彻底改变了这一流程——只需一行代码,Swarm Manager 会自动理解用户意图,识别出两个可用助手,让它们并行执行任务,最终汇总结果返回给你。整个过程对开发者透明,你甚至可以为每个子任务监听独立的事件回调。## 背景:为什么需要多助手编排?2023年11月,OpenAI 正式向开发者开放了 Assistant API,允许在平台侧创建具有特定指令(instructions)和工具集(tools)的专属 AI 助手。然而,平台本身并没有提供「助手之间如何协作」的能力——当你有多个专业助手时,如何让它们像一支团队一样分工协作,成了开发者必须自行解决的问题。Mintplex Labs 敏锐地捕捉到了这个痛点,推出 Assistant Swarm,让用户现有的多个 OpenAI 助手摇身一变成为可统一调度的「智能体军队」。## 核心架构:SDK 扩展模式Assistant Swarm 并没有另起炉灶重新发明一套 Agent 框架,而是采用了极其克制的设计思路:作为 OpenAI Node.js SDK 的扩展插件存在。通过一行 EnableSwarmAbilities(client),即可在原有的 OpenAI 客户端上激活 .beta.assistants.swarm 能力。这种设计的好处显而易见——对已有 OpenAI SDK 项目的侵入性几乎为零,开发者无需更换工具链,也不需要学习全新的 API 风格。整个架构围绕一个核心角色展开:Swarm Manager(管理器助手)。它是 Swarm 在你的 OpenAI 账户中自动创建的一个特殊助手,职责是根据用户请求,从你已有的助手池中选出最适合的那个(或多个)来执行任务。Manager 本身并不执行具体工作,而是担任「调度员」的角色。当用户调用 delegateWithPrompt() 时,Swarm 内部会经历以下流程:首先创建一个 Thread,然后让 Manager 分析请求,通过 Function Calling 能力决定委托给哪些子助手(由 agent_id 指定)。每个子助手在独立的 Thread 中执行任务,最后 Manager 汇总结果。子助手之间是并行执行的(通过 Promise.all),这意味着如果你有 5 个互不相关的子任务,它们的总执行时间约等于耗时最长的那一个,而非逐一相加。## 关键实现:事件驱动与容错设计Swarm 的设计亮点之一是完整的事件系统。Manager 和所有子助手在执行过程中会持续 emit 事件:parent_assistant_complete(父助手完成)、child_assistants_complete(所有子助手完成)、poll_event(轮询状态变化)。开发者可以在任何时候监听这些事件,实现异步非阻塞的响应逻辑。例如,你可以在父助手给出初步回复后立即展示给用户,而无需等待所有子任务都执行完毕——这是一个对用户体验极为友好的设计选择。另一个值得注意的实现细节是对幻觉(hallucination)的防护。如果 Manager 模型「幻觉」出了一个不存在的 assistant_id,Swarm 会在执行前校验 knownAssistantIds,发现不匹配时主动抛出异常并标记该子任务为 failed 状态,而不是静默忽略或产生不可预期的行为。此外,Swarm 对并行函数调用(parallel function calling)也有妥善处理。OpenAI 支持在一次请求中调用多个工具,Swarm 通过 compressToolCalls() 将这些并行调用拆解为独立的委托任务,逐一映射到对应的 assistant_id,保证了多助手并行执行的一致性。## 技术栈:TypeScript 原生开发项目使用 TypeScript 开发,完整利用了 OpenAI Node SDK 的类型定义(OpenAI.Beta.Threads.Run、Assistant 等),在 src/utils/types.ts 中还定义了十余个专用类型别名(DelegatedToolCall、DelegateRun、PollEvent 等),类型安全程度很高。构建工具选用 tsup,它基于 esbuild,编译速度极快。项目的代码量适中(核心逻辑约 700 行),结构清晰:- src/manager/index.ts — SwarmManager 主类,管理助手的注册、委托逻辑和事件系统- src/manager/child.ts — SwarmAssistant 子助手封装,负责在独立 Thread 中执行委托任务- src/utils/index.ts — 辅助函数:分页获取助手列表、轮询 Run 状态、消息历史处理、工具输出去重- src/utils/toolCalls.ts — 工具调用解析:将 OpenAI 的 function_call 参数映射为委托指令- src/utils/types.ts — 完整的 TypeScript 类型定义- examples/index.mjs — 详尽的使用示例,展示了初始化、事件监听、委托调用全流程## 局限性:不回避的短板Assistant Swarm 的定位是「编排层」而非「执行层」,这既是优势也是局限。它依赖 OpenAI Assistant API 的底层能力(Thread、Run、Function Calling),意味着你必须接受 OpenAI 的计费模型(按 token 消耗付费)。此外,流式输出(Streaming)暂不支持,对于需要实时反馈的长任务,用户体验会有所牺牲。在多助手并行执行场景下,如果某个子助手触发了 requires_action 状态(即需要用户手动提供 tool_outputs),Swarm 目前只能标记为失败,无法像 Manager 本身一样继续轮询等待。这在实际集成中是需要特别注意的边界条件。最后,作为纯 SDK 包而非独立服务,它没有提供任何 Web UI 或管理界面,所有助手的配置仍然需要在 OpenAI 平台上手动完成。对于希望完全自托管的团队,这并不是一个可直接部署的解决方案。## 行业意义:轻量级 Agent 编排的范式Assistant Swarm 折射出一个更广泛的趋势:随着 LLM 应用深入行业腹地,简单的单 Agent 对话已无法满足复杂业务场景的需求,多 Agent 协作正在成为主流范式。Swarm 的设计哲学——将「选择哪个助手」这件事本身也交给 LLM 判断——体现了对 GPT-4 Function Calling 能力的充分信任,也代表了一种让 AI 自己管理 AI 的思路。尽管 2023 年 11 月诞生时还只是一个小型的实验性项目,但它为开发者展示了一种可能性:在 OpenAI 生态内,用极少的代码就能实现一个可用的多助手编排系统。对于快速验证多 Agent 协作的业务假设,或者在已有 OpenAI 集成产品中增加智能分配能力,Assistant Swarm 是一个值得参考的轻量级方案。