Microsoft Agent Frameworkを使用してAIエージェントを作成してみる

普段のお仕事に役立つ普遍的なプログラミングTIPSや、業界で注目度が高い最新情報をお届けする「編集部ピックアップ」。
今回はMicrosoft Agent Frameworkを使用してAIエージェントを作成する方法についてお届けします。

Microsoft Agent Frameworkとは?

Microsoft Agent Frameworkは、2025年10月1日にプレビュー公開されたAIエージェントとマルチエージェント用のワークフローを構築するためのオープンソース開発キットで、.NETおよびPythonに対応しています。

Microsoft Agent Frameworkでは、AIアプリケーションに求められる以下の2つの機能を実装できるようになっています。

  • AIエージェント
    LLMを使用してユーザーからの入力を処理し、ツールと MCP サーバーを呼び出してアクションを実行し応答を生成するエージェントを作成
  • ワークフロー
    複数のエージェントと関数を接続して複雑なマルチステップのタスクを実行するワークフローを作成

今まではSemantic Kernel(AIエージェントの開発用フレームワーク)とAutoGen(複数のAIエージェントを連携してタスクを処理するためのオーケストレーションの開発用フレームワーク)が提供されていましたが、Microsoft Agent Frameworkはこの2つを統合したフレームワークという位置付けになっています。

本記事では、Microsoft Agent Frameworkを使用して .NETアプリケーションにAIエージェントを実装する方法ついて紹介します。

AIエージェントを作成する

前提条件

  • Azure OpenAIのリソースを作成してAIモデルをデプロイしておきます(参考
  • Azure CLIを使用してAzureのサブスクリプションに認証を通しておきます(参考

アプリケーションの作成

Visual Studioでコンソールアプリケーションを作成します。

アプリケーションの作成

NuGetパッケージマネージャーから以下のパッケージをインストールします。

  • Microsoft.Agents.AI.OpenAI
  • Azure.AI.OpenAI
  • Azure.Identity
アプリケーションの作成

Program.csに以下のコードを追加します。ChatClientAgentクラスを使用して、IChatClientインターフェースに基づくエージェントを作成します。最後にGetResponseAsyncメソッドでチャットメッセージを送信して応答を受け取ります。

using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;

Console.WriteLine("Microsoft Agent Framework Quick Start");

// Azure OpenAIクライアントの作成
var client = new AzureOpenAIClient(
    new Uri("https://mescius-azure-openai-test-1.openai.azure.com/"),
    new DefaultAzureCredential());

// チャットクライアントの取得
var chatClient = client.GetChatClient("mescius-gpt-5-mini-test")
    .AsIChatClient();

// エージェントの作成
var agent = new ChatClientAgent(
    chatClient,
    instructions: "あなたはダジャレを話すのが得意です。");

// エージェントの実行
Console.WriteLine(await agent.RunAsync("私に面白いダジャレを3つ教えてください。"));

実行してみる

RunAsyncメソッドでエージェントを実行してチャットメッセージを送信し、応答を受け取ります。

実行してみる

応答をストリーミングで受け取る場合は、RunStreamingAsyncメソッドを使用します。

// ストリーミングでエージェントの実行
await foreach (var update in agent.RunStreamingAsync("私に面白い駄洒落を3つ教えてください。"))
{
    Console.WriteLine(update);
}

チャット履歴を使ってみる

エージェントと複数回やり取りを実行する場合にチャット履歴を保持しておきたい場合があります。このような時にはGetNewThreadメソッドを使用してAgentThreadオブジェクトを作成します。RunAsyncおよびRunStreamingAsyncメソッドにこのオブジェクトを渡して使用します。

// エージェントの作成
var agent = new ChatClientAgent(
    chatClient,
    instructions: "あなたは英語が得意です。");

AgentThread thread = agent.GetNewThread();

Console.WriteLine(await agent.RunAsync(
    "私にAで始まる単語を3つ教えてください。",
    thread));
Console.WriteLine(await agent.RunAsync(
    "先ほど教えていただいた単語の他に、Aで始まる単語をさらに3つ教えてください。",
    thread));
Console.WriteLine(await agent.RunAsync(
    "先ほど教えていただいた単語の他に、Aで始まる単語をさらに3つ教えてください。",
    thread));

エージェントは新しい入力に応答するときに、AgentThreadオブジェクトで保持されたチャット履歴の以前の入力と応答メッセージを参照できるようになります。

チャット履歴を使ってみる

関数ツールを使ってみる

エージェントから呼び出せる関数ツールを実装してみます。指定した都市の現在時刻を取得するGetCurrentTimeメソッドを準備します。このメソッドを関数ツールに変換するには、AIFunctionFactory.Createメソッドを使用してAIFunctionインスタンスを作成します。エージェントを作成する際にこの関数ツールを渡して利用します。

[Description("指定した都市の現在時刻を取得")]
static string GetCurrentTime([Description("現在時刻を取得する都市名")] string city)
{
    //return $"{city}の時刻は{DateTime.Now.Hour}:{DateTime.Now.Minute}です。";

    // 都市名とタイムゾーンIDの対応表
    var cityTimeZones = new Dictionary<string, string>
        {
            { "東京", "Tokyo Standard Time" },
            { "ロサンゼルス", "Pacific Standard Time" },
            { "ロンドン", "GMT Standard Time" },
            { "ニューヨーク", "Eastern Standard Time" },
            { "シドニー", "AUS Eastern Standard Time" }
        };

    if (cityTimeZones.TryGetValue(city, out string? timeZoneId))
    {
        // タイムゾーンIDからタイムゾーン情報を取得
        var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
        var currentTime = TimeZoneInfo.ConvertTime(DateTime.UtcNow, timeZoneInfo);
        return $"{city}の時刻は{currentTime:HH:mm}です。";
    }
    else
    {
        return $"{city}のタイムゾーンが見つかりません。";
    }

}

// エージェントの作成
var agent = new ChatClientAgent(
    chatClient,
    instructions: "あなたは優秀なアシスタントです", 
    tools: [AIFunctionFactory.Create(GetCurrentTime)]);

// エージェントの実行
Console.WriteLine(await agent.RunAsync("ニューヨークは何時ですか?"));

実行すると、エージェントは関数ツールを使用して指定した都市の現在時刻を取得して応答を返します。

チャット履歴を使ってみる

さいごに

今回はMicrosoft Agent Frameworkを使用してAIエージェントを作成する方法を確認してみました。今回試してみたチャット履歴や関数ツールなどの機能が非常に分かりやすいコードで実装することが可能になっている印象を受けました。まだ紹介していないワークフロー機能などその他の機能についても、今後のブログ記事で紹介していきたいと思います。

\  この記事をシェアする  /