0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Mastra の AgentNetwork を使って「複数エージェントと MCPサーバーの組み合わせ」を試す

Last updated at Posted at 2025-05-09

はじめに

直近で以下を試していた Mastra に関する記事です。

●Mastra でシンプルな MCPクライアント・MCPホストの機能を作って Node.js で実行(自作MCPサーバーと組み合わせる) - Qiita
 https://qiita.com/youtoy/items/062165c2918cfdbc5590
●Mastra でシンプルな自作サーバー + シンプルな自作クライアントなどでサーバー経由でエージェントを使う(OpenAI との組み合わせ) - Qiita
 https://qiita.com/youtoy/items/0911983e548a14533943

今回の内容

今回、以下の記事で見かけた 「AgentNetwork(Networks)による複数エージェントの利用」 と、さらに上記の過去のお試しで少し試した 「MPCサーバーの利用(※ ただし自作ではないもの)」 とを組み合わせてみました。

Mastra の AgentNetwork について書かれた記事

●【Mastra】ハンズオンで学ぶAIエージェント構築ガイド|そばこ
 https://note.com/sobaco_san/n/ne5aad2027853

image.png

Mastra の AgentNetwork に関する補足

以下の Mastra の公式ドキュメントを見ると、「AgentNetwork」は現状は実験的な機能になるようです。

●AgentNetwork(実験的)
 https://mastra.ai/ja/reference/networks/agent-network
image.png

下準備

ここから実際に試していきます。
そのための下準備として、以下を進めます。

create-mastra を使った準備

以下のコマンドを実行してベースを作ります。

npx create-mastra

このコマンドを実行して設定する内容は、以下のとおりです。

プロジェクト名: my-mastra-app
その他の設定:
image.png

インストールなどが終わった後は my-mastra-app/src/mastra フォルダに以下の内容の index.ts と空のフォルダ(agents)が作成されました。

import { Mastra } from '@mastra/core';

export const mastra = new Mastra()

ファイル・フォルダの作成

ここで my-mastra-app/src/mastra フォルダ内に network フォルダを追加しておきます。さらに上記の index.ts を index.js に変更したり、空のフォルダ 2つに index.js を作成しました。

その結果、my-mastra-app/src/mastra 直下の構成は以下となりました。

image.png

この後にコードを実装するファイルは、以下 3つがある状態です。

  • 3つの「index.js」
    • my-mastra-app/src/mastra/index.js
    • my-mastra-app/src/mastra/agents/index.js
    • my-mastra-app/src/mastra/network/index.js

パッケージのインストール

今回は MCPサーバーを使うので、さらに my-mastra-app フォルダ内で以下を実行し、パッケージをインストールしておきます。

npm i @mastra/mcp

APIキーの設定

今回、参照している記事で以下に書かれている APIキーの設定を行います。

image.png

OpenAI の APIキーを設定してください。

コードの実装

ここから、先ほど用意した 3つの index.js の中身を作っていきます。

参考にした情報

ここからの実装を進めるにあたり、参考にした記事を掲載します。
(これらと合わせて、さらに上で掲載していた記事も参照しました)

●mastra/examples/agent-network/src/mastra/network/index.ts
 https://github.com/mastra-ai/mastra/blob/main/examples/agent-network/src/mastra/network/index.ts

●mastra/examples/agent-network/src/mastra/agents/index.ts
 https://github.com/mastra-ai/mastra/blob/main/examples/agent-network/src/mastra/agents/index.ts

3つのファイルの実装内容

実装した内容を、以下に列挙していきます。

mastra直下の index.js

mastra直下の index.js の実装は以下のとおりです。全体をまとめた内容を記載したという感じになりました。

index.js
import { Mastra } from "@mastra/core";
import { simpleAgent, sequentialThinkingAgent } from "./agents";
import { multiAgentNetwork } from "./network";

export const mastra = new Mastra({
  agents: {
    simpleAgent,
    sequentialThinkingAgent,
  },
  networks: {
    multiAgentNetwork,
  },
});

mastra/agents直下の index.js

次は AIエージェントを実装した、mastra/agents直下の index.js です。この中に、Sequential Thinking MCP Server を使うための設定を書く形にしています。
※ 以前、VS Code(GitHub Copilot agent mode)と組み合わせて試したことがある MCPサーバーだったりします
 

agents/index.js
import { Agent } from "@mastra/core/agent";
import { MCPClient } from "@mastra/mcp";
import { openai } from "@ai-sdk/openai";

const mcp = new MCPClient({
  servers: {
    sequentialThinking: {
      command: "npx",
      args: ["-y", "@modelcontextprotocol/server-sequential-thinking"],
    },
  },
});
const toolsets = await mcp.getToolsets();

export const simpleAgent = new Agent({
  name: "simpleAgent",
  instructions: "ユーザーの質問にシンプルな返答をしてください。",
  model: openai("gpt-4o"),
});

export const sequentialThinkingAgent = new Agent({
  name: "sequentialThinkingAgent",
  instructions: `
  熟考が必要な質問に回答してください。
  その際はsequentialThinkingツールを使ってください。`,
  model: openai("gpt-4o"),
  tools: await mcp.getTools(),
  defaultGenerateOptions: { maxSteps: 10 },
});

上記の最後に書いている「defaultGenerateOptions: { maxSteps: 10 }」というオプションについて少しだけ補足します。

今回実装したものを軽く試した際、この Sequential Thinking MCP Server を使った処理の最終出力が得られなかったことがありました。ログを見ると、裏で 5段階の出力が行われていて、そこで処理が止まっていた感じでした。

その辺りの挙動に関わりそうな内容を調べてみたところ、AIエージェントの Agent.generate() に maxSteps というオプションがあり、そのデフォルト値が「5」となっているようでした。これが上記の挙動の原因のようです。

image.png

今回、Agent.generate() は使わないので、その maxSteps を AIエージェントのコンストラクタに設定しています。ドキュメントを見ると、以下のオプションに書けば良さそうだったので、デフォルト値の倍の値(10)を指定して試してみています。

image.png

mastra/network直下の index.js

mastra/network直下の index.js の実装は以下のとおりです。2つのエージェントへの振り分けの説明を instructions に書いています。

network/index.js
import { AgentNetwork } from "@mastra/core/network";
import { openai } from "@ai-sdk/openai";
import { simpleAgent, sequentialThinkingAgent } from "../agents";

export const multiAgentNetwork = new AgentNetwork({
  name: "Multi Agent Network",
  model: openai("gpt-4o"),
  agents: [simpleAgent, sequentialThinkingAgent],
  instructions: `
  熟考が必要な質問はsequentialThinkingAgentに転送してください。
  それ以外の一般的な質問はsimpleAgentに転送してください。`,
});

処理を実行する

この後、サーバーを起動して、実装した内容を動かして試してみます。

サーバーの起動

以下のコマンドを my-mastra-app フォルダで実行して、サーバーを起動します。

npm run dev

ブラウザからアクセスして試す

起動したサーバーに、ブラウザでアクセスします。

http://localhost:4111/ にアクセスすると、 http://localhost:4111/agents を開いた状態になり、以下のページが表示されます。

image.png

このページの右側に、先ほど実装した 2つのエージェントが表示されています。

ここから 2つのエージェントのそれぞれをクリックして、個々のエージェントとのやりとりをすることもできますが、今回は AgentNetwork によるやりとりを試します。

AgentNetwork のページにアクセスする

http://localhost:4111/networks にアクセスします。そうすると以下の内容が表示されるので、右側にある「Multi Agent Network」をクリックします。

image.png

「Multi Agent Network」のページでシンプルな内容を送る

http://localhost:4111/networks/Multi_Agent_Network/chat というページが開きチャット画面が出てくるので、試しにチャットで「あなたは誰?」という内容を送ってみました。そうすると「simpleAgent」による回答が返ってきました。

image.png

熟考して回答してもらう(1つ目)

次に『「AIについての 1段落での説明」を、熟考して答えて。』という内容を送ってみます。そうすると、「sequentialThinkingAgent」からの回答が返ってきました。

image.png

またログ出力で、以下の Sequential Thinking MCP Server を使った処理が行われていることが確認できました(1段階だけですが...)。

image.png

熟考して回答してもらう(2つ目)

次に『「AIについての 10歳に分かるシンプルな説明」を、熟考して答えて。』という内容も試してみました。得られた回答は以下のとおりです。

image.png

ログ出力を確認したところ、以下の Sequential Thinking MCP Server を使った 4段階の処理が行われていることが確認できました。

image.png

とりあえず、どれも意図した挙動になっていそうです。

おわりに

今回、Mastra の AgentNetwork を使って「複数エージェントと MCPサーバーの組み合わせ」を試しました。自分がチャットで送った内容によって、エージェントが使い分けられ、なおかつ MCPサーバーのツールを使えるようにしたエージェントは、そのツールを使った回答をしたことも確認できました。

別途、Mastra の AgentNetwork を使った複数エージェントの使い分けを、色々と試していければと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?