ホストされているエージェントでツールボックスを使用する

ホストされるエージェントは、Foundry Agent Service でコードを実行します。 この記事では、そのコードを ツールボックス に接続して、エージェントが 1 つのモデル コンテキスト プロトコル (MCP) エンドポイントを介してツールボックス ツールを検出して呼び出します。

GitHub Copilotのようなコーディング エージェントを使用する場合、Microsoft Foundry Skill は、ホストされているエージェントをツールボックス エンドポイントに接続し、サンプルを独自のツールに適応するのに役立ちます。

前提条件

  • 少なくとも 1 つのツールと既定のバージョンを含む ツールボックス
  • デプロイされたモデルを含む Microsoft Foundry プロジェクト。
  • ホステッド エージェント プロジェクト。 エージェントとツールボックスを一緒に作成するには、 ツールボックスのクイック スタートを完了します。
  • Foundry プロジェクトにアクセスできる開発 ID。 サンプルを実行する前に、 az login または azd auth login を使用してローカルにサインインします。
  • ツールボックス内の各ツールが利用するサービスに必要なアクセス許可。 OAuth または Microsoft Entra ID パススルーを使用するツールについては、エージェントをデプロイする前にツールボックス認証を確認してください。

ツールボックス エンドポイントを選択する

ツールボックスの default_versionに従う必要があるエージェントには、ツールボックス コンシューマー エンドポイントを使用します。

https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/mcp?api-version=v1

別のツールボックス バージョンを既定に昇格すると、このエンドポイントを使用するエージェントは、エンドポイントの変更や再デプロイなしで新しいバージョンを取得します。

バージョン固有の開発者エンドポイントは、昇格の前に変更できないバージョンをテストする必要がある場合にのみ使用します。

https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/versions/<version>/mcp?api-version=v1

ツールボックスに対してエージェントを認証する

エージェントは、Microsoft Entra ID とhttps://ai.azure.com/.default スコープを使用してツールボックス エンドポイントに対して認証を行います。 各ツールボックス ツールの接続によって、ダウンストリーム サービスに到達する ID または資格情報が決まります。

ダウンストリーム API キーまたは OAuth トークンをエージェント コードに含めないでください。 ツールボックス ツールが参照するプロジェクト接続でこれらの資格情報を構成します。 サポートされている認証の種類、同意、ロールの要件の詳細については、「 ツールボックス認証」を参照してください。

ホストされるエージェントを接続する

Microsoft Agent Framework を使用する

保守Pythonサンプルでは、Agent Framework ホスティング パッケージのFoundryToolboxを使用します。 クラスは、ツールボックスを TOOLBOX_ENDPOINTから、または FOUNDRY_PROJECT_ENDPOINT および TOOLBOX_NAMEから解決します。 また、MCP 要求を認証し、ホストされるランタイムの要求ごとの呼び出し ID を転送します。

サンプルを初期化する前に、Python 3.12 以降、Azure Developer CLI (azd) 1.25 以降、および microsoft.foundry 拡張機能をインストールしてください。

  1. hosted-agent ツールボックス サンプルからプロジェクトを初期化します。

    mkdir my-toolbox-agent && cd my-toolbox-agent
    azd ai agent init -m https://github.com/microsoft-foundry/foundry-samples/blob/main/samples/python/hosted-agents/agent-framework/responses/04-foundry-toolbox/azure.yaml
    
  2. ツールボックス名を設定します。 このサンプルでは、プロジェクト エンドポイントと次の名前からコンシューマー エンドポイントを構築します。

    azd env set TOOLBOX_NAME <toolbox-name>
    
  3. エージェントをローカルで実行します。

    azd ai agent run
    
  4. 別のターミナルで、エージェントがツールボックス ツールを検出したことを確認します。

    azd ai agent invoke --local "List the tools you can use and briefly describe each one."
    

応答には、ツールボックスが MCP tools/listから返すツールが一覧表示されます。 応答にツールボックス ツールが含まれていない場合は、「接続のトラブルシューティング」を参照してください。

LangGraph を使用する

LangGraph を使用してホストエージェント コードをビルドする場合は、 AzureAIProjectToolbox を使用します。 統合により、ツールボックス ツールが LangChain ツールとして読み込み、コンシューマー エンドポイントへの認証が処理されます。

  1. LangChain Azure統合とそのホスティング依存関係をインストールします。

    pip install "langchain-azure-ai[hosting]>=1.2.8"
    
  2. hosted-agent 環境で FOUNDRY_PROJECT_ENDPOINT を設定します。 ランタイムは、デプロイ後にこの値を提供します。 ローカル開発用に自分で設定します。

  3. ツールボックス名でツールを読み込みます。

import asyncio

from langchain_azure_ai.tools import AzureAIProjectToolbox

async def load_tools():
   toolbox = AzureAIProjectToolbox(toolbox_name="<toolbox-name>")
   tools = await toolbox.get_tools()
   print("\n".join(tool.name for tool in tools))

asyncio.run(load_tools())

出力には、ツールボックスが MCP tools/listから返す名前が含まれています。

<tool-name>
<tool-name>

リファレンス:AzureAIProjectToolbox

  1. 読み込まれたツールを LangGraph エージェントに渡し、ツールボックス ツールのいずれかを必要とするプロンプトを実行します。 完全な実装については、 LangGraph ツールボックスのサンプルを参照してください。

Agent Framework Foundry ホスティング統合を使用して、名前でツールボックスを登録します。 AddFoundryToolboxes は、 FOUNDRY_PROJECT_ENDPOINTからコンシューマー エンドポイントを構築し、起動時に MCP tools/list を呼び出し、検出されたツールを各エージェント要求に追加します。

保守対象のサンプルを実行する前に、.NET 10 SDK とAzure CLIをインストールします。

  1. パブリック ホスト型ツールボックス のサンプルから開始するか、Foundry ホスティング パッケージを既存の Agent Framework ホストに追加します。

  2. ローカル開発用に次の環境変数を設定します。

    AZURE_AI_PROJECT_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>
    AZURE_AI_MODEL_DEPLOYMENT_NAME=<model-deployment-name>
    TOOLBOX_NAME=<toolbox-name>
    

    Foundry は、デプロイされたコンテナーに FOUNDRY_PROJECT_ENDPOINT を提供します。 ツールボックス名は TOOLBOX_NAMEのままにします。他の FOUNDRY_* 変数名は、ホストされているランタイムによって予約されます。

  3. Program.csで、エージェントを AddFoundryResponses に登録し、ツールボックスを AddFoundryToolboxes(credential, toolboxName) に登録します。 Web アプリケーションをビルドした後、MapFoundryResponsesする前にRunを呼び出します。 パブリック サンプルには、必要なインポート、パッケージ、エージェントの構築、および資格情報のセットアップが含まれています。

  4. ホストを起動し、ツールボックス ツールを必要とするプロンプトでホストを呼び出します。 ホストがツールボックス ツールを列挙できない場合、 /readiness エンドポイントは異常な状態を返します。

この記事のホスト型エージェント ツールボックスの統合は、Pythonと.NETで使用できます。 別のランタイムから MCP エンドポイントを呼び出すには、MCP Streamable HTTP クライアントを使用し、 https://ai.azure.com/.defaultのトークンを使用して認証し、ホステッド エージェント ランタイム コントラクトを実装します。

この記事のホスト型エージェント ツールボックスの統合は、Pythonと.NETで使用できます。 別のランタイムから MCP エンドポイントを呼び出すには、MCP Streamable HTTP クライアントを使用し、 https://ai.azure.com/.defaultのトークンを使用して認証し、ホステッド エージェント ランタイム コントラクトを実装します。

Microsoft Foundry Toolkit for Visual Studio Codeを使用して、ツールボックスに接続されているホストエージェント サンプルをスキャフォールディングします。

プロジェクトをスキャフォールディングする前に、Visual Studio Code、Microsoft Foundry Toolkit 拡張機能、およびプログラミング言語用の拡張パックをインストールします。

  1. アクティビティ バーで Foundry Toolkit を選択します。
  2. [ マイ リソース] でプロジェクトを展開し、[ ツール] を展開します。
  3. [ ツールボックス ] タブでツールボックスを見つけてから、[ コード テンプレートの生成 ] を選択します。
  4. コマンド パレットで、プロジェクト フォルダーを選択します。
  5. 生成された README.mdを開き、ローカルでの実行とデプロイの手順を完了します。
  6. ツールボックス ツールが必要なプロンプトを実行し、エージェントが期待されるツールを呼び出していることを確認します。

ツールボックス名を、 FOUNDRY_PROJECT_ENDPOINTからコンシューマー エンドポイントを構築するホステッド エージェント サンプルに渡します。

これらのコマンドを実行する前に、Azure Developer CLI (azd) バージョン 1.25 以降と microsoft.foundry 拡張機能をインストールしてください。

  1. ツールボックスとその現在の既定のバージョンを調べます。

    azd ai toolbox show <toolbox-name> --output json
    

    出力では、 endpoint プロパティが使用されます。 このコマンドによって返されるエンドポイントは、選択したバージョンを識別し、そのバージョンをテストするのに役立ちます。

  2. ツールボックス名を azd 環境に格納します。

    azd env set TOOLBOX_NAME <toolbox-name>
    
  3. ホストされるエージェントをローカルで実行するには、次のコマンドを使用します。

    azd ai agent run
    

    代わりに、ホストされているエージェントをデプロイするには、次を使用します。

    azd deploy
    

アプリケーションが完全な URL のみを受け入れる場合は、TOOLBOX_ENDPOINTツールボックス エンドポイントを選択 のバージョンなしのコンシューマー エンドポイントに設定してください。

ツールの承認を強制する

MCP tools/list によって返される各エントリには、 _meta.tool_configuration.require_approval 値を含めることができます。

価値 必要なランタイム動作
always 提案されたツール名と引数をユーザーに表示し、明示的な承認を待ち、承認後にのみツールを呼び出します。 呼び出しごとにこのプロセスを繰り返します。
never 承認プロンプトなしでツールを呼び出します。

ツールボックス MCP エンドポイントは、tools/callrequire_approvalされている場合、alwaysをブロックしません。 エージェント ランタイムは、すべての呼び出しの前に設定を適用する必要があります。 システム プロンプト命令だけでは、承認は強制されません。

ランタイムが保留中のツール呼び出しを一時停止し、ユーザーの決定を収集し、その正確な呼び出しを再開または拒否できない限り、 require_approval: never を使用します。 ツールボックス ツールで値を構成するには、「ツールの 承認を構成する」を参照してください。

接続のトラブルシューティング

症状: 原因と解決策
エージェントはツールボックス ツールを返しません。 ツールボックスに既定のバージョンがあり、ツールボックス名が一致し、エージェント ID が Foundry プロジェクトにアクセスできることを確認します。
起動または準備が失敗します。 ツールボックスは、そのすべてのツール ソースをまとめて列挙します。 失敗した接続、使用できない MCP サーバー、または無効な許可されたツール名がないか、エージェント ログを確認します。 そのソースを修正または削除し、新しいバージョンを作成して公開します。
ツールは、 401 または 403を返します。 ツールのプロジェクト接続で構成されているエージェントからツールボックスへの ID とダウンストリーム認証を確認します。 これらは個別の承認境界です。
ツールが同意を要求します。 サインインしているユーザーに同意要求を返し、同意後に通話を再開します。 ツールボックス認証のテナントとロールの要件を確認します。
バージョンの変更は表示されません。 エージェントがバージョン管理されていないコンシューマー エンドポイントを使用していること、および目的のバージョンを default_versionに昇格したことを確認します。