de IA a Engenharia de Prompt - Na visão de um universitário preguiçoso
Olá a todos, hoje venho aqui para falar um pouco sobre engenharia de prompt. Eu sei, eu sei Como esse termo é usado como bait para venda de cursos ou para enganar aquele mais eufóricos com tecnologias novas, mas vou tentar falar um pouco da minha visão como as pessoas a minha volta usam IA e como é possível otimizar tarefas simples e repetitivas que temos que fazer no cotidiano da TI, principalmente no contexto da universidade.
Meu nome é Cícolas, sou estudante no último período de ciência da computação em uma universidade pública, e hoje vou falar um pouco sobre minha visão das IAs, LLMs e Agentic AI durante o período da minha graduação.
IAs de Alan Turing as LLMs
Primeiramente temos que desmistificar o conceito de que a IA é uma bola de cristal que resolverá todos os nossos problemas.
O termo Inteligência Artificial já existe desde os primórdios da computação, desde 1950 Alan Turing já trazia o questionamento: "Máquinas podem pensar?" em seu famoso artigo "Computing Machinery and Inteligence". Desde então a IA passou por diversas etapas desde a criação de Perceptrons, modelo mais básico de rede neural proposto em 1957, até modelos mais complexos como Máquinas de Suporte de Vetores (SVM), Rede neurais profundas, Árvores de regressão e finalmente LLMs.
Note tanto o uso do termo modelo, quanto o tanto de nomenclaturas difíceis e confusas que foram apresentados, isso é IA! uma gama complexa de ferramentas (modelos), que evoluem constantemente todos os dias afim de resolverem problemas complexos de serem resolvidos com outros tipos de algorítmos.
Como qualquer ferramenta, não existe uma ferramenta master que seja boa em todos problemas, alguns modelos como Máquinas de Suporte de Vetores podem ser utéis na hora da criação de um algoritmo de recomendação, mas podem não funcionar tão bem no processamento de linguagem natural como Redes Neurais.
LLMs
As LLMs são o ápice da evolução das IAs hoje em dia, ao ponto que minha vó sabe oque é o Chat GPT, mas nem imagina como ele começa a funcionar. Porém partindo um pouco do exemplo de alguém leigo, quando conversando com colegas graduandos em computação, é comum o desconhecimneto básico da tecnologia (totalmente justificável) utilizada no desenvolvimento desse tipo de modelo.
Esse desconhecimento traz uma ineficiência na hora de utilizar a sua ferramenta, assim como dirigir um carro não é necessário entender como ele funciona, usar uma IA também não é necessário, porém ajuda muito.
Uma vez um vendedor de curso me contou que:
*"Uma LLM é uma máquina muito boa em prever a próxima palavra dado um set de palavras anteriores."
Isso é muito raso e não nos quer dizer muito pouco sobre a usabilidade da ferramenta. Voltando na metáfora do carro, seria a mesma coisa que eu falasse que: "Um carro é uma máquina que nos permite locomover de forma eficiente na cidade". Falta um contexto de como, onde, em quais ocasiões, limitações, etc...
Agora quase como um processo de inlining, vou refatorar a citação do vendedor de curso para uma explicação mais completa do contexto das LLMs:
"Uma LLM é um modelo probabilístico, que através de um treinamento em uma base de dados grande, unido de uma janela de contexto textual, é capaz de gerar uma lista de palavras mais prováveis de suceder a palavra atual"
Note como a substituição de algumas palavras como: máquina -> modelo probabilístico; prever -> gerar uma lista de palavras; set -> janela de contexto, traz muito mais informação para o contexto da citação. Além disso é importante se ater ao trecho inserido, que diz sobre o treinamento desse modelo.
O treinamento é uma etapa importante no processo de criação e execução desses modelos, pois é através do treinamento que é possível aperfeiçoar o modelo preditivo que se baseia. Falar sobre técnicas de treinamento daria um ártigo completo, e fugiria um pouco do escopo desse ártigo, mas é importante salientar que esses modelos que usamos hoje em dia se baseam em diversas formas de treinamento, geralmente se baseando em dados públicos na internet.
Interações, Limitações e Otimizações
Basicamente após toda essa contextualização do modelo que estamos manipulando é fácil entender como ele se comportará. A partir da segunda citação podemos começar a pensar em janelas de contexto, probabilidade, e a natureza textual do modelo que estamos utilizando.
Usando a IA
De aqui em diante vou usar uma abordagem mais informal se baseando em casos de usos (como vivências que passei), e issues (como problemas que constatei).
O primeiro caso de uso que todos nós encontra da IA e é só a ponta do iceberg da "engenharia de prompt", é o quando abrimos o Chat GPT, Gemini, etc... e fazemos uma simples pergunta: "Tenho uma tarefa a ser feita: Implementar um algoritmo X na linguagem Y", para problemas pequenos e muito bem conhecido talvez funcione, mas conforme vamos tendo problemas maiores algumas issues começam a aparecer como:
- A falta de contexto: Com prompts simples a LLM não tem um dos três pilares que conversamos agora a pouco, a janela de contexto. Isso faz que a LLM fique muito livre para fazer o que for necessário para realizar a tarefa solicitada.
- Solução: De contextos maiores aos seus problemas bem como limitações bem claras, e intruções passo a passo de implementação, peça para que ela considere você alguém que está lá para instruí-la não para "explorá-la".
- Ineficiência de ambiênte: A maioria dos cliente WEB hoje em dia são muito ineficientes na hora de realizar tarefas, como codificação, execução
- Solução: Utilização de clientes WEBs mais robustos, com suporte a inclusão de arquivos e criação de artefatos, ou (meu caso) utilize clientes baseados em CLI, ou editores de texto modernos.
O segundo caso de uso é o uso de editores de texto com suporte a LLMs, como VSCode, Cursor, IDEs da IntelliJ, etc.. Essas ferramentas possuem um potêncial absurdo de codificação e interação com o ambiente de desenvolvimento, simples prompts conseguem resultados muito significantes, seja para o bem ou para o mal da sua base de código. Algumas issues dessas ferramentas são:
- Falta de intruções, geram ineficiência: Diferentemente de clientes WEB, que não tem um contexto geral do seu código, essas ferramentas são capazes de ler, criar, editar e deletar arquivos. Isso traz um potêncial absurdo para elas, mas com grandes poderes vem grandes responsabilidades, quando um prompt não é bem escrito, ela pode tentar refatorar toda sua base de código para que a instrução que foi dada seja cumprida.
- Terceirização de pensamento: Ao utilizar esse caso de uso, é muito mais comum a terceirização de pensamento, que em relação ao caso anterior. O que seria essa terceirização? Não pensar, não ler o código que está sendo feito, não aprender com o que está sendo codificado. Essa issue é triste e irei discorrer mais sobre adiante.
- Limitação de uso: Por estar em um editor de texto, o contexto todo das pré. configurações do modelo são escritos pensandos em um uso para codificação, isso limita o funcionamento da IA, de forma eficiente, a códigos, mas não a escrita de relatórios, documentos, etc...
O terceiro caso de uso e o que eu irei esmiuçar mais adiante é as CLIs e Agentic AI, para além dos editores, e dos navegadores, e no terminal que o máximo do potencial (até onde eu sei) pode ser alcançado. No terminal os agentes como Claude, Codes e Gemini, conseguem interagir além dos arquivos no seu computador, com a linha de comando, fazendo assim capaz de utilizar o computador como qualquer usuário.
Ferramentas
Você utiliza e já notou o tanto de CLIs (Command Line Interfaces) para realizar tudo quanto e tarefa que existe no mundo? E não estou falando apenas de criar, editar, configurar arquivos ou programas, estou falanto de tudo! gerações de PDFs, Slides, análise de dados, criação de vídeos, imagens, envio de mensagens, etc...
MD, Yaml e modelos de texto simples
Como já dito anteriormente a LLM é capaz de gerar texto, e ler texto, a eficiência dessa leitura e escrita é fundamental. Tipos de arquivos mais fáceis de serem lidos ou escritos são essenciais para o funcionamento eficiente do modelo, um caso de uso que tenho frequentemente é: "Preciso fazer uma apresentação de slides, baseado em anotações que tenho de um determinado assunto", antigamente eu utilizava LaTeX para fazer algumas anotações, porém quando introduzi um agente para me auxiliar no desenvolvimento de slides, encontrei uma issue:
- Arquivos LaTeX; HTML não tem sentido (?): Esses arquivos utilizados para marcação de texto geralmente possuem muito código sem sentido semântico (ou seja, não tem significado como:
\textbf{Negrito no latex}ou<span></span>). Isso gera um overhead cognitivo no modelo, tanto para input quanto para output.- Solução: substituir para anotações, arquivos com muita verbosidade, para arquivos mais simples como Markdowns e YAMLs
Análise de logs
Outro caso de uso com muito potencial é a análise de logs dessa ferramenta, já me deparei com diversos momentos, seja para criação de relatórios, resumo de PR ou até criação de documentações, que uma análise dos meus commits recentes cairiam como uma luva para o modelo. Com isso em mente o git, por exemplo, possui uma ferramenta poderosa de logging, e de diffing, que permite analisar de uma forma eficiente todas as alterações no repositório de uma forma textual. Ex.:
nicolas@notebook:$ git log --pretty=format:'%h %s' --graph
exemplo de geração de um grafo de commits
nicolas@notebook:$ git diff <de>..<ate>
comparação entre alterações em 2 commits ou 2 branches
Além disso o uso de pattern matching do git é extremamente eficiente nesses momentos para limitar o escopo do contexto.
Conclusão
O uso de LLMs pode alterar muito seu fluxo de trabalho, muitas vezes para melhor, mas é importante saber como usar as ferramentas que estão a disposição. Acredito que com esse artigo pude tangenciar como eu uso a IA no meu dia a dia, e como pude obter resultados mais valorosos, com simples alterações no meu "prompt".
Reflexão
Durante minha graduação eu vi a evolução das IAs, desde o lançamento do ChatGPT, até o estado da arte atual, com Agentic AI, Deep Search, editores de textos inteligentes, etc... e agora ao final do curso, vejo como minha vida foi mais fácil ao utilizar essas ferramentas, mas é essa facilidade que me deixa com uma pulga atrás da orelha, talvez não digo por mim, mas sim pelos colegas que conheci que "terceirizaram" muito o pensamento e hoje nos últimos meses da universidade não conseguem nem ao menos entender simples padrões de projetos, ou conceitos de programação de sistemas.
Sei que pessoas que não conseguem aproveitar as oportunidades que a universidade te proporciona sempre existiram, sei que cada um tem suas particularidades durante o aprendizado. Porém é sobre isso, esse pensamento que tudo será resolvido com IA me preocupa e eu tento ajudar esse tipo de pessoa sempre que possível. A leitura é fundamental (escrito por um nerd com mania de ler documentações e códigos fontes de bibliotecas que nunca vou usar).
Mas é isso por hoje gente, espero que tenham gostado, esse é o meu primeiro ártigo aqui no TabNews, adoraria receber o feedback de vocês, assuntos que sentem que eu poderia ter falado mas não falei (por exemplo MCPs, o modelo de aprendizado das LLMs, etc...), críticas, traumas e tudo mais 😉
Referências
https://courses.cs.umbc.edu/471/papers/turing.pdf
https://git-scm.com/docs/git-diff
https://git-scm.com/docs/git-log
(perdão a falta de referência, muito que eu falei é mais pessoal ou baseado em algumas aulas que tive, e evitei referências acadêmicas, para não ficar massante)