Integrieren Sie automatisierte Argumentationsprüfungen in Ihre Anwendung - Amazon Bedrock

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Integrieren Sie automatisierte Argumentationsprüfungen in Ihre Anwendung

Nachdem Sie Ihre Richtlinie für automatisiertes Denken in einer Leitplanke implementiert haben (sieheImplementieren der Automated-Reasoning-Richtlinie in die Anwendung), können Sie sie zur Laufzeit verwenden, um LLM-Antworten zu validieren und auf das Feedback zu reagieren. Auf dieser Seite wird erklärt, wie Sie die Validierungs-API aufrufen, die Ergebnisse programmgesteuert interpretieren und gängige Integrationsmuster wie das Umschreiben ungültiger Antworten und das Stellen klärender Fragen implementieren.

Automatisierte Prüfungen zur Argumentation funktionieren nur im Erkennungsmodus — sie geben Ergebnisse und Feedback zurück, anstatt Inhalte zu blockieren. Ihre Anwendung ist dafür verantwortlich, zu entscheiden, was mit den Ergebnissen geschehen soll: die Antwort zuzustellen, sie neu zu schreiben, um Klarstellung zu bitten oder auf ein Standardverhalten zurückzugreifen.

Übersicht über die Integration

Zur Laufzeit folgt die Integration diesem Ablauf:

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

Ergebnisse von Automated Reasoning werden über jede API zurückgegeben, die eine Amazon Bedrock Guardrails-Konfiguration unterstützt:

  • ApplyGuardrail— Eigenständige Validierungs-API. Verwenden Sie diese Option, wenn Sie Inhalte unabhängig vom LLM-Aufruf validieren möchten. Dies ist der empfohlene Ansatz für automatische Argumentationsprüfungen, da Sie damit die volle Kontrolle darüber haben, welcher Inhalt wann validiert wird.

  • Converseund InvokeModel — LLM-Aufruf APIs mit Guardrail-Konfiguration. Die Ergebnisse der automatisierten Argumentation werden im Antwortfeld zurückgegeben. trace

  • InvokeAgentund RetrieveAndGenerate — Agent und Wissensdatenbank APIs mit Guardrail-Konfiguration.

Diese Seite konzentriert sich auf die ApplyGuardrail API, da sie die größte Flexibilität bei der Implementierung der unten beschriebenen Umschreib- und Klarstellungsmuster bietet. Informationen zur Verwendung von Leitplanken zusammen mit anderen APIs finden Sie unter Verwenden einer Leitplanke.

Beispiel für einen Open-Source-Chatbot zum Umschreiben

Eine vollständige Implementierung der auf dieser Seite beschriebenen Muster im Produktionsstil finden Sie unter Automated Reasoning checks rewriting chatbot. GitHub Diese Beispielanwendung demonstriert:

  • Eine iterative Umschreibschleife, in der ungültige Antworten auf der Grundlage von AR-Feedback automatisch korrigiert werden.

  • Folgefragen, wenn das LLM zusätzlichen Kontext vom Benutzer benötigt, um es korrekt umzuschreiben.

  • Ein Timeout-Mechanismus, der die Verarbeitung automatisch wieder aufnimmt, wenn Benutzer auf Fragen zur Klärung nicht antworten.

  • Das Einfügen von Richtlinienkontexten in LLM-Eingabeaufforderungen ermöglicht es dem LLM, beim Umschreiben auf die vollständigen Richtlinienregeln zu verweisen.

  • JSON-Auditprotokollierung jeder Validierungsiteration zur Einhaltung von Vorschriften und zum Debuggen.

Das Beispiel verwendet ein Python/Flask Backend mit einem React-Frontend und kommuniziert mit Amazon Bedrock für LLM-Inferenz und Amazon Bedrock Guardrails zur Validierung über die API. ApplyGuardrail

Anmerkung

Die Beispielanwendung bezieht den Richtlinieninhalt direkt in die Eingabeaufforderungen zur LLM-Generierung ein, um alle Richtlinien für automatisiertes Denken zu unterstützen, ohne dass Dokumente hochgeladen werden müssen. In einer Produktionsbereitstellung würden Sie in der Regel RAG-Inhalte verwenden oder dem LLM das Originaldokument in natürlicher Sprache anstelle des Quellcodes der Richtlinie für automatisiertes Denken zuleiten.

Rufen Sie an, ApplyGuardrail bei dem Automated Reasoning geprüft wird

Verwenden Sie die ApplyGuardrail API, um Inhalte anhand Ihrer Leitplanke zu validieren. Die API akzeptiert einen oder mehrere Inhaltsblöcke und gibt eine Bewertung zurück, die Ergebnisse von Automated Reasoning beinhaltet.

Struktur der Anfrage

guardrailIdentifier (Erforderlich)

Die Leitplanken-ID oder ARN. Verwenden Sie die Leitplanke, der Ihre Richtlinie für automatisiertes Denken beigefügt ist.

guardrailVersion (Erforderlich)

Die Versionsnummer der Leitplanke (z. B.). 1 Verwenden Sie eine nummerierte Version für Produktionsworkloads, nicht. DRAFT

source (Erforderlich)

OUTPUTWird bei der Validierung von LLM-Antworten auf eingestellt. INPUTWird bei der Validierung von Benutzeraufforderungen auf eingestellt. Bei automatisierten Argumentationsprüfungen validieren Sie in der Regel die LLM-Ausgabe.

content (Erforderlich)

Eine Reihe von Inhaltsblöcken, die validiert werden müssen. Jeder Block enthält ein text Feld mit dem zu prüfenden Inhalt. Sie können die Benutzerfrage und die LLM-Antwort als separate Inhaltsblöcke übergeben oder sie zu einem einzigen Block kombinieren.

Beispiel: Validieren Sie eine LLM-Antwort mit dem 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." } } ]'

Beispiel: Validieren Sie eine LLM-Antwort mit 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))

Struktur der Antwort

Die ApplyGuardrail Antwort umfasst ein assessments Array. Jede Bewertung enthält ein automatedReasoningPolicy Objekt mit einem findings Array. Bei jedem Ergebnis handelt es sich um einen Kombinationstyp — genau einer der folgenden Schlüssel ist vorhanden:

  • valid

  • invalid

  • satisfiable

  • impossible

  • translationAmbiguous

  • tooComplex

  • noTranslations

Eine ausführliche Beschreibung der einzelnen Ergebnisarten und ihrer Felder finden Sie unterErgebnisse und Validierungsergebnisse.

Interpretieren Sie AR-Ergebnisse zur Laufzeit

Um programmatisch auf die Ergebnisse von Automated Reasoning reagieren zu können, muss Ihre Anwendung den Befundtyp, die Übersetzungsdetails und die unterstützenden oder widersprüchlichen Regeln extrahieren. In den folgenden Abschnitten wird erklärt, wie die einzelnen Teile eines Ergebnisses analysiert werden.

Ermitteln Sie den Befundtyp

Jeder Befund ist eine Vereinigung — genau ein Schlüssel ist vorhanden. Prüfen Sie, welcher Schlüssel existiert, um den Befundtyp zu bestimmen:

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

Lesen Sie die Übersetzung

Die meisten Befundtypen enthalten ein translation Objekt, das zeigt, wie automatische Argumentationsprüfungen die Eingabe in natürlicher Sprache in formale Logik übersetzt haben. Die Übersetzung enthält:

  • premises— Die aus der Eingabe extrahierten Bedingungen (z. B.isFullTime = true,tenureMonths = 24).

  • claims— Die zu validierenden Behauptungen (zum BeispieleligibleForParentalLeave = true).

  • untranslatedPremises— Teile der Eingabe, die nicht den Richtlinienvariablen zugeordnet werden konnten. Diese Teile wurden nicht validiert.

  • untranslatedClaims— Behauptungen, die nicht politischen Variablen zugeordnet werden konnten.

Prüfen untranslatedPremises und untranslatedClaims verstehen Sie den Umfang der Validierung. Ein VALID Ergebnis deckt nur die übersetzten Ansprüche ab — unübersetzte Inhalte werden nicht verifiziert.

Lesen Sie die unterstützenden oder widersprüchlichen Regeln

Je nach Art des Ergebnisses enthält das Ergebnis Regeln, die das Ergebnis erklären:

  • validZu den Ergebnissen gehören supportingRules — die Versicherungsregeln, die belegen, dass die Behauptungen korrekt sind.

  • invalidZu den Ergebnissen gehören contradictingRules — die politischen Regeln, gegen die die Ansprüche verstoßen.

  • satisfiableZu den Ergebnissen gehören claimsTrueScenario sowohl a als auch a claimsFalseScenario — es wird dargelegt, unter welchen Bedingungen die Behauptungen wahr und falsch sind.

Diese Regeln und Szenarien sind die wichtigsten Inputs für das unter beschriebene Umschreibmuster. Schreiben Sie ungültige Antworten mithilfe von AR-Feedback um

Ermitteln Sie das Gesamtergebnis

Eine einzelne Überprüfungsanfrage kann mehrere Ergebnisse zurückgeben. Um das Gesamtergebnis zu ermitteln, sortieren Sie die Ergebnisse nach Schweregrad und wählen Sie das schlechteste aus. Die Reihenfolge des Schweregrads vom schlechtesten zum besten lautet: 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

Behandeln Sie die Validierungsergebnisse in Ihrer Anwendung

Verwenden Sie das Gesamtergebnis, um zu entscheiden, was Ihre Anwendung als Nächstes tun soll. In der folgenden Tabelle sind die empfohlenen Maßnahmen für jeden Ergebnistyp zusammengefasst.

Ergebnis Bedeutung Empfohlene Aktion
valid Die Antwort ist mathematisch bewiesen, dass sie unter Berücksichtigung der Prämissen und Ihrer Versicherungsregeln korrekt ist. Senden Sie die Antwort an den Benutzer weiter. Protokollieren Sie das Ergebnis zu Prüfungszwecken (sieheErstellen Sie einen Prüfpfad).
invalid Die Antwort widerspricht Ihren Richtlinienregeln. Das contradictingRules Feld gibt an, gegen welche Regeln verstoßen wurde. Schreiben Sie die Antwort mithilfe des AR-Feedbacks neu (sieheSchreiben Sie ungültige Antworten mithilfe von AR-Feedback um). Wenn das Umschreiben nach mehreren Versuchen fehlschlägt, blockieren Sie die Antwort und geben Sie eine Fallback-Nachricht zurück.
satisfiable Die Antwort ist unter einigen Bedingungen korrekt, aber nicht unter allen. Sie ist nicht falsch, aber sie ist unvollständig — sie erwähnt nicht alle Anforderungen. Schreiben Sie die Antwort um, sodass sie die fehlenden Bedingungen enthält. Verwenden Sie dieclaimsFalseScenario, um zu ermitteln, was fehlt. Alternativ können Sie Ihr LLM dem Benutzer klärende Fragen stellen lassen.
impossible Die Prämissen sind widersprüchlich oder die Richtlinie enthält widersprüchliche Regeln. Bitten Sie den Benutzer, seine Eingabe zu erläutern (siehe). Stellen Sie klärende Fragen Wenn das Problem weiterhin besteht, deutet dies möglicherweise auf ein politisches Problem hin. Lesen Sie den Qualitätsbericht.
translationAmbiguous Die Eingabe hat mehrere gültige Interpretationen. Die Übersetzungsmodelle waren sich nicht einig darüber, wie die natürliche Sprache politischen Variablen zugeordnet werden sollte. Bitten Sie den Benutzer um Klarstellung, um die Unklarheit zu lösen. Verwenden Sie die differenceScenarios Felder options und, um gezielte Fragen zur Klärung zu stellen.
tooComplex Die Eingabe überschreitet die Verarbeitungsgrenzen für logische Analysen. Vereinfachen Sie die Eingabe, indem Sie sie in kleinere Teile aufteilen, oder geben Sie eine Ausweichmeldung zurück, in der erklärt wird, dass die Antwort nicht verifiziert werden konnte.
noTranslations Die Eingabe ist für den Bereich Ihrer Richtlinie nicht relevant. Es konnten keine Richtlinienvariablen zugeordnet werden. Der Inhalt dieser Richtlinie ist nicht zum Thema gehörend. Stellen Sie die Antwort ohne AR-Validierung bereit oder verwenden Sie andere Leitplankenkomponenten (z. B. Themenrichtlinien), um themenfremde Inhalte zu behandeln.

Schreiben Sie ungültige Antworten mithilfe von AR-Feedback um

Das leistungsstärkste Integrationsmuster für automatische Argumentationsprüfungen ist die Umschreibschleife: Wenn eine Antwort invalid oder lautet, erstellt Ihre Anwendung eine Aufforderungsatisfiable, die die ursprüngliche Antwort, die spezifischen Ergebnisse und die Richtlinienregeln enthält, und fordert dann den LLM auf, die Antwort neu zu schreiben, damit sie mit der Richtlinie konsistent ist. Die umgeschriebene Antwort wird erneut validiert, und die Schleife wird fortgesetzt, bis die Antwort vorliegt valid oder eine maximale Anzahl von Iterationen erreicht ist.

Der Schleifenfluss wird neu geschrieben

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

Konstruieren Sie die Aufforderung zum Umschreiben

Die Aufforderung zum Umschreiben sollte drei Informationen aus den AR-Ergebnissen enthalten:

  1. Die ursprüngliche Antwort, bei der die Überprüfung fehlgeschlagen ist.

  2. Das konkrete Ergebnis — einschließlich der übersetzten Prämissen, Behauptungen und der widersprüchlichen oder unterstützenden Regeln.

  3. Eine Anweisung, die Antwort so umzuschreiben, dass sie den politischen Regeln entspricht.

Beispiel für eine Vorlage für eine Aufforderung zum Umschreiben:

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.
Tipp

Nehmen Sie den Inhalt von Retrieval Augmented Generation (RAG) immer in Ihre Umschreibanfragen oder die Richtlinienregeln auf, damit das LLM über den gesamten Kontext verfügt, den es beim Umschreiben benötigt. Die Vorlage für die Umschreibaufforderung enthält die spezifischen Ergebnisdetails, während die Systemaufforderung den umfassenderen politischen Kontext darstellt. Dieser Ansatz mit zwei Kontexten wird im Beispiel für einen Open-Source-Chatbot zum Umschreiben demonstriert.

Bewährte Methoden zum Umschreiben

  • Legen Sie eine maximale Anzahl von Iterationen fest. Die Umschreibschleife sollte eine feste Grenze haben (normalerweise 2—5 Iterationen), um Endlosschleifen zu vermeiden. Wenn die Antwort immer noch nicht valid die maximale Anzahl von Iterationen erreicht hat, geben Sie die beste Antwort mit einer Warnung zurück oder greifen Sie auf eine Standardnachricht zurück.

  • Verarbeiten Sie die Ergebnisse in der Reihenfolge ihrer Priorität. Wenn mehrere Ergebnisse zurückgegeben werden, gehen Sie zuerst auf das schwerwiegendste Ergebnis ein. Die Reihenfolge des Schweregrads ist: translationAmbiguousimpossible,invalid,,satisfiable,valid.

  • Nehmen Sie den Richtlinienkontext in die Systemaufforderung auf. Das LLM benötigt entweder Zugriff auf das Quelldokument oder auf die vollständigen Richtlinienregeln, um es korrekt neu schreiben zu können. Sie können eine Wissensdatenbank verwenden, um Ihre Dokumente in die Generierungsanfrage aufzunehmen, oder die ExportAutomatedReasoningPolicyVersion API verwenden, um die Richtliniendefinition abzurufen und für das LLM zu formatieren.

  • Protokollieren Sie jede Iteration. Notieren Sie die ursprüngliche Antwort, die Ergebnisse, die Aufforderung zum Umschreiben und die neu geschriebene Antwort für jede Iteration. Dieser Prüfpfad ist nützlich für das Debuggen und die Einhaltung von Vorschriften (siehe). Erstellen Sie einen Prüfpfad

Stellen Sie klärende Fragen

Wenn Automated Reasoning impossible Ergebnisse oder Ergebnisse überprüft translationAmbiguoussatisfiable, verfügt das LLM möglicherweise nicht über genügend Informationen, um die Antwort korrekt neu zu formulieren. In diesen Fällen kann Ihre Anwendung den Benutzer um eine Klarstellung bitten und die Antworten dann in den nächsten Validierungsversuch einfließen lassen.

Wann sollten Sie um eine Klarstellung bitten

  • translationAmbiguous— Die Eingabe hat mehrere gültige Interpretationen. Das options Feld zeigt die konkurrierenden Interpretationen, und das differenceScenarios Feld zeigt, wie sie sich in der Praxis unterscheiden. Verwenden Sie diese, um gezielte Fragen zur spezifischen Ambiguität zu stellen.

  • satisfiable— Die Antwort ist unter einigen Bedingungen korrekt, aber nicht unter allen. Das claimsFalseScenario zeigt die Bedingungen, unter denen die Antwort falsch wäre. Fragen Sie den Benutzer nach diesen spezifischen Bedingungen.

  • impossible— Die Eingabe enthält widersprüchliche Aussagen. Bitten Sie den Benutzer, den Widerspruch zu klären.

  • Das Umschreiben schlägt fehl — Wenn das LLM die Antwort nicht so umschreiben kann, dass sie valid nach mehreren Versuchen erscheint, benötigt es möglicherweise zusätzlichen Kontext vom Benutzer. Bitten Sie das LLM, auf der Grundlage der Ergebnisse klärende Fragen zu stellen.

Muster der Klärung

Der Klärungsablauf funktioniert wie folgt:

  1. Extrahieren Sie die mehrdeutigen Variablen oder fehlenden Bedingungen aus den AR-Ergebnissen.

  2. Generieren Sie klärende Fragen — entweder programmatisch anhand der Ergebnisfelder oder indem Sie den LLM bitten, Fragen auf der Grundlage der Ergebnisse zu formulieren.

  3. Präsentieren Sie die Fragen dem Benutzer und sammeln Sie Antworten.

  4. Integrieren Sie die Antworten in den Kontext und generieren Sie eine neue Antwort.

  5. Bestätigen Sie die neue Antwort mitApplyGuardrail.

Beispiel: Generieren Sie anhand eines Ergebnisses klärende satisfiable Fragen

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.")

Erstellen Sie einen Prüfpfad

Die Ergebnisse von Automated Reasoning liefern einen mathematisch überprüfbaren Validitätsnachweis. Für regulierte Branchen und Compliance-Szenarien ist dieser Nachweis ein wichtiges Unterscheidungsmerkmal. Sie können nachweisen, dass eine KI-Reaktion anhand bestimmter politischer Regeln mit spezifischen Variablenzuweisungen verifiziert und nicht nur anhand von Mustern oder Wahrscheinlichkeiten bewertet wurde.

Um einen effektiven Prüfpfad zu erstellen, protokollieren Sie die folgenden Informationen für jede Überprüfungsanfrage:

  • Zeitstempel und Anfrage-ID. Wann die Validierung stattgefunden hat und eine eindeutige Kennung für die Anfrage.

  • Inhalt eingeben. Die Benutzerfrage und die LLM-Antwort, die validiert wurden.

  • Typ und Details werden gefunden. Das Validierungsergebnis (validinvalid, usw.), die übersetzten Prämissen und Behauptungen sowie die unterstützenden oder widersprüchlichen Regeln.

  • Die ergriffenen Maßnahmen. Was hat Ihre Bewerbung mit dem Ergebnis gemacht — die Antwort zugestellt, sie umgeschrieben, um Klarstellung gebeten oder sie blockiert.

  • Verlauf neu schreiben. Wenn die Antwort neu geschrieben wurde, protokollieren Sie jede Iteration: die ursprüngliche Antwort, die Aufforderung zum Umschreiben, die neu geschriebene Antwort und das Überprüfungsergebnis für jede Iteration.

  • Version der Richtlinie. Die Guardrail-Version und die Richtlinienversion, die für die Validierung verwendet wurden. Dadurch wird sichergestellt, dass Sie das Überprüfungsergebnis später reproduzieren können.

Beispiel: Struktur der Audit-Logeinträge

{ "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 }
Tipp

Speichern Sie Auditprotokolle in einem dauerhaften, manipulationssicheren Speicher wie Amazon CloudWatch Logs oder Amazon S3 mit aktivierter Objektsperre. Für Compliance-Szenarien sollten Sie in Erwägung ziehen, Lake zur Abfrage von Auditprotokollen in Ihrem gesamten Unternehmen zu verwenden.