01
O prompt não é um mecanismo de segurança
A instrução no system prompt influencia a probabilidade de o modelo pedir uma ação, e é só isso que ela faz. Ela não impede a chamada, não valida o argumento e não acontece no momento em que a ferramenta roda. Entre a decisão do modelo e o efeito no mundo existe um trecho de código seu, e é exatamente esse trecho que decide se o pedido vira execução. Tratar o prompt como controle de acesso é o equivalente a validar formulário só no JavaScript do navegador: funciona para o usuário bem-intencionado e não funciona para nenhum outro.
O que torna o caso do agente pior que o do formulário é que a entrada hostil não precisa vir do cliente. Ela vem do trecho recuperado do RAG, do corpo de um e-mail que o agente foi ler, do retorno de uma ferramenta anterior, de um campo de descrição de produto que alguém preencheu meses atrás. Tudo isso entra no contexto com o mesmo status de texto que a instrução original, e o modelo não tem um canal separado que distinga "isto é dado" de "isto é ordem". A defesa não pode morar no mesmo lugar que o ataque. Ela mora na camada que executa, que é código determinístico e não muda de ideia porque um documento pediu com educação.
Onde a decisao vira efeito
modelo camada de execucao mundo
| | |
|-- tool_call(name, args) ->| |
| | 1. ferramenta existe? |
| | 2. permitida neste |
| | contexto/flag? |
| | 3. args validam no |
| | schema? |
| | 4. o CLIENTE pode este |
| | recurso? (nao o |
| | servico) |
| | 5. dentro do orcamento |
| | e do rate limit? |
| | 6. efeito colateral |
| | exige confirmacao? |
| |------ executa ---------->|
|<-- resultado ou erro -----| |
o prompt influencia apenas a seta 1 (o pedido).
as etapas 1..6 sao codigo, e sao elas que decidem.