本快速入门介绍如何使用 OpenAI 或 Azure OpenAI 模型创建聊天 .NET 控制台聊天应用。 应用使用 Microsoft.Extensions.AI 库,因此可以使用 AI 抽象而不是特定 SDK 编写代码。 借助 AI 抽象,你可以通过最少的代码更改来更改基础 AI 模型。
先决条件
- .NET 8.0 SDK 或更高版本 - 安装 .NET 8.0 SDK。
- OpenAI 的 API 密钥,可以用于运行此示例。
先决条件
- .NET 8.0 SDK 或更高版本 - 安装 .NET 8 SDK。
- Azure 订阅 - 免费创建一个订阅。
- Azure 开发人员 CLI (可选) - 安装或更新 Azure 开发人员 CLI。
注释
你还可以使用语义内核完成本文中的任务。 语义内核是一种轻型开源 SDK,可用于生成 AI 代理并将最新的 AI 模型集成到 .NET 应用中。
创建应用
完成以下步骤,创建 .NET 控制台应用以连接到 AI 模型。
在计算机上的空目录中,使用
dotnet new
命令创建新的控制台应用:dotnet new console -o ChatAppAI
将目录更改为应用文件夹:
cd ChatAppAI
安装所需的包:
dotnet add package Azure.Identity dotnet add package Azure.AI.OpenAI dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecrets
dotnet add package OpenAI 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 服务
若要预配 Azure OpenAI 服务和模型,请完成 创建和部署 Azure OpenAI 服务资源 文章中的步骤。
在终端或命令提示符下,导航到项目目录的根目录。
运行以下命令为示例应用配置 Azure OpenAI 终结点和模型名称:
dotnet user-secrets init dotnet user-secrets set AZURE_OPENAI_ENDPOINT <your-Azure-OpenAI-endpoint> dotnet user-secrets set AZURE_OPENAI_GPT_NAME <your-Azure-OpenAI-model-name>
配置应用
从终端或命令提示符导航到 .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 模型进行身份验证。IConfigurationRoot 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()) .GetChatClient(deployment) .AsIChatClient();
注释
DefaultAzureCredential 从本地工具中搜寻身份验证凭据。 如果不使用
azd
模板来预配 Azure OpenAI 资源,则需要将Azure AI Developer
角色分配给用于登录到 Visual Studio 或 Azure CLI 的帐户。 有关详细信息,请参阅使用 .NET 向 Azure AI 服务进行身份验证。var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build(); string model = config["ModelName"]; string key = config["OpenAIKey"]; // Create the IChatClient IChatClient chatClient = new OpenAIClient(key).GetChatClient(model).AsIChatClient();
创建系统提示,为 AI 模型提供初始角色上下文和有关徒步旅行建议的说明:
// Start the conversation with context for the AI model List<ChatMessage> chatHistory = [ 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. """) ];
创建一个对话循环,该循环接受来自用户的输入提示,将提示发送到模型,并输出响应完成:
// Loop to get user input and stream AI response while (true) { // Get user prompt and add to chat history Console.WriteLine("Your prompt:"); string? userPrompt = Console.ReadLine(); chatHistory.Add(new ChatMessage(ChatRole.User, userPrompt)); // Stream the AI response and add to chat history Console.WriteLine("AI Response:"); string response = ""; await foreach (ChatResponseUpdate item in chatClient.GetStreamingResponseAsync(chatHistory)) { Console.Write(item.Text); response += item.Text; } chatHistory.Add(new ChatMessage(ChatRole.Assistant, response)); Console.WriteLine(); }
使用
dotnet run
命令运行应用:dotnet run
应用从 AI 模型输出完成响应。 发送其他后续提示,并询问其他问题以试验 AI 聊天功能。
清理资源
如果不再需要它们,请删除 Azure OpenAI 资源和 GPT-4 模型部署。
- 在 Azure 门户中,导航到 Azure OpenAI 资源。
- 选择 Azure OpenAI 资源,然后选择 删除。
后续步骤
- 快速入门 - 使用本地 AI 模型聊天
- 在 .NET 中使用 AI 生成图像