AI モデルを使用して .NET 関数を呼び出す
このクイック スタートでは、ローカル関数呼び出しを有効にして AI モデルに接続する .NET コンソール AI チャット アプリを作成します。 アプリは Microsoft.Extensions.AI ライブラリを使用するため、特定の SDK ではなく AI 抽象化を使用してコードを記述できます。 AI 抽象化を使用すると、最小限のコード変更で基になる AI モデルを変更できます。
手記
Microsoft.Extensions.AI
ライブラリは現在プレビュー段階です。
前提 条件
- .NET 8.0 SDK 以降 - .NET 8.0 SDKをインストールします。
- このサンプルを実行できるように、OpenAI の API キー。
前提 条件
- .NET 8.0 SDK 以降 - .NET 8 SDKをインストールします。
- Azure サブスクリプション - 無料で作成できます。
- Azure OpenAI サービスへのアクセス。
- Azure Developer CLI (省略可能) - Azure Developer CLIをインストールまたは更新します。
手記
セマンティック カーネル 使用して、この記事のタスクを実行することもできます。 セマンティック カーネルは、AI エージェントを構築し、最新の AI モデルを .NET アプリに統合できる軽量のオープンソース SDK です。
サンプル リポジトリを複製する
前のセクションの手順を使用して独自のアプリを作成することも、すべてのクイックスタートの完成したサンプル アプリを含む GitHub リポジトリを複製することもできます。 Azure OpenAI を使用する予定の場合、サンプル リポジトリは、Azure OpenAI リソースをプロビジョニングできる Azure Developer CLI テンプレートとしても構成されます。
git clone https://github.com/dotnet/ai-samples.git
アプリを作成する
AI モデルに接続する .NET コンソール アプリを作成するには、次の手順を実行します。
コンピューター上の空のディレクトリで、
dotnet new
コマンドを使用して新しいコンソール アプリを作成します。dotnet new console -o FunctionCallingAI
ディレクトリをアプリ フォルダーに変更します。
cd FunctionCallingAI
必要なパッケージをインストールします。
dotnet add package Azure.Identity dotnet add package Azure.AI.OpenAI dotnet add package Microsoft.Extensions.AI --prerelease dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecrets
dotnet add package Microsoft.Extensions.AI --prerelease dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecrets
Visual Studio Code または任意のエディターでアプリを開く
code .
AI サービスを作成する
サンプルの GitHub リポジトリは、Azure Developer CLI (azd
) テンプレートとして構成されています。このテンプレート azd
使用して、Azure OpenAI サービスとモデルをプロビジョニングできます。
ターミナルまたはコマンド プロンプトから、サンプル リポジトリの
src\quickstarts\azure-openai
ディレクトリに移動します。azd up
コマンドを実行して、Azure OpenAI リソースをプロビジョニングします。 Azure OpenAI サービスを作成してモデルをデプロイするには、数分かかる場合があります。azd up
azd
では、Azure OpenAI エンドポイントやモデル名など、サンプル アプリに必要なユーザー シークレットも構成します。
アプリを構成する
ターミナルまたはコマンド プロンプトから .NET プロジェクトのルートに移動します。
次のコマンドを実行して、OpenAI API キーをサンプル アプリのシークレットとして構成します。
dotnet user-secrets init dotnet user-secrets set OpenAIKey <your-openai-key> dotnet user-secrets set ModelName <your-openai-model-name>
アプリ コードを追加する
アプリは、Microsoft.Extensions.AI
パッケージを使用して、AI モデルへの要求を送受信します。
Program.cs ファイルに、AI モデルに接続して認証するための次のコードを追加します。 また、
ChatClient
は関数呼び出しを使用するように構成されています。これにより、コード内の .NET 関数を AI モデルによって呼び出すことができます。using Microsoft.Extensions.Configuration; using Microsoft.Extensions.AI; using Azure.AI.OpenAI; using Azure.Identity; var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build(); string endpoint = config["AZURE_OPENAI_ENDPOINT"]; string deployment = config["AZURE_OPENAI_GPT_NAME"]; IChatClient client = new ChatClientBuilder() .UseFunctionInvocation() .Use( new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential()) .AsChatClient(deployment));
手記
DefaultAzureCredential は、ローカル ツールから認証資格情報を検索します。
azd
テンプレートを使用して Azure OpenAI リソースをプロビジョニングしていない場合は、Visual Studio または Azure CLI へのサインインに使用したアカウントにAzure AI Developer
ロールを割り当てる必要があります。 詳細については、「.NET を使用して Azure AI サービスに対する認証をする」を参照してください。using Microsoft.Extensions.AI; using Microsoft.Extensions.Configuration; using OpenAI; IConfigurationRoot config = new ConfigurationBuilder().AddUserSecrets<Program>().Build(); string? model = config["ModelName"]; string? key = config["OpenAIKey"]; IChatClient client = new ChatClientBuilder(new OpenAIClient(key).AsChatClient(model ?? "gpt-4o")) .UseFunctionInvocation() .Build(); // Add a new plugin with a local .NET function
AI モデルが現在の天気を取得するために呼び出すことができるインライン関数を含む新しい
ChatOptions
オブジェクトを作成します。 関数宣言には、AI モデルに対する関数の目的を記述するためのロジックと名前と説明のパラメーターを実行するデリゲートが含まれています。var chatOptions = new ChatOptions { Tools = [AIFunctionFactory.Create((string location, string unit) => { // Here you would call a weather API // to get the weather for the location. return "Periods of rain or drizzle, 15 C"; }, "get_current_weather", "Get the current weather in a given location")] };
モデルにコンテキストと指示を提供するシステム プロンプトを
chatHistory
に追加します。 AI モデルが登録された関数を呼び出して質問に適切に回答する必要がある質問を含むユーザー プロンプトを送信します。// System prompt to provide context. List<ChatMessage> chatHistory = [new(ChatRole.System, """ You are a hiking enthusiast who helps people discover fun hikes in their area. You are upbeat and friendly. """)]; // Weather conversation relevant to the registered function. chatHistory.Add(new ChatMessage(ChatRole.User, "I live in Montreal and I'm looking for a moderate intensity hike. What's the current weather like?")); Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last()}"); ChatResponse response = await client.GetResponseAsync(chatHistory, chatOptions); Console.WriteLine($"Assistant >>> {response.Text}");
dotnet run
コマンドを使用してアプリを実行します。dotnet run
アプリは、.NET 関数によって提供されるデータを含む AI モデルからの完了応答を出力します。 AI モデルは、登録された関数が使用可能だと認識し、それを自動的に呼び出して適切な応答を生成しました。
リソースのクリーンアップ
サンプル アプリケーションまたはリソースが不要になったら、対応するデプロイとすべてのリソースを削除します。
azd down
次の手順
- クイック スタート - .NET を使用して AI チャット アプリを構築する
- .NET と Azure OpenAI Completions を使用してテキストと会話を生成
.NET