社内でLLM(大規模言語モデル)を業務に活用したいというニーズはますます強くなっています。しかし、単にOpenAIやAnthropicといったAPIを呼び出すだけでは、自社の要件に合わせて柔軟に運用するのは難しいものです。
そうした課題を解決するために登場したのが Mastra です。MastraはTypeScriptで構築されたエージェントフレームワークで、複数のLLMを組み合わせ、エージェント同士を連携させながら複雑なワークフローを実現できるのが特徴です。

この記事では、Mastraの概要から環境構築、シンプルなエージェントの作成、ワークフローやメモリの活用、さらにはマルチエージェントやRAGとの統合までを詳しく解説します。実際のコード例やユースケースを交えながら、エンジニアがすぐに試せる内容になっています。


Mastraの概要

Mastraは「マストラ」と読み、TypeScript製のAIエージェントフレームワークです。特にマルチエージェントシステムの開発に力を発揮し、複数のエージェントが協力しながら複雑な処理をこなす環境を提供します。
従来、エージェントの構築には多くのコードやカスタマイズが必要でしたが、Mastraを利用することで、エージェント間の連携や外部ツールとの接続が容易になり、実用的なAIシステムを効率的に開発できるようになります。

Mastraの公式サイト

環境構築

Mastraを使うには、Node.js環境とLLMプロバイダーのAPIキーが必要です。対応しているのは以下のサービスです。

  • OpenAI
  • Anthropic
  • Google Gemini
  • Groq
  • Cerebras

インストールは非常にシンプルで、以下のコマンドを実行するだけです。

npx create-mastra@latest

その後、ウィザード形式でプロバイダーやAPIキーを設定していくと、数分で初期化が完了します。セットアップが終われば、localhost:4111 で専用のダッシュボードにアクセスでき、動作確認や開発がすぐに始められます。

Mastraのダッシュボード

シンプルなエージェント作成とツール定義

まずは基本として、天気情報を取得するエージェントを作成してみましょう。Mastraでは Agent クラスを使ってエージェントを定義します。役割や行動方針は instructions に記述し、外部APIを呼び出すためのツールを組み込むことができます。

export const weatherAgent = new Agent({
  name: 'Weather Agent',
  instructions: `
      You are a helpful weather assistant...
      Use the weatherTool to fetch current weather data.
  `,
  model: openai('gpt-4o-mini'),
  tools: { weatherTool },
  memory: new Memory({
    storage: new LibSQLStore({
      url: 'file:../mastra.db',
    }),
  }),
});

次に、ツールを定義します。ここでは getWeather 関数を呼び出して天気を取得する仕組みを組み込みます。

export const weatherTool = createTool({
  id: 'get-weather',
  description: 'Get current weather for a location',
  inputSchema: z.object({ location: z.string() }),
  outputSchema: z.object({
    temperature: z.number(),
    humidity: z.number(),
    conditions: z.string(),
  }),
  execute: async ({ context }) => {
    return await getWeather(context.location);
  },
});

最後にエージェントを実行してみましょう。

const response = await weatherAgent.run('What is the weather in Tokyo?');
console.log(response);

このように短いコードで、ユーザー入力に応じた天気情報を返すエージェントを構築できます。


ワークフローとメモリシステム

単発のリクエストだけでなく、一連の処理の流れを扱いたい場合には、Mastraのワークフロー機能が役立ちます。ユーザーからの入力をエージェントが処理し、結果を返すまでの流れを可視化できるため、開発やデバッグがスムーズになります。

さらに、Mastraにはメモリシステムが用意されています。これを利用すると、エージェントは過去のやり取りやユーザー情報を保持し、より文脈に沿った応答が可能になります。利用できるメモリシステムは以下の3種類です。

  • LibSQL:軽量でローカル利用向け
  • PostgreSQL:大規模システム向け
  • Upstash:分散処理に対応

業務規模やシステム要件に合わせて柔軟に選択できます。

ワークフロー例

マルチエージェントシステムとRAG統合

より高度な応用として、複数のエージェントを連携させたマルチエージェントシステムを構築することも可能です。たとえば、コピーライターが文章を作成し、エディターが推敲し、パブリッシャーが最終的な原稿をまとめる、といった流れを自動化できます。

const publisherAgent = new Agent({
  name: "Publisher",
  instructions: "コピーライターとエディターを呼び出して最終コピーを返します。",
  model: anthropic("claude-3-5-sonnet-20241022"),
  tools: { copywriterTool, editorTool },
});

const result = await publisherAgent.generate(
  "Write a blog post about React JavaScript frameworks."
);
console.log(result.text);

また、RAG(Retrieval Augmented Generation)を統合すれば、外部データベースから関連情報を取得し、生成内容に反映させることも可能です。これにより、より正確で信頼性の高い回答を提供できます。


ビジネスユースケースと最適化戦略

Mastraは実際の業務シーンでも活用できます。たとえばカスタマーサポートでは、FAQの自動応答を行い、複雑な質問だけを人間の担当者に引き継ぐといった使い方が可能です。営業支援では顧客データを要約し、提案書のドラフトを自動生成できますし、教育分野では学習者のレベルに合わせた教材を自動で提示することもできます。

また、複数のLLMプロバイダーを組み合わせることで、コストと精度を最適化できます。たとえば、基本的な応答はOpenAI、高度な分析はAnthropic、といった役割分担をすることで、効率的な運用が実現できます。


まとめ

Mastraは、TypeScriptでAIエージェントを効率的に構築できる強力なフレームワークです。
シンプルなエージェントから始め、ワークフローやメモリを組み込み、さらにマルチエージェントやRAGを統合することで、実用的なAIシステムを段階的に構築できます。

定型業務の自動化や顧客対応の効率化、教育や研究分野での知識活用など、多彩なユースケースに対応できるのも魅力です。

ぜひ Mastra公式サイト を参考に、実際に触ってみてください。