swarmgo
Go 语言多智能体协作框架,通过 Agent + Handoff 机制实现 AI 任务的动态分配与交接
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Go 语言多智能体协作框架,通过 Agent + Handoff 机制实现 AI 任务的动态分配与交接
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你在一家餐厅点餐,对面站着一位服务员,但她并不亲自做菜。她只负责记录你的需求,然后把订单递给后厨的厨师,厨师做完后再把盘子递回给她,由她端到你面前。这条链条上的每一个人——服务员、厨师——就像一个独立的「智能体」,各自只专注于自己的任务,通过「交接」(handoff)把工作顺滑地传递给下一个环节。
SwarmGo 做的事情,就是把这套现实世界的协作逻辑,搬进了 AI 编程的世界。它是一个 Go 语言的多智能体(Multi-Agent)框架,核心只有两个抽象:**Agent(智能体)**和 Handoff(交接)。开发者可以定义一群各有专长的 AI 智能体,给它们分配不同的工具和指令,让它们在面对复杂任务时自动协作、交接。
这个项目的灵感来源于 OpenAI 的 Swarm 框架,但 SwarmGo 将其用 Go 语言重新实现,并加入了自己的创新——比如动态工作流编排(DynamicWorkflowCreator)和 LangGraph 风格的有向无环图(DAG)工作流系统。
传统的 AI 应用通常依赖一个"全能型"大模型来处理所有任务。但当任务变得复杂、专业化程度要求高时,这种方式会遇到瓶颈:单模型的知识深度和任务覆盖难以兼顾。
多智能体框架的思路是:不要试图让一个模型什么都懂,而是让一群各有专长的模型协同工作。 这就像软件工程中的微服务架构——每个服务只做一件事,但组合起来能完成复杂系统。
SwarmGo 的作者 prathyushnallamothu 发现了这个趋势,并将 OpenAI 的 Python 版 Swarm 移植到 Go。Go 语言在并发和网络服务方面的天然优势,让 SwarmGo 在处理并行 Agent 场景时比 Python 版本更有竞争力。
在 SwarmGo 中,一个 Agent 由以下要素组成:
Handoff(交接) 是 SwarmGo 的灵魂。当一个 Agent 觉得自己无法继续处理当前请求时,它可以主动把对话「交棒」给另一个 Agent。比如一个「分类 Agent」判断出用户要订外卖,它就把任务交接给「外卖 Agent」,外卖 Agent 继续处理后续流程。
这种机制避免了 if-else 式的硬编码路由逻辑,让多智能体的协作变得声明式、可组合。
SwarmGo 提供了统一的 LLM 抽象接口,支持六家主流模型供应商:
| 供应商 | 驱动 | 特点 |
|---|---|---|
| OpenAI | go-openai | GPT-4、GPT-3.5-turbo 等 |
| Anthropic Claude | anthropic-sdk-go | Claude 3 Sonnet/Haiku 等 |
| Google Gemini | google-generative-ai-go | Gemini Pro/Flash |
| Ollama | ollama | 本地部署 Llama/Mistral 等 |
| DeepSeek | — | 深度求索系列 |
| Azure OpenAI | Azure SDK | 企业级部署 |
llm/ 目录下每个文件对应一个提供商,实现了统一的 LLM 接口。这种设计让开发者可以在不修改业务逻辑的前提下,随时切换底层模型——这对需要 A/B 测试不同模型效果、或受限于特定地区 API 可用性的团队非常实用。
SwarmGo 不只是简单的 Agent+Handoff,它还提供了三种预定义工作流模式:
1. Supervisor Workflow(主管模式)
一个主管 Agent 负责任务分配和协调,其他 Agent 执行具体子任务。主管始终保有全局视角,类似项目经理角色。
2. Hierarchical Workflow(层级模式)
多层级的 Agent 树状结构,顶层 Agent 分解任务后向下传递,层层执行,最后汇总结果。
3. Collaborative Workflow(协作模式)
多个 Agent 并行工作,各自处理任务的不同方面,最后汇总输出,类似「头脑风暴」。
此外,swarmgraph.go 模块引入了 LangGraph 风格的有向无环图(DAG)工作流,支持节点(Agent)、边(数据流向/条件判断)和状态机语义。这比简单的顺序 Handoff 更强大,能表达复杂的条件分支和并行依赖关系。
dynamicwf.go 则更进一步:给定一个用户任务描述,框架能自动生成工作流。内置的 TaskAnalyzer Agent 会分析任务类型、推荐 Agent 组合和连接关系,输出完整的 JSON 工作流定义。开发者不再需要手动设计工作流,AI 可以帮你「规划 AI 的工作」。
concurrent.go 实现了 ConcurrentSwarm,利用 Go 的 goroutine + channel 实现多 Agent 并行执行。在处理多个独立子任务(如同时查询天气、搜索新闻、读取邮件)时,这种并发模型比 Python 的 asyncio 更加简洁高效。
streaming.go 实现了 StreamHandler 接口,支持 LLM 的 token 级流式输出。OnToken() 回调让应用可以在每个 token 生成时就渲染到界面,比等待完整响应再一次性显示的体验流畅得多。
memory.go 的 MemoryStore 分为两层:
智能体可以在当前会话中「记住」之前的信息,也可以在后续会话中「回忆」之前积累的知识。配合 go-sqlite3,记忆可以持久化到本地数据库。
SwarmGo 是一个面向有 Go 基础的开发者的 SDK,安装只需一行:
go get github.com/prathyushnallamothu/swarmgo
相比 Python 版的 OpenAI Swarm,SwarmGo 的 API 设计略有不同(比如 client.Run() 的参数列表较长),但核心概念一致。有 Go 经验的开发者可以在几小时内掌握基本用法。
需要注意的是:没有 Web UI,所有交互都通过 Go 代码调用。如果需要图形界面,需要自行用 net/http 或 Gin 等框架包装 Agent 服务。
没有内置持久化状态:SwarmGo 运行在客户端,Swarm 结构本身是无状态的,每次 Run() 调用之间不保留上下文。这既是轻量化的优势,也是复杂 Stateful 应用的障碍。
Goroutine 并发的调试复杂性:虽然 Go 并发很强大,但多 Agent 并发执行时的竞态条件、死锁问题会比单线程 Python 更难排查。
工作流图的状态管理:swarmgraph.go 的 DAG 实现较为简单,缺少 LangGraph 原生的 checkpoint/save-state 机制,在需要中断-恢复的长任务中能力有限。
生态尚在早期:相比 Python 生态中 LangChain、AutoGen 等成熟框架,SwarmGo 的社区规模和周边工具(监控、可视化、测试框架)还很薄弱。
SwarmGo 代表了一个趋势:从"一个模型做所有事"到"多模型协作"。随着 Claude、Gemini、DeepSeek 等模型能力的提升,不同模型在不同任务上的性价比差异越来越大,多智能体框架让开发者可以根据任务特征动态选择最优模型组合,而不必被单一供应商绑定。
Go 语言的引入也是一个值得关注的方向——在需要高并发、高性能的生产环境中(如实时客服系统、数据处理管道),Go 版 SwarmGo 可能比 Python 版本更具部署优势。