Exercício – Criar um conversor de moeda
Para este exercício, você cria um plug-in que permite ao usuário converter valores de moeda de uma moeda para outra. Como o modelo não pode acessar a Internet para determinar a taxa de câmbio atual, você precisa fornecer as taxas de câmbio em seu plug-in. Para este exercício, você usa um arquivo currencies.txt existente para fornecer as taxas de câmbio.
Importante
Você precisa concluir as instruções de Instalação na unidade anterior, Preparar, antes de começar este exercício.
Criar uma função nativa
Nesta tarefa, você cria uma função nativa que pode converter um valor de uma moeda base em uma moeda de destino.
Navegue até o
CurrencyConverterPlugin.cs
arquivo na pasta Plug-insCrie uma função
ConvertAmount
com o seguinte código:public static string ConvertAmount(string amount, string baseCurrencyCode, string targetCurrencyCode) { Currency targetCurrency = currencyDictionary[targetCurrencyCode]; Currency baseCurrency = currencyDictionary[baseCurrencyCode]; if (targetCurrency == null) { return targetCurrencyCode + " was not found"; } else if (baseCurrency == null) { return baseCurrencyCode + " was not found"; } }
Neste código, você usa o dicionário
Currency.Currencies
para obter o objetoCurrency
para as moedas base e de destino. Verifique se o código de moeda foi encontrado antes de continuar.Adicione a lógica para converter moedas no método:
else { double amountInUSD = Double.Parse(amount) * baseCurrency.USDPerUnit; double result = amountInUSD * targetCurrency.UnitsPerUSD; return result + targetCurrencyCode; }
Nesse código, você converte o valor da moeda base para a moeda de destino e retorna uma cadeia de caracteres com o valor convertido. Em seguida, vamos adicionar os atributos da função kernel.
Adicione os seguintes atributos à função
ConvertAmount
:[KernelFunction("ConvertAmount")] [Description("Converts an amount from one currency to another")] public static string ConvertAmount(string amount, string baseCurrencyCode, string targetCurrencyCode) {
Em seguida, você pode registrar o plug-in no kernel para que ele possa usar a nova função
ConvertAmount
.No arquivo
Program.cs
, registre o plug-in e habilite a chamada de função automática com o seguinte código:kernel.ImportPluginFromType<CurrencyConverterPlugin>(); OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new() { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto() };
Crie um objeto de histórico de chat e adicione um prompt para orientar o LLM (modelo de linguagem grande):
var history = new ChatHistory(); AddUserMessage("Can you convert 52000 VND to USD?"); await GetReply();
Conclua a função
AddUserMessage
adicionando o seguinte código ao método:void AddUserMessage(string msg) { Console.WriteLine("User: " + msg); history.AddUserMessage(msg); }
Adicione o seguinte código ao método
GetReply
para recuperar uma resposta do LLM:async Task GetReply() { ChatMessageContent reply = await chatCompletionService.GetChatMessageContentAsync( history, executionSettings: openAIPromptExecutionSettings, kernel: kernel ); Console.WriteLine("Assistant: " + reply.ToString()); history.AddAssistantMessage(reply.ToString()); }
Agora você está pronto para testar sua função de plug-in.
Insira
dotnet run
no terminal. A seguinte saída deve ser exibida:$52000 VND is approximately $2.13 in US Dollars (USD)
Agora você tem um plug-in que permite que seu agente de viagens converta moedas. Ótimo trabalho!