Cos'è TOON?

TOON
JSON
Ottimizzazione

Siamo stati tutti lì. Stai progettando un prompt per un Large Language Model (LLM) e devi passare dati strutturati. Raggiungi JSON. Dopotutto è lo standard del settore. Ma mentre guardi la tua finestra di contesto riempirsi di infinite parentesi graffe, chiavi ripetute e virgolette attorno a semplici numeri interi, inizi a chiederti: Esiste un modo migliore?

YAML offre leggibilità ma soffre di ambiguità. Il CSV è denso ma privo di gerarchia.

Inserisci TOON.

TOON è un formato di serializzazione dei dati che sembra una boccata d'aria fresca per gli sviluppatori e un linguaggio nativo per i modelli di intelligenza artificiale. Colma il divario tra leggibilità umana ed efficienza della macchina. Oggi approfondiamo la sintassi e i meccanismi di TOON per capire perché sta rapidamente diventando uno dei preferiti per lo scambio di dati ad alta efficienza.

La filosofia: semantica JSON, estetica YAML

Fondamentalmente, TOON condivide esattamente lo stesso modello dati di JSON. Se puoi rappresentarlo in JSON (primitive (stringhe, numeri, booleani, null), oggetti e array), puoi rappresentarlo in TOON. Tuttavia, la presentazione è radicalmente diversa.

TOON abbandona le parentesi graffe. Utilizza il rientro per rappresentare la gerarchia, proprio come YAML. Un oggetto semplice sembra pulito e accessibile:

A differenza di YAML, tuttavia, TOON è severo riguardo ai tipi. Non è possibile indovinare se "no" significa "falso" o la stringa "no". In TOON, le stringhe richiedono virgolette solo quando assolutamente necessarie, ad esempio quando contengono caratteri speciali, assomigliano a numeri o sono vuote. Se digiti "messaggio: Hello World", ottieni una stringa. Se digiti "count: 42", ottieni un numero.

id: 123 
nome: Ada 
attivo: vero 

Il potere degli array: lunghezza e tabelle

Dove TOON si distingue davvero dal gruppo è la gestione degli array. Questa è la "funzione killer" per l'ottimizzazione dei token.

Ogni array in TOON dichiara esplicitamente la sua lunghezza tra parentesi, come "items[3]". Questo potrebbe sembrare ridondante per un essere umano, ma per un LLM è un superpotere. Consente al modello di convalidare immediatamente la struttura e di rilevare il troncamento. Se il flusso si interrompe dopo due elementi ma l'intestazione ne prometteva tre, il parser sa che qualcosa è andato storto.

TOON offre effettivamente tre modi per gestire gli array, scegliendo automaticamente quello più efficiente:

  1. Primitive in linea: per semplici elenchi di numeri o stringhe, TOON lo mantiene compatto. tag[3]: admin,ops,dev
  1. Elenchi standard: per i tipi misti, utilizza una sintassi dell'elenco con trattino simile a YAML.
  1. Oggetti tabulari: questo è il punto di svolta.

Se disponi di un array di oggetti che condividono le stesse chiavi, un modello molto comune nei record del database, TOON si trasforma in un formato tabellare. invece di ripetere le chiavi per ogni singola riga, dichiara le chiavi una volta nell'intestazione.

Nell'esempio sopra, users[2]{id,name,role}: ci dice che abbiamo 2 righe e definisce lo schema. I dati seguono in una struttura simile a CSV. Ciò elimina il massiccio sovraccarico di token dovuto alla ripetizione di "id":, "name": e "role": per ogni utente.

utenti[2]{id,nome,ruolo}: 
1,Alice Amministratore,amministratore 
2, Bob Smith, utente 

Delimitatori ed efficienza dei token

Potresti notare l'uso delle virgole negli esempi sopra. TOON in realtà supporta tre delimitatori: virgole (predefinito), tabulazioni e barre verticali (|).

Perché è importante? Tokenizzazione.

In molti tokenizzatori LLM, una virgola seguita da una citazione potrebbe essere suddivisa in più token. Un carattere di tabulazione, tuttavia, spesso viene tokenizzato in modo molto pulito. TOON ti consente di cambiare delimitatori a livello di intestazione dell'array. Se utilizzi un delimitatore di tabulazione, spesso non è nemmeno necessario mettere tra virgolette le stringhe che contengono spazi, comprimendo ulteriormente i dati.

Il formato è abbastanza intelligente da gestire le "collisioni". Se i tuoi dati contengono il delimitatore attivo, TOON cita semplicemente quel valore specifico.

articoli[2]{sku,nome,qtà}: 
A1,Nome widget,2 
B2,Nome gadget,1 

Key Folding: Appiattimento della curva

Un'altra caratteristica che evidenzia l'attenzione di TOON all'efficienza è il Key Folding. Gli oggetti profondamente annidati di solito danno come risultato una "scala" di rientranza che divora spazio orizzontale e token.

Se hai una gerarchia profonda in cui gli oggetti intermedi non hanno fratelli, TOON può comprimerli in un percorso con notazione punto.

Invece di scrivere:

Puoi scrivere:

dati: 
metadati: 
elementi[2]: a,b 

Questa funzionalità, disponibile a partire dalla specifica v1.5, riduce significativamente il conteggio delle righe e i token di rientro. È importante sottolineare che questo è completamente reversibile. Quando decodifichi i dati con l'espansione del percorso abilitata, ricostruisce perfettamente la gerarchia profonda degli oggetti.

dati.metadati.elementi[2]: a,b 

Rigore e Sicurezza

Nonostante il suo aspetto conciso, TOON non è distratto dai dati. Aderisce a un rigido insieme di regole per il quoting e l'escape.

Le stringhe generalmente rimangono senza virgolette, il che è ottimo per la leggibilità. Tuttavia, TOON impone la quotazione per i casi limite per garantire l'integrità dei dati. Se una stringa assomiglia a un numero (ad esempio, "05" o "1e-6"), viene racchiusa tra virgolette per evitare che venga analizzata come un numero. Se una stringa è una parola riservata come "true" o "null", viene racchiusa tra virgolette.

Inoltre, TOON normalizza i numeri. Emette forme decimali canoniche, senza notazione scientifica o zeri finali nell'output, garantendo coerenza. Gestisce anche "BigInt" in modo sicuro; se un numero supera l'intervallo intero sicuro, viene serializzato come stringa per evitare perdite di precisione durante il trasporto.

Forme delle radici

Mentre la maggior parte di noi lavora con Root Objects, TOON è flessibile. Un documento non deve iniziare con una coppia chiave-valore. Supporta Root Array (che iniziano immediatamente con [N]:) o anche una singola Root Primitive. Questa parità con JSON significa che puoi scambiare TOON in quasi tutte le pipeline in cui JSON è attualmente utilizzato, a condizione che tu abbia il parser dall'altra parte.

Considerazioni finali

TOON non è solo "un altro formato". È uno strumento specializzato per un’era in cui i dati vengono consumati da modelli probabilistici tanto spesso quanto da codici deterministici. Combinando il rigido modello di dati di JSON con la densità di CSV e la leggibilità di YAML, risolve il problema specifico dell'ottimizzazione della finestra di contesto senza sacrificare la sicurezza del tipo.

Se stai costruendo agenti, mettendo a punto modelli o semplicemente sei stanco di scorrere infinite parentesi graffe di chiusura, è tempo di dare un'occhiata a TOON.