Aller au contenu principal

TOON - Token-Oriented Object Notation

TOON (Token-Oriented Object Notation) est un format de sérialisation compact, lisible par l'homme et conscient du schéma, conçu spécifiquement pour les prompts LLM. Il permet de réduire significativement le nombre de tokens utilisés tout en restant lisible.

Qu'est-ce que TOON ?

TOON est une alternative compacte à JSON qui :

  • Réduit les tokens : Jusqu'à 70% de tokens en moins par rapport à JSON
  • Reste lisible : Format lisible par l'homme
  • Conscient du schéma : Le schéma est intégré dans le format
  • Optimisé pour les LLM : Conçu spécifiquement pour les prompts d'IA

Format de base

TOON utilise une syntaxe compacte où le schéma est défini dans l'en-tête :

users[2]{id,name,role}:
1,Alice,admin
2,Bob,user

Au lieu de JSON :

{
"users": [
{ "id": 1, "name": "Alice", "role": "admin" },
{ "id": 2, "name": "Bob", "role": "user" }
]
}

Exemple interactif

Essayez de convertir du JSON en TOON :

Convertisseur JSON vers TOON

Avantages de TOON

Réduction des tokens

TOON peut réduire jusqu'à 70% le nombre de tokens par rapport à JSON, ce qui est crucial pour les prompts LLM où chaque token compte.

Lisibilité

Même s'il est compact, TOON reste lisible par l'homme, ce qui facilite le débogage et la maintenance.

Optimisé pour les LLM

TOON est conçu spécifiquement pour être utilisé avec les LLM. Le format est auto-documenté et les modèles comprennent naturellement la structure.

Utilisation avec les LLM

Pour utiliser TOON avec les LLM, il est recommandé de :

  1. Montrer le format plutôt que de le décrire
  2. Utiliser des blocs de code avec la syntaxe ```toon
  3. Montrer le template d'en-tête quand on demande aux modèles de générer du TOON

Exemple de prompt

Voici un exemple de données au format TOON :

users[2]{id,name,role}:
1,Alice,admin
2,Bob,user

Génère maintenant une liste de 3 produits au format TOON avec les champs : id, name, price, category

Utilisation avec des agents

TOON est particulièrement adapté pour les systèmes d'agents qui communiquent avec des LLM. Le diagramme suivant illustre le flux d'utilisation :

Avantages pour les agents

  1. Réduction des coûts : Moins de tokens = coûts d'API réduits
  2. Latence améliorée : Moins de données à transmettre = réponses plus rapides
  3. Meilleure compréhension : Le format auto-documenté aide le LLM à mieux comprendre la structure
  4. Parsing simplifié : Les bibliothèques TOON facilitent la conversion bidirectionnelle

Exemple de workflow agent

import { encode, decode } from '@toon-format/toon';

// Agent collecte des données
const userData = {
users: [
{ id: 1, name: 'Alice', role: 'admin' },
{ id: 2, name: 'Bob', role: 'user' }
]
};

// Conversion en TOON pour le prompt
const toonData = encode(userData);
const prompt = `Voici les utilisateurs au format TOON:\n\`\`\`toon\n${toonData}\n\`\`\`\nAnalyse-les et génère un rapport.`;

// LLM répond en TOON
const llmResponse = `products[2]{id,name,price}:
1,Laptop,999
2,Mouse,29`;

// Agent parse la réponse
const products = decode(llmResponse);
console.log(products); // { products: [{ id: 1, name: 'Laptop', price: 999 }, ...] }

Installation et utilisation

CLI (sans installation)

# Convertir JSON en TOON
npx @toon-format/cli input.json -o output.toon

# Depuis stdin
echo '{"name": "Ada", "role": "dev"}' | npx @toon-format/cli

Bibliothèque TypeScript

npm install @toon-format/toon
import { encode } from '@toon-format/toon'

const data = {
users: [
{ id: 1, name: 'Alice', role: 'admin' },
{ id: 2, name: 'Bob', role: 'user' }
]
}

console.log(encode(data))
// users[2]{id,name,role}:
// 1,Alice,admin
// 2,Bob,user

Cas d'usage

TOON est particulièrement utile pour :

  • Prompts LLM : Réduire les coûts de tokens
  • Données structurées : Transmettre des données complexes de manière compacte
  • APIs : Réponses plus légères
  • Stockage : Format compact pour les données

Ressources

Conclusion

TOON est un format innovant qui combine compacité et lisibilité, parfait pour les interactions avec les LLM. Il permet de réduire significativement les coûts de tokens tout en gardant un format lisible et maintenable.