dotnet user-secrets init
dotnet user-secrets set AZURE_OPENAI_ENDPOINT <your-openai-key>
dotnet user-secrets set AZURE_OPENAI_GPT_NAME <your-azure-openai-model-name>
Configure the app
ターミナルまたはコマンド プロンプトから .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 モデルに接続して認証します。
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 chatClient =
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.Configuration;
using Microsoft.Extensions.AI;
using OpenAI;
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string model = config["ModelName"];
string key = config["OpenAIKey"];
// Create the IChatClient
IChatClient chatClient =
new OpenAIClient(key).AsChatClient(model);
最初のロール コンテキストとハイキングの推奨事項に関する手順を AI モデルに提供するシステム プロンプトを作成します。
// Start the conversation with context for the AI model
List<ChatMessage> chatHistory = new()
{
new ChatMessage(ChatRole.System, """
You are a friendly hiking enthusiast who helps people discover fun hikes in their area.
You introduce yourself when first saying hello.
When helping people out, you always ask them for this information
to inform the hiking recommendation you provide:
1. The location where they would like to hike
2. What hiking intensity they are looking for
You will then provide three suggestions for nearby hikes that vary in length
after you get that information. You will also share an interesting fact about
the local nature on the hikes when making a recommendation. At the end of your
response, ask if there is anything else you can help with.
""")
};
while (true)
{
// Get user prompt and add to chat history
Console.WriteLine("Your prompt:");
var userPrompt = Console.ReadLine();
chatHistory.Add(new ChatMessage(ChatRole.User, userPrompt));
// Stream the AI response and add to chat history
Console.WriteLine("AI Response:");
var response = "";
await foreach (var item in
chatClient.CompleteStreamingAsync(chatHistory))
{
Console.Write(item.Text);
response += item.Text;
}
chatHistory.Add(new ChatMessage(ChatRole.Assistant, response));
Console.WriteLine();
}