Token Ekonomisi 101: Input vs Output Cost Asimetrisi
LLM faturaları neden böyle çıkıyor? Input vs output token fiyatları neden farklı? Cache'lenmiş token neden 10× ucuz? Bu derste tüm büyük provider'ların fiyat modelini, token sayma yöntemlerini ve caching'in matematiksel temelini öğreneceksin.
Şükrü Yusuf KAYA
14 dakikalık okuma
BaşlangıçToken Ekonomisi 101: Cache'in Matematiksel Temeli
Caching'i anlamak için önce neden var olduğunu anlamak şart. Cevap: çünkü mevcut LLM fiyatlandırması iki büyük asimetri taşıyor:
- Input token vs Output token — input %20-25 daha ucuz (genelde)
- Fresh input vs Cached input — cached input %75-90 daha ucuz
Bu derste o asimetrileri kırıyoruz.
Önce: Token Nedir?#
LLM'ler harfler veya kelimelerle değil, token'larla çalışır. Token, modelin "kelime parçası" gibi düşünebileceği bir birim.
- İngilizce: ~4 karakter = 1 token (ortalama)
- Türkçe: ~2-3 karakter = 1 token (eklemeli dilimiz nedeniyle daha "pahalı")
- Kod: ~3-4 karakter = 1 token
Pratik kural: "Merhaba dünya" 4 token civarı, oysa "Hello world" 2 token. Yani aynı içeriği Türkçe yazmak İngilizceye göre ~%50-100 daha pahalıya mal olur.
Türkçe Token Cezası
Bu çok ciddi bir bütçe kalemi: Türkçe kullanıcılarınız varsa input/output token sayınız İngilizce muadiline göre 1.5-2× daha yüksek. Cache açmazsan bu fark direkt müşteriden çıkar.
python
# pip install tiktokenimport tiktoken enc = tiktoken.encoding_for_model("gpt-4o") texts = { "EN (kısa)": "Hello, how can I help you today?", "TR (kısa)": "Merhaba, sana bugün nasıl yardımcı olabilirim?", "EN (uzun)": "The quick brown fox jumps over the lazy dog. " * 10, "TR (uzun)": "Hızlı kahverengi tilki tembel köpeğin üzerinden atlar. " * 10,} for label, t in texts.items(): tokens = enc.encode(t) print(f"{label:14s} | {len(t):4d} karakter | {len(tokens):4d} token | {len(t)/len(tokens):.2f} char/token") Token sayısını ölç: TR vs EN karşılaştırma (Tiktoken ile)
Gördün mü? Aynı semantik içerik için Türkçe ~2.2× daha fazla token harcıyor. Bu, caching'in Türkçe ürünlerde neden iki kat kritik olduğunu gösteriyor.
Provider Fiyat Tablosu (Ocak 2026)#
| Model | Input ($/1M) | Output ($/1M) | Cache Write | Cache Read | Output/Input Oranı |
|---|---|---|---|---|---|
| Claude Opus 4.7 | $15.00 | $75.00 | $18.75 | $1.50 | 5× |
| Claude Sonnet 4.6 | $3.00 | $15.00 | $3.75 | $0.30 | 5× |
| Claude Haiku 4.5 | $1.00 | $5.00 | $1.25 | $0.10 | 5× |
| GPT-4o | $2.50 | $10.00 | n/a (auto) | $1.25 | 4× |
| GPT-4.1 | $2.00 | $8.00 | n/a (auto) | $0.50 | 4× |
| Gemini 2.5 Pro | $1.25 | $10.00 | $0.31/saat | $0.31 | 8× |
| Gemini 2.5 Flash | $0.30 | $2.50 | $0.075/saat | $0.075 | 8× |
İki şey hemen göze çarpıyor:
- Output her zaman input'tan 4-8 kat pahalı — çünkü generation autoregressive, sıralı yapılıyor
- Cache read input'tan 4-10 kat ucuz — Anthropic'te %90 indirim, OpenAI'da %50, Gemini'de %75
Asimetri #1 — Output Neden Bu Kadar Pahalı?#
Cevap: autoregressive generation. LLM bir tokeni üretip, onu input'a ekleyip, sonrakini üretiyor:
Token 1 üretildi → Token 1 input'a eklendi → Token 2 hesaplandı → ...
Yani 1000 output token üretmek için 1000 ayrı forward pass lazım. Her pass'te tüm KV cache okunur. Hesaplama maliyeti O(n × L) — n: output uzunluğu, L: layer sayısı.
Karşılaştırma için input prefill'i: paralel yapılır. Tüm input tokenları tek seferde forward pass'le işlenir. Hesaplama maliyeti hala O(n × L) ama wall-clock çok daha düşük çünkü GPU paralel.
İşte bu yüzden:
- Input işlemek = ucuz (paralel, batch'lenebilir)
- Output üretmek = pahalı (sıralı, KV cache okumalı)
- Cache hit = en ucuz (çoktan hesaplanmış K, V'leri kullan)
Spoiler
Modül 2'de KV cache mekanizmasını sıfırdan göstereceğim — neden cache hit'in input'tan bile ucuz olduğunu matematiksel olarak göreceksin.
Asimetri #2 — Caching'in Pratik Hesabı#
Bir RAG asistanı kuruyorsun. Sistemin yapısı:
- System prompt (statik): 500 token
- Tool definitions (statik): 1500 token
- Document context (statik per session): 50.000 token
- Conversation history (büyüyor): 0-10.000 token
- User query (dinamik): 100 token
Her sorgu için 50.000 + 1500 + 500 + 100 = 52.100 input token.
Claude Sonnet 4.6'da:
Caching YOK#
Her sorgu:
- 52.100 input × 0.1563**
- Output ~500 token × 0.0075**
- Toplam: $0.164 per sorgu
1000 sorgu = $164
Türkiye için: ~5.500 TL (1 USD = 33.5 TL @ Ocak 2026)
Caching AÇIK (5dk TTL)#
İlk sorgu:
- 52.000 cache write × 0.195**
- 100 input × 0.0003**
- Output × 0.0075**
Sonraki 999 sorgu (5dk içinde):
- 52.000 cache read × 0.0156**
- 100 input + output = $0.008
İlk: 0.024
1000 sorgu = $24.18
Türkiye için: ~810 TL — %85 tasarruf
1000 sorguda 4.690 TL tasarruf. Ayda 100K sorgu yapan bir SaaS için aylık ~470.000 TL fark. Yıllık 5.6 milyon TL.
İşte bu yüzden caching opsiyonel değil. Mimari kararı.
python
# Senaryo: Türkiye'de production LLM uygulaması cost modeli USD_TO_TRY = 33.5 # Ocak 2026 kuru # Sistem yapısıSYSTEM_PROMPT_TOKENS = 500TOOL_DEFINITIONS_TOKENS = 1500DOCUMENT_CONTEXT_TOKENS = 50_000USER_QUERY_TOKENS_AVG = 100OUTPUT_TOKENS_AVG = 500 # TrafikREQUESTS_PER_MONTH = 100_000CACHE_HIT_RATIO = 0.95 # ilk istek miss, gerisi hit # Claude Sonnet 4.6 fiyatları ($/1M token)INPUT_PRICE = 3.00OUTPUT_PRICE = 15.00CACHE_WRITE_PRICE = 3.75CACHE_READ_PRICE = 0.30 # --- Cache YOK senaryosu ---total_input = (SYSTEM_PROMPT_TOKENS + TOOL_DEFINITIONS_TOKENS + DOCUMENT_CONTEXT_TOKENS + USER_QUERY_TOKENS_AVG)cost_no_cache_usd = ( REQUESTS_PER_MONTH * ( total_input / 1_000_000 * INPUT_PRICE + OUTPUT_TOKENS_AVG / 1_000_000 * OUTPUT_PRICE )) # --- Cache AÇIK senaryosu ---cacheable_tokens = SYSTEM_PROMPT_TOKENS + TOOL_DEFINITIONS_TOKENS + DOCUMENT_CONTEXT_TOKENSdynamic_tokens = USER_QUERY_TOKENS_AVG misses = REQUESTS_PER_MONTH * (1 - CACHE_HIT_RATIO)hits = REQUESTS_PER_MONTH * CACHE_HIT_RATIO cost_with_cache_usd = ( misses * ( cacheable_tokens / 1_000_000 * CACHE_WRITE_PRICE + dynamic_tokens / 1_000_000 * INPUT_PRICE + OUTPUT_TOKENS_AVG / 1_000_000 * OUTPUT_PRICE ) + hits * ( cacheable_tokens / 1_000_000 * CACHE_READ_PRICE + dynamic_tokens / 1_000_000 * INPUT_PRICE + OUTPUT_TOKENS_AVG / 1_000_000 * OUTPUT_PRICE )) # --- Rapor ---print(f"Aylık {REQUESTS_PER_MONTH:,} istek senaryosu:")print(f"")print(f" Cache YOK: ${cost_no_cache_usd:>10,.2f} | {cost_no_cache_usd * USD_TO_TRY:>12,.2f} TL")print(f" Cache AÇIK: ${cost_with_cache_usd:>10,.2f} | {cost_with_cache_usd * USD_TO_TRY:>12,.2f} TL")print(f"")savings = cost_no_cache_usd - cost_with_cache_usdsavings_pct = savings / cost_no_cache_usd * 100print(f" TASARRUF: ${savings:>10,.2f} | {savings * USD_TO_TRY:>12,.2f} TL ({savings_pct:.1f}%)")print(f" Yıllık: {savings * USD_TO_TRY * 12:>12,.2f} TL") Kendin hesapla: caching ile/sız aylık maliyet (TL cinsinden, kendi değerlerini gir)
Para Gerçek
Yıllık ~5.8 milyon TL tasarruf — sadece doğru caching ile. Kendi rakamlarını koy, lokal değerlerin üzerinde dene.
Bir Önemli Nüans: Cache Write Pahalı#
Dikkat ettin mi? Cache write $3.75/M, fresh input $3/M. Yani cache yazmak %25 daha pahalı.
Bu mantıklı: provider, K-V matrislerini diske/RAM'e saklamak için ekstra altyapı kullanıyor. Bu maliyeti sana geçiriyor.
Pratik sonuç: Cache'i 1-2 kez kullanacaksan kayıptasın. Cache'in karlı olduğu eşiği hesaplayalım:
Claude Sonnet için:
Yani cache 1 kez bile okunsa karda olursun. OpenAI'da automatic cache zaten 1024+ token prefix tekrarında devreye giriyor, write maliyeti yok. Gemini'de saatlik storage ücreti var ama o ayrı bir hesap.
| Provider | Break-even (kaç hit) | Notlar |
|---|---|---|
| Anthropic | 1 hit yeter | Write %25 daha pahalı ama read %90 ucuz |
| OpenAI | Otomatik | Implicit cache, 1024+ token prefix, write maliyeti yok |
| Gemini | Saat bazlı | $0.31/saat storage — ne kadar tutarsan o kadar öde |
Fiyat Sezgisi: Bir Cümleyle#
"Anthropic'te cache yazmak input'tan %25 pahalı ama okumak %90 ucuz. 1 hit bile karlı."
Bu cümleyi ezberle. Modül 3'te detaylı API'leri görürken arka planda hep bu kalacak.
✓ Pekiştir#
Bir Sonraki Derste#
Context window'un 4K'dan 1M'a evrimini ve neden uzun context her şeyi değiştirdiğini göreceğiz. Bonus: Anthropic'in 1M context'inin 200K'lık modelinden neden ~10× daha pahalı olduğunu da öğreneceksin.
Sık Sorulan Sorular
Evet, tiktoken / cl100k_base tokenizer'ı için bu doğru. Anthropic'in tokenizer'ı (proprietary) biraz daha iyi ama hâlâ %30-50 fazla. Gemini'nin tokenizer'ı Türkçe için en optimize olanı (~%20-30 fazla).
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
İlgili İçerikler
1. Temeller — Context Penceresi Ekonomisi
Bu Eğitim Hakkında ve Prompt Caching Neden Önemli?
Öğrenmeye Başla1. Temeller — Context Penceresi Ekonomisi
Context Window Evrimi: 4K'dan 1M'a 5 Yılda Ne Oldu?
Öğrenmeye Başla1. Temeller — Context Penceresi Ekonomisi