A arte de conversar com o ChatGPT (e outros LLMs)
Publicado oNuma troca de emails sobre o ChatGPT, um colega perguntou-me qual seria a melhor forma de escrevermos prompts ao desenvolver código. Bom, a resposta não é simples, afinal isso implica conversar com uma rede neuronal e muitas vezes já é difícil fazê-lo com outras pessoas, quanto mais com uma máquina. No entanto, como sou uma pessoa muito educada e que gosta de ajudar sempre que possível, refleti e respondi da melhor maneira que pude.
A rede está repleta de dicas para melhorarmos os nossos prompts e tenho incorporado muitas delas, mas ao analisá-las individualmente, não sei qual grau de melhoria trouxeram. Inclusive, há algumas em que não tenho certeza se tiveram um impacto significativo. É normal, a experiencia que acumulo ainda não é suficiente para fazer estatística. Porém, o que posso afirmar é que em conjunto e em comparação aos meus rudimentares testes iniciais, a sua incorporação resultou em uma inegável melhora nos resultados obtidos.
Um caso diferente é o das estratégias focadas na resolução de tarefas mais complexas, pois, ao contrário das simples em que podemos obter uma resposta válida e até mesmo muito semelhante, usando ou não uma determinada dica, a adoção destas técnicas traz uma melhora imediata e evidente. Sem uma estratégia definida, o LLM tendia a se dispersar e cometer erros, exigindo que eu o corrigisse e o guiasse com novas perguntas ou instruções. No entanto, quando incluí no meu trabalho o Chain-of-Thought e o Generated Knowledge, esses problemas foram resolvidos. (Tenho pendente um post contando como desenvolvi um blogue em React com ajuda do ChatGPT).
Então, como avaliamos as pequenas dicas que achamos na rede? Uma primeira (e óbvia) abordagem é seguir os conselhos de fontes confiáveis. Eu gosto muito do learnprompting.org e do promptingguide.ai, no entanto existem muitas mais. Outra, complementar, é determinar se o propósito de uma dica faz sentido com o funcionamento dos LLMs. É evidente que seguir essa abordagem implica um gasto extra de tempo, pois:
-
Devemos ter clareza sobre o propósito da dica, embora todas tendam a buscar:
- Reduzir o número de tokens utilizados nas perguntas e respostas.
- Otimizar o trabalho do LLM no processamento das perguntas e na geração das respostas.
- Obter a melhor resposta possível para a nossa tarefa.
- E obriga-nos a aprofundar na compreensão e conhecimento dessas ferramentas.
Porém, esse sempre é um bom investimento, já que ajuda a melhorar nosso trabalho diário e nos permite desfrutar do prazer de aprendermos algo novo.
Finalmente o meu colega, que também é muito educado, agradeceu a resposta. Mas como igualmente é pragmático e directo, logo quis saber se eu tinha identificado alguma boa prática. Resumindo, procurava uma lista de dicas 😬
As minhas dicas
Eis as práticas que sempre incluo nos meus prompts orientados desenvolver tarefas simples. Para aprenderes a escrever código complexo com ChatGPT recomendo começares polo post "An example of LLM prompting for programming".
- Evito a formalidade. Nada de "Bom dia", "poderia a senhora…", "muito obrigado", etc. Não sufras, o LLM não é um ser senciente e sempre é bom pouparmos alguns tokens.
- Começo sempre com um "As a [rol name]". Com isto procuro formatar a resposta do modelo de uma maneira mais específica.
- Incluo detalhes com terminologia especializada. A ideia é fornecer o contexto suficiente para evitar o modelo ter de adivinhar o que eu quero dizer.
- Procuro ser o mais sintético possível, em equilíbrio com o anterior ponto. Quanto mais breve e direto é o nosso prompt, mais concisa será a resposta, além de continuarmos a popuar alguns tokens.
- Limpo o código de exemplo. Tudo o que não é precisso para desenvolver a tarefa só achega ruido e malgasto de tokens.
O que pretendia ser um rascunho de um método para aprender a conversar com as máquinas, transformou-se em outro post com dicas para usar o ChatGPT. Achas que o propósito de cada uma faz sentido com o funcionamento dos LLMs?