Azure OpenAIのC# SDKを使ってみた

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など、色々な機能を使ってみようと思います。

参考資料

github.com

learn.microsoft.com

執筆担当者プロフィール
古川 貴浩

古川 貴浩(日本ビジネスシステムズ株式会社)

アプリケーション開発をしています。.NETやAI関連が好きです。

担当記事一覧