Полный гайд по фреймворку Mastra — современному TypeScript-инструменту для построения автономных AI-агентов, multi-agent оркестраций, RAG-систем и интеграции с LLM через единый унифицированный API. Узнайте, как за 5 минут поднять первого агента с инструментами, памятью и workflow.
Mastra распространяется как npm-пакет с собственным CLI для быстрого scaffolding. Фреймворк написан на TypeScript и рассчитан на среду Node.js (v18+), с поддержкой ESM из коробки. Вы можете инициализировать проект одной командой — CLI создаст структуру каталогов, конфигурационные файлы и базовый пример агента. Альтернативно можно добавить Mastra в уже существующий проект вручную. Фреймворк работает поверх Vercel AI SDK, обеспечивая унифицированный доступ к десяткам моделей через одного провайдера.
# Создание нового проекта Mastra (рекомендуемый способ) npm create mastra@latest # CLI задаст несколько вопросов: # ? Project name: my-ai-agent # ? Include example agent: Yes # ? Package manager: npm / pnpm / yarn ✔ Scaffolding project in ./my-ai-agent ... ✔ Installing dependencies (mastra, @mastra/core, ai, zod) ... ✔ Done! Run: cd my-ai-agent && npm run dev # Ручная установка в существующий проект npm install mastra @mastra/core ai zod npm install -D @types/node typescript tsx # Структура проекта после инициализации: my-ai-agent/ ├── src/ │ ├── mastra/ │ │ ├── agents/ # Определения агентов │ │ ├── tools/ # Пользовательские инструменты │ │ └── workflows/ # Multi-agent сценарии │ └── index.ts # Точка входа ├── .env # API-ключи ├── tsconfig.json └── package.json
После инициализации необходимо добавить API-ключ вашего LLM-провайдера
в .env. Mastra поддерживает OpenAI (GPT-4o, GPT-4.1),
Anthropic (Claude Sonnet, Claude Opus), Google (Gemini), Groq, Mistral
и десятки других через адаптеры Vercel AI SDK. Переключение между
моделями — замена одной строки в конфигурации агента.
# .env OPENAI_API_KEY=sk-proj-xxxxxxxxxxxxxxxxxxxxxxxx ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxxxxxxxxxxx // mastra.config.ts — конфигурация фреймворка import { Mastra } from '@mastra/core'; export const mastra = new Mastra({ agents: { /* ... */ }, workflows: { /* ... */ }, logger: true, // подробное логирование telemetry: { // опционально: отправка в Langfuse enabled: false, }, });
Базовый агент в Mastra определяется через класс Agent.
Минимальная конфигурация включает: имя, инструкцию (system prompt) и
модель. Этого достаточно, чтобы агент мог отвечать на сообщения,
поддерживая контекст диалога. Инструкция — это промпт, который задаёт
роль, тон и границы поведения агента: он может быть ассистентом,
экспертом в доменной области, анализатором данных или творческим
генератором. Агент автоматически управляет историей сообщений,
обрезая её при достижении лимита токенов модели. Ключевое преимущество
Mastra — агент возвращает потоковый ответ (stream), что позволяет
отображать генерацию в реальном времени.
// src/mastra/agents/assistant.ts import { Agent } from '@mastra/core/agent'; import { openai } from '@ai-sdk/openai'; export const assistant = new Agent({ name: 'Assistant', instructions: `Ты — полезный AI-ассистент. Ты отвечаешь на русском языке, если пользователь пишет по-русски. Отвечай чётко, по делу, избегай воды. Если ты не знаешь ответа — честно скажи об этом.`, model: openai('gpt-4o'), }); // Использование агента — generate() с потоковым ответом const result = await assistant.generate('Привет! Расскажи о фреймворке Mastra.', { maxSteps: 3, // макс. число вызовов инструментов temperature: 0.7, }); console.log(result.text); // "Mastra — это современный TypeScript-фреймворк..." // Потоковый вывод (streaming) const stream = await assistant.stream('Напиши стих о программировании'); for await (const chunk of stream.textStream) { process.stdout.write(chunk); // посимвольный вывод }
Инструменты (tools) — ключевой механизм, превращающий языковую модель из простого генератора текста в автономного агента, способного взаимодействовать с внешним миром. В Mastra инструменты описываются через Zod-схемы: вы определяете имя, описание и схему параметров, а фреймворк автоматически преобразует их в function-calling definitions для LLM. Когда модель принимает решение о вызове инструмента, Mastra исполняет вашу функцию, возвращает результат обратно в контекст LLM, и цикл продолжается до получения финального ответа. Протокол MCP (Model Context Protocol) от Anthropic позволяет подключать готовые серверы инструментов — доступ к файловой системе, базам данных, браузеру и другим сервисам — без написания кода.
// src/mastra/tools/weather.ts — пример пользовательского инструмента import { createTool } from '@mastra/core/tools'; import { z } from 'zod'; export const weatherTool = createTool({ id: 'get-weather', description: 'Получить текущую погоду для указанного города', inputSchema: z.object({ city: z.string().describe('Название города'), units: z.enum(['celsius', 'fahrenheit']).default('celsius'), }), execute: async ({ context }) => { const { city, units } = context; // В реальном проекте — HTTP-запрос к API погоды const response = await fetch(`https://api.weather.example/${city}?units=${units}`); const data = await response.json(); return { temperature: data.temp, conditions: data.conditions, humidity: data.humidity, }; }, }); // Подключение инструментов к агенту import { Agent } from '@mastra/core/agent'; import { weatherTool } from './tools/weather'; export const weatherAgent = new Agent({ name: 'Weather Agent', instructions: 'Ты — метеоролог. Используй get-weather для получения данных.', model: openai('gpt-4o'), tools: { weatherTool }, });
MCP-серверы подключаются ещё проще — Mastra предоставляет нативный
MCP-клиент. Вы указываете команду запуска сервера (например,
npx @modelcontextprotocol/server-filesystem), и Mastra
автоматически подтягивает список доступных инструментов, добавляя их
в арсенал агента. Это открывает доступ к десяткам готовых MCP-серверов
из экосистемы: работа с GitHub, PostgreSQL, Brave Search, Puppeteer
и многими другими.
// src/mastra/agents/mcp-agent.ts — агент с MCP-инструментами import { Agent } from '@mastra/core/agent'; import { anthropic } from '@ai-sdk/anthropic'; export const mcpAgent = new Agent({ name: 'MCP Explorer', instructions: 'Ты исследуешь файловую систему и веб-ресурсы через MCP.', model: anthropic('claude-sonnet-4-20250514'), // Подключение MCP-серверов декларативно mcpServers: { filesystem: { command: 'npx', args: ['-y', '@modelcontextprotocol/server-filesystem', '/tmp'], }, braveSearch: { command: 'npx', args: ['-y', '@anthropic/mcp-server-brave-search'], env: { BRAVE_API_KEY: process.env.BRAVE_API_KEY }, }, }, });
Одиночный агент хорош для простых задач, но реальные бизнес-сценарии требуют кооперации нескольких агентов с разными ролями. Mastra предоставляет систему Workflow — это направленные графы, в которых узлами выступают агенты, а рёбрами — правила передачи контекста. Каждый агент получает на вход результат предыдущего и может либо вернуть финальный ответ, либо делегировать задачу дальше по цепочке. Поддерживаются паттерны: последовательная цепочка (chain), голосование (voting), маршрутизация (router), конвейерная обработка (pipeline) и циклы с условием выхода. Workflow автоматически сериализуются — состояние можно сохранить и возобновить.
// src/mastra/workflows/content-pipeline.ts import { createWorkflow } from '@mastra/core/workflows'; import { researcher } from '../agents/researcher'; import { writer } from '../agents/writer'; import { editor } from '../agents/editor'; export const contentPipeline = createWorkflow({ name: 'Конвейер создания статьи', triggerSchema: z.object({ topic: z.string().describe('Тема статьи'), audience: z.enum(['technical', 'business', 'general']), }), }) // Шаг 1: Researcher собирает факты и источники .step({ id: 'research', agent: researcher, input: ({ trigger }) => (`Собери ключевые факты по теме: ${trigger.topic}`), }) // Шаг 2: Writer создаёт черновик на основе исследования .step({ id: 'draft', agent: writer, input: ({ steps, trigger }) => ( `Напиши статью на тему "${trigger.topic}" для аудитории ${trigger.audience}. Факты для использования:\n${steps.research.text}` ), }) // Шаг 3: Editor проверяет и улучшает текст .step({ id: 'review', agent: editor, input: ({ steps }) => ( `Отредактируй статью, исправь ошибки, улучши стиль:\n\n${steps.draft.text}` ), }) .commit(); // Запуск workflow const result = await contentPipeline.run({ topic: 'Будущее AI-агентов в 2026 году', audience: 'technical', }); // result.steps.research.text → исследование // result.steps.draft.text → черновик // result.steps.review.text → финальная статья
Более сложные сценарии включают условное ветвление: например, после
шага «research» можно проверить качество собранных данных и либо
перейти к написанию, либо вернуться на доисследование. Для этого
используется метод .then() с функцией-предикатом,
возвращающей идентификатор следующего шага. Mastra также поддерживает
параллельное выполнение независимых шагов через .fanOut() —
несколько агентов работают одновременно, а их результаты объединяются
на следующем шаге. Это критично для сценариев, где время ответа важно:
например, агент-классификатор и агент-суммаризатор могут обрабатывать
входящий запрос параллельно.
Контекстное окно LLM ограничено — большинство моделей не могут «помнить» разговор бесконечно. Mastra предлагает три уровня памяти: краткосрочную (in-memory история последних N сообщений), долгосрочную (персистентное хранение в PostgreSQL/Redis/SQLite) и семантическую (векторный поиск по прошлым диалогам через Pinecone, Qdrant, Chroma или pgvector). Система памяти автоматически инжектит релевантные фрагменты в промпт агента перед каждым вызовом — разработчику достаточно указать стратегию и лимиты. Для RAG (Retrieval-Augmented Generation) Mastra предоставляет встроенные адаптеры к популярным векторным базам и embedding-моделям, а также утилиты для чанкинга документов.
// src/mastra/agents/memory-agent.ts — агент с долгосрочной памятью import { Agent } from '@mastra/core/agent'; import { Memory } from '@mastra/memory'; import { PostgresStore } from '@mastra/pg'; const memory = new Memory({ storage: new PostgresStore({ connectionString: process.env.DATABASE_URL, }), options: { lastMessages: 20, // последние 20 сообщений всегда в контексте semanticRecall: { // семантический поиск по истории topK: 5, // 5 релевантных фрагментов messageRange: { before: 5, after: 2 }, }, workingMemory: { // рабочая память — важные факты enabled: true, template: `Важные факты о пользователе: <working_memory /> Используй эти факты при ответе.`, }, }, }); export const personalAssistant = new Agent({ name: 'Personal Assistant', instructions: 'Ты — персональный ассистент. Помни предпочтения и контекст.', model: openai('gpt-4o'), memory, }); // Каждый вызов автоматически обогащается историей await personalAssistant.generate('Меня зовут Алекс, я веган.', { resourceId: 'user-42', // идентификатор сессии }); await personalAssistant.generate('Посоветуй ресторан.', { resourceId: 'user-42', // агент вспомнит про веганство });
Retrieval-Augmented Generation (RAG) — один из самых востребованных паттернов в AI-разработке. Вместо того чтобы «вшивать» знания в системный промпт (что дорого и не масштабируется), RAG-агент при каждом запросе ищет релевантные документы в векторной базе и добавляет их в контекст. Mastra предоставляет готовые абстракции для полного RAG-пайплайна: загрузка документов → чанкинг → эмбеддинг → индексация в векторную БД → поиск при запросе → генерация ответа. В качестве векторного хранилища можно использовать Pinecone (облачный), Qdrant, Chroma (локальный) или pgvector. В этом примере мы построим агента технической поддержки, который ищет ответы в документации продукта.
// src/mastra/agents/rag-support.ts import { Agent } from '@mastra/core/agent'; import { createVectorQueryTool } from '@mastra/rag'; import { PineconeVector } from '@mastra/pinecone'; import { openai } from '@ai-sdk/openai'; // Шаг 1: Инициализация векторного хранилища const vectorStore = new PineconeVector({ apiKey: process.env.PINECONE_API_KEY, indexName: 'product-docs', }); // Шаг 2: Создание инструмента векторного поиска const searchDocs = createVectorQueryTool({ vectorStore, embeddingModel: openai.embedding('text-embedding-3-small'), id: 'search-documentation', description: 'Искать ответы в документации продукта', topK: 5, filter: { source: 'official-docs' }, // опциональный фильтр }); // Шаг 3: Агент поддержки с RAG export const supportAgent = new Agent({ name: 'Support Agent', instructions: `Ты — агент технической поддержки продукта. Отвечай, опираясь ТОЛЬКО на найденные документы. Если в документации нет ответа — предложи создать тикет. Всегда указывай источник информации (заголовок документа).`, model: openai('gpt-4o'), tools: { searchDocs }, }); // Шаг 4: Индексация документов (выполняется один раз или по расписанию) import { MDocument } from '@mastra/rag'; async function indexDocs() { const doc = await MDocument.fromUrl('https://docs.example.com/api-reference.md'); const chunks = await doc.chunk({ strategy: 'recursive', // рекурсивное разбиение size: 512, // токенов на чанк overlap: 64, // перекрытие между чанками }); await vectorStore.upsert({ indexName: 'product-docs', chunks, embeddingModel: openai.embedding('text-embedding-3-small'), }); console.log(`Проиндексировано ${chunks.length} чанков`); } // Использование RAG-агента const answer = await supportAgent.generate( 'Как настроить OAuth-аутентификацию через Google?' ); // Агент вызовет searchDocs → получит релевантные чанки → сгенерирует ответ
RAG-пайплайн можно расширить: добавить гибридный поиск (векторный + keyword BM25), реранкинг результатов с помощью Cohere или cross-encoder, кэширование частых запросов и мониторинг качества через встроенную телеметрию Mastra. Фреймворк также поддерживает стриминг RAG-ответов с указанием источников — пользователь видит не только ответ, но и документы, на которых он основан, что критично для enterprise-сценариев, где требуется аудируемость.
Mastra — это зрелый, активно развивающийся фреймворк для построения AI-агентов на JavaScript/TypeScript. Его ключевые преимущества: единый API для десятков LLM-провайдеров (через Vercel AI SDK), нативная поддержка MCP для подключения готовых инструментов, гибкая система Workflow для multi-agent оркестрации, встроенная память с семантическим поиском и полноценный RAG-стек из коробки. Фреймворк подходит как для быстрого прототипирования (первый агент за 5 минут), так и для продакшен-систем: горизонтальное масштабирование через stateless- агенты, сохранение состояния в PostgreSQL, телеметрия и логирование.
Если ваша задача — построить агента, который не просто генерирует текст, а действует: вызывает API, читает файлы, ищет в базе знаний, координирует работу других агентов — Mastra будет отличным выбором. Фреймворк заполняет пробел между низкоуровневым AI SDK и высокоуровневыми no-code решениями, давая разработчику полный контроль и гибкость.
Полезные ссылки:
Версия гайда: июль 2026. Mastra постоянно обновляется — следите за официальным changelog и Discord-сообществом для получения актуальной информации о новых возможностях.