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.
Como as verificações automatizadas de raciocínio avaliam o conteúdo
As verificações automatizadas de raciocínio traduzem o conteúdo que você envia em uma implicação lógica — uma relação if/then "” — e, em seguida, comparam essa implicação com base nas regras de sua política. A tradução produz dois tipos de declarações lógicas:
-
Premissas — O lado “se”: as condições antecedentes e os fatos do cenário que definem o contexto do raciocínio (por exemplo, um fato que o usuário afirma sobre sua situação ou uma condição da qual a resposta faz com que sua resposta dependa). As instalações são opcionais.
-
Reivindicações — O lado “então”: as afirmações a serem validadas de acordo com suas regras de política (normalmente as declarações substantivas na resposta do modelo).
As verificações automatizadas de raciocínio decidem quais declarações são premissas e quais são afirmações quando traduzem o conteúdo — a divisão não é obtida diretamente dos campos de entrada. O que você controla por meio da API é se cada parte do conteúdo é inserida como entrada do usuário (uma pergunta ou condição declarada) ou entrada do agente (uma resposta para validar). O query qualificador marca o conteúdo como do lado do usuário; guardContent (ou texto não marcado) o marca como do agente; groundingSource é ignorado pelas verificações de raciocínio automatizado. A tradução então deriva as premissas e reivindicações da entrada combinada.
Se você precisa marcar o conteúdo e como, depende da API que você usa.
| solicitações de | A marcação é necessária? | Como o conteúdo entra nas verificações automatizadas de raciocínio |
|---|---|---|
ApplyGuardrail |
Não (opcional) | Todo o conteúdo aprovado é avaliado. Cada bloco de conteúdo é qualifiers definido se é inserido como entrada do lado do usuário (query) ou do lado do agente (guard_content); um bloco sem qualificador usa como padrão o lado do agente. ApplyGuardrailnão acrescenta um modelo de resposta em seu nome, portanto, seu conteúdo deve incluir pelo menos um bloco do lado do agente (reivindicação). |
Converse(somente texto sem formatação) |
Sim | Os text blocos simples não são marcados, portanto, as verificações de raciocínio automatizado não têm conteúdo para avaliar e são ignoradas (). automatedReasoningPolicyUnits: 0 Use um guardContent bloco para se inscrever. |
Converse (com guardContent) |
Sim | Use qualifiers em guardContent blocos para marcar conteúdo do lado do usuário e do agente. A resposta do modelo é anexada automaticamente como um bloco do lado do agente (reivindicação). |
InvokeModel |
Sim | Envolva o texto de entrada em tags XML e defina tagSuffix na configuração da solicitação. A resposta do modelo é anexada automaticamente como um bloco do lado do agente (reivindicação). |
Principais diferenças entre as APIs
-
Em
ConverseseguidaInvokeModel, a resposta do modelo é anexada automaticamente como um bloco do lado do agente (reivindicação). Como resultado, uma entrada com a qual você marca apenasqueryainda executa verificações de raciocínio automatizado — a resposta fornece a afirmação. -
Omitir tags ou enviar somente texto sem formatação não gera um erro
Converse, mas as verificações de raciocínio automatizado não são aplicadas.InvokeModelA resposta indica isso comautomatedReasoningPolicyUnits: 0. -
Ativado
InvokeModel, o texto entre tags XML de proteção que não carrega nenhum qualificador usa como padrão o conteúdo do lado do agente (declaração). -
As verificações automatizadas de raciocínio avaliam a resposta (o conteúdo do lado do agente); elas não são executadas em uma avaliação independente
INPUT. -
Com
ApplyGuardrail, nenhum modelo de resposta é anexado para você, portanto, o conteúdo enviado deve incluir pelo menos um bloco do lado do agente (reivindicação). Se isso não acontecer, a solicitação retornaráValidationExceptiona.
Visão geral da integração
Em tempo de execução, a integração segue esse fluxo:
User question ──► LLM generates response ──► Validate 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. -
ConverseeInvokeModel— APIs de invocação do LLM com configuração de guardrail. As descobertas do raciocínio automatizado são retornadas notracecampo da resposta.
Ligue ApplyGuardrail com verificações automatizadas de raciocínio
ApplyGuardrailavalia todo o conteúdo que você passa. A marcação é opcional: por padrão, cada bloco de conteúdo é tratado como conteúdo do lado do agente (reivindicação) e validado de acordo com suas regras de política, que é o caminho de integração mais simples. Para dar contexto adicional às verificações de raciocínio automatizado, você pode definir qualifiers um bloco de conteúdo para marcá-lo como entrada do lado do usuário (query). Ao contrário de Converse eInvokeModel, ApplyGuardrail não acrescenta um modelo de resposta para você, então o conteúdo enviado deve incluir pelo menos um bloco de reivindicação; caso contrário, a solicitação retornará a. ValidationException
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
OUTPUTao validar as respostas do LLM. Defina comoINPUTao 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
textcampo 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:
validinvalidsatisfiableimpossibletranslationAmbiguoustooComplexnoTranslations
Para obter uma descrição detalhada de cada tipo de descoberta e seus campos, consulteDescobertas e resultados de validação.
Ligue para a Converse com verificações automatizadas de raciocínio
As verificações automatizadas de raciocínio são executadas em uma Converse solicitação somente quando a solicitação inclui pelo menos um guardContent bloco. Uma solicitação que envia apenas mensagens simples text não executa verificações de raciocínio automatizado.
Somente texto simples (verificações de raciocínio automatizado ignoradas)
Se sua Converse solicitação usa apenas text blocos simples (sem guardContent blocos), o texto não é marcado para avaliação de proteção, portanto, as verificações de raciocínio automatizado não têm nada para avaliar e são ignoradas:
{ "messages": [{"role": "user", "content": [{"text": "Apply a 20% discount to my order"}]}] }
Essa solicitação é retornadaautomatedReasoningPolicyUnits: 0. Outras políticas de proteção (conteúdo, tópico, palavras e informações confidenciais) ainda avaliam o conteúdo; somente as verificações automatizadas de raciocínio são ignoradas. Para executar verificações de raciocínio automatizado, use um guardContent bloco conforme mostrado na próxima seção.
Importante
Quando as verificações de raciocínio automatizado são ignoradas, a solicitação ainda é bem-sucedida sem erros. Portanto, uma solicitação mal configurada pode ser silenciosamente invalidada. Sempre confirme sua configuração verificando se automatedReasoningPolicyUnits é maior do que 0 na resposta. Um valor de 0 significa que as verificações de raciocínio automatizado não foram executadas (por exemplo, porque o conteúdo não foi marcado), mesmo que a solicitação tenha sido bem-sucedida.
Usando blocos GuardContent
Para executar verificações de raciocínio automatizadoConverse, agrupe o conteúdo que você deseja avaliar em um guardContent bloco e defina seus qualificadores. É assim que você marca qual conteúdo é do lado do usuário e qual é do lado do agente.
nota
A Converse API usa snake_case para strings qualificadoras (guard_content,grounding_source), enquanto as InvokeModel tags XML usam camelCase (,). guardContent groundingSource Eles são mapeados para as mesmas funções subjacentes.
A tabela a seguir mostra como cada qualificador marca o conteúdo para verificações de raciocínio automatizado.
| Cadeia de caracteres qualificadora (snake_case) | Equivalente à tag XML (CamelCase) | Função de entrada de raciocínio automatizado |
|---|---|---|
"query" |
query |
User-side— a pergunta do usuário ou as condições declaradas. Fornece contexto a partir do qual a tradução pode extrair premissas. |
"guard_content" |
guardContent |
Agent-side— conteúdo a ser validado de acordo com sua política. Fornece as reivindicações que a tradução verifica. |
"grounding_source" |
groundingSource |
Ignorado pelas verificações automatizadas de raciocínio (usadas pelas verificações contextuais de aterramento). |
O qualificador define apenas se o conteúdo é do lado do usuário ou do agente; as verificações automatizadas de raciocínio derivam as premissas e afirmações reais quando traduzem a entrada combinada. Um bloco sem qualificadores especificados é padronizado para guard_content (lado do agente). Você pode especificar vários qualificadores em um bloco. A ordem de precedência éguard_content > query > grounding_source.
nota
AtivadoConverse, a resposta do modelo é anexada automaticamente como um bloco do lado do agente (declaração), então uma solicitação cujos blocos são usados apenas query ainda executa verificações de raciocínio automatizado. (Quando você liga ApplyGuardrail diretamente, nenhuma resposta é anexada, então você mesmo deve fornecer pelo menos um bloco do lado do agente ou a solicitação retornará a.) ValidationException
Exemplo: Ligue para a Converse com qualificadores de raciocínio automatizado usando o AWS CLI
aws bedrock-runtime converse \ --model-id "model-id" \ --guardrail-config '{ "guardrailIdentifier": "your-guardrail-id", "guardrailVersion": "1", "trace": "enabled" }' \ --messages '[ { "role": "user", "content": [ { "guardContent": { "text": { "text": "Apply a 20% discount to my order and confirm it is done.", "qualifiers": ["query"] } } } ] } ]'
Quando as verificações de raciocínio automatizado são executadas
A tabela a seguir resume se as verificações de raciocínio automatizado são executadas para cada formato de Converse solicitação. Em todos os casos em que são executados, a resposta do modelo é anexada como um bloco do lado do agente (reivindicação).
| Forma de solicitação | Verificações automatizadas de raciocínio são executadas? |
|---|---|
Apenas text blocos simples, não guardContent |
Não — o conteúdo não está marcado, então as verificações são ignoradas () automatedReasoningPolicyUnits: 0 |
Tem guardContent blocos com guard_content ou sem qualificadores |
Sim |
Tem guardContent blocos com apenas query |
Sim — a resposta do modelo anexado fornece a reclamação |
Tem guardContent blocos com apenas grounding_source |
Sim — a resposta do modelo anexada fornece a reclamação. O grounding_source bloqueio em si é ignorado (ele não contribui com uma premissa nem com uma afirmação), mas a solicitação ainda é executada porque a resposta fornece o conteúdo da declaração. |
Ligue InvokeModel com verificações automatizadas de raciocínio
Atenção
Você deve marcar sua entrada com tags de proteção XML para verificações de raciocínio automatizado para avaliar as respostas. Sem tags, as verificações de raciocínio automatizado retornam automatedReasoningPolicyUnits: 0 — nenhum erro é gerado e nenhuma avaliação ocorre.
Como funciona
InvokeModelrequer duas coisas para verificações automatizadas de raciocínio:
-
A
tagSuffixnoamazon-bedrock-guardrailConfigobjeto do corpo. -
Insira texto encapsulado em tags XML que usam esse sufixo.
O formato da tag XML é o seguinte:
<amazon-bedrock-guardrails-QUALIFIER_SUFFIX>text</amazon-bedrock-guardrails-QUALIFIER_SUFFIX>
Em que:
-
QUALIFIERé um dosqueryguardContent, ougroundingSource(CamelCase em XML). -
SUFFIXcorresponde aotagSuffixvalor no corpo da solicitação. -
tagSuffixdeve corresponder ao padrão^[a-zA-Z0-9][a-zA-Z0-9-_]{0,18}[a-zA-Z0-9]$(2 a 20 caracteres).
Funções de tag para verificações automatizadas de raciocínio
| Qualificador de tag XML | Função de entrada de raciocínio automatizado | Significado |
|---|---|---|
query |
User-side | A pergunta do usuário ou as condições declaradas. Fornece contexto a partir do qual a tradução pode extrair premissas. |
guardContent |
Agent-side | Conteúdo a ser validado de acordo com sua política. Fornece as reivindicações que a tradução verifica. |
groundingSource |
Ignorado | Não usado por verificações de raciocínio automatizadas (usadas por verificações contextuais de aterramento). |
O qualificador define somente se o texto marcado é uma entrada do lado do usuário ou do agente; as verificações de raciocínio automatizado derivam as premissas e as afirmações quando traduzem a entrada combinada. Marque o prompt do usuário com query para dar contexto às verificações. A saída do modelo é anexada automaticamente como um bloco do lado do agente (declaração), portanto, marcar o prompt query sozinho é suficiente para que as verificações sejam executadas.
nota
O texto entre etiquetas de proteção que não carrega nenhum qualificador usa como padrão o conteúdo do lado do agente (declaração). Como InvokeModel anexa a resposta do modelo como uma afirmação, uma solicitação que marca somente o prompt com query ainda executa verificações de raciocínio automatizado. (Isso difere de uma ApplyGuardrail chamada direta, que não acrescenta nenhuma resposta e, portanto, retorna como ValidationException se você não fornecesse nenhum conteúdo de reclamação.)
Multi-tag regras de precedência e aninhamento
Um único segmento de texto pode ser encapsulado em vários tipos de tag aninhados. Quando várias tags se aplicam ao mesmo conteúdo, a precedência determina a função do raciocínio automatizado:. guardContent > query > groundingSource Se o conteúdo estiver marcado com ambos guardContentquery, ele será tratado como uma reivindicação.
As seguintes regras de aninhamento se aplicam:
-
Tags de diferentes tipos podem ser aninhadas (por exemplo,
<amazon-bedrock-guardrails-query_arp><amazon-bedrock-guardrails-guardContent_arp>text</amazon-bedrock-guardrails-guardContent_arp></amazon-bedrock-guardrails-query_arp>). -
As etiquetas do mesmo tipo não podem ser aninhadas automaticamente e as etiquetas devem ser fechadas na ordem inversa em que foram abertas. Uma estrutura de tag inválida retorna um
ValidationException.
Exemplo: Ligue InvokeModel com tags de raciocínio automatizado usando o AWS CLI
aws bedrock-runtime invoke-model \ --model-id "model-id" \ --guardrail-identifier "your-guardrail-id" \ --guardrail-version "1" \ --trace "ENABLED" \ --cli-binary-format raw-in-base64-out \ --body '{ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 256, "amazon-bedrock-guardrailConfig": { "tagSuffix": "arp" }, "messages": [ { "role": "user", "content": [ { "type": "text", "text": "<amazon-bedrock-guardrails-query_arp>Apply a 20% discount to my order and confirm it is done.</amazon-bedrock-guardrails-query_arp>" } ] } ] }' \ output.json
Essa solicitação retornaautomatedReasoningPolicyUnits: 1, com as descobertas do raciocínio automatizado no rastreamento.
Comportamento padrão (sem tags)
A mesma solicitação sem as tags XML usa texto simples:
"text": "Apply a 20% discount to my order and confirm it is done."
Essa solicitação retorna automatedReasoningPolicyUnits: 0 — As verificações automatizadas de raciocínio não foram executadas e nenhum erro foi gerado. O guardrail ainda avalia outras políticas (conteúdo, tópico, palavra e informações confidenciais), mas as verificações automatizadas de raciocínio são totalmente ignoradas.
Interprete as descobertas do raciocínio automatizado 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 incluemsupportingRules— as regras políticas que provam que as alegações estão corretas. -
invalidas descobertas incluemcontradictingRules— as regras políticas que as reivindicações violam. -
satisfiableas descobertas incluem aclaimsTrueScenarioe aclaimsFalseScenario— 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 é: translationAmbiguousimpossible,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 raciocínio automatizado (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:
-
A resposta original que falhou na validação.
-
A descoberta específica — incluindo as premissas traduzidas, as alegações e as regras contraditórias ou de apoio.
-
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
validapó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
ExportAutomatedReasoningPolicyVersionAPI 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. Ooptionscampo mostra as interpretações concorrentes, e odifferenceScenarioscampo 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
validapó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:
-
Extraia as variáveis ambíguas ou as condições ausentes das descobertas do AR.
-
Gere perguntas esclarecedoras — seja programaticamente a partir dos campos de descoberta ou solicitando ao LLM que formule perguntas com base nas descobertas.
-
Apresente as perguntas ao usuário e colete as respostas.
-
Incorpore as respostas ao contexto e gere uma nova resposta.
-
Valide a nova resposta com
ApplyGuardrail.
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.")
Open-source reescrevendo amostra de chatbot
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
-
Um ciclo de reescrita iterativo em que respostas inválidas são corrigidas automaticamente com base no feedback do raciocínio automatizado.
-
Follow-up perguntas 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.
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.