O FineTunning do ChatGPT é superestimado
Uma das minhas metas para 2024 é participar mais ativamente da comunidade de desenvolvedor, por isso pretendo realizar ao menos uma publicação por mês falando sobre a minha experiência com algo relevante no mês (quase sempre o anterior), então esta é a publicação referente ao mes de Janeiro.
Alguns meses atrás (cinco, para ser mais exato) eu publiquei aqui no TabNews sobre Como integrei o ChatGPT ao WhatsApp para uma empresa, este projeto atualmente é o "cargo chefe" da equipe de tecnologia da empresa em questão e atuo como desenvolvedor e líder do projeto (além de outros), e uma das menores partes do sistema desenvolvido era a inteligência artificial em si, uma vez que a mensageria voltada ao WhatsApp que futuramente poderá também se comunicar com o Instagram e Facebook Messenger é a ferramenta principal, integrando o ChatGPT para melhorar a comunicação automatizada, por isso a IA esteve meio em segundo plano nos últimos meses, voltando ao foco após a virada de 2023 para 2024.
O motivo da IA ser colocada em segundo plano mesmo sendo uma tecnologia revolucionária? O Fine Tunning!
Olhando a documentação e todos as centenas de publicações, vídeos, cursos e afins sobre o ChaGPT, leva-se a entender que a inteligência do mesmo é absurdamente intuitiva e prática, mas nós (desenvolvedores) sabemos que ela é muito útil mas longe de ser perfeita. Isso tornou-se um problema quando precisavamos explicar aos "engravatados" (os chefes) que nem tudo era mil maravilhas e que a aprendizagem fina (anteriormente vendida aos chefes por outros como algo surreal) não era tão incrível quanto parecia.
Depois de meses populando uma tabela gigantesca com perguntas e respostas para fornecer na aprendizagem fina e obter resultados voltados ao ramo da empresa, nada parecia funcionar, uma tarefa simples como explicar a funcionalidade de um produto era uma grande dor de cabeça, hora informando dados incorretos, outra tirando informação de sabe-se lá onde e por fim, mentindo quando desejava. Mas desistir do uso da inteligência artificial não era uma opção, precisavamos que o ChatGPT conseguisse comunicar aos nossos clientes como certos produtos funcionavam, quais suas características, valores, prazos de entrega e outros, e como faríamos isso?
Eis que, surge do fundo das ideias, uma opção que anulava o uso da aprendizagem fina e utilizava um banco de dados próprio em tempo real para obter e entregar as informações usando a inteligência artificial de forma direta. Antes era necessário entender onde o problema estava, e até onde testamos, os dados da aprendizagem fina pouco eram relevantes para as respostas, mesmo que treinado com mais de mil perguntas e respostas sobre alguns poucos produtos, suas respostas ainda eram incorretas e variáveis demais. Estudando mais sobre o problema, a frustração no desenvolvimento utilizando a aprendizagem fina era algo comum na comunidade e isso nos deu a vontade de testar o uso das Call Functions ou Chamada de Funções para os intímos.
Basicamente, as Call Functions permite que o ChatGPT solicite a execução de funções especificas baseado no contexto da conversa e retorne dados com base nas informações dadas por essa função, como por exemplo, a pergunta "Qual a temperatura em São Paulo no dia 10/07/2023?" fará com que o ChatGPT identifique a localização (São Paulo) e a data (10/07/2023) e envie isso como parâmetros de uma função, já os formatando caso necessário para algo como getWeather('Florianópolis', '2023-07-10')
e a execução da função retornaria um JSON que permitiria ao ChatGPT analisar e responder, como uma resposta sendo {"temp": 25}
e a resposta ser A temperatura em Florianópolis no dia 10 de julho de 2023 foi de 25 graus celsius, e o melhor de tudo, criando um contexto na conversa onde ao perguntar em seguida Qual a temperatura em farenheit? a resposta seria obtida corretamente.
Testar isso e ver funcionar fez meu olho brilhar e minha mente quase explodir. Era o necessário para entender que seria possível fornecer informações ao ChatGPT durante o fluxo da conversa e garantir que os dados respondidos seriam baseados nos dados obtidos em tempo real, sendo assim, criamos uma simples função que utiliza o nome do produto (com seus alias, permitindo uma digitação incorreta ou variações do nome) para obter dados precisos sobre o mesmo e respondesse diretamente, por exemplo, ao perguntar sobre o equipamento Geladeira Electrolux o ChatGPT identificava e resgatava através da função todas as informações da galadeira, e caso perguntasse "Qual a capacidade máxima?" ele conseguiria analisar nas informações o valor e responder, sem que a aprendizagem fina tivesse que conter esses dados e permitindo que eles fossem mutáveis, para que ao perguntar um preço, em momentos promocionais indicar uma promoção ou valores normais.
Isso nos permitiu atingir nossos objetivos mas ainda com muitos trabalhos e melhorias pela frente, o uso dessa opção aumentou o uso de Tokens, uma vez que os valores não estão mais em uma aprendizagem fina e sim diretamente na conversa, e como você pode saber, o ChatGPT é cobrado a partir de tokens, quanto maior a troca de mensagens, mais tokens ele tende a gastar para manter seu pleno funcionamento. Por isso a ideia futura é conseguir reduzir esse custo, permitindo que o filtro seja mais eficaz, por exemplo, obtendo a informações maiores da pergunta e retornando ao ChatGPT exclusivamente o que ele deseja saber e utilizando-o apenas para formatar de uma maneira que fique mais clara ao invés de dados estáticos.
No futuro, a ideia é implementar novos recuross que permitam uma integração com a internet em tempo real ainda mais avançados, como alugar um equipamento diretamente na conversa e já receber cotação de valores, prazos, datas e acompanhamento diretamente pela inteligência artificial.
Estou esperançoso com as próximas atualizações!
Assim que possível, tentarei atualiza-los sobre novas melhorias e quem sabe apresentar a funcionalidade por entre o código.
Caso tenha interesse, aqui estão alguns links úteis sobre os assuntos citados acima:
- https://platform.openai.com/docs/guides/text-generation
- https://platform.openai.com/docs/guides/function-calling
- https://platform.openai.com/docs/guides/fine-tuning
Abraços! 😀