Azure OpenAIに接続するためのC#のクライアントライブラリがあります。
以前から存在は知っていたのですが、バージョンに-beta~
が付いていたため、正式リリースになったら使ってみようと考えていました。
先日確認したところ、2.0.0
が出ていました。
NuGet Gallery | Azure.AI.OpenAI 2.0.0
これで正式リリースのようでしたので、検証してみようと思います。
実行環境
- C# コンソールアプリ(.NET 8)
- Azure.AI.OpenAI 2.0.0
事前準備
まず、Azure OpenAIのリソースを作っておきます。 エンドポイントURLとAPIキーは後で使うのでメモしておきます。
Azure OpenAI Studioでモデルのデプロイも行います。今回はgpt-4oを使います。デプロイ名は「gpt-4-o」としました。
コードを書く
まずは、Azure OpenAIのクライアントを作成します。
string endpoint = "[Azure OpenAIのURL]"; string key = "[Azure OpenAIのAPIキー]"; AzureOpenAIClient azureClient = new( new Uri(endpoint), new ApiKeyCredential(key));
次に、チャットクライアントを作ります。デプロイしたモデルに対してのクライアントですね。
ChatClient chatClient = azureClient.GetChatClient("[デプロイ名]");
これで準備完了です。チャットを送って結果を表示します。消費トークン数も表示します。
ChatCompletion completion = chatClient.CompleteChat( [ new SystemChatMessage("あなたは関西弁が得意なアシスタントです。"), new UserChatMessage("こんにちは"), ]); Console.WriteLine($"{completion.Role}: {completion.Content[0].Text}"); Console.WriteLine($"InputToken: {completion.Usage.InputTokenCount}, OutputToken: {completion.Usage.OutputTokenCount}, TotalToken: {completion.Usage.TotalTokenCount}");
なお、リストを先に作っておいて、CompleteChatに渡すという書き方もできます。
var chatMessageList = new List<ChatMessage> { new SystemChatMessage("あなたは関西弁が得意なアシスタントです。"), new UserChatMessage("こんにちは"), }; ChatCompletion completion = chatClient.CompleteChat(chatMessageList);
ソースコード全体は以下のようになります。
using Azure.AI.OpenAI; using OpenAI.Chat; using System.ClientModel; string endpoint = "[Azure OpenAIのURL]"; string key = "[Azure OpenAIのAPIキー]"; AzureOpenAIClient azureClient = new( new Uri(endpoint), new ApiKeyCredential(key)); ChatClient chatClient = azureClient.GetChatClient("gpt-4-o"); ChatCompletion completion = chatClient.CompleteChat( [ new SystemChatMessage("あなたは関西弁が得意なアシスタントです。"), new UserChatMessage("こんにちは"), ]); //このような書き方も可能 //var chatMessageList = new List<ChatMessage> //{ // new SystemChatMessage("あなたは関西弁が得意なアシスタントです。"), // new UserChatMessage("こんにちは"), //}; //ChatCompletion completion = chatClient.CompleteChat(chatMessageList); //コンソールに出力 Console.WriteLine($"{completion.Role}: {completion.Content[0].Text}"); Console.WriteLine($"InputToken: {completion.Usage.InputTokenCount}, OutputToken: {completion.Usage.OutputTokenCount}, TotalToken: {completion.Usage.TotalTokenCount}");
結果は以下のように出力されます。
Assistant: こんにちは!今日も元気に過ごしてるか?どうしたん、なんか手伝えることある? InputToken: 28, OutputToken: 25, TotalToken: 53
パラメータを渡したいとき
リクエストを送る際のパラメータは、以下のようにして設定できるようです。
var option = new ChatCompletionOptions() { Temperature = 0.7f, }; ChatCompletion completion = chatClient.CompleteChat( [ new SystemChatMessage("あなたは関西弁が得意なアシスタントです。"), new UserChatMessage("こんにちは"), ], option);
終わりに
今回は、基本的な使い方のみを調べてみました。
今後は、streamなど、色々な機能を使ってみようと思います。