Microsoft.Extensions.AIを利用してAzure OpenAI を試してみる

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

昨年10月にMicrosoft.Extensions.AIが使えるようになったので、今回はAzure OpenAIをMicrosoft.Extensions.AIから利用する方法を確認してみます。

Microsoft.Extensions.AIとは?

Microsoft.Extensions.AIは、小規模および大規模言語モデル (SLM および LLM)、埋め込み、ミドルウェアなどの AI サービスと対話するための統一された抽象化レイヤーを提供するライブラリです。この抽象化レイヤーを利用することで、開発ではローカルでOllamaを使用して開発を行い、運用ではAzure OpenAIを使用するといった方法がわずかな変更を行うだけで可能になります。

使ってみる

Azure OpenAIの利用準備

Azure AI ServiceからAzure OpenAIを選択して[Azure OpenAIの作成]をクリックします。

Azure OpenAIの作成

リソースの作成に必要な情報を入力します。ネットワークとタグはデフォルトのままで作成します。

Azure OpenAIの作成

作成が完了すると以下のように作成したAzure OpenAIのリソースが表示されます。

Azure OpenAIの作成

デプロイしたリソースmescius-openai-testをクリックします。左のメニューから「キーとエンドポイント」を選択します。表示されたキーとエンドポイントをメモ帳などに控えておきます。

Azure OpenAIの作成

左のメニューから「概要」をクリックします。さらに「Go to Azure AI Foundry portal」か[Explore Azure AI Foundry portal]をクリックします。

Azure OpenAIの作成

「新しいデプロイの作成」-「基本モデルから」をクリックします。

Azure OpenAIの作成

モデルは「gpt-4-o」を選択します。デプロイ名は「mescius-gpt-4o-test」としておきます。

Azure OpenAIの作成

デプロイが完了した後に、こちらのデプロイ名をメモ帳などに控えておきます。

アプリケーションの作成

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

アプリケーションの作成

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

  • Azure.AI.OpenAI
  • Microsoft.Extensions.AI
  • Microsoft.Extensions.AI.OpenAI
  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.UserSecrets
アプリケーションの作成

シークレットマネージャーを使用してAzure OpenAIのエンドポイントとデプロイ名を格納します。ソリューションエクスプローラーでプロジェクト名を右クリックして「ユーザーシークレットの管理」を選択します。

アプリケーションの作成

secret.jsonが表示されるので以下のような構成にします。

{
  "AZURE_OPENAI_ENDPOINT": "エンドポイントのURL",
  "AZURE_OPENAI_KEY": "キー",
  "AZURE_OPENAI_GPT_NAME": "デプロイ名"
}

Program.csを以下のように更新します。Microsoft.Extensions.AIIChatClientインターフェイスを使用してAzure OpenAIのクライアントAzureOpenAIClientクラスを使用します。

using Azure;
using Azure.AI.OpenAI;
using Microsoft.Extensions.AI;
using Microsoft.Extensions.Configuration;

Console.WriteLine("Microsoft.Extensions.AIを利用してAzure OpenAI を試してみる");

var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();

IChatClient client =
    new AzureOpenAIClient(
        new Uri(config["AZURE_OPENAI_ENDPOINT"]),
        new AzureKeyCredential(config["AZURE_OPENAI_KEY"]))
    .AsChatClient(config["AZURE_OPENAI_GPT_NAME"]);

GetResponseAsyncメソッドでチャットメッセージを送信して応答を受け取ります。

Console.WriteLine(await client.GetResponseAsync("ActiveReportsについて200文字程度で簡単に教えてください。"));
アプリケーションの作成

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

await foreach (var update in client.GetStreamingResponseAsync("ActiveReportsについて簡単に教えてください。"))
{
    Console.Write(update);
}

チャットを行う場合は、ChatMessage クラスのリストを使用します。ロールやチャット履歴を使用したメッセージを渡すことが可能です。

List<ChatMessage> chatHistory = new()
    {
        new ChatMessage(ChatRole.System, """
            あなたは.NETアプリケーション開発のスペシャリストです。
        """)
    };

while (true)
{
    // ユーザーからの入力を受け取る
    Console.WriteLine("Your prompt:");
    var userPrompt = Console.ReadLine();
    chatHistory.Add(new ChatMessage(ChatRole.User, userPrompt));

    // AIの応答をストリーミングで受け取り、チャット履歴に追加
    Console.WriteLine("AI Response:");
    var response = "";
    await foreach (var item in
        client.GetStreamingResponseAsync(chatHistory))
    {
        Console.Write(item.Text);
        response += item.Text;
    }
    chatHistory.Add(new ChatMessage(ChatRole.Assistant, response));
    Console.WriteLine();
}

さいごに

今回はAzure OpenAIをMicrosoft.Extensions.AIから利用する方法を確認してみました。プレビュー版ということでまだまだ変更があるかと思いますが、引き続きウォッチして情報をお届けできればと思います。また、ローカル環境でOllamaを使う場合も今後の記事で紹介していきます。

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