Few-shot prompting é mostrar ao modelo alguns exemplos resolvidos de uma tarefa, cada um com uma entrada e a resposta que você quer, antes de dar a ele a entrada real. O modelo lê o padrão e o continua. Exemplos são o jeito mais rápido de fixar coisas difíceis de dizer em palavras: onde fica a fronteira entre duas categorias, a forma exata da saída ou a voz em que a sua equipe escreve.
Como o few-shot prompting funciona
Brown et al. 2020, "Language Models are Few-Shot Learners", mostraram que o GPT-3 conseguia aprender uma tarefa nova a partir de algumas demonstrações colocadas no prompt, sem nenhum retreinamento. Isso se chama aprendizado em contexto (in-context learning): nada no modelo muda, e os exemplos só afetam a resposta àquele prompt. Da próxima vez, os exemplos precisam estar lá de novo.
Os nomes seguem o número de exemplos. Um prompt zero-shot não tem nenhum, um prompt one-shot tem um, e um prompt few-shot tem vários, normalmente entre dois e alguns poucos.
Zero-shot e few-shot lado a lado
As duas abas abaixo pedem a mesma coisa com a mesma instrução. A única diferença é que a segunda aba acrescenta quatro exemplos com rótulo antes do chamado real.
Categoria: bug
O usuário redefiniu a senha, mas a nova senha é rejeitada no login. Isso aponta para um problema no fluxo de redefinição de senha, então provavelmente é um bug no sistema de autenticação.
Os exemplos mudaram duas coisas. A primeira é o formato: a resposta zero-shot acrescentou um título em negrito e uma explicação, enquanto a resposta few-shot seguiu os exemplos e deu uma palavra, que um script consegue ler diretamente. A segunda é a decisão. "Bug" é uma leitura razoável do chamado, e a maioria das pessoas escolheria essa. Mas esta equipe classifica problemas de login como conta, e o terceiro exemplo diz isso sem uma única palavra de explicação. Nenhuma instrução mencionou essa regra; os exemplos a carregaram.
Quantos exemplos usar
Comece com dois a cinco. Isso basta para a maioria das tarefas de formatação e classificação e mantém o prompt curto.
- Um exemplo mostra um formato, mas o modelo tende a copiá-lo de perto demais. Se o único exemplo for um resumo de 30 palavras sobre uma mudança de preço, o próximo resumo pode sair com 30 palavras e estranhamente focado em dinheiro.
- Dois ou três exemplos diferentes deixam o modelo ver o que eles têm em comum (o padrão) e o que varia (os detalhes).
- Em classificação, inclua pelo menos um exemplo para cada rótulo e depois acrescente os casos limítrofes que deram errado sem exemplos.
- Passando de alguns poucos, os ganhos costumam diminuir enquanto cada requisição fica mais longa, o que custa tokens e tempo. Se você precisa de dezenas de exemplos para acertar, talvez a tarefa precise de uma instrução mais clara ou de outra abordagem.
Como escolher bons exemplos
O modelo aprende com tudo o que os seus exemplos têm em comum, não só com a coisa que você queria ensinar.
- Cubra os casos difíceis. Exemplos fáceis ensinam pouco. Os exemplos mais úteis ficam na fronteira, como o chamado de login acima.
- Varie a superfície. Misture entradas curtas e longas, assuntos diferentes e formas diferentes de dizer as coisas. Se todas as avaliações positivas dos seus exemplos forem curtas, o modelo pode tratar o tamanho como o sinal.
- Equilibre os rótulos e embaralhe a ordem. Os modelos tendem a puxar para o rótulo que aparece mais vezes nos exemplos e para o que aparece por último.
- Confira cada exemplo. Um erro em um exemplo é uma instrução para cometer esse erro.
- Use entradas reais. Exemplos tirados dos seus dados de verdade se parecem muito mais com o que o modelo vai ver do que exemplos inventados.
Mantenha o formato idêntico
Todos os exemplos devem usar os mesmos rótulos, separadores e maiúsculas, e a entrada real deve ter exatamente a mesma cara das entradas de exemplo. No prompt dos chamados, cada exemplo é "Chamado:" e depois "Rótulo:", e o prompt termina com uma linha "Rótulo:" em aberto, o que deixa só uma coisa natural para escrever em seguida.
Para exemplos mais longos, envolva cada um em marcadores claros, como tags <example>, para que o modelo saiba onde um termina e o próximo começa; veja delimitadores e tags XML. Na API, você também pode fornecer os exemplos como turnos anteriores da conversa: uma mensagem do usuário com a entrada de exemplo e depois uma mensagem do assistente com a resposta, repetindo para cada exemplo.
Prompts few-shot dão bons templates de prompt reutilizáveis: a instrução e os exemplos ficam fixos e só a entrada muda. O bloco abaixo reescreve uma mensagem de commit no estilo de uma equipe. Digite a sua própria mensagem no campo e desligue a parte dos exemplos para ver quanto do estilo eles carregam.
feat(search): faz a busca ignorar maiúsculas e minúsculas
Nenhuma das regras está escrita: um tipo em minúsculas, um escopo entre parênteses, um verbo no presente, nenhum ponto final. Os exemplos mostram as quatro, e a resposta as segue. Com os exemplos desligados, o modelo ainda melhora a mensagem, mas precisa adivinhar um estilo, e nada garante que o palpite dele bata com o seu.
Exemplos few-shot também podem demonstrar raciocínio, e não só respostas. Exemplos resolvidos que mostram os passos são a forma como o chain of thought foi apresentado pela primeira vez. Com modelos que raciocinam internamente antes de responder, limite os exemplos a entradas, respostas e formato: passos de raciocínio roteirizados podem desviá-los de um caminho melhor, e alguns fornecedores recomendam tentar zero-shot primeiro com esses modelos.
Perguntas frequentes
O que é few-shot prompting?
Few-shot prompting é incluir no prompt alguns exemplos de uma tarefa, cada um com uma entrada e a saída correta, antes da entrada real. O modelo continua o padrão que os exemplos definem. É mais útil para categorias próprias, formatos incomuns e estilos da casa, que são mais fáceis de mostrar do que de descrever.
Quantos exemplos um prompt few-shot deve ter?
De dois a cinco é um bom ponto de partida para a maioria das tarefas. Em classificação, inclua pelo menos um exemplo por rótulo, mais os casos limítrofes em que o modelo errou sem exemplos. Passando de alguns poucos, cada exemplo extra costuma ajudar menos e deixa cada requisição mais longa.
O que é one-shot prompting?
One-shot prompting dá ao modelo exatamente um exemplo. Isso basta para mostrar um formato, mas o modelo tende a copiar esse único exemplo de perto demais, incluindo o tamanho, a redação e até o assunto. Um segundo exemplo, diferente, mostra ao modelo quais características são o padrão e quais são acidentes.
O modelo aprende com os meus exemplos?
Só no pedido atual. Os exemplos moldam a resposta por estarem no contexto; os pesos do modelo não mudam, e nada é lembrado na próxima conversa. Isso se chama aprendizado em contexto (in-context learning), e é por isso que um prompt few-shot precisa levar os exemplos toda vez que você o usa.
Exemplos ruins podem piorar a saída?
Podem. O modelo copia tudo o que os exemplos têm em comum, incluindo erros, tamanho e um tom que você não pretendia. Se a maioria dos exemplos tem o mesmo rótulo, o modelo também tende a puxar para esse rótulo. Confira se os seus exemplos estão corretos, variados e equilibrados.