Audit trails voor AI-agents: log elke actie van je chatbot

Bouw een audit trail voor je AI-agent die laat zien wat je chatbot van plan was, probeerde, veranderde en opnieuw probeerde op elk gekoppeld systeem.

Cover Image for Audit trails voor AI-agents: log elke actie van je chatbot

Op 9 juli voegde OpenAI programmatische tool calling en bèta multi-agentorkestratie toe aan GPT-5.6. Die release volgt op een bredere verschuiving van korte antwoorden naar agents die veel langer over meerdere tools heen werken: OpenAI rapporteerde dat 70,2% van de onderzochte Codex-gebruikers tegen mei 2026 minstens één taak had aangevraagd die naar schatting meer dan een uur zou kosten voor een mens. Meer acties per taak creëren meer plekken waar intentie, uitvoering en uitkomst uit elkaar kunnen lopen.

De storingen zijn vaak alledaags in plaats van kwaadaardig. Na de beoordeling van een miljoen coding-agenttaken ontdekte Google DeepMind dat de meeste gemarkeerde gebeurtenissen voortkwamen uit misinterpretatie of overijverigheid. Een bruikbare audit trail voor een AI-agent moet daarom elke ingrijpende chatbotactie kunnen reconstrueren, inclusief de onschuldig ogende herhalingen die dubbele terugbetalingen, tickets, boekingen of e-mails veroorzaken.

Begin met dit minimale gebeurtenisrecord. Sla één gebeurtenis op per statuswijziging, voeg nieuwe gebeurtenissen toe in plaats van oude te overschrijven, en koppel elke gebeurtenis aan dezelfde trace.

VeldRegistreertWaarom het ertoe doet
trace_idEén ID voor het volledige gebruikersverzoekReconstrueert een meerstaps-run
action_idEén ID voor de beoogde bedrijfsactieGroepeert pogingen en herhalingen
attempt_idEen unieke ID voor elke tool-aanroepLegt dubbele uitvoering bloot
idempotency_keyStabiele sleutel die naar de bestemming wordt gestuurdVoorkomt herhaalde neveneffecten
actorGebruiker, chatbot, subagent, goedkeurder of dienstBepaalt de verantwoordelijkheid
tool en operationConnector plus exacte bewerkingToont welke capaciteit is uitgevoerd
input_summary en input_hashGeredigeerde samenvatting plus hash van canonieke inputOndersteunt review zonder geheimen te kopiëren
decisionToestaan, weigeren, goedkeuring vereisen of escalerenLegt het beleidsresultaat vast
resultSucces, mislukking, time-out, onbekend of gecompenseerdScheidt transportstatus van bedrijfsuitkomst
external_referenceID van terugbetaling, ticket, boeking of berichtKoppelt de trace aan het systeem van record
occurred_atServertijdstempel in UTCOrdent gebeurtenissen tussen diensten

Scheid intentie, poging en effect

Een chattranscript legt meestal de intentie vast: "Betaal mijn laatste bestelling terug." Een HTTP-log legt een poging vast: POST /refunds. Een betaalverwerker legt het effect vast: terugbetaling rf_8421 wijzigde het accountsaldo. Geen van die records bewijst de andere twee.

Behandel ze als drie samenhangende feiten:

  • Intentie registreert het verzoek van de gebruiker, de interpretatie van de agent, de gekozen tool en de voorgestelde parameters.
  • Poging registreert de exacte verzonden bewerking, de beleidsbeslissing, de bestemming, de time-out en de responsklasse.
  • Effect registreert het blijvende externe resultaat, zoals een terugbetalings-ID en -bedrag, een boekingsstatus of een ticketovergang.

Deze scheiding is vooral belangrijk wanneer een verzoek verloopt door een time-out. Een time-out betekent dat de aanroeper geen respons ontving. De bestemming kan de actie alsnog hebben voltooid. Als het auditrecord "geen respons" samenvoegt met "mislukt", kan de chatbot een geslaagde bewerking opnieuw uitvoeren.

Diezelfde grens verscherpt de rechtenstructuur. De checklist voor tool-rechten van chatbots helpt bepalen of een bot een capaciteit mag aanroepen. De audit trail levert het bewijs over wat er na die beslissing is gebeurd.

Geef elke actie vier ID's

Eén gespreks-ID kan geen productieonderzoek dragen. Eén supportgesprek kan meerdere acties starten, en elke actie kan meerdere pogingen hebben.

Gebruik vier identifiers met verschillende levensduren:

Gespreks-ID. Groepeert de voor de gebruiker zichtbare berichten. Houd deze stabiel gedurende de hele chatsessie.

Trace-ID. Groepeert het werk dat nodig is om één verzoek af te handelen. Een nieuw verzoek binnen hetzelfde gesprek moet een nieuwe trace krijgen.

Actie-ID. Identificeert de bedrijfsbewerking die de agent van plan is te voltooien, zoals "betaal bestelling 10492 terug voor $48." Herhalingen behouden dezelfde actie-ID.

Poging-ID. Identificeert één netwerkoproep. Elke herhaling krijgt een nieuw poging-ID zodat operators kunnen zien hoe vaak het systeem het heeft geprobeerd.

Geef de trace- en actie-ID's door via webhooks, wachtrijen, connectordiensten en goedkeuringsschermen. Als een externe API metadata accepteert, neem ze daar ook in op. Een onderzoeker moet kunnen starten vanaf een klantbericht, een mislukte taak of een externe transactie en bij dezelfde trace uitkomen.

Praktijkgeval: de terugbetaling die twee keer liep

Stel dat een klant schrijft: "Betaal de dubbele afschrijving van $48 op bestelling 10492 terug." De chatbot vindt twee geïnde betalingen, stelt voor de nieuwste afschrijving terug te betalen en krijgt menselijke goedkeuring. De betaal-API verwerkt de terugbetaling, maar de respons overschrijdt een time-out van 10 seconden. Een worker herhaalt het verzoek zonder idempotency-sleutel, waardoor een tweede terugbetaling ontstaat.

De eerste poging zou een append-only gebeurtenis zoals deze moeten opleveren:

{
  "event_type": "tool.attempt.finished",
  "trace_id": "tr_7f2c",
  "action_id": "act_refund_10492_48usd",
  "attempt_id": "att_01",
  "conversation_id": "conv_5198",
  "actor": {
    "type": "chatbot",
    "id": "billing-support"
  },
  "tool": "payments",
  "operation": "create_refund",
  "decision": "approved",
  "approval_event_id": "apr_6630",
  "input_summary": "Refund $48.00 to payment ending 8812",
  "input_hash": "sha256:4cb3...91e0",
  "idempotency_key": null,
  "result": "timeout_unknown",
  "external_reference": null,
  "occurred_at": "2026-07-15T09:42:18.511Z"
}

Het resultaat timeout_unknown is de cruciale aanwijzing. De worker moet de verwerker bevragen met de stabiele identifiers van de actie voordat hij het opnieuw probeert. Vindt hij terugbetaling rf_8421, dan voegt hij een gebeurtenis effect.confirmed toe en sluit hij de actie af. Kan hij niet bevragen, dan gaat de actie naar review in plaats van blindelings opnieuw te worden uitgevoerd.

Stel je nu voor dat de dubbele actie al heeft plaatsgevonden. Een volledige trace toont hetzelfde actie-ID, twee poging-ID's, geen idempotency-sleutel en twee externe terugbetalings-ID's. De correctie kan een compenserende actie apart vastleggen. Operators kunnen de klant antwoorden, engineers kunnen het herhaalgedrag repareren, en finance kan het grootboek reconciliëren op basis van hetzelfde bewijs.

Dit is ook waarom goedkeuringsrecords meer moeten bevatten dan een klik. De handleiding voor goedkeuringsworkflows bij chatbots legt uit hoe je de gevolgen en de parameters toont vóór uitvoering. Je audit trail moet die goedgekeurde payload met een canonieke hash koppelen aan de uitgevoerde payload.

Maak herhalen saai

Herhalingen zijn normaal in gedistribueerde systemen. Netwerken haperen, wachtrijen leveren taken opnieuw af, workers herstarten, en providers geven dubbelzinnige foutmeldingen terug. Het veilige ontwerp gaat ervan uit dat elke actie meer dan eens kan worden geprobeerd.

Genereer de idempotency-sleutel op basis van de stabiele bedrijfsactie, niet op basis van de poging. Voor de terugbetaling hierboven zou de sleutel kunnen worden afgeleid van tenant-ID, betalings-ID, terugbetalingsbedrag, reden en actie-ID. Elke herhaling stuurt dezelfde sleutel. Een gewijzigd bedrag of een gewijzigde bestemming wordt een nieuwe actie die een nieuwe beslissing vereist.

Definieer vervolgens herhaalregels per resultaat:

  • Definitieve mislukking vóór acceptatie: herhaal automatisch met dezelfde actie en idempotency-sleutel.
  • Time-out of verbindingsverlies na verzending: bevraag eerst de status; herhaal alleen wanneer de bestemming bewijst dat er geen effect bestaat.
  • Validatie- of toestemmingsfout: stop en toon de specifieke correctie die nodig is.
  • Ratelimiet of tijdelijke providerstoring: respecteer het backoff-signaal van de provider en behoud dezelfde actie-identiteit.
  • Onbekend resultaat zonder mogelijkheid tot opzoeken: vereis review voor ingrijpende acties.

Leg de reden van de scheduler voor elke herhaling vast. "Poging 2 gestart" is zwak bewijs. "Poging 2 gestart nadat een statusopvraging geen bijbehorende terugbetaling opleverde" is beoordeelbaar bewijs.

Koppel goedkeuringen aan de uitgevoerde payload

Een goedkeuring is alleen geldig voor de actie die de persoon heeft gezien. Als een chatbot vraagt om $48 terug te betalen en vervolgens $96 uitvoert, biedt de aanwezigheid van een goedkeuringsgebeurtenis een vals gevoel van zekerheid.

Canoniseer de voorgestelde payload, verwijder vluchtige velden zoals tijdstempels, en hash het resultaat. Sla die hash op bij de goedkeuring. Bereken de hash vlak vóór uitvoering opnieuw. Bij een mismatch moet de goedkeuring ongeldig worden verklaard en het gewijzigde voorstel teruggaan naar de goedkeurder.

Leg de volgende details vast bij de goedkeuringsgebeurtenis:

  • identiteit en rol van de goedkeurder;
  • beleid of regel die goedkeuring vereiste;
  • het getoonde, voor mensen leesbare gevolg;
  • canonieke payload-hash;
  • vervaltijd van de goedkeuring;
  • beslissing en optionele reden;
  • trace- en actie-ID's.

Bewaar ook afwijzings- en verlooggebeurtenissen. Een append-only reeks toont of een agent zich aan de beslissing hield of na blokkering een ander pad probeerde.

Redigeer zonder bewijs te vernietigen

Ruwe tool-payloads kunnen toegangstokens, betaalgegevens, gezondheidsinformatie, privéberichten en persoonsgegevens bevatten. Al dat materiaal in een doorzoekbaar log kopiëren creëert een tweede gevoelige database.

Gebruik een gelaagd record. Zet een geredigeerde samenvatting in de operationele gebeurtenis. Sla een hash van de canonieke input op om wijzigingen te detecteren. Als volledige payloadretentie echt noodzakelijk is, versleutel deze dan in een afgeschermde bewijsopslag met een kortere bewaartermijn en aparte toegangscontroles.

Definieer redactie per veld in plaats van uitsluitend via reguliere expressies. Een bearer-token mag nooit de gebeurtenispipeline in. E-mailadressen mogen worden gemaskeerd in brede operationele overzichten, terwijl ze wel beschikbaar blijven voor een kleine supportgroep. Vrije-tekstinvoer heeft groottelimieten en detectie van geheimen nodig, omdat gebruikers wachtwoorden en sleutels in het chatvenster plakken.

Privacy raakt ook observability-leveranciers. Bepaal vóór het exporteren van traces welke velden je omgeving verlaten, in welke regio ze worden opgeslagen en of verwijderverzoeken doorwerken. De beveiligingsgids voor chatbotbeheer behandelt bevoegde configuratiewijzigingen; pas dezelfde functiescheiding toe op toegang tot en retentie van audit-logs.

Maak van traces operationele vragen

Dashboards zouden concrete vragen moeten beantwoorden in plaats van gebeurtenisvolume te vieren. Begin met vragen die klantschade blootleggen:

  • Welke geslaagde bedrijfseffecten volgden op een time-outrespons?
  • Welke actie-ID's leverden meer dan één externe referentie op?
  • Welke goedgekeurde payload-hashes verschillen van uitgevoerde payload-hashes?
  • Welke tools hebben het hoogste percentage onbekende resultaten?
  • Welke gebruikers of tenants veroorzaken de meeste herhalingen?
  • Welke acties werden voltooid nadat een goedkeuring was verlopen?
  • Welke geweigerde acties werden gevolgd door een vergelijkbare actie via een andere tool?

Bekijk bij elk incident ook een steekproef van normale traces. Normale voorbeelden laten zien of het schema begrijpelijk is voordat de druk toeslaat. Ze onthullen ook ontbrekende overdrachten, misleidende resultaatlabels en velden waarvan teams aannamen dat een andere dienst ze registreerde.

Voor laagrisicoacties kan uitgestelde review voldoende zijn. De controle-roadmap van Google DeepMind maakt een vergelijkbaar onderscheid tussen retrospectieve monitoring voor omkeerbaar gedrag en realtime blokkering voor ernstige acties. Ken elke tool een reviewmodus toe op basis van de mogelijke gevolgen: asynchrone steekproeven, alert-bij-afwijking, goedkeuring vóór uitvoering, of synchrone beleidshandhaving.

Test de audit trail als onderdeel van het product

Een audit trail kan falen terwijl de chatbot gezond oogt. Voeg releasetests toe die bewust ongemakkelijke situaties creëren:

  1. Forceer een time-out nadat de bestemming een actie heeft geaccepteerd.
  2. Lever hetzelfde wachtrijbericht twee keer af.
  3. Wijzig één goedgekeurde parameter vóór uitvoering.
  4. Roteer een connector-credential tijdens een meerstapstaak.
  5. Geef een geslaagde HTTP-status terug met een afgewezen bedrijfsuitkomst.
  6. Laat twee subagents dezelfde klantvraag afhandelen.
  7. Verwijder of maskeer klantgegevens en controleer de retentieregels over exports heen.

Start bij elke test op drie plekken: het gesprek, de interne taak en de externe transactie. Alle drie moeten uitkomen bij één samenhangende trace. Iemand die de integratie niet heeft gebouwd, moet kunnen uitleggen wat de gebruiker vroeg, wat de agent besliste, wat het systeem probeerde en wat er daadwerkelijk is veranderd.

Anthropics beschrijving van betrouwbare agents benadrukt transparantie terwijl agents plannen, handelen, observeren en dat herhalen over meerdere tools heen. De praktische norm is een trace die die lus overleeft, inclusief overdrachten tussen subagents en menselijke interventies.

Een bevestiging is onderdeel van de actie

Het voor de klant zichtbare antwoord "Je terugbetaling is voltooid" moet worden gegenereerd op basis van een bevestigd effect, niet op basis van de intentie van de chatbot of een geslaagde tool-aanroep. Dezelfde externe referentie die aan support wordt getoond, moet waar relevant ook verschijnen op de bevestiging van de gebruiker.

Naarmate chatbottaken zich uitstrekken over meer tools, modellen, workers en goedkeuringen, wordt een audit trail voor AI-agents onderdeel van het actiecontract. Het geeft klanten een verdedigbare bevestiging en geeft operators een pad terug van een verrassende uitkomst naar de exacte beslissing en poging die eraan ten grondslag lag.

In Agentkit vormen gesprekslogs de voor mensen leesbare reviewlaag en koppelen aangepaste API-acties chatbots aan bedrijfssystemen; houd de bewijzen van het systeem van record gekoppeld aan die gesprekken.

Bouw gratis je chatbot →

Geen creditcard nodig.

Gratis aan de slagGeen creditcard nodig