Pular para o conteúdo
mnzes

O que são prompts baseados em exemplos?

PorDiógenes MenezesAprendendo IA em público

6 min de leitura

Prompt baseado em exemplo é mostrar ao modelo o que você quer em vez de descrever. Em vez de explicar em três frases que a resposta deve vir em JSON com o valor sem símbolo de moeda, você mostra um caso resolvido e o modelo copia o padrão. As modalidades mais conhecidas são o prompt one-shot, com um exemplo, e as variações com nenhum ou vários. É uma das técnicas fundamentais da engenharia de prompts.

O nome muda conforme a quantidade, mas o mecanismo é o mesmo.

zero-shotnenhum exemploone-shot1 exemplofew-shot2 a ~20many-shotcentenasexemplos dados ao modelo →
Figura 1As quatro modalidades são o mesmo mecanismo com quantidades diferentes. O nome muda no número de exemplos, não na técnica.

“Shot” aqui significa exemplo, não tentativa. É uma confusão comum: zero-shot não é “perguntar uma vez sem insistir”, é “não dar nenhum exemplo resolvido”. O termo vem da literatura de aprendizado com poucos dados e pegou depois que o paper do GPT-3 o usou no título1.

O que um exemplo comunica que uma instrução não comunica

A diferença prática aparece em coisas que são difíceis de descrever com palavras e triviais de mostrar.

Considere pedir uma classificação de ticket de suporte. Sem exemplo, você escreveria algo assim:

Classifique este ticket em uma categoria. Use uma palavra só, em minúscula, sem pontuação. As categorias possíveis são cobrança, técnico, cancelamento e outros. Se não tiver certeza, use outros.

Com um exemplo:

Classifique o ticket.

Ticket: “Fui cobrado duas vezes esse mês” Categoria: cobranca

Ticket: “…”

O segundo é menor e resolve algo que o primeiro não resolveu direito: você escreveu “cobrança” com cedilha na instrução, mas quer receber sem acento para casar com o seu banco de dados. O exemplo comunica isso sem uma frase a mais.

classificarum ticketo modelo inventaas categoriaso modelo usaas suas categoriassem exemplocom exemplo
Figura 2Sem exemplo o modelo precisa inventar o espaço de respostas. Com exemplo ele usa o seu, mesmo que você nunca tenha listado as opções.

Há um resultado experimental que ajuda a entender o que está acontecendo. Um trabalho de 2022 testou o que acontece quando você embaralha os rótulos dos exemplos de propósito, associando a entrada errada à saída errada. O desempenho cai bem menos do que se espera2. A leitura razoável é que o exemplo serve principalmente para dizer ao modelo qual é o formato e qual é o conjunto de respostas possíveis, e menos para ensinar o mapeamento entre um e outro.

Isso não é licença para escrever exemplo errado. É uma pista sobre onde vale investir atenção: garantir que o formato do exemplo é exatamente o que você quer receber rende mais que passar meia hora escolhendo o caso semanticamente mais representativo.

Quantos exemplos

O ganho não é linear, e tratá-lo como se fosse é o erro mais comum.

0 → 1 exemplo1 → 5 exemplos5 → 20 exemplosresolve o formatoo maior saltoresolve a fronteiraentre casos ambíguosganho pequenocusto linear em tokens
Figura 3O ganho não é linear. O primeiro exemplo resolve o formato, os seguintes resolvem ambiguidade, e depois o custo cresce mais que o retorno.

De zero para um é o maior salto, e resolve formato. Se a sua reclamação com o modelo é “ele responde certo mas do jeito errado”, um exemplo basta.

De um para cinco resolve fronteira. Um exemplo mostra um lado da linha entre cobrança e financeiro; ele não mostra onde a linha passa. Para isso você precisa de casos dos dois lados, e aí já saiu do one-shot.

De cinco para vinte costuma render pouco, e o custo é linear: aqueles tokens vão em toda chamada, para sempre. Só compensa quando a tarefa tem muitas categorias ou casos de borda que não se descrevem.

Existe uma faixa acima disso, com centenas de exemplos, que se tornou viável com as janelas de contexto grandes. O ganho volta a aparecer em algumas tarefas3, mas o custo por chamada fica alto o suficiente para valer comparar com treinar um modelo pequeno.

Onde exemplo atrapalha

Três situações em que acrescentar exemplo piora.

Tarefa aberta. Se você pede um texto criativo e dá um exemplo, o modelo tende a produzir variações daquele exemplo. Você reduziu o espaço de resposta sem querer.

Um único caso de borda como exemplo. Se o exemplo é excepcional, o modelo aprende que tudo é excepcional. Exemplo deve ser mediano.

Modelo de raciocínio. Modelos treinados para raciocinar antes de responder já fazem o trabalho internamente. Dar exemplos com o raciocínio escrito costuma atrapalhar em vez de ajudar, porque impõe um formato de pensamento que não é o que o modelo aprendeu.

Onde colocar os exemplos

Se os exemplos são fixos — sempre os mesmos, independentemente da entrada — eles pertencem ao system prompt. Isso os coloca no prefixo estável da requisição, que é o que o prompt caching consegue reaproveitar, e você passa a pagar uma fração do preço por eles.

Se os exemplos são escolhidos em função da entrada, por similaridade com o caso atual, eles precisam ir na mensagem do usuário. Você perde o cache, mas ganha relevância. Vale a pena quando o domínio é amplo e nenhum conjunto fixo de cinco exemplos cobre bem.

Por onde começar

  1. Escreva a versão sem exemplo primeiro. É mais barata e às vezes basta.
  2. Se o formato sair errado, acrescente um exemplo com a saída exatamente como você quer receber.
  3. Se aparecer confusão entre categorias, acrescente casos dos dois lados da fronteira que está sendo confundida.
  4. Meça. Rode os mesmos 20 casos reais nas três versões. A diferença aparece em minutos e substitui qualquer regra geral, inclusive as deste artigo.

O passo 4 é o que quase ninguém faz, e é o único que responde a pergunta para o seu caso específico.

Footnotes

  1. O uso de “shot” nesse sentido e a demonstração de que modelos grandes aprendem uma tarefa a partir de exemplos no contexto vêm do trabalho que apresentou o GPT-3.

  2. Min et al. (2022) mostraram que trocar os rótulos corretos por rótulos aleatórios degrada muito menos do que se esperava, o que sugere que a demonstração especifica principalmente formato e espaço de rótulos.

  3. Agarwal et al. (2024) mediram o comportamento com centenas a milhares de exemplos, viável a partir das janelas de contexto grandes.

Perguntas frequentes

O que significa 'shot' em prompt?
Shot quer dizer exemplo. Zero-shot é nenhum exemplo, one-shot é um, few-shot são alguns. O termo vem da literatura de aprendizado com poucos dados e ficou porque o paper do GPT-3 o usou no título. Não tem relação com tentativas: não é quantas vezes você pergunta.
Dar exemplos sempre melhora o resultado?
Não. Exemplo ajuda quando o formato ou o espaço de respostas é ambíguo. Em tarefa aberta, onde qualquer formato serve, o exemplo só gasta contexto e ainda restringe a resposta sem necessidade. Em modelo de raciocínio, exemplo de raciocínio costuma atrapalhar.
Quantos exemplos devo dar?
Comece em zero. Se o formato sair errado, um exemplo resolve. Se houver casos ambíguos ou fronteira entre categorias, use de três a cinco cobrindo cada lado. Acima disso o ganho é pequeno e o custo em tokens cresce a cada chamada.
Os exemplos ficam no system prompt ou na mensagem do usuário?
Depende do que eles ensinam. Exemplo que define a tarefa em si, estável entre chamadas, vai no system prompt e se beneficia de prompt caching. Exemplo escolhido em função da entrada específica vai na mensagem do usuário, porque muda a cada requisição.
O modelo aprende com os exemplos que eu dou?
Não de forma permanente. Os pesos não mudam. O exemplo ocupa espaço na janela de contexto daquela chamada e desaparece quando ela termina. Isso se chama aprendizado em contexto, e o nome engana: nada é aprendido no sentido de ficar guardado.
Prompt com exemplo substitui fine-tuning?
Na maioria dos casos, sim. Fine-tuning só compensa quando o volume de chamadas é alto o bastante para o custo de treino se pagar, ou quando o comportamento desejado não cabe em exemplos. Comece por exemplos: é mais rápido de iterar e não cria um modelo para manter.

Referências

  1. Brown, T. et al.. Language Models are Few-Shot Learners (2020)arXiv:2005.14165
  2. Min, S. et al.. Rethinking the Role of Demonstrations: What Makes In-Context Learning Work? (2022)arXiv:2202.12837
  3. Agarwal, R. et al.. Many-Shot In-Context Learning (2024)arXiv:2404.11018