As verificações
Todas as verificações que o guardrail faz, na ordem em que uma chamada as encontra; a primeira que barra a chamada decide. Elas rodam em quatro etapas:
- Tipos de ferramenta: sabe-se se cada ferramenta lê, escreve ou envia algo para fora;
- a cadeia de admissão: verificações que podem recusar uma chamada antes de qualquer outra coisa;
- a verificação de ferramentas: as dez regras da verificação licenciada, decidindo a primeira que se aplica;
- as verificações do que foi dito: a rastreabilidade, os vetos S1 e S2 e a leitura de confirmação. Elas só tornam uma resposta mais rígida: uma recusa continua recusa, e uma confirmação nunca vira permissão.
Passe checks=[...] para ligar só as verificações listadas; uma verificação que não pode ser desligada roda listada ou
não. Desligar uma verificação retém o dado que ela lê, então a própria verificação de ferramentas continua decidindo
toda chamada.
S1, S2 e a leitura de confirmação leem só o último turno da pessoa, e só quando os turnos são dados. Cada uma tem três
modos: off; refuse, um bloqueio rígido; e confirm, perguntar à pessoa, que é o padrão. A leitura de confirmação
nunca altera uma chamada: um valor que ela lê como faltando ou diferente faz a chamada esperar pela pessoa, e a leitura
é mostrada a ela.
Esta página é feita a partir da própria lista de verificações do guardrail, então não diz de uma verificação nada que o guardrail não diga.
| Verificação | O que faz, simplesmente | Quando barra uma chamada | Pode ser desligada |
|---|---|---|---|
| Tipos de ferramenta | Sabe-se se cada ferramenta lê, altera algo ou envia algo para fora: pelo seu arquivo, pelas marcas da própria ferramenta, ou pelo nome, descrição e argumentos. Uma ferramenta que ninguém marcou conta como uma que altera algo. | perguntada (uma ferramenta que não se sabe que lê é uma escrita) | sim |
| Ferramenta retirada | Uma ferramenta que o dono retirou do registro não pode ser usada. | recusada | não |
| Endereço não permitido | Uma chamada não pode chegar a um endereço que você não permite, como o serviço de metadados da nuvem ou a rede interna da empresa. | recusada | sim |
| Fora do plano aprovado | Onde uma pessoa aprovou um plano, uma chamada que não é o próximo passo dele não é executada. | recusada | sim |
| Nível de ferramentas do plano | Ainda não ativa: toda chamada passa. | nunca (ainda não ativa) | sim |
| Rótulos | Ainda não ativa: toda chamada passa. Conteúdo de fora é barrado pela verificação de conteúdo de fora. | nunca (ainda não ativa) | sim |
| Limite de pagamento | Ainda não ativa: toda chamada passa. Limites de gasto ficam nas suas regras. | nunca (ainda não ativa) | sim |
| Ferramentas permitidas | Só ferramentas da sua lista podem ser usadas, e só por um agente nomeado onde você indicar. | recusada | não |
| Registro da sessão | O registro das chamadas já feitas deve estar intacto; se alguém o alterou, nada mais é executado. | recusada | não |
| Argumentos | Os valores de cada chamada devem caber na descrição da própria ferramenta (tipos, campos obrigatórios, valores permitidos). | recusada | sim |
| Destinos | Uma ferramenta só pode enviar algo a um endereço se for conhecida por enviar coisas para fora. | recusada | sim |
| Ordem | Uma ferramenta só é executada num ponto permitido: depois de outra, nunca depois de outra, ou no máximo N vezes. | recusada | sim |
| Desfazer | Um desfazer deve corresponder ao passo que reverte, e um passo só é desfeito uma vez. | recusada | sim |
| Suas regras | Sua própria planilha de regras decide, por ex. "reembolsos acima de 100 precisam de um gerente"; limites por período e de gasto também. | recusada ou perguntada, como a regra diz | sim |
| Conteúdo de fora | Uma chamada proposta depois de ler conteúdo de fora (uma página, um e-mail) é barrada onde você proíbe. | recusada, ou perguntada onde sua configuração pede | sim |
| Confirmação | Uma chamada que precisa do sim de uma pessoa só é executada com esse sim, assinado; se ninguém pode dá-lo, ela não é executada. | recusada | não |
| Qualquer outra escrita | Qualquer coisa que altera algo e que nenhuma regra permitiu espera o sim de uma pessoa. | perguntada | não |
| Origem dos valores | Um valor numa escrita que ninguém disse e nenhuma ferramenta devolveu é perguntado, nunca permitido e nunca recusado. | perguntada | sim |
| S1: verbo de envio | Onde a fala da pessoa pede para enviar algo para fora e nenhuma ferramenta envia, a chamada é barrada. | perguntada por padrão; recusada no modo estrito | sim |
| S2: destino | Onde a fala nomeia um lugar para onde enviar que nenhuma ferramenta recebe, e a chamada também não o recebe, a chamada é barrada. | perguntada por padrão; recusada no modo estrito | sim |
| Leitura de confirmação | A chamada é lida contra a fala, com os valores como digitados. Onde a fala dá um valor que falta na chamada, ou um diferente, a pessoa vê os dois e é perguntada. A chamada nunca é alterada. | perguntada por padrão; recusada no modo estrito | sim |
Tipos de ferramenta
Sabe-se se cada ferramenta lê, altera algo ou envia algo para fora: pelo seu arquivo, pelas marcas da própria ferramenta, ou pelo nome, descrição e argumentos. Uma ferramenta que ninguém marcou conta como uma que altera algo.
- O que barra: Uma ferramenta que escreve ou envia tratada como leitura porque ninguém a marcou.
- O que não consegue barrar: Uma ferramenta cujo nome e descrição escondem o que ela faz pode ser classificada errado: marque-a no arquivo de tipos de ferramenta.
- Quando barra uma chamada: perguntada (uma ferramenta que não se sabe que lê é uma escrita)
- O que lê:
catalogue,tool_kinds.yaml - Pode ser desligada: sim
- Ajustes:
infer: true: deduz o tipo das ferramentas que ninguém marcou; false: toda ferramenta não marcada é uma escrita - Ajustes:
file: o arquivo de tipos de ferramenta, que sempre vence - Permitida:
{"tool": "get_order", "arguments": {"order_id": "A1"}} - Barrada:
{"tool": "orders", "arguments": {"order_id": "A1"}}
checks.Setting("tool_kinds")
Ferramenta retirada
Uma ferramenta que o dono retirou do registro não pode ser usada.
- O que barra: Chamadas a uma ferramenta que o registro não oferece mais a este agente.
- O que não consegue barrar: Uma ferramenta que nunca foi registrada: a verificação de ferramentas permitidas impede isso.
- Quando barra uma chamada: recusada
- O que lê:
registry - Pode ser desligada: não
- Permitida:
{"tool": "get_order", "arguments": {"order_id": "A1"}} - Barrada:
{"tool": "old_refund", "arguments": {}}
checks.Setting("withdrawn")
Endereço não permitido
Uma chamada não pode chegar a um endereço que você não permite, como o serviço de metadados da nuvem ou a rede interna da empresa.
- O que barra: Um argumento de URL apontando para um endereço privado ou de metadados.
- O que não consegue barrar: Um endereço que a instalação permite, mas que ainda é o errado para esta chamada.
- Quando barra uma chamada: recusada
- O que lê:
arguments - Pode ser desligada: sim
- Permitida:
{"tool": "fetch_page", "arguments": {"url": "https://example.org/a"}} - Barrada:
{"tool": "fetch_page", "arguments": {"url": "http://169.254.169.254/latest"}}
checks.Setting("address")
Fora do plano aprovado
Onde uma pessoa aprovou um plano, uma chamada que não é o próximo passo dele não é executada.
- O que barra: Um passo fora de ordem, um passo a mais, ou um passo com valores alterados depois da aprovação.
- O que não consegue barrar: Um plano que uma pessoa aprovou e que já estava errado.
- Quando barra uma chamada: recusada
- O que lê:
plan,plan_token,plan_step - Pode ser desligada: sim
- Permitida:
{"tool": "refund_card", "arguments": {"order_id": "A1", "amount": 20}} - Barrada:
{"tool": "refund_card", "arguments": {"order_id": "A1", "amount": 900}}
checks.Setting("plan_step")
Nível de ferramentas do plano
Ainda não ativa: toda chamada passa.
- O que barra: Nada ainda.
- O que não consegue barrar: Nada: hoje deixa toda chamada passar.
- Quando barra uma chamada: nunca (ainda não ativa)
- O que lê:
tier - Pode ser desligada: sim
- Permitida:
{"tool": "get_order", "arguments": {"order_id": "A1"}}
checks.Setting("tier")
Rótulos
Ainda não ativa: toda chamada passa. Conteúdo de fora é barrado pela verificação de conteúdo de fora.
- O que barra: Nada ainda.
- O que não consegue barrar: Nada: hoje deixa toda chamada passar.
- Quando barra uma chamada: nunca (ainda não ativa)
- O que lê:
labels - Pode ser desligada: sim
- Permitida:
{"tool": "get_order", "arguments": {"order_id": "A1"}}
checks.Setting("labels")
Limite de pagamento
Ainda não ativa: toda chamada passa. Limites de gasto ficam nas suas regras.
- O que barra: Nada ainda.
- O que não consegue barrar: Nada: hoje deixa toda chamada passar.
- Quando barra uma chamada: nunca (ainda não ativa)
- O que lê:
amount - Pode ser desligada: sim
- Permitida:
{"tool": "pay", "arguments": {"amount": 5}}
checks.Setting("payment_limit")
Ferramentas permitidas
Só ferramentas da sua lista podem ser usadas, e só por um agente nomeado onde você indicar.
- O que barra: Uma ferramenta que o modelo inventou, ou uma que este agente não pode usar.
- O que não consegue barrar: Uma ferramenta da lista usada para o fim errado.
- Quando barra uma chamada: recusada
- O que lê:
catalogue,agent - Pode ser desligada: não
- Permitida:
{"tool": "get_order", "arguments": {"order_id": "A1"}} - Barrada:
{"tool": "delete_everything", "arguments": {}}
checks.Setting("allowed_tools")
Registro da sessão
O registro das chamadas já feitas deve estar intacto; se alguém o alterou, nada mais é executado.
- O que barra: Um histórico editado, reordenado ou reaproveitado de outra sessão.
- O que não consegue barrar: Uma chamada executada fora do guardrail e nunca registrada.
- Quando barra uma chamada: recusada
- O que lê:
session - Pode ser desligada: não
- Permitida:
{"tool": "get_order", "arguments": {"order_id": "A1"}} - Barrada:
{"tool": "get_order", "arguments": {"order_id": "A1"}, "tampered": true}
checks.Setting("session_record")
Argumentos
Os valores de cada chamada devem caber na descrição da própria ferramenta (tipos, campos obrigatórios, valores permitidos).
- O que barra: Um valor obrigatório faltando, um tipo errado, um valor fora da lista permitida.
- O que não consegue barrar: Um valor do tipo certo que ainda é o errado.
- Quando barra uma chamada: recusada
- O que lê:
catalogue - Pode ser desligada: sim
- Permitida:
{"tool": "get_order", "arguments": {"order_id": "A1"}} - Barrada:
{"tool": "get_order", "arguments": {}}
checks.Setting("arguments")
Destinos
Uma ferramenta só pode enviar algo a um endereço se for conhecida por enviar coisas para fora.
- O que barra: Um e-mail ou URL colocado numa ferramenta que não deveria enviar nada.
- O que não consegue barrar: Um endereço errado dado a uma ferramenta que envia coisas para fora.
- Quando barra uma chamada: recusada
- O que lê:
catalogue,tool_kinds - Pode ser desligada: sim
- Permitida:
{"tool": "get_order", "arguments": {"order_id": "A1"}} - Barrada:
{"tool": "get_order", "arguments": {"order_id": "https://attacker.example/x"}}
checks.Setting("destinations")
Ordem
Uma ferramenta só é executada num ponto permitido: depois de outra, nunca depois de outra, ou no máximo N vezes.
- O que barra: Um reembolso antes de consultar o pedido; um terceiro reembolso onde dois são permitidos.
- O que não consegue barrar: Uma sequência que suas regras de ordem não descrevem.
- Quando barra uma chamada: recusada
- O que lê:
catalogue,session - Pode ser desligada: sim
- Permitida:
{"tool": "get_order", "arguments": {"order_id": "A1"}} - Barrada:
{"tool": "refund_card", "arguments": {"order_id": "A1", "amount": 20}}
checks.Setting("order")
Desfazer
Um desfazer deve corresponder ao passo que reverte, e um passo só é desfeito uma vez.
- O que barra: Um desfazer com valores diferentes do passo que diz reverter, ou um segundo desfazer do mesmo passo.
- O que não consegue barrar: Um desfazer que não reverte de fato a ferramenta.
- Quando barra uma chamada: recusada
- O que lê:
catalogue,session - Pode ser desligada: sim
- Permitida:
{"tool": "get_order", "arguments": {"order_id": "A1"}} - Barrada:
{"tool": "cancel_refund", "arguments": {"refund_id": "R9"}, "compensation_of": 0}
checks.Setting("undo")
Suas regras
Sua própria planilha de regras decide, por ex. "reembolsos acima de 100 precisam de um gerente"; limites por período e de gasto também.
- O que barra: Uma chamada que suas regras proíbem, ou uma acima de um limite.
- O que não consegue barrar: Um caso que suas regras não cobrem: o caçador de falhas encontra esses.
- Quando barra uma chamada: recusada ou perguntada, como a regra diz
- O que lê:
rules,arguments,results,usage - Pode ser desligada: sim
- Permitida:
{"tool": "refund_card", "arguments": {"order_id": "A1", "amount": 20}} - Barrada:
{"tool": "refund_card", "arguments": {"order_id": "A1", "amount": 500}}
checks.Setting("your_rules")
Conteúdo de fora
Uma chamada proposta depois de ler conteúdo de fora (uma página, um e-mail) é barrada onde você proíbe.
- O que barra: Uma escrita que uma página ou um e-mail induziu o modelo a fazer.
- O que não consegue barrar: Conteúdo de fora que chegou ao modelo sem rótulo.
- Quando barra uma chamada: recusada, ou perguntada onde sua configuração pede
- O que lê:
labels - Pode ser desligada: sim
- Ajustes:
taint_policy: refuse ou confirm (o padrão) - Permitida:
{"tool": "get_order", "arguments": {"order_id": "A1"}} - Barrada:
{"tool": "refund_card", "arguments": {"order_id": "A1", "amount": 20}, "labels": ["web"]}
checks.Setting("outside_content")
Confirmação
Uma chamada que precisa do sim de uma pessoa só é executada com esse sim, assinado; se ninguém pode dá-lo, ela não é executada.
- O que barra: Um sim reaproveitado para outra chamada, uma chamada alterada, ou um sim vencido.
- O que não consegue barrar: Uma pessoa que diz sim sem ler.
- Quando barra uma chamada: recusada
- O que lê:
confirmation - Pode ser desligada: não
- Permitida:
{"tool": "refund_card", "arguments": {"order_id": "A1", "amount": 20}, "approved": true} - Barrada:
{"tool": "refund_card", "arguments": {"order_id": "A1", "amount": 30}, "approved_for_other": true}
checks.Setting("confirmation")
Qualquer outra escrita
Qualquer coisa que altera algo e que nenhuma regra permitiu espera o sim de uma pessoa.
- O que barra: Uma escrita sobre a qual nenhuma regra fala.
- O que não consegue barrar: Uma leitura que vaza o que lê: o guardrail julga chamadas, não o que uma resposta diz.
- Quando barra uma chamada: perguntada
- O que lê:
catalogue - Pode ser desligada: não
- Permitida:
{"tool": "get_order", "arguments": {"order_id": "A1"}} - Barrada:
{"tool": "refund_card", "arguments": {"order_id": "A1", "amount": 20}}
checks.Setting("any_other_write")
Origem dos valores
Um valor numa escrita que ninguém disse e nenhuma ferramenta devolveu é perguntado, nunca permitido e nunca recusado.
- O que barra: Um valor, id ou data que o modelo inventou.
- O que não consegue barrar: Um valor que alguém disse, mas que ainda é o errado.
- Quando barra uma chamada: perguntada
- O que lê:
turns,results - Pode ser desligada: sim
- Permitida:
{"tool": "refund_card", "arguments": {"order_id": "A1", "amount": 20}, "turns": ["refund 20 on order A1"]} - Barrada:
{"tool": "refund_card", "arguments": {"order_id": "A1", "amount": 80}, "turns": ["refund 20 on order A1"]}
checks.Setting("grounded")
S1: verbo de envio
Onde a fala da pessoa pede para enviar algo para fora e nenhuma ferramenta envia, a chamada é barrada.
- O que barra: "publica no canal" respondido com uma ferramenta que só salva.
- O que não consegue barrar: Uma fala que envia algo em palavras que o leitor não conhece.
- Quando barra uma chamada: perguntada por padrão; recusada no modo estrito
- O que lê:
turns - Pode ser desligada: sim
- Modos:
off,refuse,confirm(confirm) - Permitida:
{"tool": "save_note", "arguments": {"text": "hi"}, "turns": ["save a note saying hi"]} - Barrada:
{"tool": "save_note", "arguments": {"text": "hi"}, "turns": ["post hi to the team channel"]}
checks.Setting("s1_veto")
S2: destino
Onde a fala nomeia um lugar para onde enviar que nenhuma ferramenta recebe, e a chamada também não o recebe, a chamada é barrada.
- O que barra: "salve a nota para ana@x.com" respondido com uma ferramenta que não pode enviá-la para lá.
- O que não consegue barrar: Um destino escrito de um jeito que o leitor não reconhece.
- Quando barra uma chamada: perguntada por padrão; recusada no modo estrito
- O que lê:
turns - Pode ser desligada: sim
- Modos:
off,refuse,confirm(confirm) - Permitida:
{"tool": "save_note", "arguments": {"order_id": "A1", "text": "x"}, "turns": ["save a note on A1 saying x"]} - Barrada:
{"tool": "save_note", "arguments": {"order_id": "A1", "text": "x"}, "turns": ["save a note on A1 for ana@x.com"]}
checks.Setting("s2_veto")
Leitura de confirmação
A chamada é lida contra a fala, com os valores como digitados. Onde a fala dá um valor que falta na chamada, ou um diferente, a pessoa vê os dois e é perguntada. A chamada nunca é alterada.
- O que barra: Uma chamada cujos valores diferem do que a pessoa disse.
- O que não consegue barrar: Um valor que a pessoa nunca disse: a verificação de origem pergunta sobre isso.
- Quando barra uma chamada: perguntada por padrão; recusada no modo estrito
- O que lê:
turns - Pode ser desligada: sim
- Modos:
off,refuse,confirm(confirm) - Permitida:
{"tool": "refund_card", "arguments": {"order_id": "A1", "amount": 20}, "turns": ["refund 20 on order A1"]} - Barrada:
{"tool": "refund_card", "arguments": {"order_id": "A2", "amount": 20}, "turns": ["refund 20 on order A1"]}
checks.Setting("confirm_read")