Prompt Sem Versão (Unversioned Prompt) é um smell de IA, ou seja, um sinal de problema em sistemas com LLM, do grupo Impeditivos de mudança. Ninguém sabe qual versão do prompt gerou a resposta que o cliente reclamou.
Um pipeline de conteúdo gera posts para o blog de uma marca. Um deles viralizou, e o time de marketing quer outros iguais. A conversa no canal do time (anonimizada):
mkt: qual prompt gerou o post sobre home office? queremos repetireng: o prompt atual é este aquimkt: testamos, não sai parecidoeng: então mudou depois. o post é de 12/08, deixa eu ver o giteng: o prompt está no banco, numa tabela de config. não tem históricoeng: alguém editou pelo painel admin em agosto, mas não sei quando nem o quê
O post existe. O prompt que o gerou, não mais.
O mesmo buraco aparece quando um cliente pede, com base na LGPD, o que o assistente fez com os dados dele. O log tem a resposta. Não tem o texto que a produziu. Sem versão, não há auditoria de verdade.
Sinais de Prompt Sem Versão:
O prompt pode ser editado (em código, banco ou painel) sem gerar uma versão nova com identificador.
O trace ou o log não registram qual versão do prompt gerou cada resposta.
Não dá para reproduzir uma resposta antiga.
Reclamações sobre uma resposta de semanas atrás não têm como ser investigadas.
Voltar a uma versão anterior exige lembrar o texto antigo.
flowchart LR
E((("1. Alguém edita o prompt"))):::human --> P[("2. Prompt sobrescrito")]:::store
P --> M(["3. Respostas novas"]):::llm
M --> L[("4. Log sem versão")]:::store
L --> Q{"5. Qual prompt gerou isto?"}
Alguém melhora o prompt.
A versão anterior deixa de existir.
As respostas mudam.
O registro guarda a resposta, mas não a versão que a gerou.
Semanas depois, ninguém consegue responder a pergunta.
Versionar o arquivo no git e carregar latest no runtime, sem gravar o identificador no span, deixa o mesmo buraco. O histórico existe no repositório. A execução não aponta para ele.
Por que acontece
Prompt editável em produção. Um painel admin ou uma tabela de configuração permite mudar sem deploy, e sem histórico. A agilidade come o rastro.
Mudanças pequenas parecem inofensivas. “Só ajustei uma palavra” não parece merecer uma versão. A palavra era a que prendia o tom do post viral.
O trace não tem o campo. Ninguém pensou em registrar a versão do prompt junto com a chamada. O span tem modelo, tokens, latência. Não tem prompt_version.
latest parece simples. O código pede sempre a última. No dia da reclamação, a última já é outra.
Confundir arquivo versionado com execução versionada. O git tem o histórico. A execução, se não gravar o hash, aponta para o vazio.
Quanto custa ignorar
Bons resultados não se repetem. O que funcionou não pode ser recuperado. Marketing espera uma semana por um clone que não chega.
Maus resultados não se explicam. Reclamações e incidentes ficam sem causa. Na LGPD, “não sabemos qual instrução processou os dados” é uma resposta ruim.
Sem rollback. Uma mudança ruim fica em produção até alguém reescrever o texto antigo de memória.
Comparação impossível. Sem versão, nenhum eval compara “antes” e “depois” de verdade. Você compara o código de agora com a memória.
O prompt não tem um lugar com histórico. Ele vira um template com nome e versão imutável; publicar uma mudança cria uma versão nova. Destino: Registro de Templates.
O prompt até tem versão, mas as execuções não a registram. Toda chamada guarda nome e versão do template no span. Destino: Trilha de Auditoria.
Duas peças, as duas obrigatórias:
Texto imutável.content.blog@12 não se edita. Publicar cria @13. Rollback aponta de volta para @12.
Span com a versão resolvida. Grave content.blog@12, nunca latest. Se o código pede latest na hora, resolva o número antes da chamada e persista esse número.
Git serve. Hash do commit no trace identifica o prompt se o arquivo inteiro está no repositório. Painel admin também serve, se cada “salvar” gera um id novo e o id vai para o span. O que não serve é sobrescrever a linha.
No span, grave pelo menos isto:
Campo
Exemplo
prompt_name
content.blog
prompt_version
12 (resolvido, não latest)
model
o id que de fato atendeu
Sem o trio, você reproduz a prosa e ainda assim não sabe com qual modelo ela rodou. Versão de prompt e versão de modelo andam juntas no rastro.
O que você ganha
Toda resposta aponta para o texto exato que a gerou.
Rollback em um clique.
Evals que comparam versões de verdade.
Investigação de incidentes com evidência.
Quando ignorar
Script pessoal, uso único. Se ninguém vai precisar reproduzir, o controle de versão do repositório basta.
É esse smell?
Perguntas rápidas
O que é Prompt Sem Versão?
Prompt Sem Versão (Unversioned Prompt) é um smell de IA, ou seja, um sinal de problema em sistemas com LLM, do grupo Impeditivos de mudança. Ninguém sabe qual versão do prompt gerou a resposta que o cliente reclamou.