Bir LLM API'sine gönderdiğiniz her token para maliyeti taşır. Token başına çok fazla değil — ama isteğiniz JSON olarak biçimlendirilmiş 50 satır kullanıcı verisi içeren bir veri kümesi içerdiğinde, her süslü parantez, tekrarlanan her anahtar adı, her tırnak işareti için ödeme yapıyorsunuz. 10 alan ve 100 satırlık bir veri kümesinde, JSON tokenlarının yaklaşık %60-70'ini yapısal gürültüye harcıyor. TOON tam da bunu düzeltmek için oluşturuldu. Bu makale @toon-format/toon'u nasıl kullanacağınızı gösteriyor — bazen yarısından fazla azaltarak — modelin ihtiyaç duyduğu hiçbir yapıyı kaybetmeden istek token sayınızı düşürmek için.

LLM Token Fiyatlandırması Nasıl Çalışır

GPT-4o ve Claude gibi modeller girdi tokeni ve çıktı tokeni başına ücret alır. OpenAI Tokenizer aracı herhangi bir metni yapıştırmanıza ve tam olarak kaç token maliyeti olduğunu görmenize olanak tanır. Kabaca, 1 token ≈ 4 karakter İngilizce metin — ancak JSON'ın yapısal karakterleri (tırnaklar, iki nokta üst üste, süslü parantezler) genellikle ayrı ayrı tokenize edilir, bu nedenle JSON ağırlıklı istemler aynı karakter sayısındaki düz metinden daha kötü tokenize edilir. Her istekte yapısal bir vergi ödüyorsunuz.

Her istemde yapılandırılmış verilerle günde binlerce istek çalıştıran tipik bir SaaS uygulaması için, bu vergi hızla artıyor. Büyük dil modellerinin mimarisi, modelin aslında tüm bu biçimlendirme gürültüsüne ihtiyaç duymadığı anlamına geliyor — format belirsiz olmadığı ve iyi açıklandığı sürece JSON'ın ayrıntısı olmadan yapılandırılmış verileri rahatlıkla okuyabilir.

JSON vs TOON — Somut Bir Token Karşılaştırması

Bunu somutlaştıralım. İşte JSON'da 10 satırlık bir kullanıcı veri kümesi:

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 }
]

Bu JSON bloğu yaklaşık 310–330 token'a tokenize edilir. İşte TOON tablo notasyonunda tamamen aynı veri:

text
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,true

TOON versiyonu yaklaşık 135–150 token'a tokenize edilir — yaklaşık %55 daha az. Ölçekte bu bir yuvarlama hatası değildir. GPT-4o fiyatlandırmasıyla günde 10.000 böyle sorgu çalıştırıyorsanız, sadece isteğinizdeki JSON ve TOON arasındaki fark önemlidir.

Token tasarrufu sütunlarla değil satırlarla ölçeklenir. Veri kümenizde ne kadar çok satır olursa kazanç o kadar büyük olur — çünkü TOON sütun başlığı maliyetini bir kez öder, JSON ise anahtar adı maliyetini her tek satırda öder. 100 satırlık bir tabloda TOON bu 10 satırlık örnekle yaklaşık aynı yüzdeyi tasarruf eder.

Node.js'te Yükleme ve Veri Dönüştürme

Paketi npm'den yükleyin. Node.js 18+ ve modern tarayıcılarda çalışır:

bash
npm install @toon-format/toon

İçe aktarma tek bir ayrıştırmadır:

js
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,true

Pratik Desen: Getir → Kodla → İstem Oluştur → Çöz

Bir LLM API'siyle TOON kullanma iş akışı dört adımdan oluşur. Verilerinizi herhangi bir kaynaktan (veritabanı, REST API, CSV dosyası) getirin, TOON'a kodlayın, isteminizi oluşturun ve isteğe bağlı olarak modelin yanıtından herhangi bir yapılandırılmış TOON'u geri çözün.

js
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);
}

Aynı desen Anthropic Claude API'si için de çalışır — sadece istemciyi değiştirin. İstem yapısı ve TOON kodlaması sağlayıcıdan bağımsız olarak aynıdır. Kimlik doğrulama kurulumu ve model seçimi ayrıntıları için tam OpenAI API belgelerini inceleyebilirsiniz.

En Çok Ne Zaman İşe Yarar

TOON bu senaryolarda en çok karşılık verir:

  • Bağlamda büyük veri kümeleri. Bir isteme ~20'den fazla satır yapılandırılmış veri koyduğunuzda, TOON tablo notasyonu nesne dizilerine göre önemli ölçüde token tasarrufu sağlar.
  • Tekrarlanan yapılandırılmış sorgular. Uygulamanız günde binlerce kez aynı şekilde sorgu yapıyorsa (her istemde bir kullanıcı kaydı ile "bu kullanıcının aktivitesini analiz et" gibi), kümülatif tasarruf önemlidir.
  • Toplu işlem işleri. Binlerce kaydı bir LLM üzerinden işleyen betikler — sınıflandırma, etiketleme, zenginleştirme, özetleme — büyük ölçüde fayda sağlar. Çağrı başına daha az token, daha hızlı throughput ve daha düşük maliyet demektir.
  • Bağlam penceresi kısıtlı görevler. Uzun bir sistem istemi ve az sayıda örnek ile birlikte büyük bir veri kümesini 128k bağlam penceresine sığdırmaya çalışırken her token önemlidir. TOON aynı pencereye daha fazla satır sığdırmanızı sağlar.
  • Maliyet hassasiyetli üretim API'leri. Ücretsiz katman hobi projeleri fark etmez. Ölçekte ödeme yapan kullanıcılara hizmet veren üretim uygulamaları kesinlikle fark eder.

Bir Uyarı: LLM'lerin Formatı Bilmesi Gerekir

TOON, JSON'ın olduğu gibi herhangi bir LLM'nin eğitim verisinde yer almıyor. Model hiç .toon dosyası görmedi. Bu, sistem isteminize kısa bir format açıklaması eklemeniz gerektiği anlamına geliyor — aksi takdirde model ya girdiyi reddeder ya da yanlış ayrıştırır. İyi haber, açıklamanın kısa olması ve konuşma veya istek başına yalnızca bir kez ödemesidir.

Güvenilir biçimde çalışan minimal bir sistem istemi eklentisi:

text
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.

Bu blok sistem isteminize yaklaşık 60 token ekler — 5-6 satırdan büyük herhangi bir veri kümesinde hızla geri kazanılan tek seferlik bir maliyet. TOON verisiyle çok sayıda API çağrısı yaptığınız uygulamalarda, format açıklama tokenları neredeyse sıfıra amortize edilir. İstemi oluşturmadan önce verilerinizi dönüştürmek için JSON'dan TOON'a'yı kullanın ve doğru göründüğünü doğrulamak için TOON Biçimleyici'yi kullanın.

Özet

LLM iş akışlarında TOON için argüman basittir: token başına ödeme yapıyorsunuz, JSON'daki yapılandırılmış veri token verimsizdir ve TOON doğrudan bir çözümdür. Tablo notasyonu tek başına tipik satır tabanlı veri kümelerinde token kullanımını %50-60 oranında azaltır. npm paketi — @toon-format/toon — küçük, API iki fonksiyon ve mevcut bir API çağrısına entegrasyon beş dakikalık bir iştir. Hatırlanacak tek şey sistem isteminizde format açıklaması — onsuz model tahmin ediyor. Onunla, token maliyetinin yarısında verilerinizi doğru okuyan bir model elde edersiniz. Mevcut verilerinizi dönüştürmek için JSON'dan TOON'a ile başlayın, TOON Doğrulayıcı ile doğrulayın ve gerektiğinde yapılandırılmış yanıtları geri dönüştürmek için TOON'dan JSON'a veya decode()'u kullanın.