Mastra 指南
本文聚焦 Mastra 在 TypeScript 路线中的定位、核心能力、代码组织方式和适用场景。
内容基于 Mastra 当前官方资料整理,重点放在:
- Agent 怎么定义
- Tool / MCP 怎么接
- Workflow 怎么编排
- Memory / Runtime Context 怎么用
- Evals / Scorers / Observability 怎么接
- 它和这个专题里的哪些章节适合放在一起看
1. 定位
一句话概括如下:
Mastra 是一套偏 TypeScript-first 的 AI Agent 框架,除了 agent 运行,还覆盖 workflow、memory、MCP、observability 和 evals。
所以它不像:
- 只做最小模型调用的轻封装
- 只做单一步骤 agent loop 的薄 SDK
- 只做平台托管的纯服务层
更准确地说,它适合在 TS 项目里承担 agent 系统工程化这一层。
2. Mastra 提供的核心能力
从官方首页、Agents、Workflows、Observability、Evals、MCP 文档合在一起看,Mastra 主要提供 6 类核心能力:
AgentsWorkflowsMemoryTools / MCPObservabilityEvals / Scorers
这 6 层和这个专题里的几条主线能很自然地对上:
Tool Use / Function CallingWorkflow vs AgentMemory and StateObservabilityEvals / Harness
所以 Mastra 对这个专题来说,不只是多了一个框架名字,而是补上了一条很顺的 TS 工程化路线。
3. 适用场景
3.1 适合已经不满足于“最小 Agent demo”的 TS 项目
如果已经做过:
- 最小 tool-using agent
- 一个简单 RAG demo
- 一个 research helper
接下来你开始在意:
- 流程怎么拆
- 状态怎么带
- 线上怎么观察
- 结果怎么评估
Mastra 往往会更顺手。
3.2 适合同时需要 Agent 和 Workflow 的系统
Mastra 官方 Workflows 页面讲得非常明确:
- 可以定义 execution graph
- 支持 sequential / parallel / branch / loop
- 支持 suspend / resume
- 支持 agents 和 tools 直接进入 workflow steps
因此它和下面这些场景贴得很紧:
- 不是只有一次工具调用
- 而是已经进入多步任务
- 且希望流程可控、可视化、可恢复
的系统。
3.3 适合很在意 evals 和 observability 的团队
这点是 Mastra 很突出的地方。
官方 Observability 页面明确强调:
- token usage
- latency
- prompts and completions
- decision paths
- tool calls
- memory operations
- OTel-compatible providers
官方 Evals / Scorers 页面则进一步给了:
- built-in scorers
- custom scorers
- live evaluations
- 在 CI/CD 里运行
- 在 Studio 里评分 trace
这说明 Mastra 不是只关心“能跑”,而是关心:
能不能长期评估、长期观察、长期调优。
4. 不太适合的场景
4.1 不适合作为第一个最小起点
如果只是想先学:
- tool schema
- 单工具调用
- 最小 loop
更轻的起 点一般还是:
- OpenAI Agents SDK
- Vercel AI SDK
更适合把它当作第二站,而不是第一站。
4.2 不适合还没分清 Agent 和 Workflow 边界的场景
Mastra 很强的一点,是它会很快把你带进:
- agents
- workflows
- context
- memory
- evals
- observability
这很爽,但也意味着:
如果还没分清:
- 哪些步骤应该写死
- 哪些步骤才该交给模型
- 哪些地方需要人工确认
那很容易过早进入“完整框架”,反而把边界做糊。
5. 一个基础理解框架
第一次接触 Mastra 时,可先用下面这个模型理解:
5.1 Agent 负责开放式判断
这一层主要负责:
- 会看输入
- 会调工具
- 会结合上下文做决策
5.2 Workflow 负责显式流程控制
这一层主要负责:
- 把步骤串起来
- 决定顺序、并发、分支、循环
- 决定暂停和恢复
5.3 Runtime Context 负责动态环境
这一层主要负责:
- 当前用户是谁
- 当前租户是谁
- 当前权限等级是什么
- 当前地区 / 当前策略 / 当前模型偏好是什么
5.4 Memory 负责长期和短期上下文
这一层主要负责:
- conversation history
- persistent user data
- semantic recall
5.5 Scorers / Observability 负责验证和排查
这一层主要负责:
- 这次输出有没有变差
- 哪一步耗时最高
- 工具到底怎么被调了
- memory 有没有带来副作用
如果用一句话压缩:
Agent 负责“想”,Workflow 负责“排”,Runtime Context 负责“带环境”,Memory 负责“记”,Scorers / Observability 负责“看清和验证”。
6. 常见的起步方式:先定义一个 Agent
Mastra 的 Agent 可以先理解成一个配置好的执行单元。官方 reference 里给出的构造思路大致是:
import { Agent } from "@mastra/core/agent";
import { openai } from "@ai-sdk/openai";
export const assistant = new Agent({
name: "assistant",
instructions: "You are a helpful assistant.",
model: openai("gpt-4o"),
});
这个最小版本里,核心通常有:
nameinstructionsmodeltoolsmemoryscorers
它并不只有 prompt 和 model。
6.1 instructions 不只是静态字符串
Mastra 的一个很实用的点是,官方 reference 明确支持把 instructions 写成函数。
这里最实用的一点是,可以根据 runtimeContext 动态生成系统指令:
instructions: async ({ runtimeContext }) => {
const tier = runtimeContext.get("user-tier");
return tier === "enterprise"
? "You are an enterprise-grade assistant with stricter compliance rules."
: "You are a helpful assistant.";
}
这个能力和专题里的这些部分很贴:
- Prompt Engineering
- Context Engineering
- Guardrails
因为它让 prompt 不再只是静态文本,而能变成“带运行时语境的策略”。
6.2 model 也可以动态选择
Mastra 官方 reference 也支持把 model 写成函数。
这样一来:
- 普通用户走便宜模型
- 高价值请求走更强模型
- 某些租户走指定 provider
都可以在框架层完成,而不用在业务代码里到处手写分支。
7. Tool 怎么接
Tool 是 Mastra 里最适合尽快上手的一层。
官方 Using Tools with Agents 文档里的核心思路很直接:
- 先定义 tool
- 再把 tool 挂到 agent 的
tools上 - agent 在生成过程中自行决定是否调用
一个很典型的形态是:
import { Agent } from "@mastra/core/agent";
import { openai } from "@ai-sdk/openai";
import { weatherInfo } from "../tools/weatherInfo";
export const weatherAgent = new Agent({
name: "Weather Agent",
instructions:
"You are a helpful assistant that provides current weather information. When asked about the weather, use the weather information tool to fetch the data.",
model: openai("gpt-4o-mini"),
tools: {
weatherInfo,
},
});
7.1 这里最重要的不是“能不能调工具”
而是:
- 工具边界是否清楚
- 工具命名是否清楚
- 工具 description 是否能指导模型正确选用
- 工具输入 schema 是否稳定
所以 Mastra 在 tool 这一层,最适合拿来练的是:
怎么把 Tool Use 真正做成清晰的工程接口。