Partilhar via


Crie um aplicativo de bate-papo de IA com o .NET

Comece a usar o OpenAI e o Semantic Kernel criando um aplicativo de bate-papo simples do console .NET 8. O aplicativo será executado localmente e usará o modelo OpenAI gpt-3.5-turbo . Siga estas etapas para obter acesso ao OpenAI e aprender a usar o Kernel Semântico.

Pré-requisitos

  • SDK do .NET 8.0 - Instale o SDK do .NET 8.0.
  • Uma chave de API do OpenAI para que você possa executar este exemplo.
  • No Windows, o PowerShell v7+ é necessário. Para validar sua versão, execute pwsh em um terminal. Ele deve retornar a versão atual. Se retornar um erro, execute o seguinte comando: dotnet tool update --global PowerShell.

Comece a usar o OpenAI e o Semantic Kernel criando um aplicativo de bate-papo simples do console .NET 8. O aplicativo será executado localmente e se conectará ao modelo OpenAI gpt-35-turbo implantado no Azure OpenAI. Siga estas etapas para provisionar o Azure OpenAI e saiba como usar o Kernel Semântico.

Pré-requisitos

  • SDK do .NET 8 - Instale o SDK do .NET 8.
  • Uma assinatura do Azure - Crie uma gratuitamente.
  • CLI do Azure Developer - Instale ou atualize a CLI do Azure Developer.
  • Acesso ao serviço Azure OpenAI.
  • No Windows, o PowerShell v7+ é necessário. Para validar sua versão, execute pwsh em um terminal. Ele deve retornar a versão atual. Se retornar um erro, execute o seguinte comando: dotnet tool update --global PowerShell.

Obter o projeto de exemplo

Clone o repositório GitHub que contém os aplicativos de exemplo para todos os inícios rápidos:

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

Criar o serviço Azure OpenAI

O repositório GitHub de exemplo é estruturado como um modelo de CLI (azd) do Desenvolvedor do Azure, que azd pode ser usado para provisionar o serviço e o modelo do Azure OpenAI para você.

  1. Em um terminal ou prompt de comando, navegue até o diretório src\quickstarts\azure-openai do repositório de exemplo.

  2. Execute o azd up comando para provisionar os recursos do Azure OpenAI. Pode levar vários minutos para criar o serviço Azure OpenAI e implantar o modelo.

    azd up
    

    azd também configura os segredos de usuário necessários para o aplicativo de exemplo, como a chave de acesso OpenAI.

    Nota

    Se você encontrar um erro durante a azd up implantação, visite a seção de solução de problemas .

Experimente o exemplo HikerAI

  1. Em um terminal ou prompt de comando, navegue até o openai\02-HikerAI diretório.

  2. Execute os seguintes comandos para configurar sua chave de API OpenAI como um segredo para o aplicativo de exemplo:

    dotnet user-secrets init
    dotnet user-secrets set OpenAIKey <your-openai-key>
    
  3. Use o dotnet run comando para executar o aplicativo:

    dotnet run
    
  1. Em um terminal ou prompt de comando, navegue até o azure-openai\02-HikerAI diretório.

  2. Use o dotnet run comando para executar o aplicativo:

    dotnet run
    

    Gorjeta

    Se você receber uma mensagem de erro, os recursos do Azure OpenAI podem não ter concluído a implantação. Aguarde alguns minutos e tente novamente.

Explore o código

O aplicativo usa o Microsoft.SemanticKernel pacote para enviar e receber solicitações para o serviço OpenAI.

O código do aplicativo está contido no arquivo Program.cs . As primeiras linhas de código definem valores de configuração e obtêm a chave OpenAI que foi definida anteriormente usando o dotnet user-secrets comando.

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

O OpenAIChatCompletionService serviço facilita as solicitações e respostas.

// Create the OpenAI Chat Completion Service
OpenAIChatCompletionService service = new(model, key);

Explore o código

O aplicativo usa o Microsoft.SemanticKernel pacote para enviar e receber solicitações para um serviço OpenAI do Azure implantado no Azure.

Todo o aplicativo está contido no arquivo Program.cs . As primeiras linhas de código recuperam os segredos e valores de configuração que foram definidos no dotnet user-secrets para você durante o provisionamento do aplicativo.

// 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"];

O AzureOpenAIChatCompletionService serviço facilita as solicitações e respostas.

// Create the Azure OpenAI Chat Completion Service
AzureOpenAIChatCompletionService service = new(deployment, endpoint, key);

Adicione um prompt do sistema para fornecer mais contexto ao modelo, o que influencia o comportamento do modelo e as conclusões geradas durante a conversa.

// Start the conversation with context for the AI model
ChatHistory chatHistory = new("""
    You are a hiking enthusiast who helps people discover fun hikes in their area. 
    You are upbeat and friendly. 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. Where they are located
    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.
    """);

Adicione uma mensagem de usuário ao histórico de bate-papo usando a AddUserMessage função. Use a GetChatMessageContentAsync função para instruir o modelo a gerar uma resposta com base no prompt do sistema e na solicitação do usuário.


// Add user message to chat history
chatHistory.AddUserMessage("Hi! Apparently you can help me find a hike that I will like?");

// Print User Message to console
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

// Get response
var response = await service.GetChatMessageContentAsync(
    chatHistory, new OpenAIPromptExecutionSettings() { MaxTokens = 400 });

Adicione a resposta do modo para manter o histórico de bate-papo.

// Add response to chat history
chatHistory.Add(response);

// Print Response to console
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

Personalize o prompt do sistema e a mensagem do usuário para ver como o modelo responde para ajudá-lo a encontrar uma caminhada que você vai gostar.

Clean up resources (Limpar recursos)

Remova a implantação correspondente e todos os recursos quando não precisar mais do aplicativo ou recursos de exemplo.

azd down

Resolver problemas

No Windows, você pode receber as seguintes mensagens de erro após a execução azd up:

postprovision.ps1 não está assinado digitalmente. O script não será executado no sistema

O script postprovision.ps1 é executado para definir os segredos de usuário do .NET usados no aplicativo. Para evitar esse erro, execute o seguinte comando do PowerShell:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

Em seguida, execute novamente o azd up comando.

Outro erro possível:

'pwsh' não é reconhecido como um comando interno ou externo, programa operável ou ficheiro batch. AVISO: O gancho 'postprovision' falhou com o código de saída: '1', Caminho: '.\infra\post-script\postprovision.ps1'. : código de saída: 1 A execução continuará desde que ContinueOnError tenha sido definido como true.

O script postprovision.ps1 é executado para definir os segredos de usuário do .NET usados no aplicativo. Para evitar esse erro, execute manualmente o script usando o seguinte comando do PowerShell:

.\infra\post-script\postprovision.ps1

Os aplicativos .NET AI agora têm os segredos do usuário configurados e podem ser testados.

Próximos passos