Pilha de Regras (Rule Stacking) é um smell de IA, ou seja, um sinal de problema em sistemas com LLM, do grupo Abusos de controle. O prompt acumula SEMPRE, NUNCA e IMPORTANTE em caixa alta, e as regras brigam entre si.
Um assistente de uma operadora de saúde responde dúvidas de beneficiários. Este é um trecho do system prompt depois de um ano de incidentes (anonimizado):
IMPORTANTE: NUNCA dê diagnóstico.SEMPRE seja empático.NUNCA mencione valores de procedimentos.ATENÇÃO: SEMPRE informe o valor da coparticipação quando perguntado.NÃO responda sobre medicamentos.IMPORTANTE!!! Em caso de sintomas graves, oriente procurar o pronto-socorro.SEMPRE responda em no máximo 3 frases.NUNCA deixe o beneficiário sem uma resposta completa.... [mais 17 regras em maiúsculas]
Repare em três conflitos: “nunca mencione valores” e “sempre informe a coparticipação”; “no máximo 3 frases” e “nunca deixe sem resposta completa”; e a regra de sintomas graves, a mais importante de todas, enterrada no meio de outras 24 com o mesmo peso visual.
Num teste, o assistente respondeu a “estou com dor no peito há uma hora” com uma explicação da cobertura de cardiologia em três frases. Seguiu a regra de brevidade e ignorou a de urgência.
Sinais de Pilha de Regras:
O prompt tem muitas linhas com IMPORTANTE, NUNCA, SEMPRE, ATENÇÃO, em maiúsculas ou com exclamações.
Cada regra nasceu de um incidente específico.
Há regras que se contradizem, e ninguém decidiu qual vence.
As regras críticas têm o mesmo destaque das triviais.
Acrescentar uma regra conserta um caso e quebra outro.
O modelo segue algumas regras com rigor exagerado e ignora outras.
flowchart LR
I(["1. Incidente"]):::io --> R["2. Nova regra em maiúsculas"]:::tool
R --> P[("3. Pilha de regras")]:::store
P --> M(["4. Modelo escolhe quais seguir"]):::llm
M --> I
Um caso dá errado em produção.
A correção mais rápida é uma regra nova, com ênfase para “garantir” que funcione.
A regra se soma às anteriores, sem revisão do conjunto.
Com muitas regras de peso igual, o modelo resolve conflitos do seu jeito. Novos incidentes aparecem.
Por que acontece
Regra é a correção mais barata. Uma linha resolve o incidente da vez e fecha o ticket.
Ênfase parece funcionar. Maiúsculas às vezes mudam o comportamento num teste, e viram hábito.
Ninguém é dono do prompt inteiro. Cada time acrescenta as suas regras sem ler as dos outros.
Sem eval, apagar dá medo. Ninguém sabe qual regra ainda é necessária.
Modelos atuais seguem instruções com mais literalidade. Ênfase que servia para modelos antigos agora gera rigidez exagerada.
O chatbot da DPD (2024) xingou um cliente depois de uma atualização. Um prompt que acumula correções de incidente é frágil exatamente assim: uma edição mexe numa regra e outra, que ninguém estava olhando, deixa de ser seguida.
Quanto custa ignorar
Comportamento imprevisível. Com regras em conflito, a resposta depende de qual o modelo priorizou naquela vez.
Risco em regras críticas. A regra que importa compete por atenção com vinte que não importam tanto.
Rigidez. Regras absolutas aplicadas fora do contexto geram respostas absurdas (“não posso falar de valores” para quem pergunta a coparticipação).
Manutenção. Cada mudança exige entender a interação com todas as outras regras.
Os conflitos da operadora, lado a lado
Regra A
Regra B
O que o modelo faz na prática
NUNCA mencione valores
SEMPRE informe a coparticipação
Recusa o valor ou inventa um meio-termo
No máximo 3 frases
NUNCA deixe sem resposta completa
Corta a orientação de urgência para caber
NÃO fale de medicamentos
Oriente sintomas graves
Fala de cobertura e cala o “vá ao PS”
Coparticipação é a parte do procedimento que o beneficiário paga no Brasil. A pessoa pergunta um número que o contrato manda informar. A pilha trata esse número como se fosse tabela de preço de clínica. LGPD e regra de saúde não se resolvem com mais uma linha em maiúsculas: a decisão de fluxo precisa ser código.
As regras tentam descrever tom, formato ou comportamento em casos de borda. Poucos exemplos bem escolhidos mostram o que vinte regras tentam dizer. Destino: Seletor de Exemplos.
A regra é uma decisão de fluxo (“em caso de sintomas graves, faça X”). Ela sai do prompt e vira um passo em código, que não pode ser ignorado. Destinos: Roteamento e Encadeamento de Prompts.
Antes de qualquer uma, monte um eval com os incidentes que geraram as regras. Ele é o que permite apagar com segurança: veja Criar Eval Antes de Mexer no Prompt.
Como fatiar a pilha da operadora:
Urgência vira um classificador + rota em código para o texto de pronto-socorro. Sem competir com “3 frases”.
Coparticipação vira ferramenta que busca o valor no contrato. A regra “nunca cite preço de procedimento” deixa de brigar com um número que a ferramenta devolve.
Tom (empatia, brevidade) vira dois ou três exemplos, não oito SEMPRE.
Apagar vem depois de medir. A tentação é pôr a regra crítica em maiúsculas no topo. Isso pode subir a taxa no teste e ainda falhar na sexta à noite.
O que você ganha
Regras críticas garantidas por código, não por ênfase.
Um prompt curto, que explica o contexto e o objetivo em vez de listar proibições.
Comportamento consistente, sem conflitos para o modelo resolver.
Cada incidente vira um caso de eval, não uma linha a mais no prompt.
Quando ignorar
Poucas regras, sem conflito. Três ou quatro instruções claras e compatíveis são normais em qualquer prompt.
Restrições de formato simples. “Responda em português” ou “use no máximo 200 palavras” não precisam virar código.
Protótipo. Para descobrir o comportamento desejado, regras rápidas são aceitáveis. Consolide antes de ir para produção.
É esse smell?
Perguntas rápidas
O que é Pilha de Regras?
Pilha de Regras (Rule Stacking) é um smell de IA, ou seja, um sinal de problema em sistemas com LLM, do grupo Abusos de controle. O prompt acumula SEMPRE, NUNCA e IMPORTANTE em caixa alta, e as regras brigam entre si.