A busca de formulações
Três das verificações do guardrail leem o que a pessoa disse: S1 (um turno que pede para enviar algo para fora, onde a ferramenta chamada não envia nada), S2 (um turno que nomeia um destino que a chamada não recebe) e a leitura de confirmação (a ferramenta da chamada lida contra o turno, com os valores comparados). Elas leem por um leitor determinístico com um conjunto fechado de palavras. A busca de formulações testa essas três verificações com toda formulação que pode mudar a resposta delas, e nenhuma outra.
Como é rodada
Em Python:
report = rail.search_wordings("pt-BR", checks=["s1_veto", "s2_veto", "confirm_read"], seconds=120)
No stalwart mcp: search_wordings(tools="tools.json", language="pt", seconds=60).
Ela roda o leitor de verdade, na sua máquina, pelo runtime licenciado: nenhum modelo e nenhuma rede além dele. Lê primeiro as formulações mais curtas e para no limite de tempo de cada verificação, dizendo até onde chegou.
Como as formulações são escolhidas: o cone de cada verificação
O leitor lê um turno pelas suas próprias palavras: as palavras das suas ferramentas, os seus arquivos de palavras e as palavras de moldura da gramática. Qualquer outra palavra chega a ele como um único símbolo, uma palavra que ele não tem. Então as formulações que importam para uma verificação são frases sobre as palavras que ela lê, o seu cone:
| Verificação | O seu cone | Cresce com as suas ferramentas |
|---|---|---|
| S1 | os verbos de envio (e um erro de digitação de cada), enviando uma "outra" coisa em toda moldura; e cada verbo de envio com cada coisa das suas ferramentas, e com cada lugar para onde algo é enviado, na moldura simples | em uma formulação por verbo de envio para cada coisa nova |
| S2 | cada ferramenta que não recebe destino, pedida com um destino de cada forma (um e-mail, uma URL), em toda moldura | linearmente, um conjunto por ferramenta |
| Leitura de confirmação | cada ferramenta, cada parâmetro dela nomeado pelas próprias palavras e dito com um valor da sua forma, em toda moldura menos a negada | linearmente, um conjunto por parâmetro |
As molduras são as da própria gramática: a instrução simples, palavras de pedido ("por favor"), enquadramentos, aberturas, formas de querer ("eu quero"), negações ("não") e junções ("e depois"). Elas vêm das palavras de moldura do toolkit, que o pacote carrega num arquivo conferido contra as listas do próprio toolkit. Qualquer outra palavra é uma palavra conferida como ausente das palavras do leitor.
O que cada verificação precisa responder
- S1: uma formulação pedindo para enviar algo para fora é recusada pelo S1, ou lida como uma das suas ferramentas que envia; uma negada pode ser qualquer das duas.
- S2: um destino dado a uma ferramenta que não recebe nenhum é pego.
- Leitura de confirmação: um valor dito para um parâmetro é lido para ele.
Uma formulação cuja resposta não é a esperada é um achado, com a formulação para repetir por check_call.
O que "exaustiva dentro do cone" afirma
O cone é conferido, não suposto. Uma amostra das formulações, e todo achado, é lida de novo com a "outra" palavra trocada por outras palavras ausentes, e as formulações emolduradas do S1 com uma das suas coisas no lugar. A resposta não pode mudar. Onde muda, o relatório diz que a busca não é exaustiva para aquela verificação e nomeia a palavra.
As formulações do S2 e da leitura de confirmação não têm "outra" palavra: toda palavra delas está no cone, então não há o que trocar, e o relatório delas diz isso.
O relatório de uma verificação é exaustivo onde toda formulação do seu cone foi lida dentro do limite e a conferência do cone valeu: dentro dos limites, nenhuma formulação daquelas palavras dá a resposta errada.
O que ela não consegue achar
Um verbo de envio, uma forma de destino ou um jeito de nomear um valor que o leitor não conhece. Esses ficam fora de todo cone, porque o leitor não tem palavra para eles. Palavras fora do cone acrescentadas a um turno não são buscadas, e nada é afirmado sobre o que o leitor faz com elas.
Os limites
seconds (o limite de tempo de cada verificação; 0 é sem limite), slips (um erro de digitação de cada verbo de
envio: as duas últimas letras trocadas), joins (uma instrução junto de uma de leitura) e sample_every (com que
frequência uma formulação é relida para a conferência do cone). Como referência: num catálogo de 4 ferramentas todo
cone é lido em cerca de 25 s em inglês e 66 s em português; com 100 ferramentas, o S1 leva cerca de 70 s, o S2 cerca de
3 minutos e a leitura de confirmação cerca de 5.
Lendo o relatório
{"language": "en", "other": "zorvak", "bounds": {"seconds": 120, "slips": 1, "joins": true, "sample_every": 25},
"tools": 4, "seconds": 18.94,
"checks": [{"check": "s1_veto", "wordings": 4320, "read": 4320, "complete": true, "exhaustive": true, "seconds": 18.937,
"findings": [{"wording": "post the note", "frame": "bare:thing", "expected": "declined_or_not_misread",
"got": {"s1": false, "misread_as": ["save_note"]}}],
"abstraction": {"checked": 423, "holds": true, "words": []}}]}
wordingseread: o tamanho do cone e quanto foi lido;completeonde são iguais.exhaustive: completa, e a conferência do cone valeu.findings: cada formulação com a resposta errada, a sua moldura, o que se esperava e o que o leitor fez.abstraction: quantas releituras conferiram o cone, se ele valeu, e as palavras que o quebraram.