Refinamento Automático de Políticas de Automated Reasoning no Amazon Bedrock

O problema que a AWS resolveu

Quem já trabalhou com políticas de Automated Reasoning checks (Verificações de Raciocínio Automatizado) no Amazon Bedrock Guardrails sabe que o maior atrito no processo não é criar a política — é afinar ela. O ciclo de diagnosticar falhas, editar regras manualmente, retestar e repetir consumia tempo considerável de especialistas. A AWS anunciou o refinamento automático de políticas, que automatiza justamente a parte de diagnóstico e correção desse ciclo.

Vale lembrar o que são os Automated Reasoning checks: eles traduzem linguagem natural para lógica formal e aplicam técnicas de verificação automatizada para produzir um resultado — VALID, INVALID, SATISFIABLE, IMPOSSIBLE ou TRANSLATION_AMBIGUOUS. Em traduções sem ambiguidade, o recurso entrega até 99% de precisão de verificação, conforme reportado no anúncio de disponibilidade geral.

O pipeline de dois passos que explica tudo

Para entender o refinamento, é preciso ter clareza sobre como uma política funciona internamente. O processo tem dois passos sequenciais:

  • Passo de tradução: o texto em linguagem natural (entrada e saída) é mapeado para atribuições de variáveis, usando as descrições de variáveis definidas na política.
  • Passo de validação: as regras formais da política são aplicadas sobre essas atribuições para chegar a um resultado final.
Imagem original — fonte: Aws

Quando um teste falha, o problema está em um desses dois passos. É exatamente por isso que o refinamento automático oferece dois modos distintos, cada um mirando uma etapa diferente do pipeline.

Os dois tipos de falha — e como identificá-los

Falha tipo 1: problema nas regras (a lógica está errada)

Nesse cenário, a tradução funcionou corretamente — as variáveis certas receberam os valores certos — mas o resultado da validação não corresponde ao esperado. O problema está nas regras: alguma está permissiva demais, restritiva demais ou simplesmente ausente. O modelo entendeu a pergunta perfeitamente, mas aplicou a lógica errada.

Falha tipo 2: tradução ambígua (a linguagem está errada)

Quando um teste retorna TRANSLATION_AMBIGUOUS, significa que o motor de validação chegou a resultados diferentes dependendo de qual interpretação seguiu. As causas mais comuns incluem variáveis com definições sobrepostas (por exemplo, “tempo de serviço” e “meses de emprego” descrevendo o mesmo conceito), descrições vagas, formatos de valor inconsistentes (5 versus 0,05 para representar “5%”) e nomes de variáveis que já embutem negações, o que confunde os modelos de tradução.

Modo 1: Refinamento Iterativo — corrigindo as regras

O Refinamento Iterativo (ITERATIVELY_REFINE_POLICY) é indicado quando a tradução está correta, mas o resultado da validação não bate com o esperado. Antes desse recurso, corrigir uma política com 10 a 30 regras exigia que um especialista rastreasse cada regra manualmente, formulasse hipóteses e editasse lógica formal SMT-LIB à mão. Esse trabalho agora se resume a uma etapa de revisão e aprovação.

Como funciona

O motor recebe três entradas: a definição atual da política (regras, variáveis e tipos), um documento-fonte com o texto autoritativo em linguagem natural, e — opcionalmente — um feedback em linguagem natural descrevendo explicitamente o que deve mudar. Por exemplo: “Atualize o requisito de tempo de serviço para licença parental de 12 para 6 meses, conforme a seção 3 do documento revisado.”

Internamente, o motor gera uma proposta de mudança, simula o efeito sobre os testes salvos, verifica se os testes que falhavam agora passam e ajusta caso necessário. Esse ciclo acontece de forma transparente — o que o usuário recebe é o resultado convergido: um diff mostrando exatamente quais regras e variáveis foram alteradas e como cada teste é afetado.

Fluxo via API (Boto3)

O refinamento é executado como um fluxo assíncrono. O processo tem quatro etapas: exportar a definição atual da política, iniciar o fluxo, aguardar a conclusão e recuperar as mudanças propostas.

import boto3
bedrock = boto3.client("bedrock")

# Export the current policy definition (required input to the workflow).
policy_definition = bedrock.export_automated_reasoning_policy_version(
    policyArn=policy_arn,
)["policyDefinition"]

with open("hr-leave-policy.pdf", "rb") as f:
    source_document = f.read()

response = bedrock.start_automated_reasoning_policy_build_workflow(
    policyArn=policy_arn,
    buildWorkflowType="ITERATIVELY_REFINE_POLICY",
    sourceContent={
        "policyDefinition": policy_definition,
        "workflowContent": {
            "iterativeRefinementContent": {
                "documents": [
                    {
                        "document": source_document,
                        "documentName": "hr-leave-policy.pdf",
                        "documentContentType": "pdf",
                    }
                ],
                "feedback": "Update the tenure requirement from 12 to 6 months per section 3.",
            }
        },
    },
)
build_workflow_id = response["buildWorkflowId"]

A chamada retorna imediatamente com um buildWorkflowId. O fluxo passa pelos estados SCHEDULEDBUILDING até atingir COMPLETED, FAILED ou CANCELLED. A convergência leva tipicamente de um a alguns minutos, dependendo do tamanho da política.

import time

while True:
    workflow = bedrock.get_automated_reasoning_policy_build_workflow(
        policyArn=policy_arn,
        buildWorkflowId=build_workflow_id,
    )
    status = workflow["status"]
    if status in ("COMPLETED", "FAILED", "CANCELLED"):
        break
    time.sleep(10)

if status == "COMPLETED":
    assets = bedrock.get_automated_reasoning_policy_build_workflow_result_assets(
        policyArn=policy_arn,
        buildWorkflowId=build_workflow_id,
        assetType="POLICY_DEFINITION",
    )
    proposed_definition = assets["buildWorkflowAssets"]["policyDefinition"]

A definição retornada é o DRAFT proposto. Para confirmar as mudanças, basta chamar update_automated_reasoning_policy com essa definição. Para ver o que mudou, compare com a definição exportada antes de iniciar o fluxo.

Modo 2: Refinamento de Variáveis Ambíguas — corrigindo a linguagem

Quando os testes retornam TRANSLATION_AMBIGUOUS, nenhuma quantidade de edição de regras vai resolver o problema — a raiz está na linguagem usada para descrever as variáveis. O Refinamento de Variáveis Ambíguas (RESOLVE_POLICY_AMBIGUITIES) identifica quais descrições de variáveis causam interpretações conflitantes e propõe definições mais precisas.

O que ele corrige

O modo detecta padrões como variáveis sobrepostas (duas variáveis descrevendo o mesmo conceito), descrições incompletas ou vagas, formatos de valor inconsistentes e nomes de variáveis que embutem negações. Quando variáveis sobrepostas são detectadas, pode ser proposta uma fusão: uma variável é eliminada e as regras que a referenciavam são atualizadas para usar a variável sobrevivente.

Um exemplo típico de proposta antes/depois:

  • Antes: tenureMonths: “How long the employee has worked in months.”
  • Depois (proposto): tenureMonths: “The number of complete months the employee has been continuously employed. When users mention years of service, convert to months (for example, 2 years = 24 months). This variable captures references to employment duration, length of service, time at the company, or seniority.”

Fluxo via API

O padrão assíncrono é o mesmo do Refinamento Iterativo. A diferença é que esse modo analisa as variáveis da política diretamente e não exige documento-fonte nem testes anexados — apenas a definição atual da política em sourceContent.

response = bedrock.start_automated_reasoning_policy_build_workflow(
    policyArn=policy_arn,
    buildWorkflowType="RESOLVE_POLICY_AMBIGUITIES",
    sourceContent={
        "policyDefinition": policy_definition,
    },
)
build_workflow_id = response["buildWorkflowId"]

O polling e a recuperação dos resultados seguem exatamente o mesmo padrão mostrado para o Refinamento Iterativo, usando assetType="POLICY_DEFINITION".

O princípio inegociável: aprovação humana em todas as mudanças

Os dois modos compartilham uma propriedade fundamental: nenhuma alteração entra em vigor sem aprovação explícita. O motor de refinamento tem autoridade para sugerir. O usuário tem autoridade para confirmar. Nenhuma mudança chega à política DRAFT — muito menos à produção — sem que o responsável aceite a proposta.

A tela de revisão mostra simultaneamente o diff das mudanças propostas (regras adicionadas, editadas ou removidas; variáveis alteradas; tipos de variáveis customizados modificados) e o impacto de cada mudança sobre todos os testes salvos. Se os testes que falhavam agora passam e os que passavam continuam passando, a proposta pode ser aceita com confiança.

Walkthrough A: corrigindo um problema de regra

Considere uma política de elegibilidade de licença parental de RH com um teste falhando. O assistente informa que um funcionário em regime de meio período com 8 meses de tempo de serviço é elegível para licença parental. O teste espera INVALID, mas a política retorna VALID.

Ao inspecionar o resultado do teste, as variáveis estão corretamente capturadas: monthsOfContinuousService = 8 e employmentStatus = PART_TIME. O resultado é VALID porque a única regra de suporte concede elegibilidade após 6 meses de serviço contínuo, sem nenhuma regra que exclua funcionários de meio período. A tradução está correta — o problema é de lógica.

Ao acionar o Refinamento Iterativo com o documento-fonte e o feedback “Add a rule that explicitly makes part-time employees ineligible for parental leave”, o motor propõe duas mudanças: remove a regra que concedia elegibilidade apenas por tempo de serviço e adiciona uma regra que exclui funcionários de meio período. O teste que falhava passa a ser aprovado, sem regressões nos demais.

Walkthrough B: corrigindo um problema de linguagem

Na mesma política de RH, um teste retorna TRANSLATION_AMBIGUOUS. O resultado mostra duas interpretações: uma mapeou “2 anos de serviço” para tenureMonths = 24 e outra para monthsOfService = 24. Duas variáveis descrevem o mesmo conceito — essa sobreposição é a raiz da ambiguidade.

O Refinamento de Variáveis Ambíguas não exige documento-fonte. Ao ser acionado, ele propõe eliminar monthsOfService, atualizar as regras que a referenciavam para usar tenureMonths e expandir a descrição dessa variável para incluir instruções explícitas de conversão e sinônimos. Após aceitar a proposta, o teste que retornava TRANSLATION_AMBIGUOUS passa a produzir um resultado definitivo.

Validando com o Relatório de Fidelidade

Após aplicar qualquer refinamento, a AWS recomenda gerar um Relatório de Fidelidade (GENERATE_FIDELITY_REPORT) para verificar se a política atualizada ainda representa fielmente o documento-fonte. O relatório fornece três métricas: pontuação de cobertura (0,0–1,0), pontuação de precisão (0,0–1,0) e ancoragem por regra, que vincula cada regra às declarações específicas do documento que a sustentam. Comparar os relatórios antes e depois do refinamento é a forma mais confiável de detectar se uma correção fez a política se desviar da intenção original.

Boas práticas

  • Inspecione a tradução antes de escolher o modo. Abra o resultado do teste falhando e verifique as atribuições de variáveis. Se as variáveis certas têm os valores certos mas o resultado está errado, use Refinamento Iterativo. Se as atribuições estão erradas ou o resultado é TRANSLATION_AMBIGUOUS, use Refinamento de Variáveis Ambíguas.
  • Delimite os inputs para limitar o escopo da mudança. Um documento-fonte focado em uma parte específica da política, combinado com feedback objetivo em formato “se-então”, produz propostas mais precisas e revisáveis do que apontar o motor para um manual de 40 páginas com instruções vagas.
  • Confie no painel de resultados de testes, não apenas no diff. Um diff aparentemente limpo que causa regressão em testes que passavam não é uma correção válida.
  • Compare Relatórios de Fidelidade antes de versionar. O refinamento otimiza para fazer testes passarem — essa otimização pode distanciar uma regra do que o documento-fonte realmente diz.

Casos de uso em setores regulados

A AWS destaca aplicações práticas em múltiplos setores: em RH, manuais de benefícios atualizados anualmente podem ser ingeridos pelo Refinamento Iterativo para propor atualizações de regras sem que o time precise tocar em lógica formal. Em serviços financeiros, variáveis sobrepostas como debtToIncomeRatio e DTI são consolidadas pelo Refinamento de Variáveis Ambíguas para suportar validação determinística. Em saúde e manufatura, equipes de conformidade podem refinar políticas iterativamente mantendo trilha de auditoria completa por meio de snapshots versionados e Relatórios de Fidelidade.

Recursos adicionais

Fonte

Automated Reasoning policy refinement in Amazon Bedrock (https://aws.amazon.com/blogs/machine-learning/automated-reasoning-policy-refinement-in-amazon-bedrock/)

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *