Aller au contenu
← Tous les TIL
TIL

TIL : contraindre les outils d'un agent vaut mieux que l'instruire

tool-usemodel-routingopencode-go

En montant le layering de modèles de mon setup pi, je voulais qu’un preset de traitement en volume évite les appels d’outils complexes — le modèle dessus a un tool-calling fragile. Premier réflexe : l’écrire dans le prompt. « Ne fais que lire et écrire, évite les commandes bash compliquées. »

Mauvaise idée. Un modèle en run long finit toujours par oublier la consigne, ou par la contourner en raisonnant à voix haute (« I need to just output text without tool calls »). La consigne dans le prompt est une intention, pas une garantie.

La bonne façon : restreindre techniquement la liste d’outils. Dans pi, un preset déclare exactement ce à quoi le modèle a accès :

{
  "bulk": {
    "tools": ["read", "write"]
  }
}

Le modèle n’a physiquement pas bash, edit, grep. Il ne peut pas mal les appeler, puisqu’ils n’existent pas pour lui. La contrainte tient, quel que soit ce que le modèle « décide ».

La leçon dépasse le cas : quand un comportement compte vraiment — budget, sécurité, périmètre — applique-le, ne le demande pas. Le même principe vaut pour mes garde-fous rm -rf, qui bloquent la commande au lieu de faire confiance à l’agent pour ne pas la taper. Une limite qu’on espère respectée n’est pas une limite.

Pour aller plus loin