Criar um aplicativo de chat alimentado por IA com o .NET
Comece com a OpenAI e o Kernel Semântico criando um aplicativo de chat de console simples .NET 8. O aplicativo será executado localmente e usará o modelo gpt-3.5-turbo
da OpenAI. Siga essas etapas para obter acesso à OpenAI e saiba como usar o Kernel Semântico.
Pré-requisitos
- SDK do .NET 8.0: instalar o SDK do .NET 8.0.
- Uma chave de API da OpenAI para que você possa executar este exemplo.
- No Windows, o PowerShell
v7+
é necessário. Para validar sua versão, executepwsh
em um terminal. Deve retornar a versão atual. Se ele retornar um erro, execute o seguinte comando:dotnet tool update --global PowerShell
.
Comece com a OpenAI e o Kernel Semântico criando um aplicativo de chat de console simples .NET 8. O aplicativo será executado localmente e se conectará ao modelo gpt-35-turbo
da OpenAI implantado no OpenAI do Azure. Siga essas etapas para provisionar o OpenAI do Azure e saiba como usar o Kernel Semântico.
Pré-requisitos
- SDK do .NET 8: instalar o SDK do .NET 8.
- Uma assinatura do Azure – Crie uma gratuitamente.
- Azure Developer CLI: instalar ou atualizar a Azure Developer CLI.
- Acesso ao Serviço OpenAI do Azure.
- No Windows, o PowerShell
v7+
é necessário. Para validar sua versão, executepwsh
em um terminal. Deve retornar a versão atual. Se ele 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 guias de início rápido:
git clone https://github.com/dotnet/ai-samples.git
Crie o serviço Azure OpenAI
- CLI do Desenvolvedor do Azure
- CLI do Azure
- Portal do Azure
O repositório GitHub de amostra está estruturado como um modelo Azure Developer CLI (azd
), que azd
pode ser usado para provisionar o serviço e o modelo Azure OpenAI para você.
Em um terminal ou prompt de comando, navegue até o diretório src\quickstarts\azure-openai do repositório de exemplo.
Execute o comando
azd up
para provisionar os recursos do Azure OpenAI. Pode levar vários minutos para criar o Serviço OpenAI do Azure e implantar o modelo.azd up
azd
também configura os segredos do usuário necessários para o aplicativo de amostra, como a chave de acesso OpenAI.Observação
Se você encontrar um erro durante a implantação
azd up
, visite a seção de solução de problemas.
Experimente a amostra HikerAI
Em um terminal ou prompt de comando, navegue até o diretório
openai\02-HikerAI
.Execute os seguintes comandos para configurar sua chave de API da OpenAI como um segredo para o aplicativo de exemplo:
dotnet user-secrets init dotnet user-secrets set OpenAIKey <your-openai-key>
Use o comando
dotnet run
para executar o aplicativo:dotnet run
Em um terminal ou prompt de comando, navegue até o diretório
azure-openai\02-HikerAI
.Use o comando
dotnet run
para executar o aplicativo:dotnet run
Dica
Se você receber uma mensagem de erro, os recursos do OpenAI do Azure talvez não tenham terminado de ser implantados. Aguarde alguns minutos e tente novamente.
Explore o código
O aplicativo usa o pacote Microsoft.SemanticKernel
para enviar e receber solicitações para um serviço OpenAI.
O código do aplicativo está contido no arquivo Program.cs. As primeiras várias linhas de código definem valores de configuração e obtêm a Chave da OpenAI que foi definida anteriormente usando o comando dotnet user-secrets
.
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string model = "gpt-3.5-turbo";
string key = config["OpenAIKey"];
O serviço OpenAIChatCompletionService
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 pacote Microsoft.SemanticKernel
para enviar e receber solicitações para um serviço do OpenAI do Azure implantado no Azure.
Todo o aplicativo está contido no arquivo Program.cs. As primeiras várias linhas de código recuperam segredos e valores de configuração que foram definidos em 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 serviço AzureOpenAIChatCompletionService
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 chats usando a função AddUserMessage
. Use a função GetChatMessageContentAsync
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 modelo para manter o histórico de chat.
// 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 um aumento que você desejará.
Limpar os recursos
Remova a implantação correspondente e todos os recursos quando não precisar mais do aplicativo de exemplo ou dos recursos.
azd down
Solucionar problemas
No Windows, você pode receber as seguintes mensagens de erro após a execução de 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 do 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 comando azd up
.
Outro erro possível:
''pwsh'' não é reconhecido como um comando interno ou externo, programa operável ou arquivo em lote. 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á, uma vez que ContinueOnError foi definido como true.
O script postprovision.ps1 é executado para definir os segredos do 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 de IA do .NET agora têm os segredos do usuário configurados e podem ser testados.