Hvert token, du sender til en LLM API, koster penge. Ikke meget pr. token — men når din prompt inkluderer et datasæt med 50 rækker brugerdata formateret som JSON, betaler du for hvert krøllet parentes, hvert gentaget nøglenavn, hvert anførselstegn. På et datasæt med 10 felter og 100 rækker brænder JSON omtrent 60–70% af sine tokens på strukturel støj. TOON blev bygget til at løse præcis dette. Denne artikel viser dig, hvordan du bruger @toon-format/toon til at skære dine prompt-tokenantal ned — nogle gange med mere end halvdelen — uden at miste nogen struktur modellen har brug for.
Sådan fungerer LLM-tokenprisfastsættelse
Modeller som GPT-4o og Claude opkræver pr. input-token og pr. output-token. OpenAI Tokenizer-værktøjet lader dig indsætte enhver tekst og se præcis, hvor mange tokens det koster. Groft sagt, 1 token ≈ 4 tegn engelsk tekst — men JSONs strukturelle tegn (anførselstegn, kolon, krøllede parenteser) tokeniseres ofte individuelt, så JSON-tunge prompts tokeniseres dårligere end almindelig prosa ved det samme tegnantal. Du betaler en strukturel skat på hver forespørgsel.
For en typisk SaaS-app, der kører tusindvis af forespørgsler om dagen med strukturerede data i hver prompt, lægger den skat sig hurtigt op. Arkitekturen bag store sprogmodeller betyder, at modellen genuint ikke har brug for al den formateringsstøj — den kan sagtens læse strukturerede data uden JSONs ordrigdom, så længe formatet er utvetydigt og velforklaret.
JSON vs. TOON — en konkret tokensammenligning
Lad os gøre det konkret. Her er et 10-rækkers brugerdatasæt 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-blok tokeniseres til omtrent 310–330 tokens. Her er de præcis samme data i TOON-tabelnotation:
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-versionen tokeniseres til omtrent 135–150 tokens — ca. 55% færre. I skala er det ikke en afrundingsfejl. Hvis du kører 10.000 sådanne forespørgsler om dagen til GPT-4o-priser, er forskellen mellem JSON og TOON i din prompt alene mærkbar.
Installation og konvertering af data i Node.js
Installer pakken fra npm. Den virker i Node.js 18+ og moderne browsere:
npm install @toon-format/toonImporten er en enkelt 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 → Afkod
Arbejdsgangen for at bruge TOON med en LLM API er fire trin. Hent dine data fra hvilken som helst kilde (database, REST API, CSV-fil), kode til TOON, byg din prompt, og afkod eventuelt struktureret TOON 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ønster virker for Anthropic Claude API — skift blot klienten ud. Promptstrukturen og TOON-kodningen er identisk uanset udbyder. Du kan tjekke den fulde OpenAI API-dokumentation for detaljer om autentificeringsopsætning og modelvalg.
Hvornår det har størst betydning
TOON er mest værdifuldt i disse scenarier:
- Store datasæt i konteksten. Hver gang du putter mere end ~20 rækker strukturerede data i en prompt, vil TOONs tabelnotation spare dig for betydelige tokens sammenlignet med JSON-arrays af objekter.
- Gentagne strukturerede forespørgsler. Hvis din applikation laver den samme form for forespørgsel tusindvis af gange om dagen (tænk: "analysér denne brugers aktivitet" med en brugerpost i hver prompt), er de kumulative besparelser væsentlige.
- Batchbehandlingsjobs. Scripts, der behandler tusindvis af poster gennem en LLM — klassificering, tagging, berigelse, opsummering — drager enormt fordel af det. Færre tokens pr. kald betyder hurtigere gennemstrømning og lavere omkostninger.
- Opgaver begrænset af kontekstvinduet. Når du forsøger at passe et stort datasæt ind i et 128k kontekstvindue ved siden af en lang systemprompt og few-shot-eksempler, har hvert token betydning. TOON lader dig passe flere rækker ind i det samme vindue.
- Omkostningsfølsomme produktions-API'er. Gratis-niveau-hobbyprojekter vil ikke mærke det. Produktionsapps, der betjener betalende brugere i skala, absolut vil.
Den ene forbehold: LLM'er skal kende formatet
TOON er ikke i nogen LLMs træningsdata på den måde, JSON er. Modellen har aldrig set en .toon-fil. Det betyder, at du skal inkludere en kort formatbeskrivelse i din systemprompt — ellers vil modellen enten afvise inputtet eller parse det forkert. Den gode nyhed er, at beskrivelsen er kort, og du betaler kun for det én gang pr. samtale eller forespørgsel.
En minimal systemprompt-tilføjelse, der fungerer pålideligt:
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 blok tilføjer omtrent 60 tokens til din systemprompt — en engangsomkostning, der hurtigt er genindtjent på ethvert datasæt større end 5–6 rækker. For applikationer, hvor du laver mange API-kald med TOON-data, er formatbeskrivelsens tokens amortiseret til næsten nul. Brug JSON til TOON til at konvertere dine data, før du bygger prompten, og TOON Formatter til at verificere, at det ser rigtigt ud.
Opsummering
Argumentet for TOON i LLM-arbejdsgange er ligetil: du betaler pr. token, strukturerede data i JSON er tokenineffektive, og TOON er en direkte løsning. Tabelnotationen alene skærer tokenforbruget med 50–60% på typiske rækkebaserede datasæt. npm-pakken — @toon-format/toon — er lille, API'et er to funktioner, og integrationen i et eksisterende API-kald er en femminutters opgave. Det eneste at huske er formatbeskrivelsen i din systemprompt — uden den gætter modellen. Med den får du en model, der læser dine data korrekt til halvdelen af tokenomkostningen. Start med JSON til TOON for at konvertere dine eksisterende data, valider det med TOON Validator, og brug TOON til JSON eller decode() til at konvertere strukturerede svar tilbage, når det er nødvendigt.