Aller au contenu principal

Journalisation IA

Table thalia_ai_logs

CREATE TABLE thalia_ai_logs (
id BIGSERIAL PRIMARY KEY,
api_key_id INTEGER, -- clé utilisée
client_name VARCHAR(100), -- 'OpenWebUI', 'Claude Desktop'
ip INET,
tool VARCHAR(100) NOT NULL, -- 'elevage.lot'
action VARCHAR(100) NOT NULL, -- 'localisation'
params JSONB, -- paramètres reçus (sans données sensibles)
status VARCHAR(20) NOT NULL, -- success|error|forbidden|pending_approval
status_code SMALLINT,
duration_ms INTEGER,
response_size INTEGER,
pending_action_id INTEGER REFERENCES thalia_pending_actions(id),
created_at TIMESTAMP NOT NULL
);

CREATE INDEX ON thalia_ai_logs (tool, created_at DESC);
CREATE INDEX ON thalia_ai_logs (status, created_at DESC);

Ce qui est toujours tracé

  • Outil appelé + action + paramètres (anonymisés si sensibles)
  • Statut de la réponse (succès, erreur, refus de permission)
  • Durée d'exécution
  • IP source + identifiant client

Ce qui n'est jamais loggé

  • Tokens, mots de passe, clés API
  • Contenu complet des réponses
  • Données personnelles de santé

ThaliaAuditService

Appelé automatiquement par le middleware ApiScopeMiddleware en v2 :

$audit->log(
tool: 'elevage.lot',
action: 'localisation',
params: ['code' => 'T2604'],
result: $response,
status: 'success',
durationMs: 123,
);

Dashboard admin

Page /thalia/admin/logs :

  • Volume d'appels par jour / par outil
  • Taux d'erreur et de refus
  • Temps de réponse moyen par outil
  • Liste des derniers appels avec drill-down
  • Export CSV