准备

已完成

你正在更新现有的 .NET 解决方案,该解决方案将 Blazor 应用程序作为唯一项目。 该项目包括使用占位符实现的数据存储和对话服务类。 在这里,我们将讨论该项目的总体目标,以及如何实施数据存储和对话功能。 此外,我们还将介绍如何设置所需的 Azure 资源。

项目概述

此项目旨在实施两个用于数据存储和完成的服务类。 对于数据存储服务类,使用 Azure Cosmos DB for NoSQL .NET SDK 在已存在的容器中创建、更新、查询和删除多个项目。 为了完成聊天,请使用 Azure OpenAI .NET SDK 发送请求并解析响应。

需要执行的关键任务包括:

  1. 将 Azure Cosmos DB for NoSQL 和 Azure OpenAI 资源部署到 Azure。
  2. 获取已部署的 Azure Cosmos DB for NoSQL 和 Azure OpenAI 资源的凭据。
  3. 在 Visual Studio Code 中打开入门解决方案。
  4. 使用 .NET SDK 将 Azure Cosmos DB for NoSQL 作为数据存储服务实施。
  5. 使用 .NET SDK 将 Azure OpenAI 作为对话接口实施。
  6. 检查应用程序的操作。

安装

若要完成此项目,需要一个 Azure Cosmos DB for NoSQL 帐户和一个 Azure OpenAI 帐户。 若要简化此过程,请使用这两个帐户将 Bicep 模板部署到 Azure。

配置开发环境

提供开发容器环境,其中包含完成此项目中每个练习所需的所有依赖项。 GitHub Codespaces 运行由 GitHub 托管的开发容器,将 Visual Studio Code 网页版作为用户界面。 如需最直接的开发环境,请使用 GitHub Codespaces,它预安装了合适的开发人员工具和依赖项,用以完成本训练模块。

重要

所有 GitHub 帐户每月可以使用 Codespaces 最多 60 小时,其中包含 2 个核心实例。 有关详细信息,请参阅 GitHub Codespaces 每月包含的存储和核心小时数

  1. 通过在本单元开头处选择“Active Codespaces”选项,开始新 GitHub Codespace 的创建流程。

  2. 在“创建 codespace”页上,查看 codespace 配置设置,然后选择“创建新 codespace

    新建 codespace 之前的确认屏幕的截图。

  3. 等待 Codespace 启动。 此启动过程会花费几分钟时间。

  4. 在 codespace 中打开新终端。

    提示

    可以使用主菜单导航到“终端”菜单选项,然后选择“新建终端”选项。

    用于打开新终端的 codespaces 菜单选项的屏幕截图。

  5. 验证环境中是否安装了 Azure CLI。

    az --version
    
  6. 验证环境中是否安装了 .NET 8。

    dotnet --list-sdks
    
  7. 更改为项目文件所在的 src 目录。

    cd src
    
  8. 生成 .NET 项目。

    dotnet build
    
  9. 关闭终端。

  10. 此项目中的剩余练习在此开发容器的上下文中进行。

    重要

    在本培训模块的剩余部分中,让 GitHub Codespace 保持运行状态。

从模板部署基础结构

此项目使用 azure-samples/cosmosdb-chatgpt GitHub 存储库来存储 Azure 资源管理器模板化部署和应用程序代码。 在此步骤中,使用 Bicep 模板创建新部署,以使用“基础架构即代码”部署资源。

提示

此“零接触”Bicep 模板还包括在 Azure 应用服务中运行的最终应用程序。 如果想要看到一个完全有效的解决方案,可以随时查看此内容。

  1. 登录 Azure CLI。

    az login --use-device-code
    
  2. 使用你创建的 Azure 资源组的名称 (mslearn-cosmos-openai) 创建一个名为 resourceGroupName 的新 shell 变量。

    resourceGroupName="mslearn-cosmos-openai"
    
  3. 使用 az group create 创建资源组。

    az group create \
      --name $resourceGroupName \
      --location "eastus"
    
  4. 使用 az deployment group create 将 azuredeploy.json 模板文件部署到资源组。

    az deployment group create \
      --resource-group $resourceGroupName \
      --name zero-touch-deployment \
      --template-uri https://raw.githubusercontent.com/Azure-Samples/cosmosdb-chatgpt/start/azuredeploy.json
    
  5. 等待部署完成,然后再继续此项目。

    注意

    平均而言,此部署可能需要 5 到 10 分钟。

获取 Azure Cosmos DB for NoSQL 和 Azure OpenAI 帐户凭据

模板部署了 Azure Cosmos DB for NoSQL 和 Azure OpenAI 帐户,然后将其凭据存储在 Azure 应用服务 Web 应用的配置中。 现在,可以选择使用 Azure 门户或 Azure CLI 检索每个服务的凭据。 使用 Azure CLI 中的 az webapp config 获取 Azure OpenAI 和 Azure Cosmos DB 凭据以在本地开发环境中使用。 在本部分中,你将筛选各种命令的输出,以返回终结点和连接字符串,以便与 Azure OpenAI 和 Azure Cosmos DB for NoSQL 的 .NET 库一起使用。

  1. 首先,使用 az webapp list 获取资源组中所有正在运行的 Web 应用程序的列表。

    az webapp list \
      --resource-group $resourceGroupName \
      --query "[?state=='Running'].name"
    
  2. 现在,再次运行相同的查询,但仅以制表符分隔值 (tsv) 格式返回数组中的第一个结果。

    webAppName=$( \
      az webapp list \
        --resource-group $resourceGroupName \
        --query "[?state=='Running'].name | [0]" \
        --output tsv \
    )
    

    提示

    如果不确定变量的值是否正确,只需在终端中运行 echo $webAppName 即可检查该值。

  3. 使用 az webapp config appsettings list 获取网络应用程序的应用程序设置列表。

    az webapp config appsettings list \
      --name $webAppName \
      --resource-group $resourceGroupName
    

    以下是输出的截断示例,假设 Azure Cosmos DB for NoSQL 帐户的名称为 nybncrsna76fo-cosmos-nosql,Azure OpenAI 帐户的名称为 nybncrsna76fo-openai。 此示例中的密钥是虚构的。

    [
      {
        "setting": "COSMOSDB__ENDPOINT",
        "value": "https://nybncrsna76fo-cosmos-nosql.documents.azure.com:443/"
      },
      {
        "setting": "COSMOSDB__KEY",
        "value": "Aj2OSQqWhXfFzkITIi4MIbocWAAoBCUWnSPzHlQbDYA3TiyZCJlk8A6R1l6WqD45BxAG5vrsyQ4SCXEkPS1pLh=="
      },
      ...
      {
        "setting": "OPENAI__ENDPOINT",
        "value": "https://nybncrsna76fo-openai.openai.azure.com/"
      },
      {
        "setting": "OPENAI__KEY",
        "value": "4bf98cb194cdf0f9001eae3259a76ed8"
      },
      ...
    ]
    
  4. 记录 Azure Cosmos DB for NoSQL 和 Azure OpenAI 帐户的终结点值和密钥。 稍后将在此项目中使用这些凭据来连接到每个帐户。