System Prompt, User Prompt e contexto: quem manda em quem?

Já expliquei antes o que compõe um bom prompt: contexto, instrução, restrição, exemplo. Este texto é sobre outra coisa. É sobre hierarquia: quando existe mais de uma fonte de instrução dentro da mesma chamada de API, quem realmente manda?

Nem toda instrução tem o mesmo peso

Numa chamada de API para um modelo de linguagem, normalmente existe mais de um lugar de onde uma instrução pode vir. O system prompt define o papel, o tom e as regras gerais antes que qualquer pergunta do usuário exista. O user prompt é o que a pessoa, ou a aplicação em nome dela, efetivamente pergunta ou pede naquele momento.

A intenção de design geralmente é que o system prompt tenha prioridade sobre o user prompt quando os dois entram em conflito. Se o system prompt diz “responda sempre em português” e o usuário pede “responda em inglês a partir de agora”, a expectativa é que a instrução do system prompt continue valendo, ou pelo menos sirva como restrição mais forte.

System prompt como restrição, não como conversa

O system prompt normalmente não aparece na conversa visível para quem usa a aplicação. Ele existe como uma camada de configuração que molda o comportamento do modelo antes da primeira mensagem do usuário chegar. É onde regra de negócio, tom de voz e limite do que o assistente pode ou não fazer costumam ser definidos.

Isso é diferente de colocar essas mesmas instruções dentro do user prompt. Ali, elas competem em pé de igualdade com o resto da conversa e podem ser sobrescritas por uma instrução posterior do próprio usuário com mais facilidade.

Essa hierarquia não é uniforme entre fornecedores

Vale uma ressalva importante aqui: a forma exata como cada fornecedor de modelo implementa essa prioridade varia. APIs diferentes usam nomes diferentes para papéis parecidos, algumas separam um papel adicional entre o system e o user, e o grau de obediência a uma instrução de sistema não é absoluto nem idêntico entre modelos e versões diferentes.

Tratar essa hierarquia como uma regra universal e uniforme entre qualquer ferramenta de IA generativa é um erro comum. O conceito geral, sistema define contexto, usuário interage dentro dele, se mantém. Os detalhes de implementação não.

O que isso significa na prática

Para quem constrói alguma coisa sobre uma API de modelo de linguagem, a consequência prática é: regra de negócio importante deveria estar no system prompt, não espalhada em instruções soltas dentro da conversa. E mesmo assim, testar se aquele modelo específico realmente respeita a prioridade esperada continua sendo necessário, porque “deveria mandar mais” não é garantia de “sempre manda”.