生产 Agent 运行时:Agno 与 Mastra 本节摘要:LangGraph、AutoGen、CrewAI 都是「框架重型」——它们给你图、链、角色、流程等丰富的抽象,代价是启动开销与学习曲线。但有一类团队只想要「在我的运行时里,快速跑起一个 Agent 循环」,于是他们够向了 Agno(Python) 或 Mastra(TypeScript)——两者都主动放弃了部分框架拥有的原语,换来了原始速度与对宿主技术栈更紧的贴合。Agno(前身为 Phi-data)主打微秒级 Agent 实例化:文档标的约 2μs 实例化、每 Agent 约 3.
本节摘要:LangGraph、AutoGen、CrewAI 都是「框架重型」——它们给你图、链、角色、流程等丰富的抽象,代价是启动开销与学习曲线。但有一类团队只想要「在我的运行时里,快速跑起一个 Agent 循环」,于是他们够向了 Agno(Python) 或 Mastra(TypeScript)——两者都主动放弃了部分框架拥有的原语,换来了原始速度与对宿主技术栈更紧的贴合。Agno(前身为 Phi-data)主打微秒级 Agent 实例化:文档标的约 2μs 实例化、每 Agent 约 3.75 KiB 内存、约 23 个模型提供者,生产路径是无状态、会话作用域的 FastAPI 后端——每个请求起一个全新 Agent,会话状态存数据库。Mastra 构建在 Vercel AI SDK 之上,三个原语(Agents、Tools、Workflows)、统一模型路由器(2026 年 3 月 94 个提供者 3300+ 模型)、复合存储(记忆/工作流/可观测性各走不同后端,大规模可观测性推荐 ClickHouse),并自带 Mastra Studio 本地调试 UI。本节吃透两者的定位差异、何时选哪个,以及三种选型陷阱:为速度而速度、生态锁定、企业许可证混淆。读完本节,你能按技术栈、延迟预算、运维形态在 Agno、Mastra、LangGraph、厂商 SDK 间做出选择。
对应原课程:Phase 14 · Lesson 18 ·
agno-and-mastra-runtimes(原英文phases/14-agent-engineering/18-agno-and-mastra-runtimes/docs/en.md)。前置:第 01 节(Agent 循环)、第 13 节(LangGraph)。
阅读完本节,你应当能够:
LangGraph、AutoGen、CrewAI 解决的是「如何把复杂的多智能体协作表达清楚」——图、Actor、角色流程。但有一类生产场景问的是完全不同的问题:「我只是要快速、低开销地在每个请求里起一个 Agent,跑完就销毁。」
这类场景的典型:聊天扇入(每秒上千个短命 Agent)、评估流水线(并发跑成百上千个 Agent 评测样本)。这里,Agent 的实例化成本和单次内存占用直接决定了你能扛多少并发;框架抽象的丰富度反而是负担。
Agno 与 Mastra 都不打算成为 LangGraph。它们在三个维度上竞争:语言贴合(Agno 给 Python 团队,Mastra 给 TypeScript 团队)、运行时人体工学(Agno 近零开销,Mastra 与 Vercel 生态集成)、可观测性(两者都接 Langfuse/Phoenix/Opik,但 Mastra Studio 是一等公民)。
速度目标在你有每秒上千个短命 Agent(聊天扇入、评估流水线)时才重要。如果一个 Agent 要跑 10 分钟,实例化是 2μs 还是 2ms 根本无所谓——瓶颈在 LLM 调用,不在框架。
ee/ 目录在 source-available 企业许可证下。两者都不试图成为 LangGraph,它们竞争的是:
⚠️ 三种选型陷阱:① 为速度而速度——工作负载是「每请求一次慢 Agent 调用」却选 Agno,因为「2μs 听起来很酷」;此时开销根本不是瓶颈。② 生态锁定——Mastra 的 Vercel 风味集成在 Vercel 上是加分,换到别处是减分。③ 企业许可证混淆——Mastra 的
ee/目录是 source-available,不是 Apache 2.0;打算 fork 前务必读许可证。
本节主要是对比性的——单一代码产物无法同时公正对待两个框架。原课程 code/main.py 给出一个并排玩具:一个最小的「跑 Agent、流式输出、持久化会话」流程,实现两次——一次 Agno 形状、一次 Mastra 形状。
# Agno 形状(伪代码):无状态、每请求一个 Agent from agno.agent import Agent from fastapi import FastAPI app = FastAPI() @app.post("/chat/{session_id}") def chat(session_id: str, msg: str): history = db.load(session_id) # 会话状态在外部 agent = Agent(model="gpt-5", tools=[...]) # ~2μs 实例化,用完即弃 reply = agent.run(msg, history=history) db.append(session_id, (msg, reply)) # 状态回写数据库 return reply
// Mastra 形状(伪代码):Zod 类型化工具 + 工作流 import { Agent, createTool } from "@mastra/core"; import { z } from "zod"; const search = createTool({ id: "search", inputSchema: z.object({ query: z.string() }), execute: ({ data }) => runSearch(data.query), }); const agent = new Agent({ name: "researcher", model: router.pick("openai.gpt-5"), tools: { search } });
运行 python3 code/main.py 会展示两条结构不同但功能等价的轨迹——Agno 是「每请求起 Agent」,Mastra 是「长生命周期 Agent + 工作流」。
💡 设计要点:运行时选型的本质是问「状态住在哪」。Agno 把状态推到数据库、Agent 无状态(横向扩展极易);Mastra 让 Agent 长存、状态在工作流里(贴近 Vercel 的长连接模型)。两者都正确,服务于不同的部署形态。
| 维度 | Agno | Mastra | LangGraph | 厂商 SDK |
|---|---|---|---|---|
| 语言 | Python | TypeScript | Python/JS | 各厂商 |
| 核心卖点 | 微秒实例化 | 统一模型路由 | 显式状态图 | 产品化形状 |
| 状态位置 | 外部数据库 | 工作流内 | 持久检查点 | 会话存储 |
| 可观测性 | 接 Langfuse 等 | Mastra Studio + 接 Langfuse | 接各家 | 内置 tracing |
| 适合 | 短命 Agent 高并发 | Vercel/Next.js 全栈 | 持久续跑 | 厂商绑定产品 |
原课程 outputs/skill-runtime-picker.md:按技术栈、延迟预算、运维形态在 Agno、Mastra、LangGraph、厂商 SDK 间做选择的决策框架,含硬拒绝规则(如「单 Agent 长跑 + 选 Agno 求速度」即拒绝并建议 LangGraph)。
ee/ 许可证条款。哪些限制会影响一个开源 fork?ee/ 目录是 source-available 企业许可证,非 Apache 2.0。至此,Agent 框架与运行时的全景(LangGraph、AutoGen、CrewAI、OpenAI/Claude SDK、Agno、Mastra)已铺完。下一节起,我们转向评估——如何用 SWE-bench 与 GAIA 这类基准,客观度量一个 Agent 到底有多强,把「感觉它挺好」变成「它在 N% 的任务上通过」。