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”.