Skip to content

Engenharia de Prompt – Parte 1

A engenharia de prompt refere-se ao processo de elaboração de uma instrução que consiga um modelo para gerar o resultado desejado. A engenharia de prompt é a técnica de adaptação de modelo mais fácil e mais comum. Você deve tirar o máximo proveito do prompt antes de tentar outras técnicas que consumam mais recursos, como o finetuning.

Experimentos com prompt devem ser conduzidos com o mesmo rigor que qualquer experimento de machine learning, com experimentação e avaliação sistemáticas.

Introdução ao prompt

Um prompt é uma instrução dada a um modelo para executar uma tarefa. Um prompt geralmente consiste em uma ou mais das seguintes partes:

  • Descrição da tarefa: O que você deseja que o modelo faça, incluindo a função que você deseja que o modelo desempenhe e o formato de saída.
  • Exemplo(s) de como realizar esta tarefa: Por exemplo, se você deseja que o modelo detecte toxicidade em texto, você pode fornecer alguns exemplos que identifiquem a toxicidade e a não toxicidade.
  • A tarefa: A tarefa concreta que você deseja que o modelo execute, como a pergunta a ser respondida ou o livro a ser resumido.

Para o prompt funcionar, o modelo deve ser capaz de seguir as instruções. Se um modelo é ruim nisso, não importa o quão bom é o seu prompt, o modelo não será capaz de segui-lo.

Aprendizagem no Contexto: Zero Shot e Few-Shot

Ensinar aos modelos o que fazer a partir do prompt também é conhecido como aprendizado no contexto. Um artigo do GPT-3 demonstrou que os modelos de linguagem podem aprender o comportamento desejável a partir dos exemplos fornecidos no prompt, mesmo que esse comportamento desejável seja diferente do que o modelo foi originalmente treinado para fazer.

A aprendizagem no contexto permite que um modelo incorpore novas informações continuamente para tomar decisões, impedindo que ele fique desatualizado.

Cada exemplo fornecido no prompt é chamado de shot. Ensinar um modelo a aprender com exemplos no prompt também é chamado de aprendizado few-shot.

Exatamente quantos exemplos (shots) são necessários depende do modelo e da aplicação. Você precisará experimentar para determinar o número ideal de exemplos para suas aplicações.

Em uma análise de 2023 da Microsoft, o aprendizado few-shot levou a melhorias limitadas em comparação com o aprendizado zero-shot no GPT-4 e alguns outros modelos. Este resultado sugere que, à medida que os modelos se tornam mais poderosos, eles se tornam melhores em entender e seguir as instruções, o que
leva a um melhor desempenho com menos exemplos. No entanto, o estudo pode ter subestimado o impacto de exemplos few-shot em casos de uso com domínios específicos.

Prompt de sistema e prompt de usuário

Muitas APIs de modelo oferecem a opção de dividir um prompt em prompt do sistema e prompt de usuário. Você pode pensar no prompt do sistema como a descrição da tarefa e o prompt do usuário como a tarefa em si.

Prompt do sistema: você é um agente imobiliário experiente. Seu trabalho é ler cada divulgação com cuidado, avaliar de maneira justa a condição da propriedade com base nesta divulgação e ajudar seu comprador a entender os riscos e oportunidades de cada propriedade. Para cada pergunta, responda sucintamente e profissionalmente.

Prompt de usuário: Contexto: [Divulgacao.pdf] 
Pergunta: Resuma as reclamações de ruído, se houver, sobre essa propriedade. 
Resposta: 

Modelos de linguagem diferentes usam modelos de chat diferentes. O uso acidental do modelo de chat errado pode levar a problemas de desempenho desconcertantes. Pequenos erros ao usar um modelo, como uma linha extra nova, também podem fazer com que o modelo altere significativamente seus comportamentos.

Tamanho do contexto e eficiência do contexto

Quanta informação pode ser incluída em um prompt depende do limite de comprimento do contexto do modelo. O comprimento máximo do contexto dos modelos tem aumentado rapidamente nos últimos anos.

Nem todas as partes de um prompt são iguais. Pesquisas demonstraram que um modelo é muito melhor para entender as instruções dadas no início e no fim, do que aquelas dadas no meio do prompt.

Melhores práticas de engenharia de prompt

Escreva instruções claras e explícitas

  • Explique, sem ambiguidade, o que você deseja que o modelo faça.
  • Peça ao modelo para adotar uma persona.
  • Forneça exemplos.
  • Especifique o formato de saída: se desejar que o modelo seja conciso, informe-o. Se desejar que o modelo gere JSON, especifique quais devem ser as chaves no JSON. Dê exemplos, se necessário.

Forneça contexto suficiente

Assim como os textos de referência podem ajudar os alunos a se sair melhor em um exame, contexto suficiente pode ajudar os modelos a ter um melhor desempenho. O contexto também pode mitigar alucinações.

Como restringir o conhecimento de um modelo apenas ao seu contexto

Instruções claras, como “Resposta usando apenas o contexto fornecido”, juntamente a exemplos de perguntas que o modelo não deve ser capaz de responder, podem ajudar.

No entanto, não há garantia de que o modelo siga todas as instruções: o prompt, por si só, pode não produzir com segurança o resultado desejado. Realizar o finetuning do modelo em seu próprio corpo é outra opção, mas os dados de pré-treinamento ainda podem vazar para suas respostas. O método mais seguro é treinar um modelo exclusivamente no corpo de conhecimento permitido, embora isso geralmente não seja viável para a maioria dos casos de uso.

Quebrar tarefas complexas em sub-tarefas mais simples

Para tarefas complexas que requerem várias etapas, é ideal dividir essas tarefas em sub-tarefas. Em vez de ter um prompt gigante para toda a tarefa, cada sub-tarefa tem seu próprio prompt. Essas sub-tarefas são então unidas.

Enquanto os modelos estão melhorando para entender instruções complexas, eles ainda são melhores com as mais simples. A decomposição de prompt não apenas aumenta o desempenho, mas também oferece vários benefícios adicionais:

  • Monitoramento: Você pode monitorar não apenas a saída final, mas também todas as saídas intermediárias.
  • Depuração: Você pode isolar a etapa com problemas e corrigi-la de forma independente, sem alterar o comportamento do modelo nas demais etapas.
  • Paralelismo: Sempre que possível, execute etapas independentes em paralelo para economizar tempo.
  • Esforço: É mais fácil escrever prompts simples do que complexos.

Uma desvantagem da decomposição de prompt é que ela pode aumentar a latência percebida pelos usuários, especialmente para tarefas em que os usuários não vêem as saídas intermediárias.

Dê tempo ao modelo para pensar

Você pode incentivar o modelo a gastar mais tempo para “pensar” sobre uma pergunta, usando a cadeia de pensamento (Chain of Thought – COT) e um prompt de auto-crítica. COT significa explicitamente pedir ao modelo que pense passo a passo, cutucando-o em direção a uma abordagem mais sistemática à resolução do problema.

A maneira mais simples de fazer o COT é adicionar “pense passo a passo” ou “explique sua decisão” em seu prompt.

Autocrítica significa pedir ao modelo para verificar suas próprias saídas. Isso também é conhecido como autoavaliação. Semelhante ao COT, a autocrítica provoca o modelo a pensar criticamente sobre um problema.

Itere em seus prompts

A engenharia de prompt requer idas e vindas. À medida que você entende melhor um modelo, você terá melhores idéias sobre como escrever seus prompts.

Cada modelo tem suas peculiaridades. Um modelo pode preferir instruções do sistema no início do prompt, enquanto outro pode preferir no fim. Experimente seu modelo para conhecê-lo. Experimente instruções diferentes. Leia o guia de prompt fornecido pelo desenvolvedor de modelos (se existir algum).

À medida que você experimenta prompts diferentes, teste as alterações sistematicamente. Versione seus prompts.

Organize e versione seus prompts

É uma boa prática separar os prompts do código. Por exemplo, você pode colocar seus prompts em um arquivo prompt.py e referenciar esses prompts ao criar uma consulta de modelo.

Esta abordagem tem várias vantagens:

  • Reusabilidade: Vários aplicativos podem reutilizar o mesmo prompt.
  • Teste: o código e os prompts podem ser testados separadamente.
  • Legibilidade: Separar os prompts do código facilita a leitura de ambos.
  • Colaboração: Isso permite que especialistas no assunto colaborem e ajudem na criação de prompts sem se distrair com o código.

Na parte 2 do artigo sobre Engenharia de Prompt, nos aprofundaremos no aspecto de segurança de nossos prompts. Até lá!

Referências

Huyen, Chip. AI Engineering: Building Applications with Foundation Models

Comments

Comments (0)

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Previous
Next
Back To Top