はじめに: エージェント型 AI と MATLAB
生成 AI は人間とコンピューターの関わり方を変えました。しかし、チャットの枠を超え、推論して行動し、MATLAB® コードを自律的に実行する AI システムの構築には、新たなアプローチが必要です。現状では、LLM にエンジニアリングの課題を解決させようとすると、コードを何度もコピーして、手作業でエラーを修正しながら、今度こそ AI が自分の専門分野を正しく理解してくれたはずだと期待する、といった状況になりがちです。エージェント型 AI はこれを変えます。
このガイドでは、単に解決策を提案するだけでなく、それを実行する AI システムの構築方法を紹介します。Model Context Protocol (MCP) を通じて LLM を MATLAB と連携させることで、コード記述、シミュレーション実行、結果分析をジョブが完了するまで繰り返す AI エージェントを作成することができます。
チャットからアクションへ: なぜエージェント型 AI なのか
MATLAB コードの作成に ChatGPT や Claude を使ったことがあれば、お決まりの流れはご存じでしょう。質問するとコードが返ってきて、それを MATLAB に貼り付けて実行し、エラーが出たらチャットに戻って内容を説明し、新しいコードを受け取り、また同じことを繰り返す。確かに使えますが、時間がかかり、ストレスもたまります。
エージェント型 AI は、この繰り返し作業を解消します。人間が手作業で進めるテキスト生成ツールとは異なり、AI エージェントは次のことが可能です。
- コードの記述と直接実行
- エラーの確認と自動修正
- ワークスペースやデータへのアクセス
- タスク完了までの繰り返し処理
- 検証済みの実用的な結果の提供
これに対して生成 AI は、次のような特徴があります。
- 要求に応じてコードスニペットを生成
- 手作業によるコードのコピー、ペースト、実行が必要
- エラーの解釈や追加指示は人間に依存
- ファイルやデータへのアクセスは不可能
- コードが実際に動作するか検証できない
チャットボットを頼れる相棒に変える 4 つの能力
生成 AI は、レポートを作成するコンサルタントのようなものです。エージェント型 AI は、実際に仕事をこなす相棒のような存在です。単に問題の解決方法を提案するだけでなく、実際に解決し、その結果を示したうえで、変更の要否を確認します。
| 能力 | 説明 | MATLAB 例 |
|---|---|---|
| 推論 | 複雑な問題を手順ごとに分解する | 「このコントローラーを最適化するために、まずプラントを解析して、次に PID を設計し、最後に調整します」 |
| 計画 | 目標達成に向けてアクションを順序立てる | 「ステップ 1: データ読み込み、ステップ 2: モデル学習、ステップ 3: 検証、ステップ 4: エクスポート」 |
| ツール活用 | 外部関数や API を呼び出す | trainnet、sim、または独自の MATLAB 関数を呼び出す |
| 適応 | フィードバックやエラーから学習 | 「エラーが発生しました。次元を確認して再試行します」 |
なぜ MATLAB とエージェント型 AI を組み合わせるのか
MATLAB は、工学や科学分野で活用されるエージェント型 AI に特に適しています。その理由は以下のとおりです。
- 信頼性の高い計算: LLM は数学で誤った結果を生成することがありますが、MATLAB は正確に計算します。
- 特定分野の専門知識: 信号処理、制御、ディープラーニングなどに対応した 100 以上のツールボックスが利用できます。
- シミュレーション機能: Simulink® と連携し、システムレベルのテストや検証を行います。
- 専門的なツール: コード解析、可視化、展開機能が組み込まれています。
LLM が MATLAB と連携するには、利用可能なツールを検出して、適切なパラメーターで呼び出し、結果を受け取る仕組みが必要です。Model Context Protocol (MCP) は、この仕組みを提供する共通フレームワークで、AI とツールのやり取りを可能にします。MCP は、AI にとっての USB-C ポートのようなものです。USB-C があらゆるデバイスを周辺機器につなげるように、どんな AI モデルでもさまざまなツールとつなげることができます。その中に MATLAB が含まれます。
MCP Server は、AI のリクエストを MATLAB が理解できる形に変換して計算できるようにします。AI エージェントが何を行うかを決定し、MATLAB が計算を実行します。
| 方法 | ユースケース | 必要条件 |
|---|---|---|
| ツールとしての MATLAB (MCP Core Server) | 外部の AI アプリ (Claude Desktop、GitHub Copilot、VS Code) から MATLAB コードを実行する | MATLAB + MCP Core Server + 任意の AI クライアント |
| ホストとしての MATLAB (MCP Client) | MATLAB 上で独自の AI エージェントを構築し、外部ツールや API を呼び出す | MATLAB + MCP Client アドオン + MATLAB と連携した LLM |
MATLAB MCP Core Server を使うと、MCP 対応の AI アプリケーションから MATLAB を利用できるようになります。インストール後、Claude Desktop、GitHub Copilot、Gemini CLI などの AI アシスタントが、ユーザーの管理下で MATLAB コードを作成・実行します。
MCP Core Server には、AI エージェントがバックグラウンドで MATLAB と自律的に連携できるようにする 5 つの基本機能が備わっています。これらの機能は直接呼び出す必要はなく、AI エージェントが指示された内容に応じて自動的に処理します。
| AI への指示 | サーバーの処理 |
|---|---|
| 「この信号をフィルター処理する関数を記述して」 | コード生成 — .m ファイルを作成してワークスペースに保存 |
| 「このスクリプトを実行して結果を表示して」 | コード実行 — MATLAB コードを実行し、出力、プロット、エラーを取得 |
| 「コードの問題をチェックして」 | コード解析 — MATLAB の組み込みリンターでスタイルと正確性を評価 |
| 「そのエラーを修正して再実行して」 | 反復修正 — AI がエラーを確認してコードを修正・再実行 |
| (自動) | セッション管理 — MATLAB との連携を透過的に開始・維持 |
エージェント型ワークフローの流れ
通常のやり取りは、次のようになります。たとえば「このノイズの多い信号に対してバターワース フィルターを作成して」と指示するとします。AI は MATLAB でコードを作成・実行して、エラーや想定外の結果がないか確認しながらアプローチを見直し、プロットまで含めた実際に使えるコードを生成します。ユーザー側でのコピーやペーストは一切不要です。
インストール
GitHub から MATLAB MCP Core Server を入手します。
# Clone the repository git clone https://github.com/mathworks/matlab-mcp-core-server # Follow setup instructions for your AI client # (Claude Desktop, VS Code with Copilot, Gemini CLI, etc.)
構成例 (Claude Desktop)
claude_desktop_config.json に追加します。
{
"mcpServers": {
"matlab": {
"command": "/path/to/matlab-mcp-server",
"args": []
}
}
}
可能性を理解する
エージェント型 AI ツールは、ローカル環境でユーザーのファイルにアクセスしながら、コードを作成・実行することができます。これは非常に優れた能力ですが、取り扱いに注意が必要です。特に本番環境では、重要な操作を行う前に AI が提案する内容を必ず確認してください。
MATLAB 上で動作し、外部ツールや API を呼び出せる独自の AI エージェントを構築したいとしたらどうでしょう。MATLAB MCP Client は、これを可能にし、MATLAB をエージェント型 AI 開発のプラットフォームとして活用できるようにします。
AI エージェントホストとしての MATLAB の主な機能
- ツール検出: 任意の MCP サーバーにクエリを送信し、利用可能なツールとその入力スキーマをリストに表示
- ツール呼び出し:
callToolを使って、ローカルの MATLAB 関数のように外部ツールを簡単に実行 - LLM 連携: ツールのスキーマを
openAIFunctionオブジェクトに変換し、シームレスな関数呼び出しを実現
以下に、MATLAB 内にエージェント型ワークフローを構築する例を紹介します。
% Connect to an MCP server
client = mcpClient("path/to/mcp-server");
% List available tools from the server
tools = listTools(client);
disp(tools);
% Convert tools to OpenAI function format for the LLM
functions = openAIFunction(tools);
% Create a chat with function calling enabled
chat = openAIChat("You are a helpful assistant.", ...
Tools=functions);
% Send a user query - LLM decides if a tool is needed
response = generate(chat, "What is the 10th prime number?");
% If LLM requests a tool call, execute it
if isfield(response, 'tool_calls')
toolRequest = response.tool_calls;
result = callTool(client, toolRequest);
% Feed result back to LLM for final response
finalResponse = generate(chat, result);
end
連携対象
MATLAB MCP Client は、あらゆる MCP サーバーと連携できます。データベース、Web API、ファイルシステム、他の AI サービス、さらには独自に作成したツールなどに対応しています。エコシステムも急速に拡大しています。
ツール呼び出しは、エージェント型 AI の中核となる仕組みです。LLM は関数を直接実行するのではなく、どの関数をどの引数で呼び出すかを示す構造化された要求を出力します。それに基づいて、コードが関数を実行し、結果を LLM に返します。
LLM は何を計算すべきか推論し、MATLAB はそれを正しく実行します。ユーザーがクエリを送信すると、LLM は意図を解釈し、呼び出すツールと使用するパラメーターを判断します。次に MATLAB が関数を実行して結果を返し、LLM が自然言語で応答を生成します。ユーザーがコードを記述して実行する必要は一切ありません。
MATLAB でのツールの定義
% Define a function that the LLM can call
function result = addTwoNumbers(x1, x2)
result = x1 + x2;
end
% Create tool definition for the LLM
addTool = openAIFunction("addTwoNumbers", ...
"Add two numbers together");
addTool = addParameter(addTool, "x1", "number", ...
"First number to add", Required=true);
addTool = addParameter(addTool, "x2", "number", ...
"Second number to add", Required=true);
シンプルな AI エージェントの構築
function aiAgent(userQuery)
% Initialize chat with tools
chat = ollamaChat("mistral-nemo", Tools=addTool);
% Get LLM response
response = generate(chat, userQuery);
% Check if LLM wants to call a tool
if isfield(response, 'tool_calls')
% Extract function call details
funcName = response.tool_calls.function.name;
args = response.tool_calls.function.arguments;
fprintf("AI requested: %s(%f, %f)\n", ...
funcName, args.x1, args.x2);
% Execute the function
result = addTwoNumbers(args.x1, args.x2);
fprintf("Result: %f\n", result);
else
% No tool call - show direct response
disp(response.content);
end
end
ツール呼び出しは、「MATLAB を使用した LLM」アドオンを通じて、複数のプロバイダーに対応しています。
- OpenAI: 最新の GPT モデル (API 経由)
- Azure OpenAI: エンタープライズ展開
- Ollama: Mistral、GPT-OSS、DeepSeek、Qwen などのローカルモデル
デモから本番環境への移行には、エージェントの信頼性、透明性、安全性を確保できる動作パターンが求められます。以下は、実際のエージェント型 AI システムの運用を通して実証されています。
パターン 1: ReAct (推論+行動)
最も一般的なエージェントの動作パターンは、思考と行動を交互に繰り返すものです。LLM は、次に何をすべきかを推論して、アクションを起こし、結果を観察して、再びこのプロセスを繰り返します。
% ReAct loop pattern
while ~taskComplete
% Thought:LLM reasons about next step
thought = generate(chat, [context, "What should I do next?"]);
% Action:Execute tool if needed
if needsTool(thought)
result = executeTool(thought.tool_call);
context = [context; result];
end
% Observation:Update state based on results
taskComplete = checkCompletion(context);
end
パターン 2: ツールチェーン
複雑なタスクでは、複数のツールを順番に呼び出す必要があります。あるツールの出力が次のツールの入力になります。以下はその例です。
| ステップ | アクション | 目的 |
|---|---|---|
| 1 | コード生成 | 要求に応じて MATLAB コードを生成 |
| 2 | コード解析 | エラーやスタイル、潜在的なバグを確認 |
| 3 | コード実行 | MATLAB で実行し、出力を取得 |
| 4 | 結果評価 | 出力を確認し、修正または成功判定 |
パターン 3: ヒューマンインザループ
セーフティ クリティカルな用途の場合、エージェントがアクションを実行する前に、人による確認ステップを追加します。
% Human-in-the-loop pattern
proposedAction = generate(chat, query);
% Display proposed action for approval
fprintf("Proposed: %s\n", proposedAction.description);
approval = input("Approve? (y/n): ", "s");
if strcmp(approval, "y")
result = executeAction(proposedAction);
else
disp("Action cancelled.");
end
実践ガイドライン
信頼性の高いエージェントを実現するためのポイント
- シンプルに始める: 複雑な連結を構築する前に、単一のツールを確実に動作させる
- 透明性を確保する: デバッグに備え、LLM 呼び出しとツール実行のログを取る
- エラーを適切に処理する: LLM の誤った結果に対処する指数バックオフ付きのリトライ処理を実装する
- 制限を設ける: 反復回数、トークン数、利用可能なツールを制限する
- 敵対的にテストする: ユーザーに提供する前に、意図的に破綻ケースで検証する
おすすめする次のステップ
MATLAB AI ブログ
エージェント型 AI、ディープラーニング、LLM と MATLAB の連携に関する最新情報をお届けします。
MATLAB MCP Core Server
エージェント型 AI ワークフローに MATLAB を統合
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)