🦔

MastraでAgent.network()を使用したエージェント連携の仕方

に公開

こんにちは!株式会社エクスプラザのShinです。
今回はmastraのAgent.network()を使った、エージェント連携についてご紹介します。

はじめに

Mastraでは複数のエージェントと連携してタスクを処理するためにAgentNetworkという機能があります。
この機能がエージェント間におけるオーケストレーションの働きをし、AIがどのエージェントを使用するかを自律的に判断し、タスクを処理してくれます。
現在AgentNetworkはExperimentalな機能であり、実装方法もMastraのバージョンによって異なります。
今回は@mastra/core@0.20.0を使ったAgentNetworkの実装方法をご紹介したいと思います。
※この記事を執筆している2025年10月7日時点では、このバージョンが最新となります。

背景

2025年10月3日に@mastra/core@0.20.0がリリースされました。
https://github.com/mastra-ai/mastra/releases

このリリースノートにあるように、今までAgentNetworkを利用するために使用されていたvNext networkの実装が削除されました。
これによりこちらの公式ドキュメントにあるAgent.network()を使った実装が、今後推奨される形になります。
またこれに伴って、Mastra PlaygroundからもNetworksの内容が削除され試すことができなくなっています。

Agent.network()を使った実装

今回Agent.network()を試すにあたって、Mastra Playgroundからの操作ができなさそうだったので、Next.jsにMastraをインテグレーションしたプロジェクトを用意して試しました。
Next.jsの内容については深く追求しないのでご注意ください。
Next.jsへのMastraのインテグレーションはこちらのドキュメントを参考にして、テストページなども用意しました。
実装するエージェントの構成は、オーケストレーターのエージェントと、専門エージェント2つです。

オーケストレーターエージェント

まずは専門エージェントとオーケストレーションを行うエージェントを作成します。

export const orchestratorAgent = new Agent({
  name: 'orchestrator-agent',
  instructions: `
    あなたはオーケストラエージェントです。
    ユーザーから場所と日時の情報を受け取ることで、その日の天気と最適なアクティビティを提案します。    
    必ず両方のエージェントを順番に呼んで、各エージェントの結果を明確にユーザーに伝えてください。
  `,
  agents:{ weatherAgent, activityPlanAgent },
  model: openai('gpt-4o-mini'),
  memory: new Memory({
    storage: new LibSQLStore({
      url: 'file:../mastra.db',
    }),
  }),
});

連携したい専門エージェントをagentsの中に記述しておきます。
この設定によって、network()呼び出し時に自動的に専門エージェントが連携されます。

専門エージェント

オーケストレーターに指定した専門エージェントを作成します。

天気の情報を取得するエージェント
export const weatherAgent = new Agent({
  name: 'weather-agent',
  instructions: `
      あなたは天気情報を提供する専門エージェントです。

      主な役割は、指定された日時と地域の天気情報を正確に取得することです。対応する際は以下に従ってください:
      - 地域が指定されていない場合は必ず尋ねる
      - 地域名が英語でない場合は英語に翻訳する
      - 複数の部分を持つ地域名(例:「東京都、新宿区」)の場合、最も関連性の高い部分(例:「Tokyo」)を使用する
      - 湿度、風の状況、降水確率などの詳細情報を含める
      - 簡潔で情報量の多い回答を心がける

      weatherToolを使用して現在の天気データを取得してください。
`,
  model: openai('gpt-4o-mini'),
  tools: { weatherTool },
  memory: new Memory({
    storage: new LibSQLStore({
      url: 'file:../mastra.db',
    }),
  }),
});
アクティビティ提案をするエージェント
export const activityPlanAgent = new Agent({
  name: 'activity-plan-agent',
  instructions: `
      あなたは天気情報に基づいておすすめのアクティビティを提案する専門エージェントです。

      主な役割:
      - 提供された天気情報(気温、天候、湿度、風速など)を分析する
      - その天気に最適なアクティビティを2つ提案する

      activitySuggestionsToolを使用してアクティビティを提案してください。
`,
  model: openai('gpt-4o-mini'),
  tools: { activitySuggestionsTool }
  memory: new Memory({
    storage: new LibSQLStore({
      url: 'file:../mastra.db',
    }),
  }),
});

network()を使って呼び出す

フォーム送信時のアクションで簡単に実装してみます。

"use server";
import { orchestratorAgent } from "../../mastra";

export async function sendMessage(message: string) {
  const response = await orchestratorAgent.network(message);

これでAgent.network()を使用したエージェント間の連携が実現できます。

Observabilityツールから確認してみる

Langfuseを利用してトレースした内容が以下になります。
LLMが判断して各エージェントと連携し、回答を生成しているのがわかります。

まとめ

@mastra/core@0.20.0Agent.network()を利用した実装についてまとめてみました。
AgentNetworkだけでエージェント連携がいい感じに実装できると便利ですね。
この実装方法は2025年10月7日時点では、まだ情報が少なく、公式ドキュメントの整備が追いついていない状態です。
Discordのコミュニティーの情報によると、今月中のドキュメントの更新に取り組んでいるようです。

もしAgentNetworkを使用せずエージェント連携を行いたい場合は、function callingでツールとしてエージェントを組み合わせる形になるかと思います。

株式会社エクスプラザ

Discussion