AI モデルを使用して .NET 関数を呼び出す
このクイック スタートでは、ローカル関数呼び出しを有効にして AI モデルに接続する .NET コンソール AI チャット アプリを作成します。 アプリは Microsoft.Extensions.AI
ライブラリを使用するため、特定の SDK ではなく AI 抽象化を使用してコードを記述できます。 AI 抽象化を使用すると、最小限のコード変更で基になる AI モデルを変更できます。
Note
Microsoft.Extensions.AI
ライブラリは現在プレビュー段階です。
前提条件
- .NET 8.0 SDK - .NET 8.0 SDK をインストールします。
- このサンプルを実行できるようにするための OpenAI の API キー。
- Windows では PowerShell
v7+
が必要です。 バージョンを検証するには、ターミナルでpwsh
を実行します。 現在のバージョンが返されるはずです。 エラーが返された場合は、コマンドdotnet tool update --global PowerShell
を実行します。
前提条件
- .NET 8 SDK - .NET 8 SDK をインストールします。
- Azure サブスクリプション。無料で作成できます。
- Azure OpenAI サービスにアクセスします。
- Azure Developer CLI (省略可能) - Azure Developer CLI のインストールまたは更新。
Note
Semantic Kernel を使用して、この記事のタスクを実行することもできます。 セマンティック カーネルは、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 dotnet add package Microsoft.Extensions.AI.OpenAI dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecrets
dotnet add package Microsoft.Extensions.AI dotnet add package Microsoft.Extensions.AI.OpenAI dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecrets
Visual Studio Code または任意のエディターでアプリを開く
code .
AI サービスを作成する
- Azure Developer CLI
- Azure CLI
- Azure Portal
サンプルの GitHub リポジトリは、Azure Developer CLI (azd
) テンプレートとして構成されています。azd
がこれを使用して、Azure OpenAI サービスとモデルをプロビジョニングできます。
ターミナルまたはコマンド プロンプトから、サンプル リポジトリの
src\quickstarts\azure-openai
ディレクトリに移動します。azd up
コマンドを実行して、Azure OpenAI リソースをプロビジョニングします。 Azure OpenAI サービスの作成とモデルのデプロイには数分かかる場合があります。azd up
azd
また、Azure OpenAI エンドポイントやモデル名など、サンプル アプリに必要なユーザー シークレットも構成します。
Configure the app
ターミナルまたはコマンド プロンプトから .NET projet のルートに移動します。
次のコマンドを実行して、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));
Note
DefaultAzureCredential は、ローカル ツールから認証資格情報を検索します。
azd
テンプレートを使用して Azure OpenAI リソースをプロビジョニングしていない場合は、Visual Studio または Azure CLI へのサインインに使用したアカウントにAzure AI Developer
ロールを割り当てる必要があります。 詳細については、「 .NET を使用した Azure AI サービスへの認証を参照してください。using Microsoft.Extensions.AI; using Microsoft.Extensions.Configuration; using OpenAI; var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build(); string model = config["ModelName"]; string key = config["OpenAIKey"]; IChatClient client = new ChatClientBuilder() .UseFunctionInvocation() .Use( new OpenAIClient(key) .AsChatClient(model));
AI モデルが現在の天気を取得するために呼び出すことができるインライン関数を含む新しい
ChatOptions
オブジェクトを作成します。 関数宣言には、AI モデルに対する関数の目的を記述するためのロジックと名前と説明のパラメーターを実行するデリゲートが含まれています。// Add a new plugin with a local .NET function that should be available to the AI model 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()}"); var response = await client.CompleteAsync(chatHistory, chatOptions); chatHistory.Add(new ChatMessage(ChatRole.Assistant, response.Message.Contents)); Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last()}");
dotnet run
コマンドを使用してアプリを実行します。dotnet run
アプリは、.NET 関数によって提供されるデータを含む AI モデルからの完了応答を出力します。 AI モデルは、登録された関数が使用可能だと認識し、それを自動的に呼び出して適切な応答を生成しました。
リソースをクリーンアップする
サンプル アプリケーションやリソースが不要になったら、対応するデプロイとすべてのリソースを削除します。
azd down
次のステップ
.NET