Comment utiliser TOON avec les LLM

LLM
Ingénierie rapide

Si vous avez déjà collé un grand tableau JSON dans ChatGPT ou Claude, vous avez probablement ressenti la douleur de la fermeture de la fenêtre contextuelle. JSON est fantastique pour les API Web, mais pour les grands modèles linguistiques (LLM), c'est un gaspillage incroyable. Répéter des noms de champs comme "id":, "name": et "timestamp": pour chaque enregistrement n'est pas seulement redondant ; il brûle des jetons qui coûtent de l'argent réel et un espace contextuel précieux.

C'est là que TOON (Table Object Notation) brille. Ce n'est pas seulement un format de données ; c'est une stratégie d'optimisation des interactions LLM. En supprimant la taxe de syntaxe de JSON et en ajoutant des en-têtes de structure explicites, TOON vous permet de transmettre plus de données à vos modèles et d'obtenir en retour des sorties structurées plus fiables.

L'économie des jetons de TOON

Pourquoi s'embêter à changer de format ? Le calcul est simple. Dans un tableau d'objets JSON standard, le schéma est répété pour chaque ligne. Si vous avez une liste de 50 utilisateurs, vous payez 50 fois les noms de champs.

TOON élimine cette redondance en déclarant le schéma une fois dans l'en-tête. Les données suivent dans un format dense et rationalisé. En pratique, cela entraîne généralement une réduction de 30 à 60 % de l'utilisation des jetons pour les tableaux uniformes par rapport au JSON formaté. Lorsque vous avez affaire à des fenêtres contextuelles massives ou à des appels d'API à volume élevé, cette efficacité se traduit directement par des factures et une latence plus faibles.

Envoi de données : la règle « Montrer, ne pas dire »

Lorsque vous avez besoin d'un LLM pour analyser des données, votre stratégie rapide est cruciale. Les débutants écrivent souvent de longs paragraphes expliquant le format des données. Avec TOON, vous n’avez pas besoin de faire ça.

Les LLM sont des moteurs de correspondance de modèles. Ils comprennent intuitivement TOON car il ressemble à un hybride de formats YAML et CSV qu'ils ont vu des milliards de fois au cours de leur formation.

Pour envoyer des données, enveloppez-les simplement dans un bloc de code clôturé. Vous pouvez l'étiqueter « toon », mais même si le surligneur de syntaxe du modèle ne le prend pas officiellement en charge, le modèle comprend immédiatement la structure.

Exemple de saisie

Au lieu de décrire le schéma, fournissez simplement le bloc :

L'en-tête users[3]{id,name,role,lastLogin} indique au modèle tout ce qu'il doit savoir : le type d'entité, le nombre (3 lignes) et l'ordre des champs. L'indentation gère la hiérarchie. Cette nature « auto-documentée » libère votre invite pour qu'elle se concentre sur la tâche logique réelle plutôt que sur les instructions d'analyse syntaxique.

Voici le journal d'activité des utilisateurs. Les données sont au format TOON (retrait de 2 espaces, en-têtes explicites). 

utilisateurs[3]{id,nom,role,lastLogin} : 
1,Alice,admin,2025-01-15T10:30:00Z 
2,Bob,utilisateur,2025-01-14T15:22:00Z 
3,Charlie,utilisateur,2025-01-13T09:45:00Z 

Tâche : Analysez les journaux et identifiez les utilisateurs qui ne se sont pas connectés au cours des dernières 24 heures. 

Générer une sortie fiable

Obtenir un LLM pour lire les données est facile ; l'amener à générer des données structurées valides est la partie la plus difficile. Les modèles adorent halluciner, tronquer JSON ou oublier les accolades fermantes.

TOON ajoute une couche de sécurité grâce à sa syntaxe d'en-tête, en particulier le nombre [N]. Lorsque vous demandez à un modèle de générer TOON, vous lui demandez de s'engager dans une structure avant de générer les données.

Invite à la génération

Pour obtenir les meilleurs résultats, fournissez le format d'en-tête souhaité et demandez au modèle de remplir les lignes.

En demandant au modèle de calculer « [N] », vous forcez un processus de « chaîne de pensée » dans lequel le modèle doit planifier la taille de sortie. Cette contrainte apparemment petite réduit considérablement la probabilité que le modèle soit coupé au milieu d'une liste.

Tâche : Renvoyer une liste d'utilisateurs actifs avec le rôle « utilisateur ». 
Format : Utilisez TOON. Définissez la valeur [N] dans l'en-tête pour qu'elle corresponde au nombre exact de lignes que vous générez. 

Format attendu : 
utilisateurs[N]{id,nom,role,lastLogin} : 

Validation avec le mode strict

Lorsque vous recevez la réponse du LLM, vous ne devez pas vous contenter de lui faire confiance. C’est là que le mode strict de la bibliothèque TOON devient un super pouvoir pour les applications de production.

Si vous utilisez la bibliothèque TypeScript, le décodage en mode strict valide que les lignes générées correspondent au nombre d'en-tête :

Cela vous permet de détecter immédiatement par programme les sorties de modèle « paresseuses » ou les troncatures de réseau, plutôt que de découvrir de mauvaises données en aval dans votre application.

importer { décoder } depuis '@toon-format/toon' ; 

essayez { 
// Si le modèle indique [5] mais fournit 4 lignes, cela génère une erreur. 
const data = decode(modelOutput, { strict : true }); 
console.log('Données valides reçues :', data); 
} attraper (erreur) { 
console.error('Hallucination ou troncature du modèle détectée :', error.message); 
} 

Optimisation avancée : l'astuce des onglets

Si vous êtes obsédé par l'optimisation (et dans le monde des LLM, vous devriez probablement l'être), vous pouvez gagner encore plus d'efficacité en choisissant judicieusement vos délimiteurs.

Les virgules sont standard, mais les tabulations (\t) sont souvent représentées comme un seul jeton dans de nombreux vocabulaires de tokenizer. De plus, les tabulations apparaissent rarement dans des champs de texte naturel, ce qui réduit le besoin de caractères d'échappement (comme mettre les chaînes entre guillemets).

Vous pouvez encoder vos données à l'aide d'onglets avant de les envoyer au modèle :

N'oubliez pas d'informer le modèle dans l'invite : "Les données sont séparées par des tabulations TOON." Cela crée une représentation hyper-compacte qui est incroyablement facile à analyser et à générer pour le modèle.

const toonPrompt = encode(data, { délimiteur : '\t' }); 

Un exemple de workflow complet

Examinons un scénario réel : filtrer les journaux système. Vous souhaitez envoyer des journaux bruts au modèle et obtenir une liste structurée d'erreurs.

L'invite :

La sortie du modèle :

Journaux système au format TOON (séparés par des tabulations) : 

événements[4]{id,level,message,timestamp} : 
1, erreur, délai d'attente de connexion, 2025-01-15T10: 00: 00Z 
2, avertissement, requête lente, 2025-01-15T10:05:00Z 
3,info,Connexion utilisateur,2025-01-15T10:10:00Z 
4, erreur, erreur de base de données025-01-15T10:15:00Z 

Tâche : Extraire tous les événements avec le niveau « erreur ». Renvoie le résultat sous forme de TOON valide avec un nombre d'en-têtes mis à jour. 

Le résultat :

événements[2]{id,level,message,timestamp} : 
1, erreur, délai d'attente de connexion, 2025-01-15T10: 00: 00Z 
4,erreur,Erreur de base de données,2025-01-15T10:15:00Z 

Le modèle a correctement filtré la liste et, surtout, a mis à jour l'en-tête en « events[2] ». En décodant cette réponse, vous obtenez un tableau propre et de type sécurisé, prêt pour la logique de votre application.

Résumé

TOON comble le fossé entre la lisibilité humaine et l’efficacité des machines. Il respecte les contraintes de coût des LLM tout en fournissant la structure requise pour un développement logiciel robuste.

  1. Gardez les choses petites : Utilisez 2 à 5 lignes dans vos exemples ; le modèle se généralisera.
  1. Soyez explicite : Définissez clairement les en-têtes afin que le modèle connaisse le schéma.
  1. Valider strictement : Utilisez les métadonnées du format pour détecter les erreurs de génération.

En vous éloignant de JSON pour vos charges utiles rapides, vous ne vous contentez pas d'enregistrer des jetons : vous créez un pipeline d'IA plus fiable.