今回は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 OpenAI」に切り替わるので「Azure OpenAIの作成」をクリックします。
リソースの作成に必要な情報を入力します。ネットワークとタグはデフォルトのままで作成します。
作成が完了すると以下のように作成したAzure OpenAIのリソースが表示されます。
キーとエンドポイント
デプロイしたリソースgrapecity-openai-testをクリックします。左のメニューから「キーとエンドポイント」を選択します。表示されたキーとエンドポイントをメモ帳などに控えておきます。
モデルのデプロイ
左のメニューから「概要」を選択します。「Azure OpenAI Studioに移動する」をクリックします。
「新しいデプロイの作成」をクリックします。
モデルは「gpt-35-turbo-16k」を選択します。GPT-3.5 TurboモデルはChatGPTでも使われているモデルです。デプロイ名は「grapecity-model-1」としておきます。
デプロイが完了すると以下のように表示されます。こちらのデプロイ名もメモ帳などに控えておきます。
コンソールアプリケーションの作成
Visual Studioでコンソールアプリケーションを作成します。
NuGetパッケージマネージャーから「Azure.AI.OpenAI」をインストールします。
以下のように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開発者にとっては非常に使い勝手がよさそうです。