Come utilizzare TOON con LLM

LLM
Ingegneria rapida

Se hai mai incollato un array JSON di grandi dimensioni in ChatGPT o Claude, probabilmente hai sentito il dolore della chiusura della finestra di contesto. JSON è fantastico per le API Web, ma per i Large Language Models (LLM) è incredibilmente dispendioso. La ripetizione di nomi di campo come "id":, "name": e "timestamp": per ogni singolo record non è solo ridondante; brucia token che costano denaro reale e prezioso spazio di contesto.

È qui che TOON (Table Object Notation) brilla. Non è solo un formato dati; è una strategia per ottimizzare le interazioni LLM. Eliminando la sintassi di JSON e aggiungendo intestazioni di struttura esplicite, TOON ti consente di passare più dati ai tuoi modelli e ottenere in cambio output strutturati più affidabili.

L'economia dei token di TOON

Perché preoccuparsi di cambiare formato? Il calcolo è semplice. In un array di oggetti JSON standard, lo schema viene ripetuto per ogni riga. Se hai un elenco di 50 utenti, pagherai per i nomi dei campi 50 volte.

TOON elimina questa ridondanza dichiarando lo schema una volta nell'intestazione. I dati seguono in un formato denso e semplificato. In pratica, ciò si traduce in genere in una riduzione del 30-60% nell'utilizzo dei token per gli array uniformi rispetto al JSON formattato. Quando hai a che fare con finestre di contesto di grandi dimensioni o chiamate API a volume elevato, tale efficienza si traduce direttamente in costi inferiori e minore latenza.

Invio di dati: la regola "Mostra, non dire".

Quando hai bisogno di un LLM per analizzare i dati, la tua strategia tempestiva è cruciale. I principianti spesso scrivono lunghi paragrafi che spiegano il formato dei dati. Con TOON, non è necessario farlo.

Gli LLM sono motori di corrispondenza dei modelli. Capiscono intuitivamente TOON perché sembra un ibrido di YAML e CSV, formati che hanno visto miliardi di volte durante la formazione.

Per inviare i dati, è sufficiente racchiuderli in un blocco di codice recintato. Puoi etichettarlo "toon", ma anche se l'evidenziatore della sintassi del modello non lo supporta ufficialmente, il modello ne comprende immediatamente la struttura.

Esempio di input

Invece di descrivere lo schema, fornisci semplicemente il blocco:

L'intestazione users[3]{id,name,role,lastLogin} dice al modello tutto ciò che deve sapere: il tipo di entità, il conteggio (3 righe) e l'ordine dei campi. Il rientro gestisce la gerarchia. Questa natura "autodocumentante" libera la tua richiesta di concentrarsi sull'attività logica effettiva piuttosto che sulle istruzioni di analisi della sintassi.

Ecco il registro delle attività dell'utente. I dati sono in formato TOON (rientro di 2 spazi, intestazioni esplicite). 

utenti[3]{id,nome,ruolo,ultimoLogin}: 
1,Alice,admin,2025-01-15T10:30:00Z 
2,Bob,utente,2025-01-14T15:22:00Z 
3,Charlie,utente,2025-01-13T09:45:00Z 

Compito: analizzare i registri e identificare quali utenti non hanno effettuato l'accesso nelle ultime 24 ore. 

Generazione di output affidabile

Ottenere un LLM per leggere i dati è facile; riuscire a generare dati strutturati validi è la parte difficile. Le modelle adorano avere allucinazioni, troncare JSON o dimenticare di chiudere le parentesi graffe.

TOON aggiunge un livello di sicurezza attraverso la sintassi dell'intestazione, in particolare il conteggio "[N]". Quando chiedi a un modello di produrre TOON, gli stai chiedendo di impegnarsi in una struttura prima di generare i dati.

Richiesta di generazione

Per ottenere i migliori risultati, fornisci il formato di intestazione previsto e indica al modello di riempire le righe.

Chiedendo al modello di calcolare "[N]", si forza un processo di "catena di pensiero" in cui il modello deve pianificare la dimensione dell'output. Questo vincolo apparentemente piccolo riduce significativamente la probabilità che il modello venga interrotto a metà di un elenco.

Attività: restituire un elenco di utenti attivi con il ruolo "utente". 
Formato: usa TOON. Imposta il valore [N] nell'intestazione in modo che corrisponda al numero esatto di righe generate. 

Formato previsto: 
utenti[N]{id,nome,ruolo,ultimoLogin}: 

Convalida con modalità rigorosa

Quando ricevi la risposta dal LLM, non dovresti semplicemente fidarti di essa. È qui che la modalità rigorosa della libreria TOON diventa un superpotere per le applicazioni di produzione.

Se stai utilizzando la libreria TypeScript, la decodifica con la modalità rigorosa verifica che le righe generate corrispondano al conteggio delle intestazioni:

Ciò consente di rilevare immediatamente a livello di codice gli output del modello "pigro" o i troncamenti di rete, anziché scoprire dati errati a valle dell'applicazione.

"dattiloscritto". importa {decode} da '@toon-format/toon';

prova { // Se il modello dice [5] ma fornisce 4 righe, viene generato un errore. const data = decode(modelOutput, { strict: true }); console.log('Dati validi ricevuti:', data); } cattura (errore) { console.error('Rilevata allucinazione o troncamento del modello:', error.message); }

Ottimizzazione avanzata: il trucco delle schede

Se sei ossessionato dall'ottimizzazione (e nel mondo dei LLM, probabilmente dovresti esserlo), puoi ottenere ancora più efficienza scegliendo saggiamente i delimitatori.

Le virgole sono standard, ma le tabulazioni (\t) sono spesso rappresentate come un singolo token in molti vocabolari dei tokenizzatori. Inoltre, le schede appaiono raramente all'interno dei campi di testo naturali, il che riduce la necessità di caratteri di escape (come racchiudere le stringhe tra virgolette).

Puoi codificare i tuoi dati utilizzando le schede prima di inviarli al modello:

Ricorda solo di informare il modello nel prompt: "I dati sono TOON separati da tabulazioni." Questo crea una rappresentazione ipercompatta che è incredibilmente facile da analizzare e generare per il modello.

"dattiloscritto". const toonPrompt = encode(data, { delimitatore: '\t' });

Un esempio di flusso di lavoro completo

Diamo un'occhiata a uno scenario reale: filtraggio dei log di sistema. Desideri inviare log non elaborati al modello e ottenere un elenco strutturato di errori.

Il suggerimento:

Il risultato del modello:

Registri di sistema in formato TOON (separati da tabulazioni): 

eventi[4]{id,level,message,timestamp}: 
1,errore,Timeout della connessione,2025-01-15T10:00:00Z 
2,avviso,Query lenta,2025-01-15T10:05:00Z 
3,informazioni,Accesso utente,2025-01-15T10:10:00Z 
4,errore,Errore database025-01-15T10:15:00Z 

Compito: estrarre tutti gli eventi con livello 'errore'. Restituisce il risultato come TOON valido con un conteggio di intestazione aggiornato. 

Il risultato:

"cartone animato". eventi[2]{id,livello,messaggio,timestamp}: 1,errore,Timeout della connessione,2025-01-15T10:00:00Z 4,errore,Errore del database,2025-01-15T10:15:00Z

Il modello ha filtrato correttamente l'elenco e, soprattutto, ha aggiornato l'intestazione in "events[2]". Decodificando questa risposta, ottieni un array pulito e indipendente dai tipi, pronto per la logica dell'applicazione.

Riepilogo

TOON colma il divario tra leggibilità umana ed efficienza della macchina. Rispetta i vincoli di costo dei LLM fornendo al contempo la struttura necessaria per un robusto sviluppo di software.

  1. Mantieni le dimensioni ridotte: utilizza 2-5 righe nei tuoi esempi; il modello si generalizzerà.
  1. Sii esplicito: definisci chiaramente le intestazioni in modo che il modello conosca lo schema.
  1. Convalida rigorosamente: utilizza i metadati del formato per individuare gli errori di generazione.

Allontanandoti da JSON per i tuoi payload tempestivi, non stai solo risparmiando token, ma stai costruendo una pipeline AI più affidabile.