Qu'est-ce que TOON ?
Nous sommes tous passés par là. Vous concevez un prompt pour un grand modèle de langage (LLM) et vous devez transmettre des données structurées. Vous optez pour JSON. C'est la norme de l'industrie, après tout. Mais en voyant votre fenêtre de contexte se remplir d'accolades interminables, de clés répétées et de guillemets autour de simples nombres entiers, vous commencez à vous demander : Existe-t-il un meilleur moyen ?
YAML offre la lisibilité mais souffre d'ambiguïté. CSV est dense mais manque de hiérarchie.
Entrez TOON.
TOON est un format de sérialisation de données qui agit comme une bouffée d'air frais pour les développeurs et un langage natif pour les modèles d'IA. Il comble le fossé entre la lisibilité humaine et l'efficacité machine. Aujourd'hui, plongeons dans la syntaxe et la mécanique de TOON pour comprendre pourquoi il devient rapidement un favori pour l'échange de données à haute efficacité.
La Philosophie : Sémantique JSON, Esthétique YAML
À la base, TOON partage exactement le même modèle de données que JSON. Si vous pouvez le représenter en JSON — primitifs (chaînes, nombres, booléens, null), objets et tableaux — vous pouvez le représenter en TOON. Cependant, la présentation est radicalement différente.
TOON abandonne les accolades. Il utilise l'indentation pour représenter la hiérarchie, tout comme YAML. Un objet simple semble propre et accessible :
Contrairement à YAML, cependant, TOON est strict sur les types. Il n'est pas nécessaire de deviner si no signifie false ou la chaîne "no". Dans TOON, les chaînes ne nécessitent des guillemets que lorsqu'ils sont absolument nécessaires, par exemple lorsqu'elles contiennent des caractères spéciaux, ressemblent à des nombres ou sont vides. Si vous tapez message: Hello World, vous obtenez une chaîne. Si vous tapez count: 42, vous obtenez un nombre.
id: 123
name: Ada
active: true
La puissance des tableaux : Longueur et Tables
Là où TOON se distingue vraiment du lot, c'est dans sa gestion des tableaux. C'est la "fonctionnalité tueuse" pour l'optimisation des tokens.
Chaque tableau dans TOON déclare explicitement sa longueur entre crochets, comme items[3]. Cela peut sembler redondant pour un humain, mais pour un LLM, c'est un superpouvoir. Cela permet au modèle de valider la structure immédiatement et de détecter la troncature. Si le flux se coupe après deux éléments mais que l'en-tête en a promis trois, l'analyseur sait que quelque chose s'est mal passé.
TOON offre effectivement trois façons de gérer les tableaux, en choisissant automatiquement la plus efficace :
- Primitifs en ligne : Pour les listes simples de nombres ou de chaînes, TOON reste compact.
tags[3]: admin,ops,dev
- Listes standard : Pour les types mixtes, il utilise une syntaxe de liste à puces similaire à YAML.
- Objets tabulaires : C'est ce qui change la donne.
Si vous avez un tableau d'objets qui partagent les mêmes clés — un modèle très courant dans les enregistrements de bases de données — TOON pivote vers un Format Tabulaire. Au lieu de répéter les clés pour chaque ligne, il déclare les clés une fois dans l'en-tête.
Dans l'exemple ci-dessus, users[2]{id,name,role}: nous indique que nous avons 2 lignes et définit le schéma. Les données suivent dans une structure de type CSV. Cela élimine la surcharge massive de tokens due à la répétition de "id":, "name": et "role": pour chaque utilisateur.
users[2]{id,name,role}: 1,Alice Admin,admin
2,"Bob Smith",user
Délimiteurs et efficacité des tokens
Vous remarquerez peut-être l'utilisation de virgules dans les exemples ci-dessus. TOON prend en charge trois délimiteurs : virgules (par défaut), tabulations et barres verticales ou "pipes" (|).
Pourquoi est-ce important ? Tokenisation.
Dans de nombreux tokenizers LLM, une virgule suivie d'un guillemet peut être divisée en plusieurs tokens. Un caractère de tabulation, cependant, se tokenise souvent très proprement. TOON vous permet de changer de délimiteur au niveau de l'en-tête du tableau. Si vous utilisez un délimiteur de tabulation, vous n'avez souvent même pas besoin de mettre des guillemets autour des chaînes contenant des espaces, ce qui comprime encore plus vos données.
Le format est assez intelligent pour gérer les "collisions". Si vos données contiennent le délimiteur actif, TOON met simplement cette valeur spécifique entre guillemets.
items[2 ]{sku name qty}: A1 Nom Widget 2
B2 Nom Gadget 1
Pliage de clés (Key Folding) : Aplatir la courbe
Une autre fonctionnalité qui souligne l'accent mis par TOON sur l'efficacité est le Pliage de clés. Les objets profondément imbriqués entraînent généralement un "escalier" d'indentation qui consomme de l'espace horizontal et des tokens.
Si vous avez une hiérarchie profonde où les objets intermédiaires n'ont pas de frères et sœurs, TOON peut les réduire en un chemin de notation par points.
Au lieu d'écrire :
Vous pouvez écrire :
data:
metadata:
items[2]: a,b
Cette fonctionnalité, disponible depuis la spécification v1.5, réduit considérablement le nombre de lignes et les tokens d'indentation. Il est important de noter que ceci est entièrement réversible. Lorsque vous décodez les données avec l'expansion de chemin activée, cela reconstruit parfaitement la hiérarchie d'objets profonds.
data.metadata.items[2]: a,b
Rigueur et sécurité
Malgré son apparence concise, TOON n'est pas laxiste avec les données. Il adhère à un ensemble strict de règles pour les guillemets et l'échappement.
Les chaînes restent généralement sans guillemets, ce qui est excellent pour la lisibilité. Cependant, TOON impose des guillemets pour les cas limites afin de garantir l'intégrité des données. Si une chaîne ressemble à un nombre (par exemple, "05" ou "1e-6"), elle est mise entre guillemets pour éviter qu'elle ne soit analysée comme un nombre. Si une chaîne est un mot réservé comme true ou null, elle est mise entre guillemets.
De plus, TOON normalise les nombres. Il émet des formes décimales canoniques — pas de notation scientifique ni de zéros finaux dans la sortie — assurant la cohérence. Il gère même BigInt en toute sécurité ; si un nombre dépasse la plage d'entiers sûrs, il est sérialisé sous forme de chaîne pour éviter la perte de précision pendant le transport.
Formes Racines
Bien que la plupart d'entre nous travaillent avec des objets racines, TOON est flexible. Un document ne doit pas nécessairement commencer par une paire clé-valeur. Il prend en charge les tableaux racines (commençant immédiatement par [N]:) ou même une seule primitive racine. Cette parité avec JSON signifie que vous pouvez échanger TOON dans presque n'importe quel pipeline où JSON est actuellement utilisé, à condition d'avoir l'analyseur à l'autre bout.
Dernières pensées
TOON n'est pas juste "un autre format". C'est un outil spécialisé pour une époque où les données sont consommées par des modèles probabilistes aussi souvent que par du code déterministe. En combinant le modèle de données rigide de JSON avec la densité de CSV et la lisibilité de YAML, il résout le problème spécifique de l'optimisation de la fenêtre de contexte sans sacrifier la sécurité de type.
Si vous construisez des agents, affinez des modèles ou si vous êtes simplement fatigué de faire défiler des accolades fermantes sans fin, il est temps de jeter un coup d'œil à TOON.