ebook

はじめに: エージェント型 AI と MATLAB

生成 AI は人間とコンピューターの関わり方を変えました。しかし、チャットの枠を超え、推論して行動し、MATLAB® コードを自律的に実行する AI システムの構築には、新たなアプローチが必要です。現状では、LLM にエンジニアリングの課題を解決させようとすると、コードを何度もコピーして、手作業でエラーを修正しながら、今度こそ AI が自分の専門分野を正しく理解してくれたはずだと期待する、といった状況になりがちです。エージェント型 AI はこれを変えます。

このガイドでは、単に解決策を提案するだけでなく、それを実行する AI システムの構築方法を紹介します。Model Context Protocol (MCP) を通じて LLM を MATLAB と連携させることで、コード記述、シミュレーション実行、結果分析をジョブが完了するまで繰り返す AI エージェントを作成することができます。

生成 AI (手作業によるコピペ) から生成 AI + ツール (AI によるコード記述と人間によるデバッグ) を経て、エージェント型 AI (AI によるコード記述、実行、修正) への進展を示す 3 つのボックス図。

従来のチャットベースの AI から完全に自律的に行動するエージェント型 AI への進化。


チャットからアクションへ: なぜエージェント型 AI なのか

MATLAB コードの作成に ChatGPT や Claude を使ったことがあれば、お決まりの流れはご存じでしょう。質問するとコードが返ってきて、それを MATLAB に貼り付けて実行し、エラーが出たらチャットに戻って内容を説明し、新しいコードを受け取り、また同じことを繰り返す。確かに使えますが、時間がかかり、ストレスもたまります。

エージェント型 AI は、この繰り返し作業を解消します。人間が手作業で進めるテキスト生成ツールとは異なり、AI エージェントは次のことが可能です。

  • コードの記述と直接実行
  • エラーの確認と自動修正
  • ワークスペースやデータへのアクセス
  • タスク完了までの繰り返し処理
  • 検証済みの実用的な結果の提供

これに対して生成 AI は、次のような特徴があります。

  • 要求に応じてコードスニペットを生成
  • 手作業によるコードのコピー、ペースト、実行が必要
  • エラーの解釈や追加指示は人間に依存
  • ファイルやデータへのアクセスは不可能
  • コードが実際に動作するか検証できない

チャットボットを頼れる相棒に変える 4 つの能力

生成 AI は、レポートを作成するコンサルタントのようなものです。エージェント型 AI は、実際に仕事をこなす相棒のような存在です。単に問題の解決方法を提案するだけでなく、実際に解決し、その結果を示したうえで、変更の要否を確認します。

エージェント型システムの能力

エージェント型システムには、チャットボットを自律的な問題ソルバーへと変える主な 4 つの能力があります。

能力 説明 MATLAB 例
推論 複雑な問題を手順ごとに分解する 「このコントローラーを最適化するために、まずプラントを解析して、次に PID を設計し、最後に調整します」
計画 目標達成に向けてアクションを順序立てる 「ステップ 1: データ読み込み、ステップ 2: モデル学習、ステップ 3: 検証、ステップ 4: エクスポート」
ツール活用 外部関数や API を呼び出す trainnetsim、または独自の MATLAB 関数を呼び出す
適応 フィードバックやエラーから学習 「エラーが発生しました。次元を確認して再試行します」

なぜ MATLAB とエージェント型 AI を組み合わせるのか

MATLAB は、工学や科学分野で活用されるエージェント型 AI に特に適しています。その理由は以下のとおりです。

  • 信頼性の高い計算: LLM は数学で誤った結果を生成することがありますが、MATLAB は正確に計算します。
  • 特定分野の専門知識: 信号処理、制御、ディープラーニングなどに対応した 100 以上のツールボックスが利用できます。
  • シミュレーション機能: Simulink® と連携し、システムレベルのテストや検証を行います。
  • 専門的なツール: コード解析、可視化、展開機能が組み込まれています。

LLM が MATLAB と連携するには、利用可能なツールを検出して、適切なパラメーターで呼び出し、結果を受け取る仕組みが必要です。Model Context Protocol (MCP) は、この仕組みを提供する共通フレームワークで、AI とツールのやり取りを可能にします。MCP は、AI にとっての USB-C ポートのようなものです。USB-C があらゆるデバイスを周辺機器につなげるように、どんな AI モデルでもさまざまなツールとつなげることができます。その中に MATLAB が含まれます。

3 ステップのフロー図。AI エージェント (Claude、Copilot など) が MCP Server (プロトコルブリッジ) に接続し、そこから MATLAB に接続 (コード実行) します。

MCP アーキテクチャ: AI エージェントが MATLAB に接続する仕組みを示しています。

MCP Server は、AI のリクエストを MATLAB が理解できる形に変換して計算できるようにします。AI エージェントが何を行うかを決定し、MATLAB が計算を実行します。

MATLAB で MCP を扱う 2 つの方法

方法 ユースケース 必要条件
ツールとしての 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

AI エージェントから MATLAB を利用する (MCP Core Server)

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 で AI エージェントを構築する (MCP Client)

MATLAB 上で動作し、外部ツールや API を呼び出せる独自の AI エージェントを構築したいとしたらどうでしょう。MATLAB MCP Client は、これを可能にし、MATLAB をエージェント型 AI 開発のプラットフォームとして活用できるようにします。

4 つの構成要素: MATLAB コード (エージェント ロジック)、LLM API (OpenAI、Ollamaなど)、MCP Client (ツール検出)、外部 MCP サーバー (各種ツールや API)

MATLAB ベースのエージェント型 AI システムの 4 つの構成ブロック。

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 サービス、さらには独自に作成したツールなどに対応しています。エコシステムも急速に拡大しています。


MATLAB でのツール呼び出しの実行

ツール呼び出しは、エージェント型 AI の中核となる仕組みです。LLM は関数を直接実行するのではなく、どの関数をどの引数で呼び出すかを示す構造化された要求を出力します。それに基づいて、コードが関数を実行し、結果を LLM に返します。

4 ステップのフロー: ユーザーのクエリ、LLM の判断 (addNumbers(212,88)を要求)、MATLABの実行 (結果 = 300)、LLM の応答「合計は 300 です」

ユーザー入力から最終応答に至るまでのエージェント型 AI システムの処理フロー

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 エージェントの構築

デモから本番環境への移行には、エージェントの信頼性、透明性、安全性を確保できる動作パターンが求められます。以下は、実際のエージェント型 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 の誤った結果に対処する指数バックオフ付きのリトライ処理を実装する
  • 制限を設ける: 反復回数、トークン数、利用可能なツールを制限する
  • 敵対的にテストする: ユーザーに提供する前に、意図的に破綻ケースで検証する