# Journaliser les décisions d’un agent IA dans une table plutôt que les journaux serveur

> Garder une trace exploitable des choix faits par un assistant IA, structurée dans une table dédiée plutôt que noyée dans les journaux d'erreurs habituels.

- Auteur : WordPress Développement
- Publié le : 2024-02-24
- Mis à jour le : 2024-02-24
- Catégorie : IA &amp; MCP
- URL : https://www.wpmoderne.fr/ia-mcp/journaliser-decisions-agent-ia-table-dediee/

## L’essentiel

- Un fichier de log texte se prête mal à une analyse a posteriori
- Une table dédiée permet de filtrer et de compter les décisions
- Chaque décision journalisée doit indiquer sa justification, pas seulement son résultat

Un agent qui reclasse automatiquement des demandes de contact entrantes prend, chaque jour, des dizaines de petites décisions : quelle catégorie attribuer, quelle priorité, quel service notifier. Consulter le fichier `debug.log` pour comprendre pourquoi une demande précise a été classée d'une certaine façon un mardi soir devient vite impraticable, noyé parmi d'autres messages sans structure commune.

Une table dédiée, pensée dès le départ pour l'analyse plutôt que pour le simple diagnostic technique, change radicalement la facilité avec laquelle une décision peut être retrouvée et comprise plus tard.

## Ce qu'un fichier de log ne permet pas de faire

Un appel à `error_log()` écrit une ligne de texte dans un fichier, sans structure interrogeable. Retrouver toutes les décisions prises pour une catégorie donnée, ou compter combien de demandes ont été classées avec un faible niveau de confiance sur une semaine, suppose alors d'analyser ce fichier texte avec des outils externes, une opération lourde pour un besoin qui devrait rester simple.

## Concevoir une table de décisions

> L'essentiel à retenir : Un fichier de log texte se prête mal à une analyse a posteriori ; Une table dédiée permet de filtrer et de compter les décisions ; Chaque décision journalisée doit indiquer sa justification, pas seulement son résultat

```
function creer_table_decisions_agent() {
    global $wpdb;
    $table = $wpdb->prefix . 'decisions_agent_contact';
    $charset = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table (
        id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        demande_id BIGINT UNSIGNED NOT NULL,
        categorie_choisie VARCHAR(50) NOT NULL,
        niveau_confiance DECIMAL(3,2) NOT NULL,
        justification TEXT NOT NULL,
        date_decision DATETIME NOT NULL
    ) $charset;";

    require_once ABSPATH . 'wp-admin/includes/upgrade.php';
    dbDelta( $sql );
}
```

## Enregistrer la justification, pas seulement le résultat

Le champ le plus utile de cette table n'est pas `categorie_choisie`, mais `justification` : une phrase brève, générée par le modèle lui-même, expliquant pourquoi cette catégorie a été retenue plutôt qu'une autre. C'est ce champ qui permet, plus tard, de comprendre un classement surprenant sans avoir à rejouer la demande d'origine.

```
function enregistrer_decision( int $demande_id, array $resultat ): void {
    global $wpdb;

    $wpdb->insert( $wpdb->prefix . 'decisions_agent_contact', array(
        'demande_id'        => $demande_id,
        'categorie_choisie' => $resultat['categorie'],
        'niveau_confiance'  => $resultat['confiance'],
        'justification'     => $resultat['justification'],
        'date_decision'      => current_time( 'mysql' ),
    ) );
}
```

### Demander explicitement une justification au modèle

Cette exigence de justification doit figurer dans la consigne envoyée au modèle, sous forme de sortie structurée, plutôt qu'espérer l'obtenir spontanément d'un texte libre difficile à parser ensuite de façon fiable.

```
Consigne : « Réponds uniquement au format JSON suivant :
{"categorie": "...", "confiance": 0.0, "justification": "une phrase courte"} »
```

## Exploiter la table pour repérer les cas fragiles

Une fois la table alimentée sur plusieurs semaines, une requête simple isole les décisions les plus incertaines, celles qui méritent une vérification humaine en priorité :

```
SELECT * FROM wp_decisions_agent_contact
WHERE niveau_confiance < 0.6
ORDER BY date_decision DESC
LIMIT 20;
```

- Repérer les catégories les plus souvent associées à une confiance faible
- Identifier une dérive progressive dans le temps, si le niveau de confiance moyen baisse d'un mois sur l'autre
- Servir de base à une revue humaine périodique, plutôt qu'à une vérification systématique de chaque décision

> Une décision d'agent sans justification enregistrée reste une boîte noire : la traçabilité d'un agent ne se limite pas à son résultat, elle inclut le raisonnement qui y conduit.

## Ce qu'il faut retenir

Une table dédiée, structurée autour de la décision elle-même plutôt que du seul événement technique, rend possible une analyse a posteriori qu'un fichier de journalisation classique ne permet pas. Le champ de justification, souvent négligé, constitue l'élément le plus précieux de cette structure pour comprendre les choix faits par l'agent au fil du temps.
