Agent Squad 是什么?7.8K 星的 AWS 多 Agent 路由框架,一半人生已离开 AWS(基础篇)

Agent Squad 是什么?7.8K 星的 AWS 多 Agent 路由框架,一半人生已离开 AWS(基础篇)

Agent Squad 是什么?7.8K 星的 AWS 多 Agent 路由框架,一半人生已离开 AWS(基础篇)

导语:2024 年 8 月,AWS Labs 往 GitHub 丢了一个叫 multi-agent-orchestrator 的仓库,定位就一句话:把用户的一句话,路由给最合适的那个专用 Agent。两年后它改名叫 Agent Squad,星数涨到约 7.8K,PyPI 月下载 4377 次。但真正的故事在仓库地址上——它已经不在 awslabs 名下,被搬到了 2FastLabs/agent-squad,两位作者是 Corneliu Croitoru 和 Anthony Bernabeu。这篇把它到底怎么路由、凭什么是这个思路、以及”出 AWS”这件事意味着什么,一次讲透。

一句话定位:只做路由的多 Agent 编排器

多 Agent 框架这两年卷疯了。你去看CrewAI(约 59K 星)给你角色扮演,AutoGen(约 61K 星)让 Agent 互相开会,LangChain(约 147K 星)给你一整套工具箱。Agent Squad 反着来:它只解决一个问题——用户这句话,该交给谁?

  • 不管 Agent 内部怎么循环思考(那是 LangGraph、CrewAI 的活);
  • 不管你上什么模型(Bedrock、OpenAI、Anthropic 都行,甚至还有走决策模型不烧 token 的 JevClassifier);
  • 不管你部署在哪(Python 3.11+、Node.js、以及全新的 Swift 端侧运行时)。

它的野心就一句话:把”路由”这一层做薄、做准,然后把剩下的都还给你。

一次请求到底走了哪些路

我把代码翻了一遍(Python 运行时,route_request 在 python/src/agent_squad/orchestrator.py 第 244 行),流程比想象的朴素,但每个环节都有明确的设计取舍:

  1. 先读历史,再分类。 classify_request 的第一件事是 fetch_all_chats(user_id, session_id),把这一轮的完整会话历史捞出来。也就是说分类器不是只看当前这句话——它带着”上文”做判断。
  2. 分类器吃两样东西:所有 Agent 的描述 + 完整历史。 它的默认提示词叫 AgentMatcher,明确写着”用户输入可能是上一轮的追问”。像”好的”、”1″、”我想了解更多”这种短回答,提示词里直接要求回到上一个 Agent。
  3. 选中才继续。 agent_process_request 里第一句判断就是 if classifier_result.selected_agent,没选中的话,要么退回 default_agent,要么只回一句”请说得更具体些”,绝不会瞎猜一个 Agent 上场。
  4. 写回受开关控制。 save_message 里有 if agent and agent.save_chat——你可以让某些 Agent 完全不落历史。
  5. 回复完成后回写存储。 流式和非流式两条路径都会在拿到完整消息后写回,供下一轮分类用。
Agent Squad 一次请求的完整链路:分类器路由、上下文存储与 GroundedAgent 双模型防幻觉回路
Agent Squad 一次请求的完整链路:编排器先读历史再分类,选中 Agent 才分发;GroundedAgent 内部用 gatherer→curator→presenter 三段式把幻觉堵在门外。数据核实于 commit 729d5f5

最有意思的设计:GroundedAgent

Agent Squad 内置了一批 Agent,其中 GroundedAgent 我认为是整个框架最值得抄走的一个思路。它的做法是用两个模型而不是一个:

  • gatherer(收集者):负责调工具、拿原始结果,但它永远不许直接对用户说话;
  • curator(整理者):一个纯同步的转换器,按工具把大结果压缩裁剪。源码注释写得很明确——它不做 I/O,需要外部数据就提前取好传进来;
  • presenter(呈现者):没有工具、没有工具输出、没有聊天历史,只能看着 curator 整理好的事实,把话说出来。

这么设计的后果很直接:presenter 手里根本没有幻觉的原料。它编不出一个没被查到的价格、评分或库存状态。价格、赔率、余额、库存这类答案必须和数据完全一致的场景,这套是硬保险。

另外还有 SupervisorAgent,用 “agent-as-tools” 的方式让一个组长 Agent 并行调度一队子 Agent,还能自己注册进分类器里,搭出”队中之队”的层级。

上手:三行代码和一个坑

Python 装起来很简单,可选依赖按厂商拆包:

pip install "agent-squad[all]"
from agent_squad.orchestrator import AgentSquad
from agent_squad.agents import BedrockLLMAgent, BedrockLLMAgentOptions

orchestrator = AgentSquad()
orchestrator.add_agent(BedrockLLMAgent(BedrockLLMAgentOptions(
    name="Tech Agent",
    description="擅长技术、软件、硬件、AI、网络安全、云。",
    streaming=True
)))
resp = await orchestrator.route_request("AWS Lambda 是什么?", "user123", "session456")
print(resp.output.content)

TypeScript 那边是 npm install agent-squad,API 结构几乎一一对应。坑有三个,都得提前知道:

第一,它不是免费的路由。默认分类器是一次完整的 LLM 调用,QPS 一上来账单就跟着涨。想省钱可以换 JevClassifier——走 TypeSafe AI 的 System One 决策模型,只算输入 token、亚秒级返回,还带一个 unknown 选项让超出范围的请求干脆不匹配。仓库里自带了 Jev 和 Bedrock 的延迟/成本对照 demo。

第二,准确率是提示词工程的活。Agent 描述写得好不好,直接决定分类准不准——描述全在提示词里当路由依据,写模糊了模型就分不清。八个版本的迭代历史里,这类调整最频繁。

第三,它真的从 awslabs 搬走了。clone URL、依赖名、issue 讨论区全都变了。如果你按老文章抄 awslabs/multi-agent-orchestrator,只能拿到一个跳转壳。好消息是包名和 npm/PyPI 发布名没变,升级不炸;许可证也从早期的宽松条款收紧成了 Apache 2.0。

说实话:这事到底该怎么定位

先夸,因为它做对了几件事:Apache 2.0、真·三语言运行时(Python / TS / Swift 且保持特性对齐)、每个运行时都自带一份 SKILL.md 让 AI 助手能照着写对代码、连 PR 都强制要求先开 issue。这些都说明维护者是认真在做事,不是甩个仓库就跑。

但也得把话说清楚:

  • 7.8K 星放在 2026 年不算头部。 同期 CrewAI 59K、AutoGen 61K、LangChain 147K。它是细分赛道里的好工具,不是生态入口。
  • “AWS 出走”这件事本身不负面,说明项目有了独立生命。但反过来说,它也不再是”AWS 官方出品”这个背书了——你不能拿它当进 AWS 生态的门票,README 里那些 Bedrock、Lex、Connect、Bedrock Flows 的最佳实践仍然是 AWS 视角的产物。
  • 路由层的天花板在分类器上。 框架把分类做薄了,代价是它对”这个任务到底该拆成几个 Agent、Agent 之间要不要协作”这类问题完全不回答。SupervisorAgent 算是个补位,但那已经是另一个范式了。想要完整的编排能力,你还是得回到 LangGraph 或 CrewAI。
  • 下载量偏小:PyPI 月下载约 4377 次,npm 周下载约 332 次(核实于 2026 年 10 月)。这不是”人手一篇的生产方案”,是”专精路由的那一类小而美的工具”。

结论:如果你手里有一堆专精 Agent,需要一个轻量、不绑架、能把请求准确路由过去的中间层——它很合适,值得试。如果你需要的是完整的 Agent 编排能力,它帮不了你。

一句话总结

Agent Squad 是”大而全”浪潮里的反向答案:7.8K 星、Apache 2.0、三个运行时,只干路由这一件事,还顺手把”怎么用两个模型堵死幻觉”这个模式送给了你。它从 awslabs 搬出去这件事,说明 AWS 放手的项目反而活得更像个独立产品。至于要不要上车——先看看你缺的是路由,还是编排。

参考:GitHub 2FastLabs/agent-squad(约 7.8K 星、740 fork、Apache 2.0,原 awslabs/agent-squad,数据核实于 2026 年 10 月 4 日);PyPI agent-squad 1.1.4(月下载 4377、要求 Python≥3.11);npm agent-squad 1.1.5(周下载 332);源码核实于 commit 729d5f52869c8280f599a9fa5cf27fc1df445602。

by 数码罗记·godsun.pro

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注