# Pourquoi un agent invente une ability inexistante : ce que révèle le journal

> Symptôme d'un appel d'outil qui échoue systématiquement, diagnostic d'une ability mal nommée dans le prompt système, correctif par un rappel du schéma exact.

- Auteur : Clément Hadrot
- Publié le : 2025-08-04
- Mis à jour le : 2025-08-04
- Catégorie : IA &amp; MCP
- URL : https://wpmoderne.dev.wordpress-developpement.fr/ia-mcp/agent-invente-ability-inexistante-journal/

## L’essentiel

- Un agent qui invente le nom d'une ability reproduit un motif appris ailleurs, pas une erreur aléatoire
- Le journal des appels échoués révèle immédiatement le nom erroné utilisé
- Le rappel exact du schéma dans le prompt système corrige durablement le symptôme

`Erreur : ability "wpm/publish-article" introuvable`. L'ability réellement enregistrée s'appelait `wpm/publier-article`, en français, conformément à la convention de nommage adoptée sur le projet. L'agent, lui, inventait systématiquement un nom en anglais, à chaque tentative, sans jamais converger vers le nom correct malgré plusieurs relances.

Ce symptôme illustre un cas fréquent de débogage sur une intégration reposant sur l'Abilities API, encore en développement au moment de ce test : l'agent ne se trompe pas au hasard, il reproduit un motif de nommage appris ailleurs, probablement issu d'exemples en anglais rencontrés lors de son entraînement, faute d'un rappel suffisamment explicite du nom exact attendu dans son contexte.

## Symptôme : un appel systématiquement rejeté

Le journal des appels d'outils, consulté après plusieurs échecs consécutifs, montrait un motif net : cent pour cent des tentatives concernaient exactement la même ability mal orthographiée, jamais une variante différente. Ce n'était donc pas un problème de génération aléatoire, mais un biais systématique dans la façon dont l'agent formulait sa décision d'appel.

```
[agent] Tentative d'appel : wpm/publish-article
[agent] Erreur : ability introuvable dans le registre
[agent] Tentative d'appel : wpm/publish-article
[agent] Erreur : ability introuvable dans le registre
```

## Diagnostic : un prompt système qui ne rappelle pas le schéma exact

> L'essentiel à retenir : Un agent qui invente le nom d'une ability reproduit un motif appris ailleurs, pas une erreur aléatoire ; Le journal des appels échoués révèle immédiatement le nom erroné utilisé ; Le rappel exact du schéma dans le prompt système corrige durablement le symptôme

En examinant le prompt système fourni à l'agent, la liste des abilities disponibles n'était mentionnée qu'en langage naturel, sous la forme d'une phrase décrivant la fonctionnalité de publication, sans jamais indiquer littéralement l'identifiant exact `wpm/publier-article` attendu par le registre. L'agent, laissé à sa propre interprétation du nom probable de l'outil, s'est appuyé sur un motif de nommage plus courant dans ses données d'entraînement plutôt que sur la convention réelle du projet.

- Le prompt décrivait la fonctionnalité, pas l'identifiant technique exact
- L'agent a comblé cette absence par un nom plausible mais incorrect
- Le même nom incorrect revenait à chaque tentative, signe d'un biais systématique et non aléatoire
- Aucune erreur de syntaxe n'était en cause, uniquement une erreur de nommage

## Correctif : rappeler le schéma exact dans le prompt système

La correction a consisté à injecter, littéralement, la liste des identifiants d'abilities disponibles dans le prompt système, générée dynamiquement à partir du registre réel plutôt que rédigée à la main et susceptible de devenir obsolète.

```
function wpm_generer_bloc_abilities_disponibles(): string {
    $bloc = "Abilities disponibles (utilise l'identifiant exact) :\n";

    foreach ( wpm_lister_les_abilities_enregistrees() as $identifiant => $ability ) {
        $bloc .= sprintf( "- %s : %s\n", $identifiant, $ability['description'] );
    }

    return $bloc;
}
```

Après ce changement, l'agent a systématiquement utilisé l'identifiant correct sur les cinquante tentatives suivantes observées, confirmant que le problème venait bien d'un manque de précision dans le prompt, pas d'une limite du modèle lui-même.

## Prévention : générer la liste plutôt que la rédiger

La prévention la plus fiable consiste à générer automatiquement, à chaque appel, la liste des identifiants disponibles à partir du registre réel des abilities, plutôt que de la maintenir à la main dans un prompt statique. Cette génération dynamique élimine tout risque de désynchronisation entre ce que le prompt annonce et ce que le registre contient réellement.

> Sur ce cas, la leçon retenue est que l'agent ne devine jamais un identifiant technique correctement s'il n'apparaît pas littéralement dans son contexte : la description en langage naturel ne suffit pas.

## Ce que ce cas ne concerne pas

Ce diagnostic ne s'applique qu'aux erreurs de nommage constantes et reproductibles. Un échec occasionnel, sans motif répété, relève généralement d'une autre cause — une ability réellement absente du registre à cause d'un problème d'enregistrement au chargement, par exemple — qui appelle un diagnostic différent.

## En résumé

Un agent qui invente systématiquement le même nom d'ability erroné révèle presque toujours un prompt système qui décrit la fonctionnalité sans en rappeler l'identifiant technique exact. Générer dynamiquement cette liste depuis le registre réel reste le correctif le plus fiable et le plus durable.
