Hvert token du sender til et LLM API koster penger. Ikke mye per token — men når prompten din inkluderer et datasett med 50 rader brukerdata formatert som JSON, betaler du for hvert krøllet parentes, hvert gjentatt nøkkelnavn, hvert anførselstegn. På et datasett med 10 felt og 100 rader brenner JSON omtrent 60–70% av tokenene sine på strukturell støy. TOON ble bygget for å fikse akkurat dette. Denne artikkelen viser deg hvordan du bruker @toon-format/toon for å kutte prompt-tokenantallene dine — noen ganger med mer enn halvparten — uten å miste noen struktur modellen trenger.
Hvordan LLM-tokenprising fungerer
Modeller som GPT-4o og Claude fakturerer per inndata-token og per utdata-token. OpenAI Tokenizer-verktøyet lar deg lime inn hvilken som helst tekst og se nøyaktig hvor mange tokens det koster. Grovt sett, 1 token ≈ 4 tegn engelsk tekst — men JSONs strukturelle tegn (anførselstegn, kolon, krøllede parenteser) tokeniseres ofte individuelt, så JSON-tunge prompter tokeniseres dårligere enn vanlig prosa ved samme tegnantall. Du betaler en strukturell skatt på hver forespørsel.
For en typisk SaaS-app som kjører tusenvis av forespørsler per dag med strukturerte data i hver prompt, legger den skatten seg raskt opp. Arkitekturen bak store språkmodeller betyr at modellen genuint ikke trenger all den formateringsstøyen — den kan lese strukturerte data fint uten JSONs ordrikdom, så lenge formatet er utvetydig og godt forklart.
JSON vs. TOON — en konkret tokensammenligning
La oss gjøre dette konkret. Her er et 10-raders brukerdatasett i JSON:
[
{ "id": 1, "username": "alice_dev", "email": "[email protected]", "plan": "pro", "active": true },
{ "id": 2, "username": "bob_writer", "email": "[email protected]", "plan": "free", "active": true },
{ "id": 3, "username": "carol_ops", "email": "[email protected]", "plan": "pro", "active": false },
{ "id": 4, "username": "dan_qa", "email": "[email protected]", "plan": "team", "active": true },
{ "id": 5, "username": "eve_design", "email": "[email protected]", "plan": "pro", "active": true },
{ "id": 6, "username": "frank_sec", "email": "[email protected]", "plan": "team", "active": true },
{ "id": 7, "username": "grace_ml", "email": "[email protected]", "plan": "pro", "active": false },
{ "id": 8, "username": "henry_be", "email": "[email protected]", "plan": "free", "active": true },
{ "id": 9, "username": "iris_fe", "email": "[email protected]", "plan": "pro", "active": true },
{ "id": 10, "username": "jack_devrel", "email": "[email protected]", "plan": "team", "active": true }
]Den JSON-blokken tokeniseres til omtrent 310–330 tokens. Her er de nøyaktig samme dataene i TOON-tabellnotasjon:
users[10]{id,username,email,plan,active}:
1,alice_dev,[email protected],pro,true
2,bob_writer,[email protected],free,true
3,carol_ops,[email protected],pro,false
4,dan_qa,[email protected],team,true
5,eve_design,[email protected],pro,true
6,frank_sec,[email protected],team,true
7,grace_ml,[email protected],pro,false
8,henry_be,[email protected],free,true
9,iris_fe,[email protected],pro,true
10,jack_devrel,[email protected],team,trueTOON-versjonen tokeniseres til omtrent 135–150 tokens — ca. 55% færre. I skala er det ikke en avrundingsfeil. Hvis du kjører 10 000 slike spørringer per dag til GPT-4o-priser, er forskjellen mellom JSON og TOON i prompten alene merkbar.
Installasjon og konvertering av data i Node.js
Installer pakken fra npm. Den fungerer i Node.js 18+ og moderne nettlesere:
npm install @toon-format/toonImporten er en enkel destrukturering:
import { encode, decode } from '@toon-format/toon';
// Convert a JS array/object to TOON before sending to an LLM
const users = [
{ id: 1, username: 'alice_dev', email: '[email protected]', plan: 'pro', active: true },
{ id: 2, username: 'bob_writer', email: '[email protected]', plan: 'free', active: true },
// ... more rows
];
const toonData = encode(users, { indent: 2 });
console.log(toonData);
// users[2]{id,username,email,plan,active}:
// 1,alice_dev,[email protected],pro,true
// 2,bob_writer,[email protected],free,truePraktisk mønster: Hent → Kode → Prompt → Dekode
Arbeidsflyten for å bruke TOON med et LLM API er fire trinn. Hent dataene dine fra hvilken som helst kilde (database, REST API, CSV-fil), kode til TOON, bygg prompten din, og dekode eventuelt strukturert TOON tilbake ut fra modellens svar.
import { encode, decode } from '@toon-format/toon';
import OpenAI from 'openai';
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
async function analyseUsers(users) {
// Step 1: encode data to TOON
const toonData = encode(users, { indent: 2 });
// Step 2: build the prompt
const systemPrompt = [
'You analyse user datasets. Data is provided in TOON (Token-Optimised Object Notation).',
'TOON tabular format: name[count]{col1,col2,...}: followed by comma-separated rows, one per line.',
'Respond with plain prose unless asked to return data, in which case use TOON format.'
].join('\n');
const userPrompt = `Here is the user dataset:\n\n${toonData}\n\nWhich plan has the most active users?`;
// Step 3: call the API
const response = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [
{ role: 'system', content: systemPrompt },
{ role: 'user', content: userPrompt }
]
});
return response.choices[0].message.content;
}
// Step 4 (optional): if the model returns TOON, decode it back
const rawResponse = await analyseUsers(myUserArray);
try {
const structured = decode(rawResponse);
console.log('Structured result:', structured);
} catch {
console.log('Prose response:', rawResponse);
}Det samme mønsteret fungerer for Anthropic Claude API — bare bytt ut klienten. Promptstrukturen og TOON-kodingen er identisk uavhengig av leverandør. Du kan sjekke den fulle OpenAI API-dokumentasjonen for detaljer om autentiseringsoppsett og modellvalg.
Når det betyr mest
TOON lønner seg mest i disse scenariene:
- Store datasett i konteksten. Hver gang du putter mer enn ~20 rader strukturerte data i en prompt, vil TOONs tabellnotasjon spare deg for betydelige tokens sammenlignet med JSON-arrays av objekter.
- Gjentatte strukturerte spørringer. Hvis applikasjonen din gjør den samme formen for spørring tusenvis av ganger per dag (tenk: "analyser denne brukerens aktivitet" med en brukerpost i hver prompt), er de kumulative besparelsene vesentlige.
- Batchbehandlingsjobber. Skript som behandler tusenvis av poster gjennom en LLM — klassifisering, tagging, berikiing, oppsummering — drar enorm nytte av det. Færre tokens per kall betyr raskere gjennomstrømning og lavere kostnad.
- Kontekstvindu-begrensede oppgaver. Når du prøver å passe et stort datasett inn i et 128k kontekstvindu ved siden av en lang systemprompt og few-shot-eksempler, betyr hvert token. TOON lar deg passe inn flere rader i det samme vinduet.
- Kostnadssensitive produksjons-API-er. Gratis-nivå-hobbyprosjekter vil ikke merke det. Produksjonsapper som betjener betalende brukere i skala absolutt vil.
Det ene forbeholdet: LLM-er må kjenne formatet
TOON er ikke i noen LLMs treningsdata slik JSON er. Modellen har aldri sett en .toon-fil. Det betyr at du må inkludere en kort formatbeskrivelse i systemprompteten din — ellers vil modellen enten avvise inndataene eller feilparse dem. Den gode nyheten er at beskrivelsen er kort, og du betaler bare for den én gang per samtale eller forespørsel.
Et minimalt systemprompt-tillegg som fungerer pålitelig:
Data is provided in TOON (Token-Optimised Object Notation).
TOON syntax:
- Objects: {key:value,key2:value2} — keys are never quoted
- Arrays: [val1,val2,val3]
- Tabular: name[rowCount]{col1,col2,...}:
rowval1,rowval2,...
rowval1,rowval2,...
Parse each row by matching values to the column headers in order.
Strings containing commas are double-quoted.Den blokken legger til omtrent 60 tokens i systemprompteten din — en engangskostnad som raskt er inntjent på et hvilket som helst datasett større enn 5–6 rader. For applikasjoner der du gjør mange API-kall med TOON-data, er formatbeskrivelsens tokens amortisert til nær null. Bruk JSON til TOON for å konvertere dataene dine før du bygger prompten, og TOON Formatter for å verifisere at det ser riktig ut.
Oppsummering
Argumentet for TOON i LLM-arbeidsflyter er enkelt: du betaler per token, strukturerte data i JSON er tokenineffektive, og TOON er en direkte løsning. Tabellnotasjonen alene kutter tokenforbruket med 50–60% på typiske radebaserte datasett. npm-pakken — @toon-format/toon — er liten, API-et er to funksjoner, og integrasjonen i et eksisterende API-kall er en fem-minutters jobb. Det eneste å huske er formatbeskrivelsen i systemprompteten din — uten den gjetter modellen. Med den får du en modell som leser dataene dine riktig til halvparten av tokenkostnaden. Start med JSON til TOON for å konvertere eksisterende data, valider det med TOON Validator, og bruk TOON til JSON eller decode() for å konvertere strukturerte svar tilbake når det er nødvendig.