Microsoft Build 2026でGAした Hosted Agentsの概要とまとめながら、
Hosted Agents 基盤の上にMicrosoft Agent Frameworkベースのエージェントをデプロイし、インフラの挙動やトレーシングを確認しました。
概要 - Hosted Agentとは
Hosted Agentsは、Microsoft Foundry Agent Service において、コンテナー化された AI エージェント アプリケーションを実行するためのマネージド プラットフォームです。
- 完全な分離性:セッション単位でハイパーバイザーレベルの VM 隔離を実現。マルチテナント環境における強固なセキュリティ境界を確保します。
- スケール・ツー・ゼロ:15 分間の自動タイムアウトにより、VM は割り当て解除されます。アイドル時は課金ゼロです。
- セッション永続性:HOME ディレクトリとファイルの 30 日間保持により、セッション再開時のコンテキスト復元が可能です。エージェントのセッション状態を永続化し、再開時に復元するための独自実装が不要となります。セッション ID を指定して再度リクエストを送信すると、新しい VM が起動し、$HOME が復元されます。
- マネージド運用:インフラ側でコンテナレジストリ(ACR)管理、ネットワーキング(Vnet統合、Private Endpoint)、スケーリングを完全に吸収します。
- 複数プロトコル対応:OpenAI 互換の REST インターフェースであるResponses プロトコルと、カスタム JSON ベース非同期フレームワークである Invocations プロトコルの両対応で柔軟な統合が実現します。
- 組み込みの OpenTelemetry トレーシング:Hosted Agents では、OpenTelemetry ベースのトレース・メトリクス・ログが Application Insights へ自動的に流れる仕組みになっています。エージェント実装が OpenTelemetry の GenAI セマンティック規約に準拠して計装されていれば、Hosted Agents 基盤のみでテレメトリの管理が可能です。
認証と Entra ID
Hosted Agents では、以下の 2 つの独立した認証システムが動作します:
エージェント Entra ID と アクセス トークン
各 Hosted Agent は、デプロイ時に専有の Entra ID が自動作成されます。
セッション内のコードは DefaultAzureCredential や環境変数経由でアクセス トークンを自動取得し、リソースにアクセスできます。
トークン有効期限は 1 時間です。SDK は自動更新を行います。
プロジェクト マネージド ID
通常のAzureリソース同様、Foundry Project 単位でもマネージド IDが作成されます。同じFoundry Project内のすべてのエージェントで共有のマネージド IDで、Foundry インフラ側の操作に使用されます:
- ACR からのコンテナ イメージ プル
- Key Vault からのシークレット取得
- VNet と プライベート エンドポイントの管理
検証
参照リポジトリ:microsoft/agent-framework(Microsoft Agent Framework の公式リポジトリ)
前提
# Azure Developer CLI + AI agent 拡張
azd ext install azure.ai.agents
azd auth login
ステップ 1:hosted-agent プロジェクトを初期化する
公式サンプルのマニフェスト(agent.manifest.yaml)を指定して、azd にデプロイ可能なプロジェクト一式を作成させます。
mkdir hosted-agent && cd hosted-agent
azd ai agent init -m https://github.com/microsoft/agent-framework/blob/main/python/samples/04-hosting/foundry-hosted-agents/responses/01_basic/agent.manifest.yaml
このコマンドにより、以下のファイルが生成されることを確認しました:
| 生成されるファイル | 役割 |
|---|---|
azure.yaml |
azd プロジェクト ファイル(infra.provider: microsoft.foundry) |
main.py, requirements.txt
|
エージェントの実行可能コードと Python 依存関係 |
agent.manifest.yaml, agent.yaml
|
モデル・プロトコル・ランタイム(CPU/メモリ)の設定 |
.env.example |
エージェントが期待する環境変数の一覧 |
ステップ 2:Azure リソースをプロビジョニングする
azd provision
このコマンド 1 つで、リソース グループ、Foundry インスタンス + プロジェクト、モデル デプロイ、Application Insights、コンテナー レジストリが一括で作成されることを確認しました。
この Application Insights を活用し、後ほどトレーシングを行います。
ステップ 3:ローカルでマネージド ホストの動作を確認する
クラウドへデプロイする前に、azd ai agent run でローカルにマネージド ホスト相当の環境を起動し、動作を確認しました。
export FOUNDRY_PROJECT_ENDPOINT="$(azd env get-value FOUNDRY_PROJECT_ENDPOINT)"
export AZURE_AI_MODEL_DEPLOYMENT_NAME="$(
azd env get-value AI_PROJECT_DEPLOYMENTS |
sed 's/\\"/"/g' |
jq -r '.[0].name'
)"
azd ai agent run # http://localhost:8088 で提供
別ターミナルから疎通確認を実施:
azd ai agent invoke --local "Hello!"
# または
curl -X POST http://localhost:8088/responses \
-H "Content-Type: application/json" \
-d '{"input": "Hello!"}'
ステップ 4:インターネットへデプロイする
azd deploy
デプロイ完了後、Foundry UI 上でエージェントとチャットできる状態になり、インターネット経由で到達可能なエンドポイントが発行されることを確認しました。
ホストは実行時に FOUNDRY_PROJECT_ENDPOINT、AZURE_AI_MODEL_DEPLOYMENT_NAME、APPLICATIONINSIGHTS_CONNECTION_STRING を自動的に設定します。
実際にデプロイ後の Foundry ポータルでは、エージェントが受け取ったイベントとツール呼び出しの様子が確認できました。
右側のwindowにEventsとTools(get_weather ツール、 get_local_timeツール、suggest_activityツール)が表示されています。
ステップ 5: Application Insights 経由のテレメトリ管理
Hosted Agents は、デプロイ時に APPLICATIONINSIGHTS_CONNECTION_STRING を自動的にセッション VM へ設定します。
これにより、アプリケーション コード側でエクスポーターを個別に構成しなくても、OpenTelemetry ベースのトレース・メトリクス・ログが Application Insights へ自動的に流れる仕組みになっています。
エージェント実装が OpenTelemetry の GenAI セマンティック規約に準拠して計装されていれば、Hosted Agents 基盤がテレメトリの配送経路を丸ごと引き受けます。
OTel の 3 つのシグナル
| シグナル | エージェントでの例 | 用途 |
|---|---|---|
| Trace | 子のモデル/ツール スパンを持つ 1 回のエージェント実行 | 実行パス全体のデバッグ |
| Metric | 多数の実行にわたって集計したレイテンシやトークン | ダッシュボード、傾向分析、アラート |
| Log | トレース ID で紐づいたエラーや業務イベント | 詳細イベントの検索 |
組み込みメトリクス(GenAI セマンティック規約準拠)
OpenTelemetry の GenAI セマンティック規約(open-telemetry/semantic-conventions-genai)には、以下の標準メトリクスが定義されています。
Agent Framework で計装されたエージェントを実行すると、これらのうち該当するものが追加のコード変更なしに自動収集されます。カテゴリ別に整理すると以下のとおりです。
① クライアント メトリクス(モデル呼び出し側の視点)
| メトリクス | 型 / 単位 | 測定・アラート対象 |
|---|---|---|
gen_ai.client.operation.duration |
Histogram / 秒 | モデル呼び出し 1 回のレイテンシ。プロバイダー/モデル別に p50/p95/p99 をチャート化 |
gen_ai.client.token.usage |
Histogram / トークン数 | 入力/出力トークン。gen_ai.token.type(input/output)、モデル、操作でグループ化 |
gen_ai.client.operation.time_to_first_chunk |
Histogram / 秒 | ストリーミング応答で最初のチャンクを受信するまでの時間(ストリーミング時のみ) |
gen_ai.client.operation.time_per_output_chunk |
Histogram / 秒 | ストリーミング応答で 2 個目以降の各チャンクの間隔(ストリーミング時のみ) |
② エージェント メトリクス(エージェント実行そのものの視点)
| メトリクス | 型 / 単位 | 測定・アラート対象 |
|---|---|---|
gen_ai.invoke_agent.duration |
Histogram / 秒 | 1 回のエージェント呼び出し全体(推論 → ツール実行のループを含む)のエンドツーエンド所要時間 |
gen_ai.invoke_agent.inference_calls |
Histogram / 回数 | 1 回のエージェント呼び出しの中で発生したモデル推論呼び出しの回数 |
gen_ai.invoke_agent.tool_calls |
Histogram / 回数 | 1 回のエージェント呼び出しの中で発生したツール呼び出しの回数 |
③ ツール メトリクス(個々のツール実行の視点)
| メトリクス | 型 / 単位 | 測定・アラート対象 |
|---|---|---|
gen_ai.execute_tool.duration |
Histogram / 秒 |
gen_ai.tool.name 別のツール実行レイテンシ |
④ サーバー メトリクス(モデル サーバー側の視点。主に自前でモデルをホストする場合に該当)
| メトリクス | 型 / 単位 | 測定・アラート対象 |
|---|---|---|
gen_ai.server.request.duration |
Histogram / 秒 | モデル サーバー側で見たリクエスト所要時間(time-to-last-byte 相当) |
gen_ai.server.time_to_first_token |
Histogram / 秒 | 最初の出力トークンが生成されるまでの時間(TTFT) |
gen_ai.server.time_per_output_token |
Histogram / 秒 | 2 個目以降の出力トークン 1 個あたりの生成時間(デコード フェーズの性能) |
⑤ ワークフロー メトリクス(複数エージェントを跨ぐオーケストレーションの視点)
| メトリクス | 型 / 単位 | 測定・アラート対象 |
|---|---|---|
gen_ai.invoke_workflow.duration |
Histogram / 秒 | 複数エージェント/複数ステップからなるワークフロー全体の所要時間 |
Foundry上の確認画面で、実行トレース・モデル呼び出し・ツール呼び出し・トークン使用量が確認できます
またAzure Portal の対象 Application Insights リソース → Agents ビュー(Preview) でも、実行トレース・モデル呼び出し・ツール呼び出し・トークン使用量が確認できます
まとめ
Hosted Agents は、コンテナー化された AI エージェント アプリケーションをマネージド環境で実行するための強力なプラットフォームです。ハイパーバイザーレベルの VM 分離、スケール・ツー・ゼロの料金体系、セッション永続性、複数プロトコル対応により、本番環境での運用が大幅に簡素化されます。





