Azure SDK for .NETを利用してAzure OpenAI Serviceを試してみる

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

Azure OpenAI Serviceが東日本リージョンでも使えるようになったので、今回はAzure OpenAI Serviceをコンソールアプリケーションから利用する方法を確認してみます。

Azure OpenAI Serviceとは

Azure OpenAI Serviceは、最近話題になっているChatGPTをはじめとするOpenAIが開発した大規模言語モデル(LLM)を、Azureで利用できるようにしたエンタープライズ向けのサービスです。

企業や官公庁などの業務システムと組み合わせて利用しようとすると、セキュリティやコンプライアンスの問題などでChatGPTのようなAIサービスの利用を制限されることも多いかと思いますが、Azure OpenAI ServiceではAzureによりセキュリティや可用性を管理することができます。

利用準備

AzureのサブスクリプションでAzure OpenAI Serviceが利用可能か確認しておきます。利用できない場合はこちらから必要事項を記入して申請しておきます。

Azureポータルで左のメニューから「すべてのサービス」を選択し、さらにカテゴリで「AI + Machine Learning」を選択します。この画面で「Azure OpenAI」が表示されるのでクリックします。

Azureポータル(Azure OpenAI)

「Azure OpenAI」に切り替わるので「Azure OpenAIの作成」をクリックします。

Azureポータル(Azure OpenAI)

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

Azureポータル(Azure OpenAI)

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

Azureポータル(Azure OpenAI)

キーとエンドポイント

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

Azureポータル(キーとエンドポイント)

モデルのデプロイ

左のメニューから「概要」を選択します。「Azure OpenAI Studioに移動する」をクリックします。

Azureポータル(モデルのデプロイ)

「新しいデプロイの作成」をクリックします。

Azure OpenAI Studio

モデルは「gpt-35-turbo-16k」を選択します。GPT-3.5 TurboモデルはChatGPTでも使われているモデルです。デプロイ名は「grapecity-model-1」としておきます。

Azure OpenAI Studio

デプロイが完了すると以下のように表示されます。こちらのデプロイ名もメモ帳などに控えておきます。

Azure OpenAI Studio

コンソールアプリケーションの作成

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

コンソールアプリケーション

NuGetパッケージマネージャーから「Azure.AI.OpenAI」をインストールします。

NuGetパッケージマネージャー

以下のようにOpenAIClientクラスのインスタンスを追加します。先ほど控えておいたエンドポイントのURLとキーを設定します。

using Azure.AI.OpenAI;
using Azure;

var client = new OpenAIClient(
    new Uri("エンドポイントのURL"),
    new AzureKeyCredential("キー")
);

次に、Azure OpenAI ServiceにデプロイしたGPT-3.5 Turboモデルに送信するメッセージなどの内容をChatCompletionsOptionsで作成します。Messagesは送信するメッセージのコレクションです。各メッセージはChatMessageで設定します。

var chatCompletionsOptions = new ChatCompletionsOptions()
{
    Messages =
    {
        new ChatMessage(ChatRole.System, @"あなたは.NETアプリケーション開発のスペシャリストです。300文字以内で回答を返します。"),
        new ChatMessage(ChatRole.User, @"Windows Formsアプリケーションにデータグリッドを実装する方法を教えてください。"),
    },
    MaxTokens = 500
};

5行目ではChatRole.Systemを設定してGPT-3.5 Turboモデルがどのように回答するのかなどの制約を記載しています。6行目ではChatRole.Userを設定してGPT-3.5 Turboモデルへ渡す質問を記載しています。

最後に、GetChatCompletionsAsyncメソッドでchatCompletionsOptionsで設定したメッセージを送信してレスポンスを受け取ります。

var response = await client.GetChatCompletionsAsync("モデルのデプロイ名", chatCompletionsOptions);
var result = response.Value.Choices[0].Message.Content;

Console.WriteLine(result);

完了するとコンソールに以下のような回答結果が出力されます。

実行結果

補足:シークレットマネージャーを使用する

本記事ではエンドポイントのURLやキー、モデルのデプロイ名を直接コードに記載していましたが、機密情報として公開したくない場合などにはシークレットマネージャーを使うとよさそうです。Visual Studioからソリューションエクスプローラーでプロジェクト名を右クリックして「ユーザーシークレットの管理」を選択します。

シークレットマネージャー

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

{
  "Azure": {
    "OpenAI": {
      "EndpointURL": "エンドポイントのURL",
      "ApiKey": "キー",
      "DeployName": "デプロイ名"
    }
  }
}

Program.csを以下のように更新します。

using Microsoft.Extensions.Configuration;

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

var client = new OpenAIClient(
    new Uri(configuration["Azure:OpenAI:EndpointURL"]),
    new AzureKeyCredential(configuration["Azure:OpenAI:ApiKey"])
    );

var response = await client.GetChatCompletionsAsync(configuration["Azure:OpenAI:DeployName"], chatCompletionsOptions);

これでsecret.jsonに設定したエンドポイントのURL、キー、デプロイ名を利用することができます。

さいごに

今回はAzure OpenAI Serviceをコンソールアプリケーションから利用する方法を確認してみました。Azure SDK for .NETを利用するとChat Completions APIを直接叩くことなくC#から利用することができるので、.NET開発者にとっては非常に使い勝手がよさそうです。

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