Obter informações sobre seus dados de um aplicativo de chat de IA do .NET
Introdução ao desenvolvimento de IA usando um aplicativo de console do .NET 8 para se conectar a um modelo gpt-3.5-turbo
do OpenAI. Você se conectará ao modelo de IA usando Kernel Semântico para analisar dados de caminhada e fornecer insights.
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
.
Introdução ao desenvolvimento de IA usando um aplicativo de console do .NET 8 para se conectar a um modelo gpt-3.5-turbo
do OpenAI implantado no Azure. Você se conectará ao modelo de IA usando Kernel Semântico para analisar dados de caminhada e fornecer insights.
Pré-requisitos
- SDK do .NET 8: instalar o SDK do .NET 8.
- Uma assinatura do Azure – Crie uma gratuitamente.
- Acesso ao Serviço OpenAI do Azure.
- CLI do Desenvolvedor do Azure (opcional) – instale ou atualize a CLI do Desenvolvedor do Azure.
Obter o projeto de exemplo
Clone o repositório de amostra
Você pode criar seu próprio aplicativo usando as etapas nas seções a seguir ou pode clonar o repositório GitHub que contém os aplicativos de exemplo concluídos para todos os inícios rápidos. Se você planeja usar o Azure OpenAI, o repositório de exemplo também será estruturado como um modelo da CLI do Desenvolvedor do Azure que pode provisionar um recurso do Azure OpenAI para você.
git clone https://github.com/dotnet/ai-samples.git
Criar o serviço OpenAI do Azure
- CLI do Desenvolvedor do Azure
- CLI do Azure
- Portal do Azure
O repositório do GitHub de exemplo é estruturado como um modelo da CLI do Desenvolvedor do Azure (azd
), que azd
pode usar para provisionar o serviço e o modelo do OpenAI do Azure para você.
Em um terminal ou prompt de comando, navegue até o
src\quickstarts\azure-openai
diretório do repositório de exemplo.Execute o comando
azd up
para provisionar os recursos do OpenAI do Azure. 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 de usuário necessários para o aplicativo de exemplo, como o ponto de extremidade do OpenAI do Azure e o nome do modelo.
Experimentar o exemplo de chat de caminhada
Em um terminal ou prompt de comando, navegue até o diretório
src\quickstarts\openai\semantic-kernel\03-ChattingAboutMyHikes
.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
semantic-kernel\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.
Todo o 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 do 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);
Depois que o cliente OpenAIChatCompletionService
é criado, o aplicativo lê o conteúdo do arquivo hikes.md
e o usa para fornecer mais contexto ao modelo adicionando um prompt do sistema. Isso influencia o comportamento do modelo e as conclusões geradas durante a conversa.
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 carregam 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"];
O serviço AzureOpenAIChatCompletionService
facilita as solicitações e respostas.
// == Create the Azure OpenAI Chat Completion Service ==========
AzureOpenAIChatCompletionService service = new(deployment, endpoint, new DefaultAzureCredential());
Depois que o cliente OpenAIChatCompletionService
é criado, o aplicativo lê o conteúdo do arquivo hikes.md
e o usa para fornecer mais contexto ao modelo adicionando um prompt do sistema. Isso influencia o comportamento do modelo e as conclusões geradas durante a conversa.
// Provide context for the AI model
ChatHistory chatHistory = new($"""
You are upbeat and friendly. You introduce yourself when first saying hello.
Provide a short answer only based on the user hiking records below:
{File.ReadAllText("hikes.md")}
""");
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
O código a seguir adiciona um prompt de usuário ao modelo usando a função AddUserMessage
. A função GetChatMessageContentAsync
instrui o modelo a gerar uma resposta com base nos prompts do sistema e do usuário.
// Start the conversation
chatHistory.AddUserMessage("Hi!");
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
chatHistory.Add(
await service.GetChatMessageContentAsync(
chatHistory,
new OpenAIPromptExecutionSettings()
{
MaxTokens = 400
}));
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
O aplicativo adiciona a resposta do modelo ao chatHistory
para manter o histórico ou contexto do chat.
// Continue the conversation with a question.
chatHistory.AddUserMessage(
"I would like to know the ratio of the hikes I've done in Canada compared to other countries.");
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
chatHistory.Add(await service.GetChatMessageContentAsync(
chatHistory,
new OpenAIPromptExecutionSettings()
{
MaxTokens = 400
}));
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
Personalize os prompts do sistema ou do usuário para fornecer perguntas e contexto diferentes:
- Quantas vezes eu caminhei quando estava chovendo?
- Quantas vezes eu caminhei em 2021?
O modelo gera uma resposta relevante para cada prompt com base em suas entradas.
Limpar os recursos
Quando você não precisar mais dos recursos ou do aplicativo de exemplo, remova a implantação correspondente e todos os 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.