Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Integra i controlli di ragionamento automatizzato nella tua applicazione
Dopo aver implementato la politica di ragionamento automatico in un guardrail (vediImplementare la policy di ragionamento automatico nell’applicazione), puoi utilizzarla in fase di esecuzione per convalidare le risposte LLM e agire in base al feedback. Questa pagina spiega come richiamare l'API di convalida, interpretare i risultati in modo programmatico e implementare modelli di integrazione comuni, come riscrivere le risposte non valide e porre domande di chiarimento.
I controlli di ragionamento automatico funzionano solo in modalità di rilevamento: restituiscono risultati e feedback anziché bloccare i contenuti. È responsabilità dell'applicazione decidere cosa fare con i risultati: fornire la risposta, riscriverla, chiedere chiarimenti o tornare a un comportamento predefinito.
Panoramica dell’integrazione
In fase di esecuzione, l'integrazione segue questo flusso:
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
I risultati di Automated Reasoning vengono restituiti tramite qualsiasi API che supporti una configurazione Amazon Bedrock Guardrails:
-
ApplyGuardrail— API di convalida autonoma. Usala quando desideri convalidare il contenuto indipendentemente dall'invocazione LLM. Questo è l'approccio consigliato per i controlli di ragionamento automatico perché offre il pieno controllo su quali contenuti vengono convalidati e quando. -
ConverseeInvokeModel— APIs invocazione LLM con configurazione guardrail. I risultati del ragionamento automatico vengono restituiti nel campo dellatracerisposta. -
InvokeAgenteRetrieveAndGenerate— Agente e knowledge base APIs con configurazione guardrail.
Questa pagina si concentra sull'ApplyGuardrailAPI perché offre la massima flessibilità per l'implementazione dei modelli di riscrittura e chiarimento descritti di seguito. Per informazioni sull'utilizzo di guardrail con gli altri APIs, consulta Usare un guardrail.
Esempio di chatbot di riscrittura open source
Per un'implementazione completa in stile di produzione dei pattern descritti in questa pagina, consulta Automated Reasoning
-
Un ciclo di riscrittura iterativo in cui le risposte non valide vengono corrette automaticamente in base al feedback AR.
-
Domande di follow-up quando il LLM necessita di un contesto aggiuntivo da parte dell'utente per riscriverlo con precisione.
-
Un meccanismo di timeout che riprende automaticamente l'elaborazione quando gli utenti non rispondono alle domande di chiarimento.
-
Inserimento del contesto delle politiche nei prompt LLM in modo che l'LLM possa fare riferimento alle regole politiche complete durante la riscrittura.
-
Registrazione di controllo JSON di ogni iterazione di convalida per la conformità e il debug.
L'esempio utilizza un Python/Flask backend con un frontend React e comunica con Amazon Bedrock per l'inferenza LLM e Amazon Bedrock Guardrails per la convalida tramite l'API. ApplyGuardrail
Nota
L'applicazione di esempio include il contenuto della policy direttamente nei prompt di generazione LLM per supportare qualsiasi policy di Automated Reasoning senza richiedere il caricamento di documenti. In un'implementazione di produzione, in genere si utilizzano contenuti RAG o si inserisce nel LLM il documento originale in linguaggio naturale anziché il codice sorgente della politica di Automated Reasoning.
Chiama ApplyGuardrail con controlli di ragionamento automatico
Usa l'ApplyGuardrailAPI per convalidare i contenuti rispetto al tuo guardrail. L'API accetta uno o più blocchi di contenuto e restituisce una valutazione che include i risultati del ragionamento automatico.
Struttura della richiesta
guardrailIdentifier(richiesto)-
L'ID o l'ARN del guardrail. Usa il guardrail a cui è allegata la tua politica di ragionamento automatizzato.
guardrailVersion(richiesto)-
Il numero di versione del guardrail (ad esempio,
1). Usa una versione numerata per i carichi di lavoro di produzione, no.DRAFT source(richiesto)-
Impostato su
OUTPUTdurante la convalida delle risposte LLM. Imposta suINPUTquando si convalidano le istruzioni dell'utente. Per i controlli di ragionamento automatico, in genere si convalida l'output LLM. content(richiesto)-
Una serie di blocchi di contenuto da convalidare. Ogni blocco contiene un
textcampo con il contenuto da controllare. Puoi passare la domanda dell'utente e la risposta LLM come blocchi di contenuto separati o combinarli in un unico blocco.
Esempio: convalida una risposta LLM utilizzando il 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." } } ]'
Esempio: convalida una risposta 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))
Struttura della risposta
La ApplyGuardrail risposta include un assessments array. Ogni valutazione contiene un automatedReasoningPolicy oggetto con una findings matrice. Ogni risultato è un tipo di unione: è presente esattamente una delle seguenti chiavi:
validinvalidsatisfiableimpossibletranslationAmbiguoustooComplexnoTranslations
Per una descrizione dettagliata di ogni tipo di risultato e dei relativi campi, vedereConclusioni e risultati di convalida.
Interpreta i risultati AR in fase di esecuzione
Per agire programmaticamente sui risultati del ragionamento automatico, l'applicazione deve estrarre il tipo di risultato, i dettagli della traduzione e le regole di supporto o contraddittorie. Le sezioni seguenti spiegano come analizzare ogni parte di un risultato.
Determina il tipo di risultato
Ogni risultato è un'unione: è presente esattamente una chiave. Controlla quale chiave esiste per determinare il tipo di risultato:
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
Leggi la traduzione
La maggior parte dei tipi di risultati include un translation oggetto che mostra come i controlli di ragionamento automatico hanno tradotto l'input del linguaggio naturale in logica formale. La traduzione contiene:
-
premises— Le condizioni estratte dall'input (ad esempioisFullTime = true,tenureMonths = 24). -
claims— Le asserzioni da convalidare (ad esempio,).eligibleForParentalLeave = true -
untranslatedPremises— Parti dell'input che non possono essere mappate su variabili politiche. Queste parti non sono convalidate. -
untranslatedClaims— Affermazioni che non possono essere mappate su variabili politiche.
Verifica untranslatedPremises e untranslatedClaims comprendi l'ambito della convalida. Un VALID risultato copre solo le affermazioni tradotte: i contenuti non tradotti non vengono verificati.
Leggi le regole di supporto o contraddittorie
A seconda del tipo di risultato, il risultato include regole che spiegano il risultato:
-
validi risultati includonosupportingRules: le regole politiche che dimostrano la correttezza delle affermazioni. -
invalidi risultati includonocontradictingRules: le regole politiche violate dalle affermazioni. -
satisfiablei risultati includono sia a che aclaimsFalseScenario,claimsTrueScenarioe mostrano le condizioni in base alle quali le affermazioni sono vere e false.
Queste regole e scenari sono gli input chiave per il modello di riscrittura descritto in. Riscrivi le risposte non valide utilizzando il feedback AR
Determina il risultato aggregato
Una singola richiesta di convalida può restituire più risultati. Per determinare il risultato complessivo, ordina i risultati per gravità e seleziona il peggiore. L'ordine di gravità dal peggiore al migliore è:TRANSLATION_AMBIGUOUS,IMPOSSIBLE,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
Gestisci i risultati della convalida nella tua applicazione
Utilizzate il risultato aggregato per decidere cosa fare dopo l'applicazione. La tabella seguente riassume l'azione consigliata per ogni tipo di risultato.
| Risultato | Significato | Azione consigliata |
|---|---|---|
valid |
La risposta si è dimostrata matematicamente corretta, date le premesse e le regole della politica. | Fornisci la risposta all'utente. Registra i risultati a fini di controllo (vediCrea una pista di controllo). |
invalid |
La risposta contraddice le vostre regole politiche. Il contradictingRules campo identifica quali regole sono state violate. |
Riscrivi la risposta utilizzando il feedback AR (vedi). Riscrivi le risposte non valide utilizzando il feedback AR Se la riscrittura fallisce dopo più tentativi, blocca la risposta e restituisci un messaggio di fallback. |
satisfiable |
La risposta è corretta in alcune condizioni, ma non in tutte. Non è sbagliato, ma è incompleto: non menziona tutti i requisiti. | Riscrivi la risposta per includere le condizioni mancanti. Usa il claimsFalseScenario per identificare ciò che manca. In alternativa, puoi lasciare che il tuo LLM chieda chiarimenti all'utente. |
impossible |
Le premesse sono contraddittorie o la politica contiene regole contrastanti. | Chiedi all'utente di chiarire il proprio input (vedi). Poni domande chiarificatrici Se il problema persiste, potrebbe indicare un problema relativo alle politiche: consulta il rapporto sulla qualità. |
translationAmbiguous |
L'input ha diverse interpretazioni valide. I modelli di traduzione non erano d'accordo su come mappare il linguaggio naturale alle variabili politiche. | Chiedi chiarimenti all'utente per risolvere l'ambiguità. Utilizza i differenceScenarios campi options e per generare domande di chiarimento mirate. |
tooComplex |
L'input supera i limiti di elaborazione per l'analisi logica. | Semplifica l'input suddividendolo in parti più piccole o restituisci un messaggio di fallback che spiega che la risposta non può essere verificata. |
noTranslations |
L'input non è rilevante per il dominio della tua politica. Non è stato possibile mappare alcuna variabile di policy. | Il contenuto di questa politica non è tematico. Fornisci la risposta senza la convalida AR o utilizza altri componenti di guardrail (come le politiche tematiche) per gestire i contenuti fuori tema. |
Riscrivi le risposte non valide utilizzando il feedback AR
Il modello di integrazione più potente per i controlli di ragionamento automatico è il ciclo di riscrittura: quando una risposta è invalid osatisfiable, l'applicazione crea un prompt che include la risposta originale, i risultati specifici e le regole della politica, quindi chiede all'LLM di riscrivere la risposta per renderla coerente con la politica. La risposta riscritta viene nuovamente convalidata e il ciclo continua fino alla risposta valid o al raggiungimento del numero massimo di iterazioni.
Riscrittura del flusso del ciclo
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
Costruisci il prompt di riscrittura
La richiesta di riscrittura dovrebbe includere tre informazioni tratte dai risultati dell'AR:
-
La risposta originale che non è riuscita a convalidare.
-
La constatazione specifica, comprese le premesse tradotte, le affermazioni e le regole contraddittorie o di supporto.
-
Un'istruzione per riscrivere la risposta in modo che sia coerente con le regole politiche.
Esempio di modello di richiesta di riscrittura:
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.
Suggerimento
Includi sempre il contenuto di Retrieval Augmented Generation (RAG) nelle richieste di riscrittura o nelle regole delle policy in modo che l'LLM abbia tutto il contesto di cui ha bisogno durante la riscrittura. Il modello di richiesta di riscrittura fornisce i dettagli specifici dei risultati, mentre il prompt di sistema fornisce un contesto politico più ampio. Questo approccio a doppio contesto è illustrato nell'esempio di chatbot di riscrittura open source.
Le migliori pratiche di riscrittura
-
Imposta un numero massimo di iterazioni. Il ciclo di riscrittura deve avere un limite rigido (in genere 2-5 iterazioni) per evitare cicli infiniti. Se la risposta non ha ancora raggiunto il numero massimo di iterazioni, restituisci la risposta migliore con un avviso o
validtorna a un messaggio predefinito. -
Elabora i risultati in ordine di priorità. Quando vengono restituiti più risultati, affronta prima il risultato più grave. L'ordine di gravità è:
translationAmbiguous,impossible,invalid,satisfiable,valid. -
Includi il contesto delle politiche nel prompt di sistema. L'LLM deve accedere al documento di origine o alle regole politiche complete per riscriverlo con precisione. È possibile utilizzare una Knowledge Base per includere i documenti nella richiesta di generazione o utilizzare l'
ExportAutomatedReasoningPolicyVersionAPI per recuperare la definizione della politica e formattarla per il LLM. -
Registra ogni iterazione. Registra la risposta originale, i risultati, la richiesta di riscrittura e la risposta riscritta per ogni iterazione. Questa pista di controllo è utile per il debug e la conformità (vedi). Crea una pista di controllo
Poni domande chiarificatrici
Quando i controlli di ragionamento automatico restituiscono o danno impossible risultati translationAmbiguoussatisfiable, l'LLM potrebbe non disporre di informazioni sufficienti per riscrivere la risposta in modo accurato. In questi casi, l'applicazione può chiedere chiarimenti all'utente, quindi incorporare le risposte nel successivo tentativo di convalida.
Quando chiedere chiarimenti
-
translationAmbiguous— L'input ha più interpretazioni valide. Iloptionscampo mostra le interpretazioni concorrenti e ildifferenceScenarioscampo mostra come differiscono nella pratica. Usali per generare domande mirate sull'ambiguità specifica. -
satisfiable— La risposta è corretta in alcune condizioni, ma non in tutte.claimsFalseScenarioMostra le condizioni in base alle quali la risposta sarebbe errata. Chiedi all'utente informazioni su queste condizioni specifiche. -
impossible— L'input contiene affermazioni contraddittorie. Chiedi all'utente di chiarire la contraddizione. -
Riscrittura fallita: se il LLM non è in grado di riscrivere la risposta in base a
validdopo più tentativi, potrebbe essere necessario un contesto aggiuntivo da parte dell'utente. Chiedi all'LLM di generare domande chiarificatrici sulla base dei risultati.
Schema di chiarimento
Il flusso di chiarimento funziona come segue:
-
Estrai le variabili ambigue o le condizioni mancanti dai risultati AR.
-
Genera domande chiarificatrici, in modo programmatico dai campi di ricerca o chiedendo all'LLM di formulare domande sulla base dei risultati.
-
Presenta le domande all'utente e raccogli le risposte.
-
Incorpora le risposte nel contesto e genera una nuova risposta.
-
Convalida la nuova risposta con
ApplyGuardrail.
Esempio: genera domande chiarificatrici a partire da una scoperta 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.")
Crea una pista di controllo
I risultati di Automated Reasoning forniscono una prova di validità matematicamente verificabile. Per i settori regolamentati e gli scenari di conformità, questa dimostrazione è un elemento chiave di differenziazione: è possibile dimostrare che una risposta dell'IA è stata verificata rispetto a regole politiche specifiche con assegnazioni di variabili specifiche, non solo in base a modelli o valutata probabilisticamente.
Per creare un audit trail efficace, registra le seguenti informazioni per ogni richiesta di convalida:
-
Timestamp e ID della richiesta. Quando è avvenuta la convalida e un identificatore univoco per la richiesta.
-
Contenuto di input. La domanda dell'utente e la risposta LLM che sono state convalidate.
-
Tipo di ricerca e dettagli. Il risultato della convalida (
valid, ecc.)invalid, le premesse e le affermazioni tradotte e le regole di supporto o contraddittorie. -
Azioni intraprese. Cosa ha fatto la tua candidatura con il risultato: ha fornito la risposta, l'ha riscritta, chiesto chiarimenti o l'ha bloccata.
-
Riscrivere la storia. Se la risposta è stata riscritta, registra ogni iterazione: la risposta originale, la richiesta di riscrittura, la risposta riscritta e il risultato della convalida per ogni iterazione.
-
Versione della politica. La versione guardrail e la versione della policy utilizzate per la convalida. Ciò garantisce la possibilità di riprodurre il risultato della convalida in un secondo momento.
Esempio: struttura di immissione del registro di controllo
{ "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 }
Suggerimento
Archivia i log di controllo in un archivio durevole e a prova di manomissione come Amazon Logs CloudWatch o Amazon S3 con blocco degli oggetti abilitato. Per gli scenari di conformità, prendi in considerazione l'utilizzo di Lake per interrogare i log di controllo in tutta l'organizzazione.