Obtenha informações sobre seus dados de um aplicativo de chat do .NET Azure AI
Introdução ao Kernel Semântico e ao gpt-35-turbo
modelo, a partir de um simples aplicativo de console .NET 8.0. Use o modelo de IA para obter análises e informações sobre suas caminhadas anteriores. Ele consiste em um aplicativo de console simples, executado localmente, que lerá o arquivo hikes.md
e enviará a solicitação para um serviço OpenAI do Azure implantado em sua assinatura do Azure e fornecerá o resultado no console. Siga estas etapas para provisionar o Azure OpenAI e saiba como usar o Kernel Semântico.
Comece a usar o .NET Azure OpenAI com um gpt-35-turbo
modelo, a partir de um simples aplicativo de console do .NET 8.0. Use o modelo de IA para obter análises e informações sobre suas caminhadas anteriores. Ele consiste em um aplicativo de console simples, executado localmente, que lerá o arquivo hikes.md
e enviará a solicitação para um serviço OpenAI do Azure implantado em sua assinatura do Azure e fornecerá o resultado no console. Siga estas etapas para provisionar o Azure OpenAI e saiba como usar o SDK do OpenAI do Azure .NET.
Pré-requisitos
- SDK do .NET 8.0 - Instale o SDK do .NET 8.0
- Uma assinatura do Azure - Crie uma gratuitamente
- CLI do Desenvolvedor do Azure - Instalar ou atualizar a CLI do Desenvolvedor do Azure
- Acesso ao serviço Azure OpenAI.
- No Windows, o PowerShell
v7+
é necessário. Para validar sua versão, executepwsh
em um terminal. Ele deve retornar a versão atual. Se retornar um erro, execute o seguinte comando:dotnet tool update --global PowerShell
.
Implantar os recursos do Azure
Certifique-se de seguir os Pré-requisitos para ter acesso ao Serviço OpenAI do Azure, bem como à CLI do Desenvolvedor do Azure e, em seguida, siga o guia a seguir para começar com o aplicativo de exemplo.
Clone o repositório: dotnet/ai-samples
A partir de um terminal ou prompt de comando, navegue até o diretório de inícios rápidos .
Isso provisiona os recursos do Azure OpenAI. Pode levar vários minutos para criar o serviço Azure OpenAI e implantar o modelo.
azd up
Nota
Se você já tiver um serviço OpenAI do Azure disponível, poderá ignorar a implantação e usar esse valor no Program.cs, de preferência a partir de um IConfiguration
arquivo .
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 de IA .NET agora têm os segredos do usuário configurados e podem ser testados.
Experimente o exemplo "Conversando sobre minhas caminhadas anteriores"
- Em um terminal ou prompt de comando, navegue até o
semantic-kernel\03-ChattingAboutMyHikes
diretório.
- Em um terminal ou prompt de comando, navegue até o
azure-openai-sdk\03-ChattingAboutMyHikes
diretório.
Agora é hora de experimentar o aplicativo de console. Digite o seguinte para executar o aplicativo:
dotnet run
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
Nosso aplicativo usa o Microsoft.SemanticKernel
pacote, que está disponível no NuGet, 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 carregam 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);
Depois que o AzureOpenAIChatCompletionService
cliente é criado, lemos o conteúdo do arquivo hikes.md
e o usamos para fornecer mais contexto ao modelo, adicionando um prompt do sistema. Isso instrui o modelo como você gostaria que ele agisse 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}");
Em seguida, você pode adicionar uma mensagem de usuário ao modelo usando a AddUserMessage
função.
Para que o modelo gere uma resposta com base no prompt do sistema e na solicitação do usuário, use a GetChatMessageContentAsync
função.
// 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}");
Para manter o histórico ou o contexto do chat, certifique-se de adicionar a resposta do modelo ao chatHistory
. É hora de fazer nossa solicitação de usuário sobre nossos dados novamente usando a AddUserMessage
função e GetChatMessageContentAsync
.
// 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 o prompt do sistema e altere a solicitação, fazendo perguntas diferentes (ex: Quantas vezes você caminhou quando estava chovendo? Quantas vezes você caminhou em 2021? etc.) para ver como o modelo responde.
Explore o código
Nosso aplicativo usa o SDK do Azure.AI.OpenAI
cliente, que está disponível no NuGet, 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 carregam 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 openAIEndpoint = config["AZURE_OPENAI_ENDPOINT"];
string openAIDeploymentName = config["AZURE_OPENAI_GPT_NAME"];
string openAiKey = config["AZURE_OPENAI_KEY"];
// == Creating the AIClient ==========
var endpoint = new Uri(openAIEndpoint);
var credentials = new AzureKeyCredential(openAiKey);
A OpenAIClient
classe facilita as solicitações e respostas. ChatCompletionOptions
Especifica parâmetros de como o modelo responderá.
var openAIClient = new OpenAIClient(endpoint, credentials);
var completionOptions = new ChatCompletionsOptions
{
MaxTokens = 400,
Temperature = 1f,
FrequencyPenalty = 0.0f,
PresencePenalty = 0.0f,
NucleusSamplingFactor = 0.95f, // Top P
DeploymentName = openAIDeploymentName
};
Depois que o OpenAIClient
cliente é criado, lemos o conteúdo do arquivo hikes.md
e o usamos para fornecer mais contexto ao modelo, adicionando um prompt do sistema. Isso instrui o modelo como você gostaria que ele agisse durante a conversa.
var systemPrompt =
"""
You are upbeat and friendly. You introduce yourself when first saying hello.
Provide a short answer only based on the user hiking records below:
""" + markdown;
completionOptions.Messages.Add(new ChatRequestSystemMessage(systemPrompt));
Em seguida, você pode adicionar uma mensagem de usuário ao modelo usando a ChatRequestUserMessage
classe.
Para que o modelo gere uma resposta com base no prompt do sistema e na solicitação do usuário, use a GetChatCompletionsAsync
função.
string userGreeting = """
Hi!
""";
completionOptions.Messages.Add(new ChatRequestUserMessage(userGreeting));
Console.WriteLine($"\n\nUser >>> {userGreeting}");
ChatCompletions response = await openAIClient.GetChatCompletionsAsync(completionOptions);
ChatResponseMessage assistantResponse = response.Choices[0].Message;
Console.WriteLine($"\n\nAI >>> {assistantResponse.Content}");
completionOptions.Messages.Add(new ChatRequestAssisstantMessage(assistantResponse.Content));
Para manter o histórico ou o contexto do bate-papo, certifique-se de adicionar a resposta do modelo como um ChatRequestAssistantMessage
arquivo . É hora de fazer nossa solicitação de usuário sobre nossos dados novamente usando a ChatRequestUserMessage
função e GetChatCompletionsAsync
.
var hikeRequest =
"""
I would like to know the ration of hike I did in Canada compare to hikes done in other countries.
""";
Console.WriteLine($"\n\nUser >>> {hikeRequest}");
completionOptions.Messages.Add(new ChatRequestUserMessage(hikeRequest));
response = await openAIClient.GetChatCompletionsAsync(completionOptions);
Personalize o prompt do sistema e altere a solicitação, fazendo perguntas diferentes (ex: Quantas vezes você caminhou quando estava chovendo? Quantas vezes você caminhou em 2021? etc.) para ver como o modelo responde.
Clean up resources (Limpar recursos)
Quando você não precisar mais do aplicativo ou recursos de exemplo, remova a implantação correspondente e todos os recursos.
azd down
Próximos passos
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários