AUDIT-TRAIL · AI-KONZEPT
AI-Audit-Trail-Design: Was Sie loggen müssen, damit eine KI-Antwort revisionsfähig bleibt
Welche Felder müssen pro LLM-Aufruf gespeichert werden, damit Sie nach Art. 957a OR und Berufsgeheimnis sauber sind – und mit welchen Tools.
Recherche & Faktencheck: DuneDive LLC · Stand: 2026-05
Was ist ein AI-Audit-Trail?
Ein AI-Audit-Trail ist eine luckenlose, nachträglich nicht veränderbare Aufzeichnung jeder Interaktion zwischen einem Mitarbeitenden, einem Sprachmodell und den verwendeten Quelldaten. Er beantwortet vier Fragen: Wer hat wann womit gefragt? Welches Modell hat geantwortet? Welche Quellen wurden herangezogen? Wer hat die Antwort freigegeben?
Im klassischen IT-Audit-Trail (z.B. ERP-System) reicht ein User-Login plus Aktions-Log. Beim KI-Einsatz reicht das nicht: Das Modell ist eine probabilistische Funktion, deren Ausgabe vom Prompt, von der Modell-Version und von Zusatzkontext (RAG-Quellen, Tool-Aufrufe) abhängt. Wenn ein Prüfer in fünf Jahren nachvollziehen will, warum eine KI eine Buchung als „Reinigungsmaterial" klassifiziert hat, brauchen Sie alle vier Bausteine: den Original-Prompt, die Modell-Identität inklusive Version, den Retrieval-Kontext und die menschliche Freigabe.
Der OpenTelemetry-Standard für GenAI ist seit Anfang 2026 für Client-Spans aus dem Experimental-Status heraus und definiert einheitliche Attribute (gen_ai.system, gen_ai.request.model, gen_ai.usage.input_tokens, gen_ai.response.id). Wer heute baut, sollte sich an dieser Konvention orientieren, weil sie unabhängig von einzelnen Tool-Anbietern ist.
Warum es wichtig ist
Drei rechtliche Anker zwingen zur sauberen Aufzeichnung. Erstens Art. 957a OR und die Geschäftsbücherverordnung (GeBüV): Wer geschäftsrelevante Tatsachen mit Hilfe einer KI verarbeitet (Buchungen, Steuermeldungen, Verguetungs-Entscheidungen), muss diese Entscheidungs-Schritte zehn Jahre lang nachvollziehbar dokumentieren. Eine KI ohne Audit-Trail ist eine Black-Box, die nicht GeBüV-konform ist.
Zweitens das revFADP / revDSG: Bei automatisierten Einzelentscheidungen mit erheblicher Auswirkung auf die betroffene Person (Art. 21 revDSG) müssen Sie auf Anfrage die Logik der Entscheidung offenlegen. Ohne strukturierten Audit-Trail können Sie das nicht. Drittens das Berufsgeheimnis (StGB 321, BGFA, Ärztegesetz): Wenn ein geschützter Berufsträger eine KI einsetzt, muss er beweisen können, dass die Daten nicht an Unbefugte gelangt sind – auch nicht an OpenAI-Mitarbeiter. Der Audit-Trail dokumentiert, welche Daten zu welchem Anbieter gegangen sind.
Dazu kommt der praktische Nutzen: Wenn eine Antwort falsch war, finden Sie schneller den Grund. War es ein veralteter RAG-Treffer? Eine Modell-Version, die sich über Nacht geändert hat? Ein Prompt-Template-Bug? Ohne Trail raten Sie. Mit Trail debuggen Sie in Minuten.
Wie es funktioniert
Ein produktionsreifer AI-Audit-Trail loggt pro LLM-Aufruf mindestens diese 14 Felder. Wir gruppieren sie nach Wer/Was/Wann/Womit.
Wer: (1) user_id oder pseudonymisierte Mitarbeitenden-ID, (2) mandant_id (bei Treuhand- oder Anwaltskontext, pseudonymisiert falls die Logs zentral ausgewertet werden), (3) human_approver_id und Freigabe-Zeitpunkt, sobald die Antwort produktiv verwendet wird.
Was: (4) prompt_hash (SHA-256 des Klartext-Prompts – der Klartext wird nur dann zusätzlich gespeichert, wenn er keine Personendaten enthält; bei sensiblen Daten genügt der Hash plus die Token-Anzahl), (5) output_hash und optional output_text (je nach Vertraulichkeit), (6) rag_source_ids – die Liste der Dokument- und Chunk-IDs, die als Kontext mitgegeben wurden, (7) tool_calls (falls das Modell externe Funktionen aufgerufen hat: Namen und Argumente).
Wann: (8) request_timestamp_utc mit Millisekunden-Genauigkeit, (9) response_timestamp_utc, (10) latency_ms (gen_ai.client.operation.duration in OTel-Terminologie).
Womit: (11) model_provider (anthropic, openai, mistral, local), (12) model_id mit voller Version (claude-opus-<version>, gpt-<version>, mistral-large-<version>), (13) input_tokens und output_tokens (gen_ai.usage.input_tokens, gen_ai.usage.output_tokens), (14) cost_chf, berechnet aus den Token-Counts und dem zum Zeitpunkt geltenden Preis.
Für Pseudonymisierung empfehlen wir HMAC-SHA-256 mit einem rotierenden Salt – so können Sie auf Wunsch zurück-mappen (intern, mit dem Master-Salt) und gleichzeitig die Roh-Identifikation nicht im Klartext-Log haben. Speicherung: PostgreSQL als primäre Quelle, dazu ein WORM-Storage (S3 Object Lock oder gleichwertig) für den 10-Jahres-Bestand. Tools: Langfuse self-hosted ist das Mai-2026-Standard-Set für LLM-Tracing, alternativ Helicone, Phoenix von Arize, oder ein eigener OpenTelemetry-Collector mit ClickHouse als Backend.
Audit-Trail-Implementation in 8 Schritten
- 01Inventar: Welche KI-Workflows haben welche rechtliche Relevanz? Klassifizieren Sie nach „intern verworfen / extern adressiert / geschäftsrelevant".
- 02Feld-Katalog: Definieren Sie pro Workflow welche der 14 Felder Pflicht sind. Berufsgeheimnis-Pipelines bekommen alle 14, Marketing-Spielwiese nur 3.
- 03Pseudonymisierung: Setzen Sie HMAC-SHA-256 mit rotierendem Salt auf mandant_id und user_id. Master-Salt im Vault.
- 04Modell-Versionierung erzwingen: In jedem API-Aufruf den voll qualifizierten Modellnamen (claude-opus (aktuelle Version)) speichern, nicht den Alias.
- 05Storage wählen: PostgreSQL als Live-Backend plus WORM-Archiv (S3 Object Lock, MinIO mit Object Lock) für 10-Jahres-Bestand.
- 06Tool installieren: Langfuse self-hosted via Docker – Empfangs-Endpunkt /api/public/otel – oder OTel-Collector mit ClickHouse für Eigenbau.
- 07OTel-Konvention nutzen: Im SDK gen_ai.system, gen_ai.request.model, gen_ai.usage.* setzen – sichert Werkzeug-Wechsel ohne Daten-Migration.
- 08Periodische Prüfung: Quartalsweise 10 Trail-Einträge ziehen und durchspielen – kann ein Prüfer von aussen die Entscheidung nachvollziehen?
Wann ein Audit-Trail Pflicht ist
Ein strukturierter Audit-Trail ist zwingend, sobald die KI-Antwort in einen geschäftsrelevanten Vorgang einfliesst: eine Buchung, ein Mahnschreiben, eine Steuermeldung, eine Personalentscheidung, eine Diagnose-Vorschlag, eine Rechts-Auskunft. Sobald ein Mitarbeitender die KI-Antwort in ein Dokument kopiert, das später Dritten gegenüber verwendet wird, beginnt die Aufbewahrungspflicht von 10 Jahren nach Art. 958f OR.
Konkrete Bereiche: Treuhand-Buchungen (welcher Beleg wurde von welchem Modell wie klassifiziert?), Mahnwesen (warum hat der Bot diesen Mandanten als „erste Mahnung" eingestuft?), Anwaltskanzlei (welche Norm-Recherche hat das Modell bei welcher Frage geliefert?), Personalwesen (warum hat das Screening-Tool diese Bewerbung aussortiert?), Versicherung (warum wurde dieser Schaden als „nicht gedeckt" markiert?).
Auch ausserhalb gesetzlicher Pflicht hilft der Trail: bei jedem Fehl-Output haben Sie sofort die ganze Kette zur Hand und können ohne Raten beheben.
Wann weniger reicht
Für interne Experimente, für Marketing-Brainstormings, für Code-Generierung bei Eigenprojekten, für Sprachübersetzung öffentlich verfügbarer Inhalte reicht ein einfaches Logging mit user_id, timestamp und Token-Verbrauch für Kostenkontrolle. Hier wäre ein voller 14-Felder-Trail Overkill und kostet mehr Geld als er bringt.
Die Faustregel: Wenn die KI-Antwort am Ende des Tages weggeworfen wird oder nur intern als Inspiration dient, brauchen Sie keinen vollen Trail. Sobald die Antwort einen externen Adressaten hat (Mandant, Behörde, Kunde, Mitarbeitender mit Personalentscheidung), brauchen Sie ihn.
Ein häufiger Fehler: Trail-Overengineering. Manche Teams loggen alles inklusive Klartext-Prompt für interne Marketing-Aufgaben, generieren so 20 GB Audit-Daten pro Monat und wundern sich, dass ihr Datenschutz-Beauftragter unruhig wird, weil im Trail mehr Personendaten stehen als im Original-Workflow. Trail-Felder sind nicht „je mehr desto besser" – sie sind gezielt zu setzen.
Vor- und Nachteile
STÄRKEN
- Nachvollziehbarkeit für Steuerbehörden, Revision, Berufsverbände
- Schnelles Debugging bei falschen KI-Antworten
- Vergleichbarkeit über Modell-Versionen – was hat sich seit dem letzten Update geändert?
- Kosten-Transparenz pro Mandant, pro Workflow, pro Modell
- Belastbarer Nachweis bei Datenschutz-Auskunftsbegehren nach Art. 25 revDSG
SCHWÄCHEN
- Speicherbedarf: 200 MB bis 2 GB pro Monat bei mittleren Setups, mehr bei vollem Prompt-Klartext
- Initialer Implementierungs-Aufwand 3 bis 8 Tage inklusive Schema-Design
- Bei falscher Konfiguration kann der Trail selbst Personendaten leaken – sorgfältige Pseudonymisierung Pflicht
- Tool-Auswahl ist noch in Bewegung – OTel-GenAI-Konventionen sind teilweise experimentell
Häufige Fragen
Muss ich den Klartext-Prompt speichern?
Nicht zwingend. Bei sensiblen Inhalten reicht ein SHA-256-Hash plus die Token-Anzahl und die Felder, die die Prüfung der Entscheidung erlauben (z.B. Klassifizierungs-Kategorie, RAG-Source-IDs). Den Klartext-Prompt aufbewahren, wenn er keine besonders schützenswerten Personendaten enthält und Sie ihn für spätere Modell-Verbesserung brauchen. Klare Trennung im Schema: prompt_hash immer, prompt_text optional und nach Sensibilitäts-Klasse.
Wie lange muss ich das aufbewahren?
Bei geschäftsrelevanten Vorgängen: 10 Jahre nach Art. 958f OR / GeBüV. Bei Verarbeitungen unter revDSG ohne Buchführungs-Bezug: so lange, wie der Zweck es verlangt, plus die jeweilige Verjährungsfrist (zivilrechtlich oft 10 Jahre, OR 127). Bei besonders schützenswerten Personendaten ohne Buchführungs-Bezug: so kurz wie möglich, klare Löschfristen im Trail-Schema dokumentieren.
Reicht Langfuse aus oder brauche ich OpenTelemetry?
Langfuse self-hosted reicht für 90% der Schweizer KMU-Setups. Wer bereits eine OpenTelemetry-basierte Observability-Plattform betreibt (z.B. Grafana Tempo, Honeycomb, Datadog), instrumentiert nach gen_ai.* Konvention und bekommt das LLM-Tracing in die bestehende Pipeline. Langfuse selbst akzeptiert über den /api/public/otel-Endpunkt OTel-Traces – die zwei Ansätze schliessen sich nicht aus.
Was passiert, wenn das Modell die Modell-ID nicht zurückmeldet?
Bei einigen lokalen Setups fehlt die explizite Versionsangabe. Lösung: Beim Modell-Deployment einen unveränderlichen Tag setzen (z.B. llama-3-1-70b-instruct-q4-k-m-20260301), und in der Aufruf-Schicht (LiteLLM, Ollama-Proxy) diese Identität aktiv in den Trail schreiben. Niemals nur „llama" oder „local" als Modell-ID speichern – das hilft in fünf Jahren niemandem.
Verwandte Themen
Quellen
PASSEND ZU IHREM STACK?