使用 .NET 通过 AI 聊天应用汇总文本

开始使用 AI,创建简单的 .NET 8.0 控制台聊天应用程序以汇总文本。 应用程序在本地运行并使用 OpenAI gpt-3.5-turbo 模型。 按照以下步骤访问 OpenAI,并了解如何使用语义内核。

先决条件

  • .NET 8.0 SDK - 安装 .NET 8.0 SDK
  • OpenAI 的 API 密钥,可以用于运行此示例。
  • 在 Windows 上,必须安装 PowerShell v7+。 若要验证版本,请在终端中运行 pwsh。 它应返回当前版本。 如果返回错误,请执行以下命令 dotnet tool update --global PowerShell

开始使用 AI,创建简单的 .NET 8.0 控制台聊天应用程序以汇总文本。 应用在本地运行,并连接到部署到 Azure OpenAI 的 OpenAI gpt-35-turbo 模型。 按照以下步骤预配 Azure OpenAI 服务,并了解如何使用语义内核。

先决条件

获取示例项目

克隆 GitHub 存储库,其中包含用于所有快速入门的示例应用:

git clone https://github.com/dotnet/ai-samples.git

创建 Azure OpenAI 服务

示例 GitHub 存储库构造为 Azure Developer CLI (azd) 模板,azd 可以使用此模板为你预配 Azure OpenAI 服务和模型。

  1. 从终端或命令提示符导航到示例存储库的 src\quickstarts\azure-openai 目录。

  2. 运行 azd up 命令来预配 Azure OpenAI 资源。 创建 Azure OpenAI 服务并部署模型可能需要几分钟。

    azd up
    

    azd 还为示例应用配置所需的用户机密,例如 OpenAI 访问密钥。

    注意

    如果在 azd up 部署期间遇到错误,请访问故障排除部分。

尝试徒步旅行好处示例

  1. 在终端或命令提示符下,导航到 openai\01-HikeBenefitsSummary 目录。

  2. 运行以下命令,将 OpenAI API 密钥配置为示例应用的机密:

    dotnet user-secrets init
    dotnet user-secrets set OpenAIKey <your-openai-key>
    
  3. 使用 dotnet run 命令运行应用:

    dotnet run
    
  1. 在终端或命令提示符下,导航到 azure-openai\01-HikeBenefitsSummary 目录。

  2. 使用 dotnet run 命令运行应用:

    dotnet run
    

    提示

    如果收到错误消息,则 Azure OpenAI 资源可能尚未完成部署。 等待几分钟,然后重试。

浏览代码

应用使用 Microsoft.SemanticKernel 包向 OpenAI 服务发送和接收请求。

Program.cs 文件包含所有应用代码。 前几行代码设置配置值,并获取以前使用 dotnet user-secrets 命令设置的 OpenAI 密钥。

var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string model = "gpt-3.5-turbo";
string key = config["OpenAIKey"];

Kernel 类有助于请求和响应并注册 OpenAIChatCompletion 服务。

// Create a Kernel containing the OpenAI Chat Completion Service
Kernel kernel = Kernel.CreateBuilder()
    .AddOpenAIChatCompletion(model, key)
    .Build();

应用程序使用 Microsoft.SemanticKernel 包向 Azure OpenAI 服务发送和接收请求。

Program.cs 文件包含所有应用代码。 前几行代码加载在应用程序预配期间在 dotnet user-secrets 中设置的机密和配置值。

// Retrieve the local secrets saved during the Azure deployment
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string endpoint = config["AZURE_OPENAI_ENDPOINT"];
string deployment = config["AZURE_OPENAI_GPT_NAME"];
string key = config["AZURE_OPENAI_KEY"];

Kernel 类有助于请求和响应并注册 OpenAIChatCompletion 服务。

// Create a Kernel containing the Azure OpenAI Chat Completion Service
Kernel kernel = Kernel.CreateBuilder()
    .AddAzureOpenAIChatCompletion(deployment, endpoint, key)
    .Build();

Kernel 创建后,应用代码会读取 benefits.md 文件内容,并使用它来创建 prompt 模型。 该提示指示模型汇总文件文本内容。

// Create and print out the prompt
string prompt = $"""
    Please summarize the the following text in 20 words or less:
    {File.ReadAllText("benefits.md")}
    """;
Console.WriteLine($"user >>> {prompt}");

InvokePromptAsync 函数会将 prompt 发送到模型以生成响应。

// Submit the prompt and print out the response
string response = await kernel.InvokePromptAsync<string>(
    prompt,
    new(new OpenAIPromptExecutionSettings() 
        { 
            MaxTokens = 400 
        })
    );
Console.WriteLine($"assistant >>> {response}");

自定义文件的文本内容或汇总长度,以查看响应的差异。

清理资源

不再需要示例应用程序或资源时,请删除相应的部署和所有资源。

azd down

疑难解答

在 Windows 上,运行 azd up 后,可能会收到以下错误消息:

postprovision.ps1 未进行数字签名。 该脚本不会在系统上执行

执行脚本 postprovision.ps1 以设置应用程序中使用的 .NET 用户机密。 若要避免此错误,请运行以下 PowerShell 命令:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

然后,重新运行 azd up 命令。

另一个可能的错误:

“pwsh”没有被识别为内部或外部命令、可运行程序或批处理文件。 警告:“postprovision”挂钩失败,退出代码为“1”,路径:“.\infra\post-script\postprovision.ps1”。 :退出代码:1 执行将继续,因为 ContinueOnError 已设置为 true。

执行脚本 postprovision.ps1 以设置应用程序中使用的 .NET 用户机密。 若要避免此错误,请使用以下 PowerShell 命令手动运行脚本:

.\infra\post-script\postprovision.ps1

.NET AI 应用现已配置用户机密,可以对其进行测试。

后续步骤