Integre verificações automatizadas de raciocínio em seu aplicativo - Amazon Bedrock

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Integre verificações automatizadas de raciocínio em seu aplicativo

Depois de implantar sua política de raciocínio automatizado em uma grade de proteção (consulteImplantar uma política de raciocínio automatizado em uma aplicação), você pode usá-la em tempo de execução para validar as respostas do LLM e agir de acordo com o feedback. Esta página explica como chamar a API de validação, interpretar as descobertas de forma programática e implementar padrões de integração comuns, como reescrever respostas inválidas e fazer perguntas esclarecedoras.

As verificações automatizadas de raciocínio operam apenas no modo de detecção — elas retornam descobertas e feedback em vez de bloquear o conteúdo. Seu aplicativo é responsável por decidir o que fazer com as descobertas: fornecer a resposta, reescrevê-la, pedir esclarecimentos ou retornar a um comportamento padrão.

Visão geral da integração

Em tempo de execução, a integração segue esse fluxo:

User question ──► LLM generates response ──► ApplyGuardrail validates response │ ┌─────────┴─────────┐ │ │ VALID Not VALID │ │ ▼ ▼ Serve response Inspect findings to user │ ┌────────┴────────┐ │ │ OTHER FINDING TRANSLATION_ TYPES AMBIGUOUS / SATISFIABLE │ │ ▼ ▼ Rewrite using Ask user for AR feedback clarification │ │ ▼ ▼ Validate again Validate with clarified input

As descobertas do Automated Reasoning são retornadas por meio de qualquer API que ofereça suporte a uma configuração do Amazon Bedrock Guardrails:

  • ApplyGuardrail— API de validação autônoma. Use isso quando quiser validar o conteúdo independentemente da invocação do LLM. Essa é a abordagem recomendada para verificações de raciocínio automatizado, pois oferece controle total sobre qual conteúdo é validado e quando.

  • Conversee InvokeModel — invocação LLM APIs com configuração de guardrail. As descobertas do raciocínio automatizado são retornadas no trace campo da resposta.

  • InvokeAgente RetrieveAndGenerate — Agente e base de conhecimento APIs com configuração de guardrail.

Esta página se concentra na ApplyGuardrail API porque ela fornece a maior flexibilidade para implementar os padrões de reescrita e esclarecimento descritos abaixo. Para obter informações sobre como usar grades de proteção com outras APIs, consulte Usar uma grade de proteção.

Exemplo de chatbot de reescrita de código aberto

Para uma implementação completa e em estilo de produção dos padrões descritos nesta página, consulte as verificações de raciocínio automatizado que reescrevem o chatbot em. GitHub Esse exemplo de aplicativo demonstra:

  • Um ciclo de reescrita iterativo em que respostas inválidas são corrigidas automaticamente com base no feedback de AR.

  • Perguntas de acompanhamento quando o LLM precisa de contexto adicional do usuário para reescrever com precisão.

  • Um mecanismo de tempo limite que retoma automaticamente o processamento quando os usuários não respondem às perguntas de esclarecimento.

  • A injeção de contexto de política nos prompts do LLM para que o LLM possa consultar todas as regras da política durante a reescrita.

  • Registro de auditoria JSON de cada iteração de validação para conformidade e depuração.

A amostra usa um Python/Flask back-end com um front-end React e se comunica com o Amazon Bedrock para inferência do LLM e com o Amazon Bedrock Guardrails para validação por meio da API. ApplyGuardrail

nota

O aplicativo de amostra inclui o conteúdo da política diretamente nos prompts de geração do LLM para dar suporte a qualquer política de raciocínio automatizado sem exigir o upload de documentos. Em uma implantação de produção, você normalmente usaria conteúdo RAG ou alimentaria o LLM com o documento original em linguagem natural em vez do código-fonte da política de raciocínio automatizado.

Ligue ApplyGuardrail com verificações automatizadas de raciocínio

Use a ApplyGuardrail API para validar o conteúdo em relação à sua grade de proteção. A API aceita um ou mais blocos de conteúdo e retorna uma avaliação que inclui descobertas de raciocínio automatizado.

Estrutura de solicitações

guardrailIdentifier(obrigatório)

O ID do guardrail ou ARN. Use a grade de proteção que tem sua política de raciocínio automatizado anexada.

guardrailVersion(obrigatório)

O número da versão do guardrail (por exemplo,1). Use uma versão numerada para cargas de trabalho de produção, não. DRAFT

source(obrigatório)

Defina como OUTPUT ao validar as respostas do LLM. Defina como INPUT ao validar as solicitações do usuário. Para verificações de raciocínio automatizado, você normalmente valida a saída do LLM.

content(obrigatório)

Uma matriz de blocos de conteúdo para validar. Cada bloco contém um text campo com o conteúdo a ser verificado. Você pode transmitir a pergunta do usuário e a resposta do LLM como blocos de conteúdo separados ou combiná-las em um único bloco.

Exemplo: Validar uma resposta LLM usando o AWS CLI

aws bedrock-runtime apply-guardrail \ --guardrail-identifier "your-guardrail-id" \ --guardrail-version "1" \ --source OUTPUT \ --content '[ { "text": { "text": "User: Am I eligible for parental leave if I have been working here for 2 years full-time?\nAssistant: Yes, you are eligible for parental leave." } } ]'

Exemplo: Validar uma resposta LLM usando Python (boto3)

import boto3 import json bedrock_runtime = boto3.client("bedrock-runtime", region_name="us-east-1") response = bedrock_runtime.apply_guardrail( guardrailIdentifier="your-guardrail-id", guardrailVersion="1", source="OUTPUT", content=[ { "text": { "text": ( "User: Am I eligible for parental leave if I have been " "working here for 2 years full-time?\n" "Assistant: Yes, you are eligible for parental leave." ) } } ], ) # The AR findings are in the assessments for assessment in response.get("assessments", []): ar_assessment = assessment.get("automatedReasoningPolicy", {}) findings = ar_assessment.get("findings", []) for finding in findings: # Each finding is a union — exactly one key is present # Possible keys: valid, invalid, satisfiable, impossible, # translationAmbiguous, tooComplex, noTranslations print(json.dumps(finding, indent=2, default=str))

Estrutura de respostas

A ApplyGuardrail resposta inclui uma assessments matriz. Cada avaliação contém um automatedReasoningPolicy objeto com uma findings matriz. Cada descoberta é um tipo de união — exatamente uma das seguintes chaves está presente:

  • valid

  • invalid

  • satisfiable

  • impossible

  • translationAmbiguous

  • tooComplex

  • noTranslations

Para obter uma descrição detalhada de cada tipo de descoberta e seus campos, consulteDescobertas e resultados de validação.

Interprete as descobertas de AR em tempo de execução

Para agir programaticamente com base nas descobertas do Raciocínio Automatizado, seu aplicativo precisa extrair o tipo de descoberta, os detalhes da tradução e as regras de apoio ou contraditórias. As seções a seguir explicam como analisar cada parte de uma descoberta.

Determine o tipo de descoberta

Cada descoberta é uma união — exatamente uma chave está presente. Verifique qual chave existe para determinar o tipo de descoberta:

def get_finding_type(finding): """Return the finding type and its data from an AR finding union.""" for finding_type in [ "valid", "invalid", "satisfiable", "impossible", "translationAmbiguous", "tooComplex", "noTranslations" ]: if finding_type in finding: return finding_type, finding[finding_type] return None, None

Leia a tradução

A maioria dos tipos de descoberta inclui um translation objeto que mostra como as verificações de raciocínio automatizado traduziram a entrada da linguagem natural em lógica formal. A tradução contém:

  • premises— As condições extraídas da entrada (por exemplo,isFullTime = true,tenureMonths = 24).

  • claims— As afirmações a serem validadas (por exemplo,eligibleForParentalLeave = true).

  • untranslatedPremises— Partes da entrada que não puderam ser mapeadas para variáveis de política. Essas peças não são validadas.

  • untranslatedClaims— Declarações que não puderam ser mapeadas para variáveis de política.

Verifique untranslatedPremises e untranslatedClaims entenda o escopo da validação. Um VALID resultado abrange apenas as declarações traduzidas — o conteúdo não traduzido não é verificado.

Leia as regras de apoio ou contraditórias

Dependendo do tipo de descoberta, a descoberta inclui regras que explicam o resultado:

  • validas descobertas incluem supportingRules — as regras políticas que provam que as alegações estão corretas.

  • invalidas descobertas incluem contradictingRules — as regras políticas que as reivindicações violam.

  • satisfiableas descobertas incluem a claimsTrueScenario e a claimsFalseScenario — mostrando as condições sob as quais as afirmações são verdadeiras e falsas.

Essas regras e cenários são as principais entradas para o padrão de reescrita descrito em. Reescreva respostas inválidas usando feedback de AR

Determine o resultado agregado

Uma única solicitação de validação pode retornar várias descobertas. Para determinar o resultado geral, classifique as descobertas por gravidade e selecione a pior. A ordem de severidade do pior para o melhor é: TRANSLATION_AMBIGUOUSIMPOSSIBLE,INVALID,,SATISFIABLE,VALID.

SEVERITY_ORDER = { "tooComplex": 0, "translationAmbiguous": 0, "impossible": 1, "invalid": 2, "satisfiable": 3, "valid": 4, "noTranslations": 5, } def get_aggregate_result(findings): """Return the worst finding type from a list of findings.""" worst = None worst_severity = float("inf") for finding in findings: finding_type, _ = get_finding_type(finding) severity = SEVERITY_ORDER.get(finding_type, 0) if severity < worst_severity: worst_severity = severity worst = finding_type return worst

Gerencie os resultados da validação em seu aplicativo

Use o resultado agregado para decidir o que seu aplicativo fará a seguir. A tabela a seguir resume a ação recomendada para cada tipo de resultado.

Resultado O que significa Ação recomendada
valid A resposta é matematicamente comprovada como correta, dadas as premissas e as regras de sua política. Forneça a resposta ao usuário. Registre a descoberta para fins de auditoria (consulteCrie uma trilha de auditoria).
invalid A resposta contradiz suas regras de política. O contradictingRules campo identifica quais regras foram violadas. Reescreva a resposta usando o feedback de AR (consulteReescreva respostas inválidas usando feedback de AR). Se a regravação falhar após várias tentativas, bloqueie a resposta e retorne uma mensagem alternativa.
satisfiable A resposta está correta em algumas condições, mas não em todas. Não está errado, mas está incompleto — não menciona todos os requisitos. Reescreva a resposta para incluir as condições ausentes. Use o claimsFalseScenario para identificar o que está faltando. Como alternativa, você pode permitir que seu LLM faça perguntas esclarecedoras ao usuário.
impossible As premissas são contraditórias ou a política contém regras conflitantes. Peça ao usuário que esclareça sua opinião (consulteFaça perguntas esclarecedoras). Se o problema persistir, isso pode indicar um problema de política — revise o relatório de qualidade.
translationAmbiguous A entrada tem várias interpretações válidas. Os modelos de tradução discordaram sobre como mapear a linguagem natural para variáveis políticas. Peça esclarecimentos ao usuário para resolver a ambigüidade. Use os differenceScenarios campos options e para gerar perguntas esclarecedoras direcionadas.
tooComplex A entrada excede os limites de processamento para análise lógica. Simplifique a entrada dividindo-a em partes menores ou retorne uma mensagem alternativa explicando que a resposta não pôde ser verificada.
noTranslations A entrada não é relevante para o domínio da sua política. Nenhuma variável de política pôde ser mapeada. O conteúdo está fora do tópico desta política. Ofereça a resposta sem validação de AR ou use outros componentes de proteção (como políticas de tópicos) para lidar com conteúdo fora do tópico.

Reescreva respostas inválidas usando feedback de AR

O padrão de integração mais poderoso para verificações de raciocínio automatizado é o ciclo de reescrita: quando uma resposta é invalid ousatisfiable, seu aplicativo cria um prompt que inclui a resposta original, as descobertas específicas e as regras da política e, em seguida, solicita que o LLM reescreva a resposta para que seja consistente com a política. A resposta reescrita é validada novamente e o loop continua até que a resposta seja atingida valid ou o número máximo de iterações seja atingido.

Reescrevendo o fluxo do loop

LLM generates initial response │ ▼ Validate with ApplyGuardrail ◄──────────────────┐ │ │ ▼ │ ┌─────┴─────┐ │ │ │ │ VALID Not VALID │ │ │ │ ▼ ▼ │ Done Construct rewriting prompt │ with findings + rules │ │ │ ▼ │ LLM rewrites response │ │ │ ▼ │ Max iterations? ──── No ────────────────┘ │ Yes │ ▼ Return best response with warning

Construa o prompt de reescrita

A solicitação de reescrita deve incluir três informações das descobertas do AR:

  1. A resposta original que falhou na validação.

  2. A descoberta específica — incluindo as premissas traduzidas, as alegações e as regras contraditórias ou de apoio.

  3. Uma instrução para reescrever a resposta para que ela seja consistente com as regras da política.

Exemplo de modelo de solicitação de reescrita:

The following response was checked against our policy and found to be {finding_type}. Original response: {original_response} The validation found the following issue: - Premises (what was understood from the input): {premises} - Claims (what was asserted): {claims} - Contradicting rules: {contradicting_rules} Please rewrite the response so that it is consistent with the policy document. Keep the same helpful tone and answer the user's question accurately based on the rules. If you cannot provide an accurate answer without more information, explain what additional information is needed.
dica

Sempre inclua o conteúdo da Retrieval Augmented Generation (RAG) em suas solicitações de reescrita ou nas regras de política para que o LLM tenha todo o contexto necessário ao reescrever. O modelo de solicitação de reescrita fornece os detalhes específicos da descoberta, enquanto a solicitação do sistema fornece o contexto político mais amplo. Essa abordagem de contexto duplo é demonstrada na amostra de chatbot de reescrita de código aberto.

Reescrevendo as melhores práticas

  • Defina uma contagem máxima de iterações. O loop de reescrita deve ter um limite rígido (normalmente de 2 a 5 iterações) para evitar loops infinitos. Se a resposta ainda não estiver valid após o máximo de iterações, retorne a melhor resposta com um aviso ou volte para uma mensagem padrão.

  • Processe as descobertas em ordem de prioridade. Quando várias descobertas forem retornadas, resolva primeiro a descoberta mais grave. A ordem de severidade é: translationAmbiguousimpossible,,invalid,satisfiable,valid.

  • Inclua o contexto da política no prompt do sistema. O LLM precisa acessar o documento de origem ou as regras completas da política para reescrever com precisão. Você pode usar uma Base de Conhecimento para incluir seus documentos na solicitação de geração ou usar a ExportAutomatedReasoningPolicyVersion API para recuperar a definição da política e formatá-la para o LLM.

  • Registre cada iteração. Registre a resposta original, as descobertas, a solicitação de reescrita e a resposta reescrita para cada iteração. Essa trilha de auditoria é valiosa para depuração e conformidade (consulte). Crie uma trilha de auditoria

Faça perguntas esclarecedoras

Quando as verificações de raciocínio automatizado retornam translationAmbiguous ou impossible resultam, o LLM pode não ter informações suficientes para reescrever a resposta com precisão. satisfiable Nesses casos, seu aplicativo pode pedir esclarecimentos ao usuário e, em seguida, incorporar as respostas na próxima tentativa de validação.

Quando pedir esclarecimentos

  • translationAmbiguous— A entrada tem várias interpretações válidas. O options campo mostra as interpretações concorrentes, e o differenceScenarios campo mostra como elas diferem na prática. Use-os para gerar perguntas direcionadas sobre a ambigüidade específica.

  • satisfiable— A resposta está correta em algumas condições, mas não em todas. claimsFalseScenarioMostra as condições sob as quais a resposta estaria incorreta. Pergunte ao usuário sobre essas condições específicas.

  • impossible— A entrada contém declarações contraditórias. Peça ao usuário que esclareça a contradição.

  • Falha na regravação — Se o LLM não conseguir reescrever a resposta valid após várias tentativas, talvez seja necessário um contexto adicional do usuário. Peça ao LLM que gere perguntas esclarecedoras com base nas descobertas.

Padrão de esclarecimento

O fluxo de esclarecimento funciona da seguinte forma:

  1. Extraia as variáveis ambíguas ou as condições ausentes das descobertas do AR.

  2. Gere perguntas esclarecedoras — programaticamente a partir dos campos de descoberta ou solicitando ao LLM que formule perguntas com base nas descobertas.

  3. Apresente as perguntas ao usuário e colete as respostas.

  4. Incorpore as respostas ao contexto e gere uma nova resposta.

  5. Valide a nova resposta comApplyGuardrail.

Exemplo: gerar perguntas esclarecedoras a partir de uma descoberta satisfiable

def generate_clarifying_questions(finding_data, user_question): """Ask the LLM to generate clarifying questions from a SATISFIABLE finding.""" claims_true = json.dumps( finding_data.get("claimsTrueScenario", {}), indent=2, default=str ) claims_false = json.dumps( finding_data.get("claimsFalseScenario", {}), indent=2, default=str ) prompt = ( f"A user asked: {user_question}\n\n" f"The answer is correct when these conditions hold:\n{claims_true}\n\n" f"But incorrect when these conditions hold:\n{claims_false}\n\n" f"Generate 1-3 short, specific questions to ask the user to determine " f"which conditions apply to their situation. Format each question on " f"its own line." ) return generate_response(prompt, "You are a helpful assistant.")

Crie uma trilha de auditoria

As descobertas do raciocínio automatizado fornecem prova de validade matematicamente verificável. Para setores regulamentados e cenários de conformidade, essa prova é um diferencial importante: você pode demonstrar que uma resposta de IA foi verificada em relação a regras de política específicas com atribuições de variáveis específicas, não apenas com correspondência de padrões ou avaliada probabilisticamente.

Para criar uma trilha de auditoria eficaz, registre as seguintes informações para cada solicitação de validação:

  • Carimbo de data/hora e ID da solicitação. Quando a validação ocorreu e um identificador exclusivo para a solicitação.

  • Conteúdo de entrada. A pergunta do usuário e a resposta do LLM que foram validadas.

  • Tipo e detalhes da busca. O resultado da validação (valid,invalid, etc.), as premissas e reivindicações traduzidas e as regras de apoio ou contraditórias.

  • Ação tomada. O que seu aplicativo fez com a descoberta: forneceu a resposta, a reescreveu, pediu esclarecimentos ou a bloqueou.

  • Reescrevendo a história. Se a resposta foi reescrita, registre cada iteração: a resposta original, a solicitação de reescrita, a resposta reescrita e o resultado da validação de cada iteração.

  • Versão da política. A versão do guardrail e a versão da política usadas para validação. Isso garante que você possa reproduzir o resultado da validação posteriormente.

Exemplo: estrutura de entrada do registro de auditoria

{ "timestamp": "2025-07-21T14:30:00Z", "request_id": "req-abc123", "guardrail_id": "your-guardrail-id", "guardrail_version": "1", "user_question": "Am I eligible for parental leave?", "llm_response": "Yes, you are eligible for parental leave.", "validation_result": "valid", "findings": [ { "type": "valid", "premises": "isFullTime = true, tenureMonths = 24", "claims": "eligibleForParentalLeave = true", "supporting_rules": ["A1B2C3D4E5F6"] } ], "action_taken": "served_response", "rewrite_iterations": 0 }
dica

Armazene os registros de auditoria em um repositório durável e inviolável, como o Amazon CloudWatch Logs ou o Amazon S3, com o bloqueio de objetos ativado. Para cenários de conformidade, considere usar o Lake para consultar registros de auditoria em toda a sua organização.