Se un sistema invoca un tool e modifica uno stato esterno, il log “tool chiamato” non basta. Occorre sapere quale azione è stata proposta, quali argomenti sono stati validati, chi era autorizzato e quale effetto è stato prodotto.

Modello, gate applicativo, eventuale persona, strumento e audit trail per tutte le fasi
Il modello propone; il software applica policy e valida; una persona approva le azioni sensibili; la traccia conserva i passaggi necessari a ricostruire l’esito.

Separare proposta e autorizzazione

Nel codice, authorize, validate e tool sono dipendenze distinte. L'LLM può contribuire a proporre un'azione, ma non dovrebbe sostituire il controllo applicativo. L'evento registrato usa un hash degli argomenti, evitando di mettere automaticamente nel log il loro contenuto.

03 / Gate e audit eventPython 3 · libreria standard
from hashlib import sha256
import json

def audit_event(actor, action, allowed, arguments, outcome):
    canonical = json.dumps(arguments, sort_keys=True,
                           separators=(",", ":")).encode()
    return {"actor": actor, "action": action, "allowed": allowed,
            "arguments_sha256": sha256(canonical).hexdigest(),
            "outcome": outcome}

def execute(user, action, arguments, authorize, validate, tool, sink):
    allowed = authorize(user, action)
    if not allowed:
        sink(audit_event(user, action, False, arguments, "denied"))
        raise PermissionError(action)
    try:
        clean = validate(arguments)
    except Exception as exc:
        sink(audit_event(user, action, True, arguments,
                         "validation:" + type(exc).__name__))
        raise
    try:
        result = tool(clean)
    except Exception as exc:
        sink(audit_event(user, action, True, clean, type(exc).__name__))
        raise
    sink(audit_event(user, action, True, clean, "ok"))
    return result

Esempio illustrativo. Un hash non rende anonimi gli argomenti e non sostituisce un archivio sicuro. In produzione servono ID di correlazione, persistenza affidabile, gestione dei dati personali, idempotenza e una policy per i casi in cui il log fallisce.

La traccia minima da progettare

CampoPerché serveAttenzione
Identità e ruoloAttribuire la richiesta e verificare i privilegiMinimizzare i dati conservati
Versioni di fonti e policyRiprodurre il contesto della decisioneConservare riferimenti immutabili
Argomenti validatiCapire l'effetto richiesto al toolProteggere dati e segreti
Esito e approvazioneRicostruire l'azione e chi l'ha autorizzataDistinguere proposta da esecuzione

Per le scritture aggiungerei una chiave di idempotenza e una strategia per i timeout: non sempre un errore di rete significa che l'azione non sia stata eseguita. Anche il percorso di recupero va rappresentato nella traccia.

PropostaIl modello non concede privilegi.
EsecuzioneIl software valida prima dell’effetto.
RicostruzioneEventi correlati a fonti, policy, approvazioni ed esiti.

Nel libro dedico spazio a guardrail, osservabilità, test e intervento umano informato. Sono requisiti da progettare insieme ai tool: aggiungerli alla fine significa spesso scoprire troppo tardi che la decisione non è più ricostruibile.

Se questi temi ti interessano, li approfondisco in Architetture Agentiche, con pattern, casi guida, scelte di progetto, metriche e modalità di guasto.

Scopri il libro su Amazon ↗