部署形态
| 目标 | deployer | 适合 | 冷启动 | 数据库 |
|---|---|---|---|---|
| Node Server | 内置 dev server → 自行打包 | 自托管、企业内网 | 无 | Postgres/MySQL |
| Cloudflare Workers | @mastra/deployer-cloudflare | 全球边缘、高并发低成本 | ~30ms | D1 / Turso / Upstash |
| Vercel | @mastra/deployer-vercel | 已在 Vercel 的 Next.js 项目 | ~200ms | Supabase / Upstash |
| Netlify | @mastra/deployer-netlify | Netlify 生态 | ~300ms | Supabase / Upstash |
自托管 Node
# 打包 pnpm build # 产出 .mastra/output/ # 跑 node .mastra/output/index.mjs
# Dockerfile FROM node:20-alpine WORKDIR /app COPY package.json pnpm-lock.yaml ./ RUN corepack enable && pnpm install --frozen-lockfile COPY . . RUN pnpm build EXPOSE 4111 CMD ["node", ".mastra/output/index.mjs"]
Cloudflare Workers
// src/mastra/index.ts import { Mastra } from '@mastra/core'; import { CloudflareDeployer } from '@mastra/deployer-cloudflare'; export const mastra = new Mastra({ agents: { ... }, deployer: new CloudflareDeployer({ scope: 'my-account-id', projectName: 'gufa-agent', routes: [{ pattern: 'agent.example.com/*', zone_name: 'example.com' }], workerNamespace: 'prod', auth: { apiToken: process.env.CF_API_TOKEN! }, }), });
# 部署 pnpm mastra deploy # 或手动用 wrangler pnpm build cd .mastra/output && wrangler deploy
Cloudflare Workers 的限制
CPU 时间单请求默认 50ms,paid plan 最多 30s。长链 Workflow 要考虑 Durable Objects 或 Queues。原生 pg 客户端不支持 TCP,用 Hyperdrive 或 libsql/Turso。
CPU 时间单请求默认 50ms,paid plan 最多 30s。长链 Workflow 要考虑 Durable Objects 或 Queues。原生 pg 客户端不支持 TCP,用 Hyperdrive 或 libsql/Turso。
Vercel
import { VercelDeployer } from '@mastra/deployer-vercel'; deployer: new VercelDeployer({ teamSlug: 'my-team', projectName: 'gufa-agent', token: process.env.VERCEL_TOKEN!, }),
产出是一组 Vercel Function,可以直接合并到现有 Next.js 项目的 /api/mastra/*。
数据库选型
自托管 Postgres
事务、触发器、pgvector,企业首选。延迟稳定,backup/HA 成熟。
Supabase
托管 Postgres + pgvector + 行级权限 + 文件存储。一站式,适合中小团队。
Turso(libsql)
SQLite 兼容、全球边缘副本,延迟低。向量/检索功能完备。Cloudflare Workers 搭档。
Cloudflare D1 + Vectorize
纯 CF 生态。D1 目前写入偏慢,Vectorize 便宜。小规模 RAG 可用。
Upstash Redis + Vector
HTTP 协议,Serverless 友好,按请求计费。Memory 热数据层常用。
专用向量库
Pinecone / Qdrant / Weaviate。规模 > 500 万 chunks 时分离出去。
成本速算(每月)
| 项 | 小项目(万级请求) | 中等(百万级) |
|---|---|---|
| LLM(GPT-4o-mini) | $10-30 | $500-2000 |
| Embedding | $1-5 | $30-100 |
| Cloudflare Workers | $0(免费额度) | $5-20 |
| Turso/Supabase | $0-25 | $50-200 |
| 向量库 | 并入主库 | Pinecone $70+ |
| Langfuse | Hobby 免费 | Team $50+ |
可靠性清单
- API Key 轮换:Cloudflare Secrets / Vercel Env,定期 rotate
- 模型兜底:主模型失败降级到备用 provider(OpenRouter 便于多家聚合)
- 速率与预算:用户/租户级别 rate limit,LLM 成本超预算告警
- Prompt 审计:input/output 记日志,敏感词过滤防越狱
- 回滚:上线用不可变版本号,出问题可秒级回退
- 数据备份:消息/记忆/向量每日快照到冷存储
监控基线
- 📈 Agent p50 / p95 / p99 延迟(含 LLM + tool)
- 📈 token 用量(输入/输出拆开)与 $ 折算
- 📈 tool 调用成功率 / 每工具平均耗时
- 📈 Memory 查询命中率 / 向量库 p99
- 📈 Eval 线上抽样得分趋势(定期回归)
灰度与 A/B
// 按 userId 分桶 10% 走新 prompt const variant = (hash(userId) % 10 === 0) ? 'v2' : 'v1'; const agent = mastra.getAgent(variant === 'v2' ? 'qa-v2' : 'qa-v1'); const { text, evals } = await agent.generate(input); track({ variant, score: evals.relevancy.score, userId });
把 variant 打到 Langfuse tag,看两组的满意度/成本/延迟分布差异。
生产部署 checklist
- ✅ .env 全走 secrets,代码仓没有任何 key
- ✅ pnpm build 本地成功,镜像/函数大小 < 50MB
- ✅ Memory 用生产数据库,不是 libsql file
- ✅ Telemetry 导出 Langfuse/Braintrust,verify 能看到 trace
- ✅ 最小一组 eval 回归 PASS
- ✅ Rate limit + 预算告警接好
- ✅ 回滚方案演练过(上线前 10 分钟练一遍)
全书终章
- Mastra = TypeScript 世界的端到端 Agent 框架
- Agent + Tool + Workflow + Memory + RAG + Eval 一套 API 解决
- 模型层复用 AI SDK,provider 可替换
- Playground 是最强 DX:对话 + trace + workflow + eval 一屏看完
- 三种部署目标:Node 自托管、Cloudflare 全球边缘、Vercel 融入 Next.js
- OTel 标准让观测性不被锁死,接任意平台
愿你的 Agent 少产幻觉,多产价值。