Exercício – Criar um conversor de moeda

Concluído

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.

  1. Navegue até o CurrencyConverterPlugin.cs arquivo na pasta Plug-ins

  2. Crie 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 objeto Currency para as moedas base e de destino. Verifique se o código de moeda foi encontrado antes de continuar.

  3. 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.

  4. 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.

  5. 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()
    };
    
  6. 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();
    
  7. Conclua a função AddUserMessage adicionando o seguinte código ao método:

    void AddUserMessage(string msg) 
    {
        Console.WriteLine("User: " + msg);
        history.AddUserMessage(msg);
    }
    
  8. 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.

  9. 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!