- Token-Oriented Object Notation
- Un format de sérialisation conçu pour réduire l’usage de tokens lors des entrées dans les LLM
- Représente des données JSON sans perte tout en garantissant à la fois efficacité en tokens et lisibilité
- Une structure optimisée pour les tableaux homogènes d’objets, qui supprime les clés répétées pour offrir 30 à 60 % de réduction des tokens
- Un format hybride combinant la structure basée sur l’indentation de YAML et le format tabulaire de CSV
- Pour des structures très imbriquées ou des données non homogènes, JSON reste plus efficace
- Inclut des informations structurelles explicites, permettant aux LLM de parser et valider les données de manière fiable
- La longueur des tableaux (
[N]) et la définition des champs ({id,name,role}) sont indiquées explicitement pour améliorer la compréhension de la structure
- Une syntaxe concise avec une conception grammaticale minimale qui supprime parenthèses, guillemets et ponctuation inutiles
- Représentation hiérarchique basée sur l’indentation, avec prise en charge de flux de données ligne par ligne proches du CSV
- Prise en charge de la conversion bidirectionnelle entre JSON et TOON via un outil CLI
- Propose des options comme la détection automatique du format, le choix du séparateur (
,, \t, |) et l’affichage de statistiques sur les économies de tokens
- Composition de l’API
encode() effectue la sérialisation JSON, decode() la désérialisation
- Des options permettent de définir l’indentation, le séparateur et le marqueur de longueur (
#)
- Résultats de benchmark : en moyenne, 21 à 60 % de tokens en moins par rapport à JSON, avec une précision de requête LLM de 73,9 %
- Légèrement plus volumineux que CSV, mais améliore la fiabilité des LLM grâce aux capacités de validation structurelle
- Règles du format
- Les chaînes ne sont mises entre guillemets qu’en cas de besoin, avec guillemetage automatique si elles contiennent un séparateur
- Les nombres, booléens, dates, etc. sont convertis dans des formes adaptées aux LLM
- Implémentations dans plusieurs langages disponibles
- Officielles : Python, Rust (en cours de développement)
- Communauté : Go, Java, Swift, C++, .NET, Ruby, etc.
3 commentaires
J’utilise le function calling, je vais devoir le tester.
Sur quelques exemples, il semble que le format JSON réduise bien davantage le nombre de tokens une fois les espaces supprimés... Je ne suis pas encore convaincu. Je me demande si c’est vraiment un format qui vaut la peine d’être utilisé sérieusement.
Comparaison de la précision selon les modèles
Si l’on se fie uniquement aux résultats du benchmark, on dirait qu’il n’y a aucune raison de ne pas l’utiliser, puisque la consommation de tokens diminue sans baisse de précision.