Skip to content

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 min read
Beginner

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:
  1. Input token vs Output token — input %20-25 daha ucuz (genelde)
  2. 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 tiktoken
import 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)#

ModelInput ($/1M)Output ($/1M)Cache WriteCache ReadOutput/Input Oranı
Claude Opus 4.7$15.00$75.00$18.75$1.50
Claude Sonnet 4.6$3.00$15.00$3.75$0.30
Claude Haiku 4.5$1.00$5.00$1.25$0.10
GPT-4o$2.50$10.00n/a (auto)$1.25
GPT-4.1$2.00$8.00n/a (auto)$0.50
Gemini 2.5 Pro$1.25$10.00$0.31/saat$0.31
Gemini 2.5 Flash$0.30$2.50$0.075/saat$0.075
İki şey hemen göze çarpıyor:
  1. Output her zaman input'tan 4-8 kat pahalı — çünkü generation autoregressive, sıralı yapılıyor
  2. 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 × 3/M=3/M = **0.1563**
  • Output ~500 token × 15/M=15/M = **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 × 3.75/M=3.75/M = **0.195**
  • 100 input × 3/M=3/M = **0.0003**
  • Output × 15/M=15/M = **0.0075**
Sonraki 999 sorgu (5dk içinde):
  • 52.000 cache read × 0.30/M=0.30/M = **0.0156**
  • 100 input + output = $0.008
İlk: 0.20,Sonraki:0.20, Sonraki: 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 = 500
TOOL_DEFINITIONS_TOKENS = 1500
DOCUMENT_CONTEXT_TOKENS = 50_000
USER_QUERY_TOKENS_AVG = 100
OUTPUT_TOKENS_AVG = 500
 
# Trafik
REQUESTS_PER_MONTH = 100_000
CACHE_HIT_RATIO = 0.95 # ilk istek miss, gerisi hit
 
# Claude Sonnet 4.6 fiyatları ($/1M token)
INPUT_PRICE = 3.00
OUTPUT_PRICE = 15.00
CACHE_WRITE_PRICE = 3.75
CACHE_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_TOKENS
dynamic_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_usd
savings_pct = savings / cost_no_cache_usd * 100
print(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.
ProviderBreak-even (kaç hit)Notlar
Anthropic1 hit yeterWrite %25 daha pahalı ama read %90 ucuz
OpenAIOtomatikImplicit cache, 1024+ token prefix, write maliyeti yok
GeminiSaat 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.

Frequently Asked Questions

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

Related Content