Hugging Face Tiny Agents: 50 行のコードで MCP 駆動エージェントを構築
Hugging Face は、Model Context Protocol (MCP) と最新の LLM が備えるネイティブなツール呼び出しサポートを組み合わせることで、機能的な AI エージェントを約 50 行のコードで実装できることを示しました。重要なポイントは、ツールの検出と実行を処理する MCP クライアントが確立すれば、エージェントは本質的に LLM 推論とツール実行を交互に行う while ループに過ぎない、ということです。
Model Context Protocol (MCP) をツール標準として
MCP は、LLM と統合できるツール群を公開するための標準 API として機能します。MCP を利用することで、開発者はツールを LLM の実装から切り離すことができ、推論クライアントがさまざまな MCP サーバーから利用可能なツールをモデルの推論プロセスにフックできるようになります。
現在、MCP サーバーはローカルプロセスとして動作しています。Hugging Face の実装は @modelcontextprotocol/sdk/client TypeScript SDK を利用してこれらのサーバーに接続し、listTools() メソッドで利用可能なツールを取得します。取得したツールは JSONSchema 形式(名前、説明、パラメータ)に変換され、ネイティブな LLM ツール呼び出しインターフェースと互換性を持たせます。
InferenceClient を使用した MCP クライアントの実装
MCP 駆動エージェントを構築するために、Hugging Face は @huggingface/inference JS ライブラリの InferenceClient を利用します。アーキテクチャは主に次の 3 つのコンポーネントで構成されます。
- Inference Client: LLM プロバイダー(例: Nebius)とモデル(例: Qwen2.5-72B-Instruct)への接続を管理します。
- MCP Client Sessions: 接続された各 MCP サーバーに対してセッションのマップを保持し、ツール実行を処理します。
- Tool Registry: すべての接続された MCP サーバーから集約された利用可能なツールの一覧です。
LLM がツール呼び出しを生成したとき、クライアントは適切な MCP セッションを特定し、client.callTool() メソッドを使って関数を実行し結果を取得します。その結果はツールメッセージとして LLM にフィードバックされます。
エージェントアーキテクチャ: 「while ループ」ロジック
エージェントは、システムプロンプト、LLM 推論クライアント、MCP クライアント、そして基本的な制御フローの組み合わせとして定義されます。Hugging Face はプロンプトにツールの説明を手動で埋め込むことを避け、推論エンジンのネイティブ tools パラメータに依存しています。
制御フローとループの終了条件
エージェントのメインループはツール呼び出しと結果を LLM に戻すことを交互に繰り返します。ループは以下の条件のいずれかで終了します。
- Explicit Task Completion: LLM が特定の
task_completeツールを呼び出す。 - User Interaction: LLM が
ask_questionツールを呼び出してユーザーに追加情報を求める。 - Turn Limit: ターン数が事前定義された
MAX_NUM_TURNSを超える。 - Response Pattern: LLM が連続でツール以外のメッセージを 2 回送信した場合にループを抜ける。
実用例とデモ
ユーザーは npx @huggingface/mcp-client で完全なデモを実行できます。デフォルト設定では 2 つのローカル MCP サーバーに接続します。
- File System Server: エージェントにローカルデスクトップ上のファイルの読み書き権限を付与します。
- Playwright MCP Server: サンドボックス化された Chromium ブラウザを提供し、ウェブナビゲーションや検索が可能です。
たとえば、エージェントはデスクトップ上のファイルに俳句を書き込む、あるいは Brave Search を使って推論プロバイダーを検索し、上位 3 件の結果を開くといった複雑なマルチステッププロンプトを処理できます。
技術仕様と拡張性
- Default Model: Qwen/Qwen2.5-72B-Instruct
- Default Provider: Nebius
- Language: TypeScript/JavaScript(LLM の応答に async generator を利用)
- Extensibility: 本システムは OpenAI 互換クライアント SDK および Cerebras、Cohere、Fireworks などのさまざまな推論プロバイダーと連携できるよう設計されています。また、llama.cpp や LM Studio を介したローカル LLM もサポートします。