Exercício - Conectar-se ao Azure OpenAI

Concluído

A OpenAiService classe contém uma implementação de stub de um serviço que pode enviar prompts para um assistente de IA e analisar as respostas.

Há alguns requisitos fundamentais a abordar neste exercício:

  • Importar o SDK do .NET para o Azure OpenAI
  • Adicionar o ponto de extremidade e a chave do Azure OpenAI às configurações do aplicativo
  • Modificar a classe de serviço com vários membros e uma instância de cliente

Importar o SDK do .NET

O Azure.AI.OpenAI pacote no NuGet fornece um SDK digitado para acessar várias implantações de modelo a partir do ponto de extremidade da sua conta.

  1. Abra um novo terminal.

  2. Use dotnet add package para importar o pacote do NuGet, Azure.AI.OpenAI especificando uma versão de pré-lançamento do 1.0.0-beta.14.

    dotnet add package Azure.AI.OpenAI --version 1.0.0-beta.14
    
  3. Crie o projeto .NET novamente.

    dotnet build
    
  4. Feche o terminal.

Adicionar definições da aplicação

Em um aplicativo .NET, é comum usar os provedores de configuração para injetar novas configurações em seu aplicativo. Para este aplicativo, use o appsettings.Development.json arquivo para fornecer os valores mais atuais para o ponto de extremidade e a chave do Azure OpenAI.

  1. Na raiz do projeto, crie um novo arquivo chamado appsettings. Development.json.

    Importante

    No Linux, os arquivos diferenciam maiúsculas de minúsculas. O ambiente .NET para este projeto é chamado Desenvolvimento e o nome do arquivo deve corresponder a esse nome de ambiente para funcionar.

  2. Dentro do arquivo, crie um novo objeto JSON com uma propriedade de espaço reservado para OpenAi configurações.

    {
      "OpenAi": {            
      }
    }
    
  3. Dentro da OpenAi propriedade, crie duas novas propriedades para o Endpoint e Key. Use o ponto de extremidade do Azure OpenAI e as configurações de chave que você registrou anteriormente neste projeto.

    {
      "OpenAi": {
        "Endpoint": "<your-azure-openai-endpoint>",
        "Key": "<your-azure-openai-key>"
      }
    }
    

    Supondo que o nome da conta do Azure OpenAI seja nybncrsna76fo-openai e a chave seja 4bf98cb194cdf0f9001eae3259a76ed8, você configuraria o objeto JSON como este exemplo.

    {
      "OpenAi": {
        "Endpoint": "https://nybncrsna76fo-openai.openai.azure.com/",
        "Key": "4bf98cb194cdf0f9001eae3259a76ed8"
      }
    }
    

    Nota

    A chave neste exemplo é fictícia.

  4. Salve as configurações do aplicativo. Development.json arquivo.

Adicionar membros necessários e uma instância de cliente

Finalmente, implemente as variáveis de classe necessárias para usar o cliente OpenAI do Azure. Nesta etapa, implemente alguns prompts estáticos e crie uma nova instância da OpenAIClient classe.

  1. Abra o arquivo Serviços/OpenAiService.cs .

  2. Adicione usando diretivas para os Azure namespaces e Azure.AI.OpenAI .

    using Azure;
    using Azure.AI.OpenAI;
    
  3. Dentro da OpenAiService classe, adicione uma nova variável chamada _client do tipo OpenAIClient.

    private readonly OpenAIClient _client;
    
  4. Defina um bloco estático de texto para enviar ao assistente de IA antes de cada prompt com uma nova variável de cadeia de caracteres chamada _systemPromptText.

    private readonly string _systemPrompt = @"
        You are an AI assistant that helps people find information.
        Provide concise answers that are polite and professional." + Environment.NewLine;
    
  5. Defina um segundo bloco estático de texto para enviar à IA com instruções sobre como resumir uma conversa com uma nova variável de cadeia de caracteres chamada _summarizePrompt.

    private readonly string _summarizePrompt = @"
        Summarize this prompt in one or two words to use as a label in a button on a web page.
        Do not use any punctuation." + Environment.NewLine;
    
  6. Dentro do construtor da classe, adicione duas linhas extras de código para verificar se o ponto de extremidade ou chave é nulo. Use ArgumentNullException.ThrowIfNullOrEmpty para lançar um erro antecipadamente se qualquer um desses valores for nulo.

    ArgumentNullException.ThrowIfNullOrEmpty(endpoint);
    ArgumentNullException.ThrowIfNullOrEmpty(key);
    

    Gorjeta

    Quando você executa o aplicativo, isso gerará um erro imediatamente se qualquer uma dessas configurações não tiver um valor válido fornecido por meio das configurações do aplicativo. Development.json arquivo.

  7. Em seguida, pegue o nome do modelo que é um parâmetro do construtor e salve-o na _modelName variável.

    _modelName = modelName;
    
  8. Finalmente, crie uma nova instância da classe usando o ponto de OpenAIClient extremidade para criar um Uri e a chave para criar um AzureKeyCredentialarquivo .

    Uri uri = new(endpoint);
    AzureKeyCredential credential = new(key);
    _client = new(
        endpoint: uri,
        keyCredential: credential
    );
    
  9. Salve o arquivo Serviços/OpenAiService.cs .

Verifique o seu trabalho

Neste ponto, seu construtor deve incluir lógica suficiente para criar uma instância de cliente. Como a classe ainda não faz nada com o cliente, não faz sentido executar o aplicativo Web, mas há valor em criar o aplicativo para garantir que seu código não tenha omissões ou erros.

  1. Abra um novo terminal.

  2. Crie o projeto .NET.

    dotnet build
    
  3. Observe a saída da compilação e verifique se não há erros de compilação.

    MSBuild version 17.5.1+f6fdcf537 for .NET
      Determining projects to restore...
      All projects are up-to-date for restore.
      cosmoschatgpt -> /workspaces/cosmosdb-chatgpt/bin/Debug/net8.0/cosmoschatgpt.dll
    
    Build succeeded.
        0 Warning(s)
        0 Error(s)
    
    Time Elapsed 00:00:02.93
    
  4. Feche o terminal.