Ligar
O contrato é a funcionalidadeclaims do espaço, desligada por padrão e ligada no documento features pelo papel security. O próprio contrato fica no documento claim-contract, dos papéis integration e security, e chega ao SDK pelo perfil do SDK, sem as frases do corpus negativo (só a versão dele), que só o niadra contract test do seu CI lê, da sua própria cópia. As afirmações que o SDK confere entram no registro de turno, então a funcionalidade turns é o que as leva à Niadra e ao aproveitamento. Sem contrato, nada é conferido.
O documento
A detecção é lexical: números de certas
classes (com terms, um número só conta numa frase que traz um dos termos), roles (as palavras que dão a um número o papel dele: “de” e “antes” para o preço de lista, “por” e “com desconto” para o preço promocional), terms do ofício sozinhos (“separei”, “já enviei o link”), patterns nomeados (article_citation, precedent_citation) ou document_sections, em que toda frase é uma afirmação de fato.
A evidência é exatamente uma de: value (um valor com proveniência no turno, do resultado de uma ferramenta ou de uma leitura de estado, com same_role, fresh_for: claim para exigir a idade de afirmação do tipo, e must_state_gaps para exigir que as lacunas declaradas do valor sejam ditas com ele), tool (uma chamada desta ferramenta no turno: a fronteira do que o agente pode saber, e um agente sem a ferramenta sempre falha), tool_any (uma chamada de qualquer uma destas ferramentas: uma promessa de ação precisa da ação) ou anchor (o texto cita uma fonte por uma âncora que bate com ela, a 0,90 ou mais).
Um exemplo de categoria, de um contrato de varejo:
Os números
O analisador lê todo número de uma saída, num idioma, e cada número cai em no máximo uma menção: primeiro os rótulos pela forma (um número de processo, um CEP, um telefone, uma hora) e pela palavra anterior (pedido, protocolo, artigo, tamanho, página); depois as datas, dia primeiro em português e espanhol, mês primeiro em inglês; depois as quantias, pelo que vem antes ou depois (moeda,%, dias úteis, mg, kg, 10x); depois códigos e ordinais, que são rótulos; e o resto (cinco dígitos ou mais e um ano são rótulos, dois decimais são dinheiro sem moeda, um inteiro antes de uma palavra é uma contagem). Um número por extenso só conta antes de uma unidade (“quinze dias úteis”), porque “um” também é artigo. Duas quantias ligadas por “a”, “até” ou um hífen fazem uma faixa. As classes são money, percent, date, duration, quantity, count, dosage e label; um rótulo nomeia em vez de medir, nenhuma categoria o detecta e nada jamais o reescreve. Quando um número tem . e ,, o último é o decimal; “R$ 511.06” em português é 511,06 mesmo assim.
Um papel vale quando o termo dele está a até 6 palavras do número, na mesma frase; o termo mais próximo dá o papel, e dois papéis empatados deixam o número ambiguous, que nunca é aprovado.
As três naturezas
O validador que derruba toda quantia ausente do histórico é uma categoria de classe
money com model: block.
Vereditos e ações
matched, quoted_found e anchored não tomam ação; not_checked é contado. Todo outro veredito toma a ação da categoria para o contexto da saída (actions.contexts, ou actions.default), e unsupported toma natures.model quando definida:
Uma reescrita é inequívoca só quando tudo vale: a saída é mutável; a classe é dinheiro, porcentagem, data ou duração (uma dose, uma medida técnica, um tamanho, uma posição e um identificador nunca são reescritos, em nenhum contexto); o número é um valor só, não uma faixa; o veredito é
stale e o número é uma cópia literal de um campo de um objeto, cujo valor fresco no turno é outro; e nenhum outro número da classe está na frase. Um contrato não pode nomear rewrite_if_unequivocal como padrão, nem para um contexto que não lista como mutável. O princípio: corrigir, anotar ou contar; nunca bloquear com uma mensagem genérica, e nunca reescrever o que é imutável. Dizer a lacuna é uma resposta aceitável.
O corpus negativo
Todo contrato com categorias vem com a lista versionada de frases do ofício que um léxico ingênuo pegaria e que nunca podem disparar (“não temos certeza do prazo”, “o prazo para contestação é de 15 dias úteis”, “Seu CEP é 01310-100?”). Uma frase dispara quando, lida em qualquer idioma do contrato e para qualquer agente dele, uma categoria acha uma afirmação nela. O comandoniadra contract test dos SDKs falha quando uma dispara, e é feito para o seu CI: um falso positivo que bloqueia um documento com prazo correndo é o maior risco do contrato, e o teste faz parte dele.
--corpus) e arquivos de turnos de exemplo, e sai com 0 quando tudo vale, 1 quando não, 2 quando não conseguiu rodar.
Texto interno
A sua empresa pode registrar impressões digitais do próprio prompt: hashes de cadan palavras seguidas (8 por padrão), calculados pelo SDK, nunca o prompt. Uma saída que repete uma delas dá lugar a redact: o trecho vira uma afirmação da categoria reservada internal_text, com o veredito internal_text_found e a ação block (numa saída imutável, a saída inteira vai a uma pessoa), e o turno é marcado guard_acted. O registro nunca guarda o texto redigido.
A âncora de texto
Uma ferramenta ou o agente emite âncoras: onde na saída, o texto citado e o documento que ele cita. Os dois textos são normalizados do mesmo jeito (minúsculas, sem acentos, tudo que não é letra ou dígito vira um espaço) e a distância de edição entre a citação e algum trecho do documento dá a pontuação1 - d / len(citação). Uma âncora vale a 0,90 ou mais; abaixo disso é descartada e contada, nunca consertada. Um número dentro de um trecho ancorado é conferido como número mesmo assim: a pontuação sozinha deixaria passar uma quantia trocada. coverage separa lei e fato, que nunca se somam.
Onde roda
No SDK, na ponte do stream, antes do cliente (um candidato fica retido no máximo 150 ms e uma mensagem no máximo 300 ms; passado isso, o texto vai como está, anotadoguard_budget_exceeded), ou antes de um documento ser salvo. O servidor nunca roda a conferência num turno.
claims no registro do turno: a categoria, a classe, a natureza e o papel de um número, o trecho em pontos de código, o valor normalizado, a evidência (a chamada e o campo, o objeto e o campo, ou o documento e a pontuação), o veredito e a ação tomada (none, block, warn, count, rewrite ou discard_anchor). Um valor que não está seguro para afirmar pode ser lido de novo pelo seu resolvedor, dentro da sua empresa e em 300 ms, antes de a resposta sair: conversation.verify_claim() em Python, convo.verifyClaim() em TypeScript. Veja O worker de resolução.
Ler os números
GET /v1/context-use, com a funcionalidade claims ligada, traz em claims, por fonte e agente, as afirmações das saídas dele por categoria e veredito, e quantas se apoiam em evidência (evidenced). É a taxa do que o agente afirma sem consultar. Um contrato com categorias, um corpus negativo que o CI mantém e essa taxa no Console são o que a sua empresa mede; a Niadra soma, e nunca roda um modelo a mais por turno.
Próximos passos
Tipos de objeto e estado
a idade de afirmação de cada campo e as proibições.
Registros de turno
onde os vereditos ficam.
Agentes de varejo
um contrato de preço, disponibilidade e promessa de ação.
Agentes jurídicos
prazos com lacunas declaradas e citações ancoradas.

