Prompting e prática · Leitura de 7 min

Few-shot: ensine a IA com exemplos em vez de instruções

Às vezes explicar a tarefa é difícil, mas mostrar dois exemplos esclarece tudo. A IA aprende como nós: observando.

Pense na última vez em que você tentou ensinar algo a alguém e as palavras não bastaram. Você explicava como dobrar um guardanapo, como cumprimentar numa reunião, como acertar o tom de um e-mail, e a outra pessoa continuava sem entender. Até que você fez uma coisa simples: "olha, assim". Fez uma vez na frente dela e, de repente, ficou claro. Isso, transposto para um prompt, é o que é o few-shot prompting: ensinar a IA com dois ou três exemplos em vez de uma instrução longa.

A palavra "shot" aqui significa "exemplo", "demonstração". Quando você não dá nenhum e só descreve a tarefa, isso é zero-shot (zero exemplos). Quando você dá alguns exemplos resolvidos antes de pedir o seu, isso é few-shot (poucos exemplos). Você não mudou o modelo, não o retreinou: apenas colocou amostras dentro da mesma mensagem.

01 · a ideiaMostrar em vez de explicar

Há tarefas fáceis de descrever e tarefas fáceis de mostrar. "Traduza isto para o inglês" se descreve em três palavras e funciona sem exemplos. Mas "classifique estes comentários com o meu critério, não o seu" é quase impossível de explicar no abstrato. Onde termina o "neutro" e começa o "irritado"? Você sabe quando vê, mas não sabe dizer. É aí que mostrar vence.

Com o few-shot, em vez de redigir um regulamento, você cola exemplos já resolvidos por você. O modelo olha o padrão (o que entra, o que sai, em que formato) e continua a série com o seu caso novo. Ele não está "aprendendo" no sentido de guardar algo para amanhã: está reconhecendo o padrão que você colocou na frente dele e completando-o. Por isso às vezes se chama aprendizado em contexto: o aprendizado acontece dentro do prompt e é esquecido ao terminar.

Um exemplo bem escolhido vale mais do que um parágrafo de instruções.

Figura 1 · zero-shot vs. few-shot, lado a lado
Zero-shot Classifique o sentimento: "A entrega chegou atrasada" → ? Sem exemplos. O modelo adivinha seu critério e formato. Few-shot "Serviço impecável" → positivo "Nunca responderam" → negativo "A entrega chegou atrasada" → ? Dois exemplos fixam o critério e o formato. O terceiro os imita.
O mesmo caso novo ("A entrega chegou atrasada") com e sem exemplos. À direita, os dois exemplos resolvidos dizem ao modelo tanto o que decidir quanto em que formato responder.

02 · a práticaComo se monta um prompt few-shot

A receita é mais simples do que parece. Um prompt few-shot tem três partes: uma instrução breve, alguns pares de exemplo (entrada → saída) e, no final, a sua entrada nova sem resolver, para que o modelo a complete. Veja este molde para classificar o tom de mensagens de clientes:

Molde de um prompt com exemplos

Classifique o tom de cada mensagem como reclamação, dúvida ou agradecimento.
"Até que horas vocês atendem hoje?" → dúvida
"Faz três dias que espero e ninguém responde" → reclamação
"Obrigado, tudo chegou perfeito" → agradecimento
"Cobraram duas vezes o mesmo pedido" → ______

O modelo vê três exemplos com a mesma forma e, ao chegar no quarto, completa "reclamação" com toda naturalidade. Não é preciso explicar o que é uma reclamação: ele deduziu do padrão. E algo igualmente valioso: ele aprendeu o seu formato de saída. Você pediu uma única palavra em minúscula, e é isso que ele vai devolver, não um parágrafo explicando a decisão.

Esse controle do formato é, na prática, a razão mais comum para usar o few-shot. Se você vai processar a resposta com um programa (colocá-la numa tabela, num JSON, numa planilha), precisa que ela sempre saia com a mesma cara. Descrever o formato com palavras é frágil; mostrar três saídas idênticas o fixa muito melhor.

A ideia ganhou fama em 2020 com um trabalho de Tom Brown e sua equipe, cujo título diz tudo: Language Models are Few-Shot Learners [1]. Ali mostraram que um modelo suficientemente grande, com apenas algumas demonstrações no prompt, resolvia tarefas para as quais não havia sido especificamente treinado. Não se ajustavam pesos nem se retreinava nada: bastavam os exemplos dentro da mensagem. Essa descoberta é a que você usa sem pensar toda vez que cola um par de amostras antes da sua pergunta.

03 · o critérioQuando dar exemplos e quando não

Few-shot nem sempre é melhor. Tem um custo real: cada exemplo que você cola ocupa tokens, ou seja, entra na conta que se paga e no limite de contexto do modelo. Três exemplos curtos não pesam; vinte exemplos longos, sim. Então a pergunta não é "coloco exemplos?", mas "esta tarefa precisa deles?".

A tabela abaixo resume quando costuma valer a pena e quando você está gastando demais.

Tabela 1 · quando o few-shot supera o zero-shot
SituaçãoMelhor abordagemPor quê
Tarefa comum e bem nomeada (traduzir, resumir)Zero-shotO modelo já a viu mil vezes no treinamento; o exemplo sobra.
Formato de saída estrito (JSON, uma palavra, tabela)Few-shotOs exemplos fixam a forma exata melhor do que descrevê-la.
Critério próprio e difuso ("meu" tom, "minha" categoria)Few-shotVocê mostra seu critério com casos; não é preciso explicá-lo no abstrato.
Casos-limite ou ambíguos que você quer resolver "assim"Few-shotUm exemplo do caso raro diz o que fazer quando houver dúvida.
Contexto muito limitado ou custo apertadoZero-shotCada exemplo gasta tokens; se a tarefa é simples, não compensa.

Fonte: síntese a partir do guia da OpenAI sobre estratégias de prompting [2] e do guia aberto OpenAI Cookbook / Prompt Engineering Guide [3].

Dois conselhos de bom senso ao escolher os exemplos. Primeiro, que sejam representativos: se seus casos reais incluem mensagens com erros de digitação, coloque uma com erros; caso contrário, o modelo se surpreende quando aparecer. Segundo, cuide do equilíbrio: se os quatro exemplos que você pôs são "reclamação", o modelo pode pegar o vício de responder "reclamação" a tudo. Varie as categorias e, se a ordem importa, misture-as.

Os exemplos não são decoração do prompt: são a parte que ensina.

Há um caso em que o few-shot fica especialmente potente, e é quando você o combina com o raciocínio passo a passo. Se seus exemplos mostram não só a resposta final, mas também o raciocínio que leva a ela, o modelo aprende a raciocinar dessa forma antes de responder. Mas isso já é outra técnica que merece a sua própria entrada.

Por enquanto, fique com o essencial: quando explicar for difícil, mostre. Cole dois ou três exemplos resolvidos por você, deixe o seu em branco no final e deixe o modelo continuar o padrão. É a forma mais humana de ensinar uma máquina: a mesma com que um dia alguém ensinou você, dizendo simplesmente "olha, assim".

Fuentes

  1. Brown, T. et al. (2020). Language Models are Few-Shot Learners. Advances in Neural Information Processing Systems (NeurIPS) 33. arXiv:2005.14165. (Introduz o aprendizado em contexto com poucos exemplos.)
  2. OpenAI. Prompt engineering: Strategy: Provide examples. OpenAI Platform Documentation. platform.openai.com/docs/guides/prompt-engineering.
  3. DAIR.AI. Few-Shot Prompting. Prompt Engineering Guide. promptingguide.ai/techniques/fewshot.

Aprenda mais sobre IA

Ver tudo Aprenda IA