MCPスタイルのAIエージェントをゼロから作る方法

「どのツールを使うか」を自動で判断するエージェントとは

AIエージェントの話題が増える中、「エージェントが複数のツールをどう使い分けるか」という部分は、意外とブラックボックスになりがちです。今回紹介するチュートリアルは、そのルーティング(道案内)の仕組みを自分の手で作れるように解説した実装ガイドです。

ここで言う「MCP(Model Context Protocol)スタイル」とは、Anthropicが提唱したツール連携の設計思想に近い形で、エージェントがどのツールを使えるかを動的に管理する仕組みのことです。既製品のAPIを使うだけでなく、こうした基盤部分を自分でコントロールしたい人向けの内容になっています。

モジュール型ツールサーバーを自前で定義する

このチュートリアルのユニークな点は、ツールをただ「用意する」のではなく、それぞれに名前・説明・タグ・呼び出し関数という4つの要素をセットで定義することです。たとえばWeb検索ツールなら、「どんなキーワードで呼び出されるべきか」という説明文と、実際に動く関数を一緒に登録します。

こうして登録されたツールは、`tools/list`(一覧取得)と `tools/call`(実行)という2つのエンドポイントに近い形で公開されます。この設計はMCPの仕様に近いため、将来的に本物のMCP対応サーバーへ移行するときにも応用が利きます。

ハイブリッドルーターで「賢い絞り込み」を実現

このチュートリアルで最も工夫されている部分が、ルーター(ツールを選ぶ仕組み)の設計です。一般的なエージェントはすべてのツール情報をLLMに渡して選ばせますが、ツールが増えるほどコンテキスト(文脈)が膨らみ、精度が落ちたりコストがかさんだりします。

この実装では、まずキーワードベースのヒューリスティクス(経験則)で候補ツールをある程度絞り込み、そこからLLMが最終判断を下す2段階方式を採用しています。たとえば「最近のニュースを検索して」というタスクなら、まず「search」「web」などのキーワードに引っかかるツールだけを候補に挙げ、その後LLMが「Web検索ツールを使おう」と決める流れです。これにより、エージェントが参照する情報量を抑えつつ、柔軟なツール選択ができる点が優れています。

プランナーと実行フローの連携

ルーティングが終わったあとは、公開されたツールだけをエージェントが参照します。そしてプランナーと呼ばれるコンポーネントが「このタスクにはツール呼び出しが必要か、それとも直接回答できるか」を判断し、必要なら実行に移ります。

チュートリアルではデモタスクとして、Web検索・データセット読み込み・Pythonコード実行・カスタムMCPワークフローの4つをエンドツーエンドで動かしています。たとえばPython実行のパートでは、安全性のために組み込み関数の一部を制限し、出力・ローカル変数・エラーをきちんと捕捉できるよう設計されています。商用サービスで動かすような本番環境とは異なりますが、「どう安全性を担保するか」という考え方を学ぶ意味でも参考になります。

また、モデルの出力からJSONを抽出する補助関数や、構造化出力を扱うLLM呼び出し関数なども実装されており、実際のプロジェクトに流用しやすい形でコードが整理されています。

フリーランスエンジニアへの影響

このチュートリアルは、AIエージェント開発を請け負うフリーランスのエンジニアや、自社サービスにエージェント機能を組み込みたい個人開発者にとって、実用的な学習素材になります。既存のフレームワーク(LangChainやAutoGenなど)を使えばある程度は実装できますが、「中身がわからない」という状態は、クライアントへの説明や独自カスタマイズの際に壁になりがちです。

この実装を一度手元で動かしておくことで、「ルーティングをもっと細かく制御したい」「特定のツールだけを特定のユーザーに公開したい」といった要件にも、自分の言葉で対応できるようになります。作業時間の短縮というよりは、対応できる案件の幅が広がる、という種類のメリットです。

ただし、これはあくまで学習用のチュートリアルであり、本番環境での安全性や運用条件については別途検討が必要です。商用サービスに組み込む場合は、セキュリティの専門家や既存の実績あるフレームワークと組み合わせることを前提に考えるとよいでしょう。

まとめ

MCPスタイルのルーティングエージェントをゼロから構築するこのチュートリアルは、エージェント開発の「仕組みを理解したい」という方に向いています。すぐに業務自動化に使えるツールではありませんが、エンジニア系フリーランスにとってはスキルの土台を固める一歩になりそうです。興味があれば、まず手元の環境でデモ部分だけでも動かしてみることをおすすめします。

コメント

タイトルとURLをコピーしました