Docs
PlataformaAgentes

Regras

Regras sobre os dados da chamada, o editor de regras, listas de valores exatos, comparação com trusted attributes e edição em CEL.

A terceira pergunta é se os dados desta chamada atendem às condições do cliente. Relações dizem se o agente pode; regras dizem quando. "Pode reembolsar, mas só até o limite do funcionário que pediu" é uma regra, e "só para os pedidos 1001 e 1002" também.

Onde ficam as regras

Uma regra sempre pertence a uma ligação agente · server · tool. Nunca a uma pessoa e nunca a um valor. A regra descreve o que o agente pode fazer com aquela tool, e vale igual para todo mundo que delega a ele e para toda instância do agente.

Uma ligação pode ter várias regras, e todas precisam passar. Várias regras dão o mesmo resultado que uma regra só com todas as condições unidas por AND; mantê-las separadas permite que a negação diga qual regra falhou e que você remova uma parte sozinha.

O editor de regras

No painel de uma tool, Add rule abre o editor. Ninguém precisa escrever CEL:

Editor de regras: amount is at most 500

  1. Name vem primeiro e é obrigatório. Aparece no grafo, no painel e no Investigate.
  2. Allow the call when all / any of these are true: todas as condições precisam passar, ou basta uma.
  3. Cada linha é uma condição, com campo, operador e valor. Add a condition inclui uma linha; o ícone de lixeira remove.

Os campos vêm de dois lugares, e cada um mostra o tipo e a origem:

  • Call arguments: os argumentos da tool, lidos do schema dela, como amount · number — Call arguments.
  • Trusted attributes: os atributos que as context sources desta tool fornecem, agrupados por fonte, como subject.refund_limit · number — Acme Employee Directory / Employee profile.

Os operadores dependem do tipo do campo:

TipoOperadores
Textois, is not, is one of, starts with
Númerois at most, is less than, is at least, is more than, is
Booleanois true, is false (sem valor)

Reads as mostra a regra numa frase, com as condições unidas por AND ou OR: "amount is at most 500 AND order_id is one of [1001, 1002]".

Listas de valores exatos

is one of recebe uma lista, editada como um todo: cada valor aparece entre os colchetes com uma marca para remover, Enter ou vírgula incluem o valor digitado, e colar uma lista inclui todos os valores dela. Uma regra como "order_id is one of [1001, 1002]" só deixa o agente agir nesses pedidos; qualquer outro valor é negado com condition.

Para uma regra que depende de quem é dono de um registro, e não de uma lista fixa, compare o argumento com um trusted attribute, como abaixo.

Comparar com um trusted attribute

Uma condição pode comparar um campo com um trusted attribute do mesmo tipo. Compare with a trusted attribute troca o valor fixo por um seletor de trusted attributes; o botão só aparece quando a tool tem algum desse tipo. Uma condição nunca compara dois argumentos da chamada.

Regra que compara amount com o limite do funcionário

Esta regra só libera o reembolso quando o valor pedido está dentro do limite da pessoa que delegou. O limite vem da API de RH, pelos trusted attributes Employee profile, na hora da chamada:

context.chokepoint.arguments["amount"] <= subject.properties.chokepoint["<binding>"].values["refund_limit"]

Mesmo agente, mesma tool, mesma regra: um analista com limite de 200 e uma gerente com limite de 2.000 recebem respostas diferentes para o mesmo pedido, sem ninguém criar agentes separados. Se a API de RH não responde, a chamada é bloqueada, não liberada (Enriquecimento).

Use a value volta para um valor fixo.

Regras sobre o objeto da chamada

Trusted attributes também podem descrever aquilo sobre o que a tool age. Uma regra em refund_order pode ler o pedido na API de pedidos do cliente e só permitir o reembolso de um pedido aberto da pessoa que pediu:

resource.properties.chokepoint["<binding>"].values["status"] == "open"
  && resource.properties.chokepoint["<binding>"].values["owner_id"] == subject.id

Editar em CEL

Quem precisa de algo que o editor não expressa usa Edit as CEL (advanced):

Edição avançada em CEL

O campo CEL expression recebe a expressão. O backend confere se ela devolve um booleano e se os trusted attributes que ela lê existem; o Admin não compila CEL. Depois de uma edição em CEL, a regra não volta para o editor. Discard CEL edits and use the builder descarta a edição.

Salvar

Add to draft inclui a regra no rascunho. O cartão da regra mostra New in draft, e a ligação ganha a marca {} N no grafo. Quando a regra lê trusted attributes, o grafo desenha uma ligação tracejada da tool até a context source. A regra só vale depois de publicar. Uma regra salva não é editada: remova e inclua outra.

No painel, cada regra salva mostra o nome e Reads as com a frase dela. Uma regra escrita em CEL avançado, ou em qualquer CEL que o builder não escreve, aparece em CEL.

O que o Investigate mostra de uma regra

Quando uma regra nega, a lista do Investigate mostra "Rule not met" e a regra como frase, e o inspetor mostra o nome dela no caminho e "Rule not met: amount is at most 500" no resultado, mas nunca os valores avaliados. O registro diz que "Refund up to 500" falhou; ele não guarda o valor da chamada.