GA 版 Microsoft Agent Framework を使って Microsoft Foundry 上の既存エージェントを利用する

Microsoft Agent Framework が先日GAされ、安定版がリリースされました。

Agent Framework と Microsoft Foundry を組み合わせると、Foundry 上に存在するエージェントを既存資産として呼び出す構成も取りやすくなります。

本記事では、"Microsoft Foundry にすでに存在するエージェントを、Microsoft Agent Framework の API から呼び出す" 方法に関して記載します。

実行環境

  • Python 3.12
  • agent-framework==1.0.1
  • azure-ai-projects==2.0.1(Agent 一覧確認コードで利用)

環境変数は次を設定します。

  • FOUNDRY_PROJECT_ENDPOINT:Microsoft Foundry プロジェクトのエンドポイント
  • FOUNDRY_AGENT_NAME:呼び出したい Hosted Agent 名

この記事でやること

Microsoft Foundry 上にすでに存在するエージェントに対して、Microsoft Agent Framework の FoundryAgent を使ってメッセージを送り、応答を受け取ります。

役割分担は次のようになっています。

要素 役割
Microsoft Foundry Hosted Agent すでに Foundry 上でホストされている agent
FoundryAgent そのエージェントを Python から呼び出すためのクライアント
AzureCliCredential ローカル開発端末から Foundry へ接続する認証

すでに存在しているエージェントを、Agent Framework から利用するための最小実装になっています。

実装

コードは、主に次の公式リファレンスを参照しています。

Microsoft Foundry へのエージェント追加方法

Microsoft Foundry へエージェントを追加する方法はいくつかありますが、最も簡単なのは Foundry ポータルから追加する方法です。コードを書かずに追加できるため、最初の検証や動作確認にはこの方法が向いています。

他の選択肢は、Microsoft Agent Framework で実装したエージェントを Hosted Agent として追加する方法です。この方法では、Python でエージェントの振る舞いや tool 呼び出しを実装し、それを Microsoft Foundry に配置して利用します。コードベースで制御したい場合はこちらが向いています。

ただし2026年4月20日時点では、Agent Framework の Hosted Agent は Python パッケージの組み合わせに少し注意が必要です。この環境は agent-framework==1.0.1 を前提にしていますが、Hosted Agent 化で使う azure-ai-agentserver-agentframework 系は preview 版との組み合わせが必要になることがあります。

参考:agent-framework/python/samples/05-end-to-end/hosted_agents at main · microsoft/agent-framework · GitHub

サンプルコード

このコードは、環境変数から Foundry project endpoint とエージェント名を読み取り、既存のエージェントにメッセージを送って応答を表示します。

from __future__ import annotations

import argparse
import asyncio
import os

from agent_framework.foundry import FoundryAgent
from azure.identity import AzureCliCredential
from dotenv import load_dotenv

load_dotenv(override=True)


def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(description="Call an existing agent from Foundry.")
    parser.add_argument("--project-endpoint", default=os.getenv("FOUNDRY_PROJECT_ENDPOINT"))
    parser.add_argument("--agent", default=os.getenv("FOUNDRY_AGENT_NAME"))
    parser.add_argument("--message", default="東京の天気を教えて")
    return parser.parse_args()


async def main() -> None:
    args = parse_args()

    if not args.project_endpoint:
        raise ValueError("FOUNDRY_PROJECT_ENDPOINT が未設定です。")
    if not args.agent:
        raise ValueError("FOUNDRY_AGENT_NAME が未設定です。")

    agent = FoundryAgent(
        project_endpoint=args.project_endpoint,
        agent_name=args.agent,
        credential=AzureCliCredential(),
    )

    result = await agent.run(args.message)
    print(result)


if __name__ == "__main__":
    asyncio.run(main())

Microsoft Foundry 上の既存エージェント一覧を取得するコード

呼び出し前に対象のエージェント名を確認したい場合は、Microsoft Foundry の公式 Python SDK である azure-ai-projects の AIProjectClient からエージェント一覧を取得できます。

特に、FoundryAgent で呼び出そうとしてエージェントが見つからない場合や、FOUNDRY_AGENT_NAME に設定すべき名前を確認したい場合の切り分け用コードとして使う想定です。

このコードは、FOUNDRY_PROJECT_ENDPOINT を使ってプロジェクトに接続し、エージェント一覧を取得したうえで Hosted Agent とそれ以外を分けて表示します。

import os

from dotenv import load_dotenv
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential

load_dotenv()


def print_agents(title: str, agents: list[object]) -> None:
    print(title)
    if not agents:
        print("- none")
        return

    for agent in agents:
        kind = getattr(agent, "kind", "unknown")
        name = getattr(agent, "name", "unknown")
        version = getattr(agent, "version", "latest")
        print(f"- kind={kind}, name={name}, version={version}")

with (
    DefaultAzureCredential() as credential,
    AIProjectClient(endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"], credential=credential) as project_client,
):
    all_agents = list(project_client.agents.list(limit=100, order="desc"))
    hosted_agents = [agent for agent in all_agents if getattr(agent, "kind", "") == "hosted"]
    other_agents = [agent for agent in all_agents if getattr(agent, "kind", "") != "hosted"]

    print(f"Total Agents: {len(all_agents)}")
    print_agents("Hosted Agents:", hosted_agents)
    print()
    print_agents("Other Agents:", other_agents)

この一覧取得コードは Agent Framework の FoundryAgent そのものではなく、Microsoft Foundry プロジェクト内のエージェントメタデータを確認するための補助コードです。事前に FOUNDRY_AGENT_NAME を確定したいときに使いやすく、Hosted Agent だけでなく prompt agent など他のエージェントが存在するかもあわせて確認できます。

参照元:

最後に

今回は、GA された Microsoft Agent Framework で Microsoft Foundry 上の既存エージェントを呼び出す方法を紹介しました。

FoundryAgent で既存エージェントを安全に呼べる状態を作り、そのあと必要に応じて orchestration や tool 呼び出しへ広げるのが進めやすいと考えています。

Agent Framework で実装したエージェントを Hosted Agent として作成、公開する流れについては、preview 版パッケージとの依存関係が GA 版でより素直に扱えるようになったタイミングで、改めて再検証したいと考えています。

執筆担当者プロフィール
寺澤 駿

寺澤 駿(日本ビジネスシステムズ株式会社)

IoTやAzure Cognitive ServicesのAIを活用したデモ環境・ソリューション作成を担当。

担当記事一覧