Preparação

Concluído

Você está atualizando uma solução .NET existente que tem um aplicativo Blazor como seu único projeto. Este projeto inclui classes de serviço para armazenamento de dados e conversação que são implementadas com espaços reservados. Aqui, discutimos os objetivos gerais do projeto e como você vai implementar o armazenamento de dados e a funcionalidade de conversação. Além disso, abordamos como configurar os recursos do Azure de que você precisa.

Visão geral do projeto

O objetivo deste projeto é implementar duas classes de serviço para armazenamento e conclusão de dados. Para a classe de serviço de armazenamento de dados, use o Azure Cosmos DB para NoSQL .NET SDK para criar, atualizar, consultar e excluir vários itens em um contêiner existente. Para a conclusão do chat, use o Azure OpenAI .NET SDK para enviar solicitações e analisar respostas.

As principais tarefas que você precisa fazer são:

  1. Implante o Azure Cosmos DB para recursos NoSQL e Azure OpenAI no Azure.
  2. Obtenha as credenciais para os recursos implantados do Azure Cosmos DB para NoSQL e Azure OpenAI.
  3. Abra a solução inicial no Visual Studio Code.
  4. Use o SDK do .NET para implementar o Azure Cosmos DB para NoSQL como um serviço de armazenamento de dados.
  5. Use o SDK do .NET para implementar o Azure OpenAI como uma interface de conversação.
  6. Verifique o funcionamento da aplicação.

Configurar

Para concluir este projeto, você precisa de uma conta do Azure Cosmos DB para NoSQL e uma conta do Azure OpenAI. Para simplificar esse processo, implante um modelo Bicep no Azure com essas duas contas.

Configurar ambiente de desenvolvimento

Um ambiente de contêiner de desenvolvimento está disponível com todas as dependências necessárias para concluir cada exercício neste projeto. O GitHub Codespaces executa um contêiner de desenvolvimento gerenciado pelo GitHub com o Visual Studio Code for the Web como interface do usuário. Para o ambiente de desenvolvimento mais simples, use o GitHub Codespaces para que você tenha as ferramentas e dependências de desenvolvedor corretas pré-instaladas para concluir este módulo de treinamento.

Importante

Todas as contas do GitHub podem usar o Codespaces por até 60 horas gratuitas por mês com 2 instâncias principais. Para obter mais informações, consulte GitHub Codespaces mensalmente incluído armazenamento e horas principais.

  1. Inicie o processo para criar um novo GitHub Codespace selecionando a opção Ative Codespaces no início desta unidade.

  2. Na página Criar espaço de código, revise as definições de configuração de espaço de código e selecione Criar novo espaço de código.

    Captura de tela da tela de confirmação antes de criar um novo espaço de código.

  3. Aguarde até que o espaço de código inicie. Este processo de arranque pode demorar alguns minutos.

  4. Abra um novo terminal no codespace.

    Gorjeta

    Você pode usar o menu principal para navegar até a opção de menu Terminal e, em seguida, selecionar a opção Novo Terminal .

    Captura de tela da opção de menu codespaces para abrir um novo terminal.

  5. Valide se a CLI do Azure está instalada em seu ambiente.

    az --version
    
  6. Valide se o .NET 8 está instalado em seu ambiente.

    dotnet --list-sdks
    
  7. Mude para o src diretório, onde o arquivo de projeto está localizado.

    cd src
    
  8. Crie o projeto .NET.

    dotnet build
    
  9. Feche o terminal.

  10. Os restantes exercícios deste projeto decorrem no contexto deste contentor de desenvolvimento.

    Importante

    Deixe o GitHub Codespace em execução para o restante deste módulo de treinamento.

Implantar infraestrutura a partir do modelo

Este projeto usa o repositório GitHub azure-samples/cosmosdb-chatgpt para a implantação modelada do Azure Resource Manager e o código do aplicativo. Nesta etapa, crie uma nova implantação usando o modelo Bicep para implantar seus recursos usando "infraestrutura como código".

Gorjeta

Este modelo Bicep "zero-touch" também inclui o aplicativo final em execução no Serviço de Aplicativo do Azure. Você sempre pode verificar isso se quiser ver uma solução totalmente funcional.

  1. Entre na CLI do Azure.

    az login --use-device-code
    
  2. Crie uma nova variável de shell chamada resourceGroupName com o nome do grupo de recursos do Azure que você cria (mslearn-cosmos-openai).

    resourceGroupName="mslearn-cosmos-openai"
    
  3. Criar um grupo de recursos com az group create.

    az group create \
      --name $resourceGroupName \
      --location "eastus"
    
  4. Implante o arquivo de modelo azuredeploy.json no grupo de recursos usando az deployment group createo .

    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. Aguarde a conclusão da implantação antes de prosseguir com este projeto.

    Nota

    Em média, essa implantação pode levar de cinco a dez minutos.

Obter credenciais de conta do Azure Cosmos DB para NoSQL e Azure OpenAI

Seu modelo implantou o Azure Cosmos DB para contas NoSQL e Azure OpenAI e, em seguida, armazenou suas credenciais na configuração do aplicativo Web do Serviço de Aplicativo do Azure. Agora, você tem a opção de usar o portal do Azure ou a CLI do Azure para recuperar as credenciais de cada serviço. Use az webapp config a partir da CLI do Azure para obter as credenciais do Azure OpenAI e do Azure Cosmos DB para usar em seu ambiente de desenvolvimento local. Nesta seção, você filtra a saída dos vários comandos para retornar seu ponto de extremidade e cadeia de conexão para usar com as bibliotecas .NET do Azure OpenAI e do Azure Cosmos DB para NoSQL.

  1. Primeiro, obtenha uma lista de todos os aplicativos Web em execução em seu grupo de recursos usando az webapp listo .

    az webapp list \
      --resource-group $resourceGroupName \
      --query "[?state=='Running'].name"
    
  2. Agora, execute a mesma consulta novamente, mas retorne apenas o primeiro resultado da matriz no formato de valortsv () separado por tabulações.

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

    Gorjeta

    Se você não tiver certeza de que sua variável tem o valor correto, basta executar echo $webAppName no terminal para verificar o valor.

  3. Use az webapp config appsettings list para obter uma lista de configurações do aplicativo Web.

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

    Aqui está um exemplo truncado da saída assumindo que o nome da conta do Azure Cosmos DB para NoSQL é nybncrsna76fo-cosmos-nosql e o nome da conta do Azure OpenAI é nybncrsna76fo-openai. As chaves neste exemplo são fictícias.

    [
      {
        "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. Registre o valor do ponto de extremidade e da chave para as contas do Azure Cosmos DB para NoSQL e do Azure OpenAI. Você usa essas credenciais posteriormente neste projeto para se conectar a cada conta.