Domínio 4 — Prompt Engineering & Structured Output · Lição 3 de 7

Few-shot prompting

Objetivos de aprendizagem

Quando few-shot é a técnica certa

Few-shot prompting — incluir exemplos completos de entrada e saída no prompt — é a técnica mais eficaz quando instruções detalhadas sozinhas continuam produzindo saída inconsistente. Descrever um formato em prosa deixa margem de interpretação; mostrar o formato elimina essa margem. O mesmo vale para decisões ambíguas: é mais fácil demonstrar o julgamento correto do que descrevê-lo.

Dois usos principais cobrados na prova:

2–4 exemplos direcionados, com raciocínio

Mais exemplos não é melhor. A recomendação da prova é 2 a 4 exemplos direcionados exatamente aos casos ambíguos observados, cada um mostrando o raciocínio de por que uma ação foi escolhida em vez da alternativa plausível. Exemplos direcionados a casos óbvios desperdiçam tokens e não corrigem o problema; dezenas de exemplos aumentam custo e podem enviesar o modelo para "pattern matching" superficial.

Generalização: bons exemplos não ensinam o modelo a repetir casos decorados — ensinam o princípio de julgamento, que o modelo aplica a padrões que nunca apareceram nos exemplos. Por isso a prova prefere "2–4 exemplos com raciocínio" a "um exemplo para cada caso possível" (impraticável e frágil).

Exemplos contrastivos: aceitável vs problema real

Para reduzir falsos positivos em revisão de código (Lição 2), a variante mais poderosa é o par contrastivo: um exemplo de código aceitável que não deve ser sinalizado ao lado de um exemplo do problema genuíno que deve — com a explicação da diferença. Isso desenha a fronteira de decisão de forma muito mais precisa do que qualquer prosa.

Few-shot em extração: reduzir alucinação e campos vazios

Em extração de dados de documentos heterogêneos, few-shot resolve dois sintomas clássicos:

import anthropic

client = anthropic.Anthropic()

# 2 exemplos direcionados: (1) formato tabular, (2) campo ausente -> null.
# Cada exemplo mostra o raciocínio e o formato exato da saída.
FEW_SHOT = """<example>
<document>
NF-e 8812 | Fornecedor: ACME Ltda | Total: R$ 1.240,50 | Venc.: 10/10/2026
</document>
<reasoning>
Documento tabular: total e vencimento explícitos. Converto R$ 1.240,50
para número decimal e a data para ISO 8601.
</reasoning>
<output>{"supplier": "ACME Ltda", "total": 1240.50,
 "due_date": "2026-10-10", "payment_method": null}</output>
</example>

<example>
<document>
Recibo: recebi de Beta Corp a quantia referente aos serviços de setembro.
</document>
<reasoning>
Documento narrativo sem valor nem data. NÃO invento valores:
campos ausentes no documento saem como null.
</reasoning>
<output>{"supplier": "Beta Corp", "total": null,
 "due_date": null, "payment_method": null}</output>
</example>"""

def extract(document: str) -> str:
    response = client.messages.create(
        model="claude-opus-5",
        max_tokens=1024,
        system="Você extrai dados de documentos fiscais. Siga os exemplos.",
        messages=[{
            "role": "user",
            "content": FEW_SHOT
            + "\n\n<document>\n" + document + "\n</document>\n"
            + "Extraia no mesmo formato de <output>.",
        }],
    )
    return next(b.text for b in response.content if b.type == "text")

print(extract("Boleto 991 - Gama S.A. - R$ 320,00 - vencimento 01/11/2026"))

Atenção: few-shot melhora consistência e julgamento, mas não é garantia sintática de JSON válido. Para garantir a sintaxe, combine com structured outputs (output_config.format) ou tool use com strict: true — Lição 4. As técnicas são complementares: o schema garante a forma; os exemplos garantem o conteúdo certo dentro da forma.

Pegadinhas da prova

Resumo em 5 linhas

  1. Few-shot é a técnica mais eficaz quando instruções detalhadas continuam gerando saída inconsistente.
  2. Use 2–4 exemplos direcionados aos casos ambíguos reais, mostrando o raciocínio da escolha.
  3. Exemplos demonstram o formato exato de saída e ancoram consistência entre execuções.
  4. Pares contrastivos (aceitável vs problema real) reduzem falsos positivos e ensinam a fronteira de decisão.
  5. Em extração, exemplos com formatos variados e casos "campo ausente → null" reduzem alucinação.

Documentação oficial

Questões de fixação

1. Mesmo com instruções detalhadas, o agente de suporte escolhe a ferramenta errada em pedidos ambíguos (ex.: "problema com minha compra" pode ser pedido, cobrança ou entrega). Qual abordagem o exame considera mais eficaz?

2. Um pipeline extrai dados de laudos técnicos. Quando o laudo usa medições informais ("aproximadamente dois metros"), o modelo inventa valores precisos; quando o laudo é narrativo, campos obrigatórios voltam vazios. Qual mudança de prompt ataca os dois sintomas?

3. Por que o exame recomenda incluir no few-shot um par "código aceitável que NÃO deve ser sinalizado" + "problema genuíno que deve"?

4. A saída do revisor de PRs varia de formato a cada execução, dificultando o parsing para postar comentários inline. As instruções já descrevem os campos desejados. Qual é o próximo passo mais eficaz?