Exemplos Chumbados (Hardcoded Few-Shots) é um smell de IA, ou seja, um sinal de problema em sistemas com LLM, do grupo Impeditivos de mudança. Os exemplos estão dentro do código e mudar um exige deploy.
A triagem de chamados de uma empresa de software usa exemplos para classificar. Eles vivem numa constante, no meio do código (anonimizado):
# classifier.pyFEW_SHOTS = [ ("Não consigo acessar o painel", "acesso"), ("Cobrança em duplicidade no cartão", "cobranca"), ("O relatório de vendas está vazio", "bug"), # TODO: pedir ao time de ops os exemplos de integração]
O time de operações percebeu que chamados sobre integração com ERP estão caindo em “bug” quando deveriam ir para “integracao”. Eles sabem exatamente quais exemplos ajudariam. Para mudar, precisam abrir um ticket para engenharia, esperar alguém pegar, revisar o PR e esperar o deploy da semana seguinte. O TODO está ali há quatro meses.
Enquanto o ticket anda, o modelo continua vendo só três classes. Um chamado de “o webhook do ERP não dispara a NF-e” vira bug de relatório, porque o exemplo mais próximo é o relatório vazio.
Sinais de Exemplos Chumbados:
Exemplos de prompt ficam em constantes ou strings no código-fonte.
Mudar um exemplo exige pull request, revisão e deploy.
Quem entende do domínio (operações, atendimento) não consegue editar os exemplos.
Não há histórico de por que cada exemplo entrou.
Os exemplos do código e os casos do eval estão misturados ou são os mesmos.
flowchart LR
O((("1. Time de operações"))):::human --> T["2. Ticket para engenharia"]:::tool
T --> PR["3. PR e revisão"]:::tool
PR --> D["4. Deploy semanal"]:::tool
D --> P(["5. Exemplo novo no prompt"]):::llm
Quem conhece o problema não tem acesso aos exemplos.
A mudança vira um pedido para outro time.
Um engenheiro faz uma mudança de texto como se fosse de código.
A correção espera o ciclo de deploy.
Semanas depois, o exemplo entra.
O smell não é “exemplos no git”. É o ciclo: só engenharia mexe, só no deploy, sem dono nem motivo gravado.
Por que acontece
Começou como protótipo. A constante no código era o jeito mais rápido de testar. O protótipo foi para produção com o TODO na linha 7.
Prompt tratado como código. Por estar no repositório, passou a seguir o ciclo do código: PR, CI de aplicação, deploy semanal. Texto de domínio não precisa desse ciclo.
Não havia outro lugar. Ninguém criou um armazenamento de exemplos com versão e permissão.
Medo de ops quebrar produção. Sem eval na publicação, a engenharia vira o único gate. O gate certo é o eval, não o deploy.
Quanto custa ignorar
Lentidão. Correções simples demoram semanas. No atendimento por WhatsApp, quatro meses de ERP classificado como bug é fila no time errado.
Conhecimento perdido. Quem sabe quais exemplos ajudariam desiste de pedir.
Engenharia ocupada com texto. Pessoas caras fazem mudanças que não são de engenharia.
Risco. Sem eval separado, um exemplo novo pode piorar outra categoria sem ninguém ver.
Contaminação. Se os mesmos 3 exemplos do código são o eval, o eval sempre passa e não vê o ERP.
Sempre que os exemplos precisam mudar com frequência ou por pessoas fora da engenharia. Eles vão para um conjunto versionado, editável com revisão, e entram no prompt na hora do pedido. Destinos: Seletor de Exemplos e Dataset de Ouro.
O destino tem três regras que o time esquece quando “só joga numa planilha”:
Versão imutável. Publicar cria erp-triage@14, não sobrescreve a linha 4.
Eval antes de valer. Os novos exemplos de integração não podem derrubar a acurácia de “cobranca”. O conjunto de eval é outro conjunto.
Quem conhece o domínio edita. Engenharia constrói o cano (schema, permissão, seletor). Ops escolhe os exemplos.
Um YAML no repositório, com ops abrindo PR só naquele arquivo e um job aplicando depois do eval, já é um dataset. Uma constante em classifier.py não é.
O que você ganha
Quem conhece o domínio edita os exemplos, com revisão e histórico.
Mudanças entram em minutos, depois de passar no eval, sem deploy de código.
Cada exemplo tem dono, motivo e data.
Exemplos e casos de eval ficam separados.
Quando ignorar
Exemplos estáveis e técnicos. Exemplos de formato que mudam uma vez por ano podem ficar no código.
Time pequeno, mesma pessoa. Se quem entende do domínio é quem faz o deploy, o custo é menor. O ganho de versionar e separar do eval continua.
É esse smell?
Perguntas rápidas
O que é Exemplos Chumbados?
Exemplos Chumbados (Hardcoded Few-Shots) é um smell de IA, ou seja, um sinal de problema em sistemas com LLM, do grupo Impeditivos de mudança. Os exemplos estão dentro do código e mudar um exige deploy.