MATLABで作って理解する AIエージェント: 最小構成から始める
※この投稿は 2026 年 9 月 22 日に The MATLAB Blog へ 投稿されたものの抄訳です。
—
略歴: これはオンラインコミュニティで活動する Toshi Takeuchi によるゲスト投稿です。Toshi はこの 20 年間、MathWorks で数多くのマーケティング職を務めてきました。
最近はどこでも AI エージェントの話を耳にしますが、それが何なのか、どれほど実在感のあるものなのか、よく分からないという人も多いはずです。ただの流行語なのでしょうか。実現できることには驚かされましたが、ある場所で次の一文を読むまでは、どうしてそれが可能なのか理解できませんでした。
エージェントとは、単に LLM + ループ + ツールにすぎない。
そこで実際にどう動くのかを学ぶために、MATLAB でごく小さなものを作ってみることにしました。
その結果、エージェントはもはや謎めいたものではなくなりました。MATLAB ユーザーがすでによく知っているもの、つまりプログラム、ループ、そしていくつかの関数の組み合わせとして見えてきます。
下の動画では Ollama が提供するローカルモデルを使って、小さな MATLAB エージェントを動かしています。このプロジェクトでは MATLAB AI Agent SDK を使っているので、エージェントの仕組みの大部分は SDK が肩代わりしてくれます。
このプロジェクトは File Exchange でも公開しています。
エージェントのループ
多くの人は、質問をすると答えが返ってくるチャット型 AI にはなじみがあるでしょう。エージェントはそこから一歩進んで、あなたの代わりに行動します。これは大きな飛躍に聞こえますが、基本的な構成要素は驚くほど普通です。
- LLM – 次に何をするかを決めるモデルで、推論能力とツール呼び出し能力を持ちます。
- Loop – モデルに次の一手を問い続けるプログラムです。
- Tools – モデルが呼び出すことができる通常の関数です。
MATLAB で言えば、次のような形になります。
conversation = {}; % conversation history
while true % start agentic loop
response = LLMclient(conversation); % call the LLM
conversation{end+1} = response; % append response
if has_tool_calls(response) % if it contains a tool call
results = run_tools(response); % execute requested tools
conversation{end+1} = results; % append tool results
else
disp(response.text); % no more tool calls
break % done
end
end
実際のエージェントには、どのツールを呼べるか、何ラウンドまで許すか、どの操作に承認が必要かといった境界条件も必要です。それでも中核にあるのはループです。
ツール
私がいちばん気に入っているのはこの部分です。私の最小構成の MATLAB エージェントでは、ツールは単なる MATLAB 関数にすぎません。これはテキストファイルの内容を読み取るツール、tool_read_file です。
function result = tool_read_file(path)
%TOOL_READ_FILE Read text from a file.
path = resolve_path(path);
if ~isfile(path)
result = “Error: file not found: ” + path;
return
end
result = join(readlines(path), newline);
if strlength(result) == 0
result = “(empty file)”;
end
end
MATLAB AI Agent SDK
このプロジェクトは、簡単に通して読めるくらい小さくしておきたかったので、自分でエージェントループを書く代わりに、MATLAB AI Agent SDK を使いました。さらに API キー設定を避けるために Ollama を使ってローカルモデルを動かしました。この SDK は OpenAI 互換 API を通じて最先端モデルも利用できます。
重要なのは、LLM クライアント、メッセージ履歴、そしてユーザー承認を含むエージェント型ツール呼び出しループを SDK が担ってくれることです。
SDK を使えば、ループは 1 行のコードになります。
response = run(bot, prompt);
これは学習用プロジェクトとしては良いトレードオフです。ループは SDK に任せて、私はエージェントが実際に何をできるかに集中できます。
Minimal MATLAB Agent について
目的は、Claude Code や Codex のような AI コーディングエージェントがどう動くのかを、なじみのある MATLAB コードを使って理解することでした。自前ですべて作る代わりに、既存のツールを使えるよう MATLAB MCP Server のサポートを追加しました。MCP は model context protocol の略で、LLM が MATLAB のような外部ツールとやり取りするための標準化された方法です。
これは本番運用のためのガイダンスではありません。MATLAB では任意のコードを直接実行できるので、MCP 経由で別の MATLAB セッションを呼び出して MATLAB コードを生成する MATLAB コーディングエージェントを作ることが、実務上どれほど意味があるかは明確ではありません。それでも、構成要素がよく見えるので、個人的なプロジェクトとして公開しましたが、今後もっと良いユースケースがきっと見つかるはずです。
README に従って、必要な依存関係をすべてインストールしてください。
- MATLAB R2022b 以降
- MATLAB AI Agent SDK
- ネットワーク上の Ollama 互換リモートエンドポイント経由で利用できる Ollama へのアクセス、もしくはローカルでのアクセス
- MATLAB Agentic Toolkit 経由でインストールした MATLAB MCP Server
- お使いの MATLAB リリースでサポートされているバージョンの基本的な Python。追加の Python パッケージは不要です。
プロジェクト構成
Minimal MATLAB Agent の中身を確認してみます。
agent.m Main SDK/Ollama REPL entry point
config.json Runtime configuration
get_tools.m SDK tool registration
load_config.m Config loader
get_system_prompt.m Agent instructions
tools/ Local tools and MCP wrapper tools
mcp/ Stdio MCP client and Python subprocess shim
agent.m がメインファイルです。設定を読み込み、Ollama クライアントを作成し、MATLAB MCP Server に接続し、ツールを登録し、SDK エージェントを作成してから、シンプルなコマンドラインプロンプトを起動します。
設定
デフォルトモデルは、Ollama 経由で動く qwen3:8b です。
{
“model”: “qwen3:8b”,
“ollama_endpoint”: “http://127.0.0.1:11434”,
“max_tokens”: 8192,
“timeout”: 600,
“max_iterations”: 10,
“verbose”: false
}
これでプロジェクト全体をローカルに保てます。Ollama がモデルを提供し、MATLAB は OpenAI 互換エンドポイント経由で Ollama とやり取りします。
モデルはターミナルから取得できます。
“`bash
ollama pull qwen3:8b
ollama serve
“`
Ollama がすでにバックグラウンドサービスとして動いている場合、ollama serve はポートがすでに使われていると表示する場合がありますが、これは単にサーバーがすでに利用可能であること意味しています。
LLM クライアントの作成
agent.m では、プロジェクトは SDK の LLM クライアントを作成しています。
client = aisdk.LLMClient(“ollama”, model, …
MaxNumTokens=cfg.max_tokens, …
TimeOut=cfg.timeout, …
BaseURL=endpoint);
これが「LLM + loop + tools」における LLM の部分です。モデルは config.json で変更することも、エージェント起動時に上書きすることもできます。
agent(Model=“qwen3:8b”, Endpoint=“http://127.0.0.1:11434”)
ツールの定義
このプロジェクトでは、少数のローカルツールを定義しています。
- read_file
- write_file
- list_files
- ask_user
さらに、MATLAB MCP Server をバックエンドに持つ MATLAB ツールも定義しています。
- evaluate_matlab_code
- detect_matlab_toolboxes
- check_matlab_code
- run_matlab_file
- run_matlab_test_file
ツール定義は通常の MATLAB コードです。ここでは read_file ツールの登録を示します。
readFile = aisdk.LLMTool(@tool_read_file, …
Name=“read_file”, …
Description=“Read the contents of a text file.”, …
InputArguments=aisdk.LLMToolArgument(“path”, …
DataType=“string”, …
Description=“Absolute or relative path to the file.”));
これにより、read_file というツールが存在すること、いつ使うべきか、そして入力引数が何かをモデルに伝えられます。関数ハンドルによって MATLABでこの関数を呼び出すようにしています
ツールによっては承認が必要です。たとえばファイル書き込みは便利ですが、ワークスペースを変更します。 The project marks write_file with: このプロジェクトでは write_file に次の設定を付けています。
RequiresApproval=“always”
これはエージェント設計の重要な要素です。人間のユーザーとホストプログラムが、エージェントに何を許可するかを決めます。
エージェントの作成
クライアントとツールがそろうと、agent.m が SDK エージェントを生成します。
workspace = struct(“mcpClient”, mcpClient, “projectDir”, projectDir);
tools = get_tools();
bot = aisdk.AIAgent(client, …
SystemPrompt=get_system_prompt(), …
Tools=tools, …
Workspace=workspace, …
MaxIterations=cfg.max_iterations, …
DisplayMode=“detailed”);
get_system_prompt はモデルに動作指示を与えます。このプロジェクトでは、プロンプトがモデルに対して、自分は MATLAB 内で動くコーディングアシスタントであり、ファイル確認、ファイル書き込み、確認質問、そして MATLAB MCP Server 経由での MATLAB 実行にツールを使うべきだと伝えます。
MaxIterations はループ上限です。これにより、エージェントが延々とツールを呼び続けるのを防げます。
エージェントの実行
プロジェクトフォルダから、次のようにエージェントを起動します。
agent
あるいは 1 回だけプロンプトを実行してすぐ戻ることもできます。
agent(Prompt=“List files in the current directory.”)
このプロジェクトでは、コマンドラインインターフェースを意図的にシンプルにしています。
Minimal MATLAB Agent – Ollama (type “quit” to exit)
====================================================
You>>
これで十分エージェントらしく感じられる理由
このプロジェクトで私が驚いたのは、面白い振る舞いは複雑なフレームワークから生まれるわけではないということです。それはループとツールから生まれます。
モデルはワークスペースを調べるよう求めることができます。ツールの出力結果によって、モデルが知っていることが変更されます。するとモデルは次のツール呼び出しを要求できるようになります。何回かやり取りを重ねると、最終回答はモデルの推測だけでなく、実際に起きたことを反映できるようになります。
これが MATLAB ユーザーに意味すること
MATLAB ユーザーにとって重要なのは、ツールが単なる関数だという点です。ツールは、ファイル一覧取得、表の読み込み、スクリプト実行、コード検査、テスト実行、あるいはユーザーへの質問などができます。エージェント的な部分は、モデルがそれらのツールを一歩ずつ選んで使えるようにするループです。
つまり、使い慣れた MATLAB 環境とツールボックスを使って、自分の領域知識を持つ独自のエージェントを作れ、難しい部分は SDK が引き受けてくれるということです。
- 自分でエージェントを作るので、中で何が起きているかを把握でき、必要なだけガードレールを追加できます。
- 信頼している既存の MATLAB コード資産、たとえば関数、アルゴリズム、ツールボックス、アプリなどを再利用できます。
- ローカルモデルを使えば、データをオンプレミスに保てます。
- LLM 自体は決定論的でなくても、エージェント内の MATLAB 部分は決定論的にできます。
たとえば、MATLAB で何千件ものテスト結果に対して自動処理を走らせている一方で、多くのエッジケースを確認しなければならない状況があるとします。 SDKを使えば、LLMを分類器として組み込み、それらのエッジケースに優先順位を付けて人間が確認できるようにすることが可能です。
まとめ
エージェントを LLM + loop + tools として見られるようになると、自分でエージェントを構築するイメージも湧きやすくなるはずです。
まずは小さく始めてみてください。自分の MATLAB ワークフローから役立つタスクを 1 つ選び、1 つか 2 つの MATLAB 関数をツールとして公開し、モデルクライアント、メッセージ履歴、ツール呼び出し、承認、ループは MATLAB AI Agent SDK に任せてしまいましょう。
私のプロジェクトをカスタマイズの出発点として使うこともできます。ちょっとした遊び心で、スマートフォンから MATLAB に音声メッセージを送れるよう Telegram インターフェースも追加しました。
MATLAB AI Agent SDK を始める準備はできましたか。質問は MATLAB community で共有し、作ったエージェントは File Exchange で共有してください。


댓글
댓글을 남기려면 링크 를 클릭하여 MathWorks 계정에 로그인하거나 계정을 새로 만드십시오.