·7 min read

Restrições negativas em prompts: por que funciona dizer o que não fazer

Restrições negativas em prompts: por que funciona dizer o que não fazer
Photo by the blowup on Unsplash
Authors
  • João Schuller
    Name
    João Schuller
    Twitter

Restrições negativas em prompts: por que funciona dizer o que não fazer

Adicionar uma única restrição negativa, "não resuma, me dê a análise bruta", muda a estrutura do output em casos onde a instrução positiva equivalente não resolvia. A própria documentação de prompt engineering da Anthropic registra isso, e é reproduzível na prática. Restrições negativas não são gambiarra nem último recurso. Elas cobrem uma lacuna específica que instruções afirmativas deixam aberta: o comportamento padrão do modelo, que roda por baixo das suas instruções independente do que você escreva.

O que você vai tirar deste artigo: um modelo funcional para saber quando usar restrições negativas, por que o mecanismo subjacente as torna eficazes, e o erro que leva as pessoas a empilhá-las até o prompt virar uma lista de proibições que confunde mais do que guia.

O modelo tem padrões, e seu prompt roda em cima deles

Todo modelo de linguagem chega ao momento de inferência com comportamentos treinados: tendência a fazer ressalvas, a resumir no final, a adicionar disclaimers, a apresentar perspectivas equilibradas, a começar respostas com uma reafirmação da pergunta. Não são bugs. Foram reforçados durante o treinamento porque produziram outputs que avaliadores humanos geralmente preferiram.

Quando você escreve uma instrução positiva como "seja direto e analítico", está adicionando uma camada em cima desses padrões. O modelo processa sua instrução e sua tendência treinada ao mesmo tempo. Se apontam na mesma direção, ótimo. Se conflitam, o resultado depende de qual sinal tem mais peso, e os padrões treinados têm peso considerável, especialmente para comportamento estilístico.

Uma restrição negativa como "não adicione um parágrafo de resumo no final" funciona de forma diferente porque aborda diretamente um comportamento padrão específico, pelo nome. Você não está pedindo que o modelo seja de um certo jeito em geral. Está identificando um padrão concreto e bloqueando ele, e a especificidade é exatamente o que importa.

A documentação de system prompts da Anthropic registra explicitamente que restrições comportamentais específicas tendem a ser mais confiáveis do que instruções gerais de caráter. Minha leitura é que esse mesmo mecanismo explica por que restrições negativas frequentemente superam seus equivalentes positivos: "não faça ressalvas" aponta para algo que o modelo consegue reconhecer no próprio output, onde "seja confiante" é mais abstrato.

Na prática, se você trabalha com a API da Anthropic ou da OpenAI e percebe padrões indesejados consistentes entre gerações, uma única restrição negativa no system prompt costuma ser mais rápida de ajustar do que reescrever o conjunto de instruções afirmativas.

Quando restrições negativas produzem resultados mais limpos

O caso mais útil é controle de formatação. Instrução positiva: "escreva em prosa corrida." Restrição negativa: "não use bullet points nem listas numeradas." Em testes que rodei construindo pipelines de conteúdo em Python com o SDK da Anthropic, a versão negativa produziu output sem listas com mais consistência, mesmo em casos onde a versão positiva quebrava quando o dado de entrada tinha uma estrutura naturalmente enumerável. O padrão do modelo de listar coisas quando elas parecem listáveis é forte o suficiente para sobrescrever uma instrução estilística geral.

O segundo caso útil é calibração de tom para voz de marca. Um bot de suporte de uma empresa SaaS pode receber uma instrução positiva: "seja amigável e profissional." Não está errado, mas deixa uma margem ampla. Adicionar "não use ponto de exclamação e não comece respostas com 'Boa pergunta!'" reduz a variância consideravelmente. As duas restrições miram em tendências treinadas específicas que o modelo associa ao contexto de atendimento ao cliente.

O terceiro caso é escopo do output. Para uma tarefa de classificação onde você quer só o rótulo, "responda apenas com o rótulo da categoria, nada mais" às vezes ainda gera uma breve explicação. Adicionar "não explique seu raciocínio nem inclua texto adicional" elimina esse resíduo.

O padrão nos três casos é o mesmo: você identificou um comportamento padrão específico que persiste apesar das instruções afirmativas, e o nomeia e bloqueia diretamente. É mais cirúrgico do que reescrever o framing positivo, e combina bem porque múltiplas restrições negativas mirando em padrões distintos não se interferem da forma que múltiplas instruções estilísticas positivas às vezes fazem.

O erro clássico: um prompt que é basicamente proibições

Existe uma versão do uso de restrições negativas que cria problemas, e é comum entre quem acabou de descobrir que funciona. Quando você percebe que "não faça X" é eficaz, a tentação é auditar toda falha de output e adicionar uma nova proibição. Algumas semanas depois você tem um system prompt com dezessete linhas de "não" e outputs erráticos de formas novas.

O problema é que uma densidade alta de restrições negativas começa a definir o espaço de output por exclusão, não por direção positiva. O modelo fica tentando produzir algo que não viola nenhuma das proibições, com pouco sinal sobre o que você quer de verdade. Em algum ponto o espaço de restrições fica contraditório ou estreito demais para o modelo navegar com consistência.

Na minha visão, restrições negativas funcionam melhor quando estão em minoria dentro de um prompt. Uma proporção útil para verificar: se mais de um terço das suas instruções são proibições, provavelmente o framing positivo está insuficientemente específico. As restrições negativas devem aparar padrões, não substituir uma descrição clara do que você quer.

Uma auditoria prática é pegar suas três restrições negativas mais importantes e perguntar se cada uma mira em um comportamento padrão treinado específico ou está tentando corrigir uma lacuna nas suas instruções afirmativas. A primeira situação é o uso correto. A segunda é sinal de que o framing positivo precisa de trabalho antes.

FAQ

Restrições negativas funcionam da mesma forma em modelos diferentes?

O mecanismo subjacente, mirar em padrões treinados específicos pelo nome, se aplica a qualquer modelo treinado com RLHF. Os padrões específicos variam: GPT-4 e Claude têm tendências estilísticas diferentes por padrão, então uma restrição que corrige um padrão persistente em um modelo pode ser desnecessária ou contraproducente em outro. Sempre teste as restrições contra o modelo e a versão específica que você está usando.

Restrições negativas podem conflitar entre si?

Podem, e piora conforme você adiciona mais. "Não seja prolixo" e "não use bullet points" são compatíveis. Adicione "não use subtítulos", "não use listas numeradas", "não use negrito" e "não escreva mais de duas frases por parágrafo", e você está empilhando restrições na mesma dimensão (formatação) até o espaço de solução do modelo ficar muito estreito. Restrições conflitantes em dimensões diferentes (tom vs. formato) têm menos chance de interagir, mas um prompt com muitas proibições deve ser testado com inputs variados para revelar falhas em casos extremos.

Restrições negativas ficam no system prompt ou na mensagem do usuário?

Para padrões comportamentais persistentes que você quer suprimir em todas as interações, o system prompt é o lugar certo. Se a restrição é específica para uma tarefa ("para este output em particular, não inclua informações de preço"), a mensagem do usuário serve. Misturar os dois é razoável, desde que você não duplique a mesma restrição nos dois lugares, o que pode criar uma ênfase estranha que às vezes produz o efeito oposto do pretendido.

Proibições bem direcionadas superam reescritas de prompt como diagnóstico

Se você tem um padrão de output persistente que instruções afirmativas não resolveram, o próximo passo mais eficiente é uma restrição negativa específica que nomeia o comportamento exato, não uma revisão completa do prompt. Uma proibição bem direcionada diz se o problema é um padrão treinado ou uma lacuna no seu framing positivo. Essa distinção é o que define o que corrigir a seguir.