TOON (Token-Oriented Object Notation) — LLM'ler için Daha Akıllı ve Hafif JSON

Yapay zeka ve Büyük Dil Modelleri (LLM) çağında, veri formatlarının verimliliği sadece bir "optimizasyon" meselesi olmaktan çıktı; doğrudan maliyet ve performans belirleyicisi haline geldi. Yıllardır web dünyasının standart veri taşıyıcısı olan JSON (JavaScript Object Notation), insan okunabilirliği ve makine ayrıştırılabilirliği arasındaki dengeyi mükemmel kurmuştu. Ancak LLM'lerin dünyasında "token" ekonomisi devreye girdiğinde, JSON'ın süslü parantezleri, tırnak işaretleri ve tekrar eden anahtarları (keys) pahalı bir yük olmaya başladı.
İşte bu noktada sahneye TOON (Token-Oriented Object Notation) çıkıyor. JSON veri modelinin LLM'ler için özel olarak tasarlanmış, daha kompakt ve "token dostu" bir alternatifi olan TOON, veri temsilinde yeni bir standart olma yolunda ilerliyor. Bu yazıda TOON'un ne olduğunu, nasıl çalıştığını, JSON ile arasındaki farkları ve projelerinizde nasıl kullanabileceğinizi derinlemesine inceleyeceğiz.
JSON'ın "Token" Sorunu ve TOON'un Doğuşu
Bir LLM'e (örneğin GPT-4 veya Claude 3.5) veri gönderirken veya ondan yapılandırılmış veri isterken, her bir karakter ve sembol token kotanızdan yer. JSON, doğası gereği "geveze" (verbose) bir formattır.
Örneğin, bir kullanıcı listesini JSON ile ifade ettiğimizde, her bir kullanıcı nesnesi için id, name, email gibi anahtarları tekrar tekrar yazarız. Ayrıca her bir dize için çift tırnaklar, her nesne için süslü parantezler {} kullanırız. Binlerce satırlık bir veride bu tekrarlar, toplam token miktarının önemli bir kısmını oluşturur.
TOON, bu sorunu çözmek için geliştirildi. Temel vaadi oldukça iddialı: Standart JSON yapısına kıyasla %30 ila %60 oranında token tasarrufu. Bunu yaparken de verinin anlamını veya yapısını bozmuyor; JSON ile birebir aynı veri tiplerini (nesne, dizi, string, number, boolean, null) destekliyor ancak bunları çok daha zeki bir sözdizimi (syntax) ile ifade ediyor.
TOON Sözdizimi: Nasıl Çalışır?
TOON'un sözdizimi, Python veya YAML'a aşina olan geliştiricilere oldukça tanıdık gelecektir. Ancak TOON'un asıl gücü, dizileri (arrays) ele alış biçiminde yatar.
1. Girintiye Dayalı Yapı (Indentation-Based)
TOON, iç içe geçmiş nesneleri belirtmek için süslü parantezler yerine girintileri (indentation) kullanır. Bu, YAML'dan tanıdığımız bir özelliktir ve görsel gürültüyü ciddi oranda azaltır.2. Tırnak İşaretlerine Veda
Anahtarlar (keys) ve basit metin değerleri için tırnak işareti kullanmanıza gerek yoktur. Sadece özel karakterler içeren metinler için tırnak gerekebilir.3. Tablo Benzeri Diziler (Killer Feature!)
TOON'un en devrimci özelliği, tekdüze nesne dizilerini (uniform object arrays) sıkıştırma yöntemidir. JSON'da her satırda anahtar isimlerini tekrar ederken, TOON bunu bir CSV tablosu gibi ele alır: Önce başlıkları tanımlar, ardından verileri satır satır yazar.Gelin, bu farkı somut bir örnekle görelim.
Örnek: Kullanıcı Listesi
Aşağıda, basit bir kullanıcı veritabanının JSON ve TOON hallerini yan yana görüyoruz.
Standart JSON:
{
"metadata": {
"total_users": 2,
"source": "database"
},
"users": [
{
"id": 1,
"username": "aliyildiz",
"role": "admin",
"active": true
},
{
"id": 2,
"username": "aysekara",
"role": "editor",
"active": false
}
]
}
Bu JSON formatı, okunabilir ancak çok fazla tekrar içeriyor. Şimdi aynı verinin TOON formatına bakalım:
TOON Formatı:
metadata:
total_users: 2
source: database
users[2]{id,username,role,active}:
1,aliyildiz,admin,true
2,aysekara,editor,false
Farkı Görüyor musunuz?
1. metadata nesnesi için süslü parantez yok, sadece girinti var.
2. users dizisi tanımlanırken users[2] ifadesiyle dizinin uzunluğu (2 eleman) baştan belirtiliyor. Bu, LLM'in çıktıyı üretirken ne kadar veri yazacağını önceden "planlamasına" (look-ahead) yardımcı olur.
3. {id,username,role,active} kısmı, bu dizideki nesnelerin şemasını bir kez tanımlar.
4. Alt satırlarda id, username vb. tekrar edilmez; sadece değerler virgülle ayrılarak yazılır.
Bu yapı, veri seti büyüdükçe inanılmaz bir sıkıştırma oranı sağlar. 1000 kullanıcılı bir listede, JSON'da 1000 kez "username": yazmanız gerekirken, TOON'da bunu sadece 1 kez yazarsınız.
Neden LLM'ler İçin Daha İyi?
TOON sadece "daha az karakter" demek değildir; LLM'lerin çalışma prensibine (olasılıksal token tahmini) daha uygundur.
1. Deterministik ve Tahmin Edilebilir
users[2] gibi açık uzunluk belirtimleri, modelin ne zaman duracağını veya bir sonraki bloğa ne zaman geçeceğini daha iyi anlamasını sağlar. JSON'da kapanış parantezini ] beklemek, bazen modellerin halüsinasyon görmesine veya yapıyı erkenden bozmasına neden olabilir.2. Context Window (Bağlam Penceresi) Verimliliği
LLM'lerin bir "hafıza" sınırı (context window) vardır. 128k tokenlık bir pencereniz olsa bile, bu alanı gereksiz JSON syntax'ı ile doldurmak yerine, daha fazla iş mantığı veya daha zengin veri ile doldurmak istersiniz. TOON, aynı bağlam penceresine %50 daha fazla veri sığdırmanıza olanak tanır.3. Daha Düşük API Maliyetleri
OpenAI, Anthropic veya Google Gemini API'lerini kullanırken, hem gönderdiğiniz (input) hem de aldığınız (output) tokenlar için para ödersiniz. Veri formatınızı TOON'a çevirmek, yüksek hacimli uygulamalarda faturanızı doğrudan %30-40 oranında düşürebilir.Kütüphane Desteği ve Entegrasyon
"Peki ben bunu nasıl kullanacağım?" diye soruyorsanız, güzel haber: TOON modern dillerin çoğu için hazır kütüphanelere sahip.
Şu anda TypeScript/JavaScript, Python, Go, Rust ve .NET için resmi veya topluluk destekli parser (ayrıştırıcı) ve serializer (serileştirici) kütüphaneleri mevcut.
Python ile Kullanım Örneği
Eğer Python kullanıyorsanız, toon kütüphanesini projenize dahil edebilirsiniz (hayali paket ismi örneğidir, mevcut kütüphaneleri kontrol ediniz):
import toon
import json
# Elimizdeki veri
data = {
"users": [
{"id": 1, "name": "Ali"},
{"id": 2, "name": "Veli"}
]
}
# JSON olarak
json_output = json.dumps(data)
print(len(json_output)) # Örn: 65 karakter
# TOON olarak
toon_output = toon.dumps(data)
print(toon_output)
# Çıktı:
# users[2]{id,name}:
# 1,Ali
# 2,Veli
Bu basit geçiş, özellikle RAG (Retrieval-Augmented Generation) sistemlerinde veritabanından çekilen binlerce kaydı LLM'e bağlam olarak verirken büyük fark yaratır.
Kullanım Alanları: TOON Nerede Parlar?
TOON her senaryo için JSON'ın yerini alacak mı? Muhtemelen hayır. Web tarayıcıları ve REST API'ler uzun süre JSON kullanmaya devam edecek. Ancak şu alanlarda TOON rakipsizdir:
1. AI Agent İletişimi: Birden fazla AI ajanının birbirine veri gönderdiği sistemlerde token trafiğini azaltmak. 2. Büyük Veri Analizi (LLM ile): Bir CSV veya Excel dosyasını LLM'e analiz ettirirken, ham CSV yerine yapılandırılmış ama sıkıştırılmış TOON formatı vermek, modelin sütunları ve veri tiplerini daha iyi anlamasını sağlar. 3. Yapılandırma Dosyaları: Okunabilirliği sayesinde karmaşık config dosyaları için YAML'a güçlü bir alternatiftir. 4. Log Sıkıştırma: Sistem loglarını depolarken veya analiz için gönderirken alan tasarrufu sağlar.
Avantajlar ve Dezavantajlar
Objektif bir bakış açısıyla özetlemek gerekirse:
Avantajlar: * ✅ Yüksek token verimliliği (%30-60 tasarruf). * ✅ İnsan gözü için çok daha temiz ve okunabilir. * ✅ LLM'lerin yapıyı kavraması daha kolay. * ✅ JSON ile tam uyumlu veri tipleri.
Dezavantajlar:
* ❌ Henüz JSON kadar evrensel bir standart değil.
* ❌ Her dildeki kütüphane desteği JSON kadar olgunlaşmış olmayabilir.
* ❌ Tarayıcı (browser) tarafında yerleşik JSON.parse() gibi bir desteği yok, harici kütüphane gerektirir.
Yapay zeka teknolojileri geliştikçe, onlara sunduğumuz "yakıtın" (verinin) kalitesi ve formatı da evriliyor. TOON, bu evrimin mantıklı bir adımı. Eğer uygulamanız yoğun bir şekilde LLM kullanıyorsa, veritabanı çıktılarını işliyorsa veya token maliyetleri bütçenizi zorluyorsa, TOON'a bir şans vermek için harika bir zaman.
Gelecekte, modellerin varsayılan olarak TOON formatını tercih ettiğini ve "JSON mode" yerine "TOON mode" seçeneklerini API dokümantasyonlarında gördüğümüz günlerin çok uzak olmadığını söyleyebiliriz.
Siz de projelerinizde veri verimliliğini artırmak istiyorsanız, toonformat.dev (örnek link) üzerinden spesifikasyonları inceleyebilir ve denemelere başlayabilirsiniz.



