Formatdokumentasjon elsker leketøyseksempler — tre rader, falske navn, fem kolonner. Det er fint for å lære syntaksen, men det forteller deg ikke om et format håndterer formene du faktisk jobber med på jobb. Denne artikkelen hopper over leketøyene. Nedenfor er datamønstrene som konstant dukker opp i virkelig backend-utvikling — produktkataloger, revisjonslogger, metriktabeller, konfigurasjonsobjekter, finansielle transaksjoner — vist i både JSON og TOON side om side, slik at du kan se nøyaktig hva du sparer, og der TOON tjener sin plass. Alle data er realistiske; ingen foo, bar eller plassholdernavn i sikte. For bakgrunn om selve formatet, se TOON-syntaksveiledningen.
E-handel produktkatalog
Et produktarray er sannsynligvis det mest vanlige utviklere sender til en LLM — "klassifiser disse elementene", "finn den billigste i hver kategori", "merk alt som er utsolgt med en pris over $50". Her er et realistisk katalogutsnitt i JSON først:
[
{"id":"PRD-1041","name":"Logitech MX Master 3S","sku":"LOG-MX3S-GRY","price":99.99,"inStock":true,"category":"Peripherals"},
{"id":"PRD-1042","name":"Samsung 970 EVO Plus 1TB","sku":"SAM-970P-1TB","price":89.99,"inStock":true,"category":"Storage"},
{"id":"PRD-1043","name":"Keychron K2 Pro","sku":"KEY-K2P-BLK","price":119.99,"inStock":false,"category":"Peripherals"},
{"id":"PRD-1044","name":"Elgato Stream Deck MK.2","sku":"ELG-SD-MK2","price":149.99,"inStock":true,"category":"Streaming"},
{"id":"PRD-1045","name":"WD Blue 2TB HDD","sku":"WD-BLU-2TB","price":54.99,"inStock":true,"category":"Storage"},
{"id":"PRD-1046","name":"Razer DeathAdder V3","sku":"RZR-DAV3-BLK","price":69.99,"inStock":true,"category":"Peripherals"},
{"id":"PRD-1047","name":"Focusrite Scarlett Solo","sku":"FOC-SC-SOLO","price":119.99,"inStock":false,"category":"Audio"}
]Nå den samme katalogen i TOON. Kolonneoverskrifter erklæres én gang; hver rad er bare verdier:
products[7]{id,name,sku,price,inStock,category}:
PRD-1041,Logitech MX Master 3S,LOG-MX3S-GRY,99.99,true,Peripherals
PRD-1042,Samsung 970 EVO Plus 1TB,SAM-970P-1TB,89.99,true,Storage
PRD-1043,Keychron K2 Pro,KEY-K2P-BLK,119.99,false,Peripherals
PRD-1044,Elgato Stream Deck MK.2,ELG-SD-MK2,149.99,true,Streaming
PRD-1045,WD Blue 2TB HDD,WD-BLU-2TB,54.99,true,Storage
PRD-1046,Razer DeathAdder V3,RZR-DAV3-BLK,69.99,true,Peripherals
PRD-1047,Focusrite Scarlett Solo,FOC-SC-SOLO,119.99,false,AudioBrukeraktivitet / revisjonslogg
Revisjonslogger er akkurat den typen data du vil sende til en LLM med en prompt som "oppsummer hva denne brukeren gjorde den siste timen" eller "merk mistenkelige tilgangsmønstre". De er høy-volum, repetitive, og kolonnenavnene er identiske på hver rad. Revisjonsspor er også det første som sprenger kontekstvinduet ditt når du limer dem inn som JSON. Her er en realistisk 9-raders logg i TOON:
auditLog[9]{userId,action,resourceId,resourceType,timestamp,ip}:
U-8821,LOGIN,,session,2024-11-14T08:02:11Z,203.0.113.47
U-8821,VIEW,DOC-4490,document,2024-11-14T08:03:44Z,203.0.113.47
U-8821,DOWNLOAD,DOC-4490,document,2024-11-14T08:03:51Z,203.0.113.47
U-8821,VIEW,DOC-4491,document,2024-11-14T08:05:02Z,203.0.113.47
U-8821,EDIT,DOC-4491,document,2024-11-14T08:07:39Z,203.0.113.47
U-8821,SHARE,DOC-4491,document,2024-11-14T08:08:12Z,203.0.113.47
U-8821,VIEW,USR-0055,user_profile,2024-11-14T08:09:58Z,203.0.113.47
U-8821,VIEW,USR-0056,user_profile,2024-11-14T08:10:03Z,203.0.113.47
U-8821,LOGOUT,,session,2024-11-14T08:11:22Z,203.0.113.47Tilsvarende JSON ville gjenta "userId", "action", "resourceId", "resourceType", "timestamp" og "ip" på alle ni rader — 54 nøkkelgjentakelser for seks feltnavn. I TOON fremgår de nøyaktig én gang. For revisjonslogger med hundrevis av oppføringer er det forskjellen mellom å passe dataene i prompten din og ikke gjøre det.
API-hastighetsbegrensning / metrikkdata
Driftsmetrikker — latenspersentiler, feilrater, gjennomstrømning — er en annen naturlig passform for TOON. Dataene er talltunge og perfekt tabellformede. Du kan sende dette til en LLM for å spørre "hvilke endepunkter har p99-latens over 500ms?" eller "der øker feilraten?" Dette er formen på data du typisk ville se komme ut av en Node.js-metrikkpipeline eller et Prometheus-skrap:
apiMetrics[8]{endpoint,method,p50ms,p99ms,errorRate,callsPerDay}:
/api/v2/products,GET,42,118,0.002,84200
/api/v2/products/:id,GET,38,95,0.001,31500
/api/v2/orders,POST,210,880,0.015,4800
/api/v2/orders/:id,GET,55,201,0.003,19200
/api/v2/cart,PUT,95,430,0.008,22100
/api/v2/search,GET,310,1240,0.021,61000
/api/v2/users/:id,GET,29,88,0.001,9700
/api/v2/checkout,POST,540,2100,0.034,3200LLM-en kan umiddelbart svare på spørsmål om denne tabellen uten noen kontekst-overhead. Legg merke til at /api/v2/search og /api/v2/checkout begge skiller seg ut med høy p99 og forhøyede feilrater — akkurat det typen mønster en LLM kan identifisere umiddelbart når du presenterer dataene tydelig.
Nestet konfigurasjonsobjekt
TOON håndterer mer enn tabelldata. For strukturerte objekter — den typen ting du ville finne i en apps kjøretidskonfigurasjon — bruker TOON en inline-objektnotasjon med nestet struktur. Tenk på dette som et motstykke til serialiseringsformater som TOML eller YAML, men slankere. Her er en realistisk appkonfigurasjon som viser serverinnstillinger, databaseinnstillinger og funksjonsflagger:
{
"server": {
"host": "0.0.0.0",
"port": 8080,
"tlsEnabled": true,
"requestTimeoutMs": 30000
},
"database": {
"host": "db.internal.example.com",
"port": 5432,
"name": "commerce_prod",
"poolSize": 20,
"sslRequired": true
},
"features": {
"newCheckoutFlow": true,
"recommendationEngine": false,
"darkMode": true,
"betaDashboard": false
}
}Den samme konfigurasjonen i TOON-objektnotasjon — nøkler er ikke sitert, nesting bruker inline-parenteser:
{
server:{host:0.0.0.0,port:8080,tlsEnabled:true,requestTimeoutMs:30000},
database:{host:db.internal.example.com,port:5432,name:commerce_prod,poolSize:20,sslRequired:true},
features:{newCheckoutFlow:true,recommendationEngine:false,darkMode:true,betaDashboard:false}
}database-blokken ovenfor er host:db.internal.example.com fint som det er — ingen anførselstegn nødvendig fordi verdien ikke inneholder noen av dem. Hvis en verdi gjør inneholder et komma eller kolon, omgir du det med doble anførselstegn: dsn:"host:5432,sslmode=require".Finansielle transaksjoner
Finansielle data er et annet høy-verdi LLM-brukstilfelle: svindelsignaler, avstemmingskontroller, kategorisering. Blandingen av streng-ID-er, numeriske beløp, valutakoder, status-enum-er og tidsstempler kartlegges rent til TOONs tabellformat. Her er et realistisk transaksjonsutsnitt:
transactions[9]{txId,amount,currency,from,to,status,timestamp}:
TXN-88201,1250.00,GBP,ACC-1041,ACC-2209,settled,2024-11-14T09:15:00Z
TXN-88202,89.99,USD,ACC-3301,ACC-0047,settled,2024-11-14T09:16:34Z
TXN-88203,4500.00,EUR,ACC-2001,ACC-5512,pending,2024-11-14T09:18:02Z
TXN-88204,22.50,USD,ACC-0099,ACC-3301,settled,2024-11-14T09:21:47Z
TXN-88205,750.00,GBP,ACC-5512,ACC-1041,failed,2024-11-14T09:25:10Z
TXN-88206,12000.00,USD,ACC-7700,ACC-2001,pending,2024-11-14T09:28:55Z
TXN-88207,310.00,EUR,ACC-1041,ACC-0099,settled,2024-11-14T09:31:22Z
TXN-88208,55.00,USD,ACC-3301,ACC-7700,settled,2024-11-14T09:33:40Z
TXN-88209,8900.00,GBP,ACC-2209,ACC-5512,flagged,2024-11-14T09:37:15ZLim dette inn i en prompt ved siden av "merk alle transaksjoner over £5 000 eller med status flagged eller failed", og modellen vil svare på sekunder. TOON-representasjonen er kompakt nok til at du komfortabelt ville passe inn flere hundre rader i en enkelt prompt uten å treffe kontekstgrenser på de fleste modeller.
Kombinere tabelldata og objektdata i ett dokument
Her er noe verken JSON eller CSV håndterer tydelig: et dokument som har både en metadataoverskrift (et enkelt konfigurasjonsobjekt) og en datatabell i samme payload. Tenk på en rapport med en kontekstblokk øverst — hvem som genererte den, hvilken tidsperiode den dekker, hvilke filtre som ble brukt — etterfulgt av de faktiske dataradene. I JSON måtte du pakke alt inn i et konvoluttobjekt med en "meta"-nøkkel og en "rows"-nøkkel, noe som legger til enda et nestenivå. CSV kan ikke gjøre det i det hele tatt. TOON håndterer det naturlig:
{report:weekly_sales,generatedAt:2024-11-14T10:00:00Z,region:EMEA,currency:EUR,generatedBy:analytics-service}
salesByRep[6]{repId,repName,deals,revenue,avgDealSize,quota}:
REP-101,Marta Kowalski,14,84200.00,6014.28,75000
REP-102,James Okafor,11,61500.00,5590.90,75000
REP-103,Yuki Tanaka,18,102400.00,5688.88,90000
REP-104,Sofia Andersen,9,47800.00,5311.11,75000
REP-105,Liam Byrne,16,93100.00,5818.75,90000
REP-106,Priya Nair,21,118600.00,5647.61,100000Den første linjen er et TOON-objekt — rapportens metadata. Den tomme linjen skiller det fra tabelldelen som følger. Et enkelt decode()-kall fra @toon-format/toon returnerer begge deler. Du kan sende hele dette dokumentet til en LLM med et spørsmål som "hvilke representanter er på vei til å nå kvoten?" og den har alt den trenger: rapport-konteksten og dataene, i én kompakt payload.
Bruk av npm-pakken
Alle disse eksemplene kan kodes og dekodes programmatisk. @toon-format/toon-pakken er referanseimplementeringen. Installer den i et hvilket som helst Node.js- eller nettleserprosjekt:
npm install @toon-format/toonKode deretter dataene dine før du sender dem til et LLM API, og dekode svaret på vei tilbake:
import { encode, decode } from '@toon-format/toon';
const transactions = [
{ txId: 'TXN-88201', amount: 1250.00, currency: 'GBP', from: 'ACC-1041', to: 'ACC-2209', status: 'settled', timestamp: '2024-11-14T09:15:00Z' },
{ txId: 'TXN-88202', amount: 89.99, currency: 'USD', from: 'ACC-3301', to: 'ACC-0047', status: 'settled', timestamp: '2024-11-14T09:16:34Z' },
// ...more rows
];
// Compact TOON string — send this to your LLM prompt
const toonPayload = encode(transactions);
// When the LLM returns TOON, decode back to a JS array
const decoded = decode(toonPayload);
console.log(decoded[0].status); // "settled"Oppsummering
Mønstrene ovenfor — produktkataloger, revisjonslogger, metriktabeller, konfigurasjonsobjekter, finansielle data, blandede overskrift+tabell-dokumenter — dekker det store flertallet av strukturerte data utviklere faktisk sender til LLM-er. TOON håndterer dem alle godt, og tokenbesparelsene er betydelige i alle tilfeller. Kjerneregelen er enkel: JSON gjentar nøkkelnavn på hver rad; TOON gjør det ikke. For tabellformert dataserialisering som skal inn i et LLM-kontekstvindu, er den gjentakelsen rent sløseri.
Bruk JSON til TOON-konvertereren for å konvertere eksisterende JSON til TOON. Bruk TOON til JSON-konvertereren den andre veien etter at en LLM returnerer TOON. TOON Formatter renser og validerer TOON-strenger, og TOON Validator fanger syntaksfeil før de når pipelinen din. npm-pakken @toon-format/toon håndterer koding og dekoding på to kodelinjer — alle eksemplene ovenfor fungerer ut av boksen.