はじめに
「AIエージェントを作りたいけど、どこから手をつければいいかわからない」
最近、そういう声をよく聞きます。ChatGPTのAPIを叩くだけなら簡単ですが、本格的なAIエージェントを作ろうとすると、ツール呼び出し、会話履歴の管理、複数ステップの処理、エラーハンドリング...やることが多すぎて途方に暮れる。
LangChainやLlamaIndexも試したけど、Python環境の構築が面倒だったり、TypeScript版がPython版に比べて機能が限定的だったり。正直なところ、TypeScript派としては選択肢が少ない状況でした。
そんな中で見つけたのがMastraです。
TypeScriptネイティブのAIエージェントフレームワークで、GitHubスターは18,700を超えています。40以上のLLMプロバイダーに対応していて、ワークフロー、RAG、メモリ管理といった機能も揃っている。これ、かなり本格的です。
Mastraとは
MastraはTypeScriptで書かれた「AIアプリケーションとエージェント構築のためのオールインワンフレームワーク」です。
特徴的なのは、プロトタイプから本番環境まで一貫して使える設計になっていること。ローカルで開発して、そのままNext.jsやExpressに組み込んで本番デプロイ、という流れがスムーズにできます。
ライセンスはApache 2.0。完全にオープンソースなので、商用利用も問題ありません。
特徴・メリット
40以上のLLMプロバイダーに対応
OpenAI、Anthropic(Claude)、Gemini、Llama、Mistral...主要なLLMはほぼ網羅されています。しかも統一されたインターフェースで切り替えられるので、「とりあえずGPT-4で開発して、本番ではClaudeに変更」みたいなことも簡単。
コスト削減のためにモデルを切り替えたり、用途に応じて使い分けたりする柔軟性があるのは大きい。
エージェント機能が充実
Mastraのエージェントは「目標について推論し、ツール選択を決定し、最終的な回答まで反復処理する」という、いわゆるReActパターンを実装しています。
ツールの定義も直感的で、関数を書いて登録するだけ。外部APIの呼び出し、データベース検索、ファイル操作など、エージェントにやらせたいことを自由に拡張できます。
グラフベースのワークフローエンジン
これ、意外と重要な機能なんですよね。単純なエージェントだけでなく、複数のステップを組み合わせた複雑な処理フローを定義できます。
workflow
.step(fetchData)
.then(processWithAI)
.branch({
success: notifySlack,
failure: sendAlert
})
.parallel([generateReport, updateDatabase])
.then()、.branch()、.parallel()といった制御フロー構文が用意されていて、コードを読むだけで処理の流れがわかる。
ヒューマン・イン・ザ・ループ対応
エージェントやワークフローを一時停止して、人間の入力を待ってから再開する機能があります。
「AIが判断に迷ったら人間に確認を求める」「重要な決定は人間が承認してから実行する」といった、現実的なユースケースに対応できる。これがないと、本番で使うのは怖いですからね。
RAGとメモリ管理
検索拡張生成(RAG)の機能も組み込まれています。ベクトルストアとの連携、ドキュメントのチャンク分割、セマンティック検索といった、RAGに必要な機能が揃っている。
会話履歴の管理(セッションメモリ)、ワーキングメモリ、長期記憶(セマンティックメモリ)といったメモリ管理機能もあるので、文脈を理解したエージェントが作れます。
MCPサーバー対応
Model Context Protocol(MCP)サーバーを作成して、エージェントやツールをMCPインターフェース経由で公開できます。Claude Desktopや他のMCP対応クライアントから、Mastraで作ったツールを呼び出せるようになる。
組み込みの評価・監視機能
本番環境で運用するなら、評価(Evals)とオブザーバビリティは必須。Mastraは最初からこれらの機能が組み込まれています。
モデルグレード、ルールベース、統計的手法を使ったエージェント出力の評価ができるので、品質を継続的に監視・改善できる。トレースやログも標準で見られます。
インストール方法
インストールは驚くほど簡単です。
npm create mastra@latest
これを実行すると、対話形式でプロジェクトのセットアップが進みます。Next.js、Express、Honoなど、使いたいフレームワークを選べる。
既存プロジェクトに追加する場合
npm install @mastra/core
コアパッケージだけなら、これでOK。必要に応じて追加のパッケージをインストールします。
# ベクトルストアを使う場合
npm install @mastra/rag
# 特定のLLMプロバイダーを使う場合
npm install @mastra/openai
npm install @mastra/anthropic
基本的な使い方
シンプルなエージェントの作成
まずは基本的なエージェントから。
import { Agent } from '@mastra/core';
import { openai } from '@mastra/openai';
const agent = new Agent({
name: 'assistant',
instructions: 'あなたは親切なアシスタントです。ユーザーの質問に丁寧に回答してください。',
model: openai('gpt-4o'),
});
const response = await agent.generate('TypeScriptの型推論について教えて');
console.log(response.text);
instructionsでエージェントの振る舞いを定義して、modelで使用するLLMを指定する。シンプルですね。
ツールを追加したエージェント
エージェントに機能を追加するには、ツールを定義します。
import { Agent, Tool } from '@mastra/core';
import { openai } from '@mastra/openai';
const searchTool = new Tool({
name: 'web_search',
description: 'ウェブを検索して最新情報を取得します',
parameters: {
query: {
type: 'string',
description: '検索クエリ',
},
},
execute: async ({ query }) => {
// 検索APIを呼び出す実装
const results = await performWebSearch(query);
return results;
},
});
const agent = new Agent({
name: 'researcher',
instructions: '最新情報を検索して、ユーザーの質問に回答してください。',
model: openai('gpt-4o'),
tools: [searchTool],
});
ツールにはname、description、parameters、executeを定義します。エージェントは状況に応じて適切なツールを選択して実行してくれる。
ワークフローの定義
複数ステップの処理を組み立てるには、ワークフローを使います。
import { Workflow, Step } from '@mastra/core';
const fetchDataStep = new Step({
name: 'fetch_data',
execute: async (context) => {
const data = await fetchFromAPI(context.input.url);
return { data };
},
});
const analyzeStep = new Step({
name: 'analyze',
execute: async (context) => {
const analysis = await agent.generate(
`以下のデータを分析してください: ${context.data}`
);
return { analysis: analysis.text };
},
});
const workflow = new Workflow({
name: 'data_analysis',
steps: [fetchDataStep, analyzeStep],
});
workflow
.step(fetchDataStep)
.then(analyzeStep);
const result = await workflow.run({ url: 'https://api.example.com/data' });
RAGの実装
ドキュメントを使った検索拡張生成も実装できます。
import { Agent, RAG } from '@mastra/core';
import { openai } from '@mastra/openai';
const rag = new RAG({
vectorStore: myVectorStore,
embeddings: openai.embedding('text-embedding-3-small'),
});
// ドキュメントをインデックス化
await rag.index(documents);
const agent = new Agent({
name: 'doc_assistant',
instructions: '提供されたドキュメントに基づいて回答してください。',
model: openai('gpt-4o'),
rag: rag,
});
const response = await agent.generate('プロジェクトの設計方針について教えて');
実践的なユースケース
カスタマーサポートボット
社内ドキュメントやFAQをRAGで検索して回答するボット。ヒューマン・イン・ザ・ループ機能を使って、AIが回答できない質問は人間にエスカレーションする設計にできます。
コードレビューエージェント
GitHubのPRをフェッチして、コードを分析し、レビューコメントを生成する。ワークフローで「差分取得 → 分析 → コメント生成 → 投稿」の流れを自動化できます。
データ分析パイプライン
定期的にデータを取得して、AIで分析し、レポートを生成する。並列処理機能を使えば、複数のデータソースを同時に処理することも可能。
社内ナレッジベースアシスタント
Confluence、Notion、社内Wikiなどからドキュメントをインデックス化して、自然言語で質問できるアシスタントを作る。新入社員のオンボーディングや、社内ルールの確認に便利。
注意点
正直なところ、いくつか気をつけるべき点もあります。
まだバージョン0.x系
現在のバージョンは0.24.6。本番投入する場合は、破壊的変更の可能性を考慮しておく必要があります。とはいえ、開発は活発で、最新コミットは数時間前。勢いは感じます。
ドキュメントは英語中心
公式ドキュメントは英語です。日本語の情報はまだ少ないので、英語ドキュメントを読む覚悟は必要。ただ、コード例が豊富なので、読めばなんとかなる範囲かなと。
LLMのコストは別途かかる
当然ですが、OpenAIやAnthropicのAPIを使えば、その分のコストは発生します。開発中はモデルを切り替えてコストを抑えるなど、工夫が必要。
まとめ
Mastraは「TypeScriptでAIエージェントを本格的に作りたい」という需要にピッタリのフレームワークです。
- 40以上のLLMプロバイダーに統一インターフェースで対応
- エージェント、ワークフロー、RAG、メモリ管理が揃っている
- ヒューマン・イン・ザ・ループで実用的な設計が可能
- MCP対応でClaude Desktopなどとも連携
- 評価・監視機能が組み込み済み
- Apache 2.0ライセンスで商用利用OK
個人的には、TypeScript製でここまで機能が揃っているのは貴重だと思います。LangChain.jsより直感的に書けるし、本番を見据えた設計になっている。
AIエージェント開発に興味があるなら、まずは npm create mastra@latest で触ってみてください。公式のテンプレートやサンプルも充実しているので、動くものを作りながら学べます。
公式サイト: https://mastra.ai GitHub: https://github.com/mastra-ai/mastra ドキュメント: https://mastra.ai/docs