TypeScript 开发者的 Agent 框架 2026 年,Agent 框架的生态以 Python 为主流,但大量全栈开发者的技术栈是 TypeScript。Mastra 正是为这群人打造的——一个 TypeScript 原生的 Agent 框架,不是 Python 框架的移植,而是从零开始为 TypeScript 生态设计的。
设计理念 Mastra 的核心理念:
TS Native:利用 TypeScript 的类型系统,而非 Python 的动态特性 Edge Ready:支持 Vercel Edge Functions、Cloudflare Workers 等边缘计算平台 Full-Stack:前端、后端、CLI 工具链一体化 React Integration:与 React/Next.js 生态无缝集成 快速上手 安装与初始化 # 创建新项目 npx create-mastra@latest my-agent-app # 项目结构 my-agent-app/ ├── src/ │ ├── agents/ │ │ ├── research-agent.ts │ │ └── writing-agent.ts │ ├── workflows/ │ │ └── content-pipeline.ts │ ├── tools/ │ │ ├── search.ts │ │ └── database.ts │ ├── Mastra.config.ts │ └── index.ts ├── mastra/ │ └── playground/ # 可视化调试界面 ├── package.json └── tsconfig.json 定义 Agent import { Mastra } from '@mastra/core'; import { createAgent } from '@mastra/core/agent'; import { openai } from '@ai-sdk/openai'; import { z } from 'zod'; // 使用 Zod 定义结构化输出 const researchOutputSchema = z.object({ topic: z.string(), keyFindings: z.array(z.string()), confidence: z.number().min(0).max(1), sources: z.array(z.object({ url: z.string().url(), title: z.string(), reliability: z.enum(['high', 'medium', 'low']) })), recommendation: z.enum(['proceed', 'caution', 'avoid']) }); // 创建 Agent export const researchAgent = createAgent({ name: 'research-agent', description: '深度研究分析师', model: openai('gpt-4o'), instructions: `你是一名专业研究分析师。 - 始终提供来源链接 - 区分事实和推测 - 给出明确的置信度评分 - 保守地给出建议`, outputSchema: researchOutputSchema, tools: { webSearch: searchTool, knowledgeBase: kbTool, }, memory: { type: 'semantic', config: { embeddings: openai.embedding('text-embedding-3-large'), vectorStore: 'pgvector', }, }, // TypeScript 完整类型推导 // output 类型自动推断为 z.infer<typeof researchOutputSchema> }); 工具定义 import { createTool } from '@mastra/core/tools'; import { z } from 'zod'; // 类型安全的工具定义 export const searchTool = createTool({ id: 'web-search', description: '搜索互联网获取最新信息', inputSchema: z.object({ query: z.string().describe('搜索查询'), maxResults: z.number().default(10).describe('最大返回数'), timeRange: z.enum(['day', 'week', 'month', 'year']).optional() .describe('时间范围'), }), outputSchema: z.object({ results: z.array(z.object({ title: z.string(), url: z.string().url(), snippet: z.string(), publishedAt: z.string().datetime().optional(), })), totalResults: z.number(), }), execute: async ({ input, context }) => { // input 类型自动推断:{ query: string, maxResults: number, ... } const response = await fetch( `https://api.search.com/v1/search?q=${encodeURIComponent(input.query)}&limit=${input.maxResults}` ); const data = await response.json(); return { results: data.items.map((item: any) => ({ title: item.title, url: item.link, snippet: item.snippet, publishedAt: item.publishedAt, })), totalResults: data.totalResults, }; }, }); // 数据库工具 export const dbTool = createTool({ id: 'database-query', description: '查询内部数据库', inputSchema: z.object({ sql: z.string().describe('SQL 查询语句(只读)'), params: z.array(z.union([z.string(), z.number()])).optional(), }), outputSchema: z.object({ rows: z.array(z.record(z.unknown())), rowCount: z.number(), }), execute: async ({ input, context }) => { const client = await context.db.connect(); try { // SQL 注入防护 if (!/^SELECT/i.test(input.sql)) { throw new Error('仅允许 SELECT 查询'); } const result = await client.query(input.sql, input.params || []); return { rows: result.rows, rowCount: result.rowCount, }; } finally { client.release(); } }, }); Workflow 引擎 Mastra 的 Workflow 引擎支持状态机和工作流编排:
...