AI Atlas
Tüm rehberler
✂️REHBER

Token Tasarrufu Yöntemleri

LLM kullanırken token maliyetini düşürmenin pratik yolları — prompt sıkıştırma, caching, structured output, akıllı RAG ve daha fazlası.

TokensCostOptimization
TOKEN TASARRUFUÖNCE5 000 token✂️SONRA1 100 tokenTASARRUF78%fatura ↓ hız ↑Cache · daha küçük model · structured output · akıllı RAG

Neden token tasarrufu?

LLM kullanan her ürün, ölçeklendikçe token faturasıyla karşılaşır. Üstelik token sadece para değil — daha çok token = daha yavaş yanıt + daha fazla bağlam yorgunluğu (model uzun prompt'ların ortasını "atlar"). Tasarruf hem cüzdanı, hem kaliteyi korur.

Bu rehber yedi pratik tekniği örnekleriyle anlatıyor. Hepsini birden uygulamak zorunda değilsin; en yüksek ROI'liden başla.

1. Prompt cache kullan

Anthropic, OpenAI ve diğer büyük sağlayıcılar prompt caching sunuyor. Aynı prefix'i (system prompt, sabit talimatlar, alıcı şablonu) tekrar tekrar gönderiyorsan, cache fiyatı 10x'e kadar düşürür.

from anthropic import Anthropic

client = Anthropic()

# Sabit, uzun system prompt'u cache'le
SYSTEM_PROMPT = """[5000 token ürün dokümanı + ayrıntılı kurallar...]"""

response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": SYSTEM_PROMPT,
            "cache_control": {"type": "ephemeral"},
        }
    ],
    messages=[{"role": "user", "content": "Müşteri sorusu..."}],
)
# İkinci ve sonraki çağrılarda system prompt cache'ten okunur,
# normal fiyatın küçük bir kısmı ödenir.

Önemli: cache TTL (5 dakika) içinde tekrar çağırmazsan kaybolur. Yüksek trafiği olan endpoint'lerde çok değerli; nadir endpoint'lerde anlamsız.

2. Structured output kullan

JSON şeması belirleyerek modelin gereksiz nezaket cümleleri ("Tabii ki, işte yanıtınız:") üretmesini engelle. Çıktı kısalır, parse güvenli.

# Yanlış: serbest metin → uzun, parse zor
prompt = "Bu yorumun duygusunu söyle."
# Çıktı: "Tabii ki, bu yorum oldukça pozitif görünüyor çünkü..."  → 80 token

# Doğru: structured output
import json

response = client.messages.create(
    model="claude-haiku-4-5-20251001",
    system='Reply with JSON only. Schema: {"sentiment": "pos"|"neg"|"neu"}',
    messages=[{"role": "user", "content": yorum}],
    max_tokens=20,  # << kısa cevap zorla
)
result = json.loads(response.content[0].text)
# Çıktı: {"sentiment": "pos"}  → 8 token

max_tokens parametresini agresif tutmak da önemli; modelin uzun cevap üretmesini fiziksel olarak engeller.

3. Daha küçük model kullan, gerektikçe büyüt

Tüm sorgular en güçlü modele gitmek zorunda değil. Cascade pattern: önce ucuz model (Haiku) deneyin; cevap kalitesi yetersizse Sonnet'e, ardından Opus'a yükseltin.

def smart_route(question, context):
    # Basit, kısa sorular → Haiku ($0.80/$4 per 1M tokens)
    if len(question) < 200 and not needs_reasoning(question):
        return call_model("claude-haiku-4-5-20251001", question, context)

    # Orta zorluk → Sonnet ($3/$15 per 1M tokens)
    return call_model("claude-sonnet-4-6", question, context)

    # Yalnızca karmaşık reasoning gerekenler Opus'a ($15/$75 per 1M)

Çoğu üretim trafiğinin %70'i basit sorgulardır; bunları Haiku'ya yönlendirmek aylık faturanın yarısını silebilir.

4. Gereksiz bağlam göndermeyi kes

Bir konuşmada her turda tüm geçmişi göndermek, eski mesajların token'ını her seferinde tekrar ödemek demektir. Üç strateji:

a) Konuşmayı özetle

Belirli sayıda turdan sonra geçmişi tek bir özet mesajla değiştir:

if len(messages) > 10:
    # İlk 8 mesajı özetle
    summary = client.messages.create(
        model="claude-haiku-4-5-20251001",
        system="Özetle maddeler hâlinde. Kararlar, isimler, sayılar kalsın.",
        messages=messages[:8] + [{"role": "user", "content": "Yukarıyı özetle."}],
    ).content[0].text

    messages = [{"role": "user", "content": f"<özet>\n{summary}\n</özet>"}] + messages[8:]

b) Pencere kaydır

Sadece son N turu sakla; önceki bilgileri ürünün veritabanına kaydet, gerektiğinde RAG ile getir.

c) Önemli olanı semantik seçim

Geçmiş 50 mesaj arasından şu anki soruyla en alakalı 5'ini seç (embedding benzerliği). Diğerleri prompt'a girmez.

5. Akıllı RAG: az ama doğru chunk

RAG genellikle "top 10 chunk gönder" diye kurulur. Çoğu zaman 3-5 yeter; üstüne reranker ekle, gereksiz chunk'lar elenir.

# Top-5 yerine top-20 al, sonra rerank ile en iyi 3'e indir
candidates = vector_db.search(query, top_k=20)
ranked = reranker.rank(query, candidates)
top_chunks = ranked[:3]

# 3 chunk × 500 token = 1500 token
# vs eski yaklaşım: 10 × 500 = 5000 token
# %70 token tasarrufu, sıklıkla daha iyi cevap

6. System prompt'u sıkıştır

Doğal dilde uzun anlatılmış kuralları kısa madde madde komutlara çevir. Genellikle %40-60 daralma sağlanır:

# Önce (245 token):
You are a customer service assistant for our e-commerce store. Please
make sure to be polite and professional at all times. When responding
to customers, you should always reply in Turkish unless they ask
otherwise. Your responses should be concise but helpful, and you
should never offer discounts that are not officially approved by our
management team. If a customer asks about something you don't know,
politely inform them and offer to escalate to a human agent.

# Sonra (89 token):
ROL: TR e-ticaret destek asistanı.
DİL: Türkçe.
TON: Kısa, profesyonel.
KURAL: Onaysız indirim verme. Bilmiyorsan insan temsilciye yönlendir.

Aynı bilgi, 2.7x daha az token. "Sen şu rolesin" + "kurallar:" + numaralı liste, "lütfen", "her zaman", "tüm bunları" gibi dolgu kelimelerini siler.

7. Caveman / kompakt yanıt modu

Claude Code kullanıyorsan /caveman skill'i yanıtları %75 kısaltır. API kullanıyorsan aynı etkiyi system prompt'a şu satırla katabilirsin:

RESPONSE STYLE:
Cut filler. Drop articles ("the", "a"). Drop pleasantries.
Use fragments where clear. Code unchanged. Keep technical
substance. One word when one word enough.

Hata raporu, debug oturumu, hızlı API'lerde ideal. Müşteri yanıtlarında değil — ton fazla telgraf gibi olur.

8. Akıllı tool seçimi

Function calling kullanırken her tool tanımı prompt'a token ekler. 30 tool tanımlamak gerekiyorsa, kullanıcı niyetine göre dinamik filtreleme yap:

def select_tools(user_message):
    # Kullanıcının niyetini sınıflandır
    intent = classify_intent(user_message)

    tool_groups = {
        "files": [read_file, write_file, list_files],
        "github": [create_pr, list_issues, comment_pr],
        "data": [query_db, run_analytics],
    }

    return tool_groups[intent]

response = client.messages.create(
    model="claude-sonnet-4-6",
    tools=select_tools(user_message),  # 30 yerine 3 tool
    messages=[...],
)

9. Batch API kullan

Anthropic'in Message Batches API ve OpenAI'nin Batch API'si toplu işlerde fiyatı %50'ye kadar düşürür. Yanıt süresi 24 saate kadar uzayabilir; gerçek zamanlı olmayan iş yükleri için ideal:

# Anthropic Batch örneği
batch = client.messages.batches.create(
    requests=[
        {
            "custom_id": f"req-{i}",
            "params": {
                "model": "claude-sonnet-4-6",
                "max_tokens": 256,
                "messages": [{"role": "user", "content": doc}],
            },
        }
        for i, doc in enumerate(documents)
    ]
)

# Saatler içinde sonuçları al, %50 indirim

İçerik moderasyonu, sentiment analizi, doküman sınıflandırma gibi async işlerde devasa tasarruf.

10. Tokenization'ı tanı

Aynı bilgi farklı yazımla farklı token sayısı verir:

Yazım Token sayısı (tiktoken cl100k_base)
id: 12345 4
"id":12345 5
id=12345 5
<id>12345</id> 8

Düz JSON, XML'den tipik olarak %20-30 daha az token. UUIDsler ve uzun dize ID'ler aşırı pahalıdır; mümkünse kısa integer ID kullan.

ROI sıralı öncelik

Hepsini bir gecede uygulamak gerekmez. Öncelik sırası:

  1. Prompt cache (yüksek trafikte 5-10x tasarruf)
  2. Daha küçük model (basit sorgular için Haiku)
  3. Structured output + max_tokens (çıktı kısalır)
  4. System prompt sıkıştırma (her çağrı küçülür)
  5. Akıllı RAG (top-3 + reranker)
  6. Konuşma özetleme (uzun chat oturumları için)
  7. Batch API (async işlerde)

Bu sıraya göre uyguladığında çoğu ürün aylık faturasının %50-70'ini siler.

Ölçüm: kör tasarruf yok

Optimizasyona başlamadan önce baseline al. Anthropic console'da, OpenAI dashboard'da token tüketimi ve maliyet görünür. Ek olarak:

  • Yanıt başına ortalama input token sayısı
  • Yanıt başına ortalama output token sayısı
  • Endpoint başına maliyet
  • Hangi system prompt en çok kullanılıyor

Bunları izlemeden hangi tasarrufun gerçekten işe yaradığını bilemezsin.

Devamı için

  • Token — modelin gördüğü atomik birim, neden tasarrufun temel ölçüsü.
  • Context Window — modelin tek seferde sığdırabildiği token sayısı.
  • System Prompt Rehberi — sıkıştırılmış system prompt yazımının kalıpları.
  • KV Cache — büyük modelleri verimli çalıştırmanın kritik mekanizması.
  • Prompt Caching ile Batch API — düşük gecikme + düşük maliyet kombinasyonu.