Çoğu ekip AI API çağrıları için gereğinden fazla ödeme yapıyor. Bunun nedeni yanlış modeli seçmeleri değil; prompt caching, akıllı model yönlendirme (smart model routing) ve toplu işleme (batch processing) gibi minimum kod değişikliği gerektiren üç optimizasyonu göz ardı etmeleridir.
İşte gerçek rakamlarla her bir tekniğin dökümü.
Mevcut sağlayıcı karışımınızın sorun olup olmadığına hala karar veremiyorsanız, önce fiyatlandırma karşılaştırmasını okuyun. En büyük sorununuz ham harcamadan ziyade retry fırtınaları veya sağlayıcı sınırlamalarıysa (throttling), bu sayfayı rate limiting kılavuzu ile birlikte değerlendirin.
1. Prompt Caching: En Büyük Kazanım
Uygulamanız her istekte aynı system prompt içeriğini gönderiyorsa, sağlayıcının zaten işlemiş olduğu token'lar için tam ücret ödüyorsunuz demektir.
Nasıl Çalışır?
OpenAI, 1.024 token üzerindeki girdiler için prompt'ları otomatik olarak cache'ler. Cache'lenen token'lar, standart girdi fiyatının %50'sine mal olur. Kodunuzda herhangi bir değişiklik yapmanıza gerek yoktur.
Anthropic, cache_control kesme noktaları aracılığıyla açık caching kullanır. Yazma maliyeti standart girdiden %25 daha yüksektir, ancak okuma maliyeti %90 daha düşüktür. Cache TTL süresi 5 dakikadır ve her hit durumunda uzatılır.
Yeni OpenAI fiyatlandırmasında, pratik indirim ekiplerin beklediğinden daha iyi olabilir. GPT-4.1 cache'lenmiş girdisi, standart girdinin dörtte biri fiyatına sunulur; bu da tutarlı prefix'lerin, eski "olsa iyi olur" yaklaşımının önerdiğinden çok daha büyük tasarruflar sağladığı anlamına gelir.
Matematiksel Hesaplama
Tipik bir müşteri destek botunu ele alalım:
- System prompt: 2.000 token
- Kullanıcı mesajı: Ortalama 200 token
- Claude Sonnet 4.6 kullanarak günde 5.000 istek
Caching olmadan:
Günlük girdi maliyeti = 5.000 × 2.200 token × $3.00/1M = $33.00
Anthropic prompt caching ile (%95 cache hit oranı varsayımıyla):
Cache yazma: 250 × 2.200 × $3.75/1M = $2.06
Cache okuma: 4.750 × 2.200 × $0.30/1M = $3.14
Kullanıcı token'ları: 5.000 × 200 × $3.00/1M = $3.00
Günlük toplam = $8.20 (Girdi maliyetlerinde %75 tasarruf)
Uygulama
from anthropic import Anthropic
client = Anthropic(
api_key="sk-lemon-xxx",
base_url="https://api.lemondata.cc"
)
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system=[
{
"type": "text",
"text": "You are a customer support agent for Acme Corp...",
"cache_control": {"type": "ephemeral"} # Bu, caching'i etkinleştirir
}
],
messages=[{"role": "user", "content": user_message}]
)
# Yanıt header'larında cache performansını kontrol edin
# cache_creation_input_tokens vs cache_read_input_tokens
OpenAI modelleri için caching otomatiktir. Sadece prompt'larınızın 1.024 token'ı geçtiğinden ve statik prefix'in istekler arasında tutarlı kaldığından emin olun.
Ekiplerin hata yaptığı noktalar:
- Her prompt'un başına timestamp veya request ID koymak
- Her çağrıda system instruction'ların sırasını değiştirmek
- Değişken kullanıcı bağlamını (context) sabit prefix'ten önce yerleştirmek
Prefix her seferinde değişirse, cache asla işe yaramaz. Prompt yapısını sadece bir prompt engineering detayı olarak değil, bir maliyet unsuru olarak görün.
2. Akıllı Model Yönlendirme: Her Görev İçin Doğru Modeli Kullanın
Her istek en pahalı modelinize ihtiyaç duymaz. GPT-4.1'in 2,00 $/1M girdi token'ı karşılığında hallettiği bir sınıflandırma görevi, 0,40 $/1M fiyatındaki GPT-4.1-mini ile de aynı derecede iyi çalışır; bu da 5 kat maliyet düşüşü demektir.
Yönlendirme Stratejisi
| Görev Türü | Önerilen Model | Girdi Maliyeti/1M |
|---|---|---|
| Karmaşık muhakeme | Claude Opus 4.6 / GPT-4.1 | $5.00 / $2.00 |
| Genel sohbet | Claude Sonnet 4.6 / GPT-4.1 | $3.00 / $2.00 |
| Sınıflandırma, veri çıkarma | GPT-4.1-mini / Claude Haiku 4.5 | $0.40 / $1.00 |
| Embeddings | text-embedding-3-small | $0.02 |
| Basit formatlama | DeepSeek V3 | $0.28 |
Uygulama
from openai import OpenAI
client = OpenAI(
api_key="sk-lemon-xxx",
base_url="https://api.lemondata.cc/v1"
)
def route_request(task_type: str, messages: list) -> str:
"""Bu görevi iyi halleden en ucuz modeli seçin."""
model_map = {
"classification": "gpt-4.1-mini",
"extraction": "gpt-4.1-mini",
"summarization": "gpt-4.1-mini",
"complex_reasoning": "gpt-4.1",
"creative_writing": "claude-sonnet-4-6",
"code_generation": "claude-sonnet-4-6",
}
model = model_map.get(task_type, "gpt-4.1-mini")
response = client.chat.completions.create(
model=model,
messages=messages
)
return response.choices[0].message.content
Gerçek Tasarruf
İsteklerin %60'ını (linting, formatlama, basit tamamlamalar) GPT-4.1-mini'ye ve %40'ını (mimari, hata ayıklama) Claude Sonnet 4.6'ya yönlendiren bir kodlama asistanı:
Önce (tamamı Claude Sonnet 4.6):
1.000 istek/gün × 3K girdi × $3.00/1M = $9.00/gün
Sonra (60/40 ayrımı):
600 istek × 3K × $0.40/1M = $0.72/gün (mini)
400 istek × 3K × $3.00/1M = $3.60/gün (sonnet)
Toplam = $4.32/gün (%52 tasarruf)
3. Batch Processing: Acil Olmayan İşler İçin Daha Düşük Fiyatlar
OpenAI, girdi ve çıktı token'larında %50 indirim sağlayan bir Batch API sunar. Buradaki ödünleşim: sonuçlar gerçek zamanlı yerine 24 saat içinde teslim edilir.
Anthropic de desteklenen modellerde %50 batch indirimi sunar. İş yükünüz gece boyunca çalışıyorsa, asenkron ise veya inceleme odaklıysa, gerçek zamanlı fiyatlar ödemek için nadiren iyi bir neden vardır.
Batching için uygun adaylar:
- Gece çalışan içerik oluşturma işleri
- Toplu belge sınıflandırma
- Veri seti etiketleme
- Planlanmış rapor oluşturma
# Bir batch dosyası oluşturun (JSONL formatında)
import json
requests = []
for i, doc in enumerate(documents):
requests.append({
"custom_id": f"doc-{i}",
"method": "POST",
"url": "/v1/chat/completions",
"body": {
"model": "gpt-4.1-mini",
"messages": [
{"role": "system", "content": "Classify this document..."},
{"role": "user", "content": doc}
]
}
})
# JSONL dosyasını yazın
with open("batch_input.jsonl", "w") as f:
for req in requests:
f.write(json.dumps(req) + "\n")
# Batch'i gönderin
batch_file = client.files.create(file=open("batch_input.jsonl", "rb"), purpose="batch")
batch = client.batches.create(input_file_id=batch_file.id, endpoint="/v1/chat/completions", completion_window="24h")
Gerçek bir ürün içinde batching için iyi adaylar:
- Gece çalışan içerik yenileme işleri
- Destek talebi (ticket) özetleme
- Embeddings backfill işlemleri
- Büyük kod tabanı veya belge incelemeleri
- Düşük öncelikli kullanıcı bildirimleri
Kötü adaylar:
- Chat yanıtları
- Etkileşimli kodlama yardımı
- Bir sonraki kullanıcı eyleminin hemen cevaba bağlı olduğu iş akışları
4. Bonus: Token Sayısını Azaltın
API düzeyinde optimizasyon yapmadan önce, gereğinden fazla token gönderip göndermediğinizi kontrol edin.
Yaygın israf nedenleri:
- Modelin zaten takip ettiği talimatları tekrarlayan gereksiz uzun system prompt'ları
- Sadece son 3-5 mesaj önemliyken tüm konuşma geçmişini dahil etmek
- Düz metin yeterli olacakken ham HTML/markdown göndermek
- Çıktı uzunluğunu sınırlamak için
max_tokenskullanmamak
Prompt uzunluğunda %30'luk bir azalma, doğrudan %30 daha düşük girdi maliyeti anlamına gelir.
İsrafı bulmanın en kolay yolu, route veya özellik bazında prompt uzunluğunu log'lamaktır. Çoğu ekibin model fiyatlandırma sorunu yoktur. Onların "aynı şişkin prompt günde 100.000 kez gönderiliyor" sorunu vardır.
5. Körlemesine Optimize Etmeden Önce Maliyet Görünürlüğü Ekleyin
Maliyet optimizasyonu, ekipler sezgilerine dayanarak hareket ettiğinde başarısız olur.
Yönlendirme kurallarını değiştirmeden önce şunları log'layın:
- Route veya özellik adı
- Model
- Girdi token'ları
- Çıktı token'ları
- Cache hit veya miss durumu
- Retry sayısı
- Kullanıcı tarafından görülen gecikme (latency)
Bu, önemli soruları yanıtlamanızı sağlar:
- Hangi route gerçekten yararlı olduğu için pahalı?
- Hangi route prompt israfı nedeniyle pahalı?
- Hangi route batch işlemine taşınmalı?
- Hangi route daha ucuz bir model katmanına taşınmalı?
Bu dört soruyu yanıtlayamıyorsanız, "maliyet optimizasyonunuz" sadece maliyeti bir yerden başka bir yere kaydıracaktır.
6. Gerçek Bir Optimizasyon Sırası
En etkili sıra genellikle şöyledir:
- Belirgin token israfını ortadan kaldırın.
- Caching'i açın veya düzeltin.
- Ucuz görevleri pahalı görevlerden ayırın.
- Acil olmayan her şeyi batch işlemine alın.
- Ancak ondan sonra sağlayıcı karışımını yeniden müzakere edin.
Bu sıra önemlidir çünkü en büyük tasarruflar genellikle sağlayıcı değiştirmeden önce gelir. Prompt yapısını düzeltmeden satıcı değiştirirseniz, aynı verimsizlik için ödeme yapmaya devam edersiniz.
7. Somut Bir Öncesi ve Sonrası Dağıtımı
Şu anda her istekte şunları yapan bir destek iş akışını ele alalım:
- 2.000 token'lık bir system prompt gönderiyor
- Tüm istekler için tek bir premium model çağırıyor
- Geçici hatalarda aynı prompt yapısını tekrar deniyor (retry)
- Gece özetlerini batch yerine senkron olarak çalıştırıyor
İlk sürüm genellikle "basit" hissettirir çünkü tek bir kod yoluna sahiptir. Finansal olarak ise aynı anda dört pahalı şey yapmaktadır.
Daha verimli bir dağıtım şuna benzer:
- Sabit politika metnini prompt'un başına taşıyın, böylece caching gerçekten çalışabilsin.
- Sınıflandırma, veri çıkarma ve kısa özetleri daha ucuz bir model katmanına yönlendirin.
- Premium modeli üst mercilere iletme (escalation), karmaşık muhakeme veya nihai cevap sentezi için saklayın.
- Gece özetlerini ve backfill işlemlerini batch'e aktarın.
- Prompt yapısı bozulan ve cache verimliliğini öldüren route'lar için log'ları haftalık olarak inceleyin.
- Prompt israfını ölçmeden sağlayıcı değiştirmek
- Çıktı kalitesini doğrulamadan ucuz görevleri ucuz modellere yönlendirmek
- Prefix'leri her istekte değişen prompt'larda caching'i etkinleştirmek
- Gerçekten gerçek zamanlı yanıt gerektiren kullanıcı odaklı işleri batch işlemine almak
- Sadece token fiyatına bakıp retry, latency ve fallback yüklerini görmezden gelmek
Bu tür bir dağıtım, sistemi yeniden yazmayı gerektirmez. Bir haftalık ölçümleme ve prompt'lar ile yönlendirmeyi üretim yüzeyleri olarak görme isteği gerektirir.
8. Neler Yapılmamalı?
Bir maliyet optimizasyonu çabasını boşa harcamanın en hızlı yolu, yanlış şeyi optimize etmektir.
Bu tuzaklardan kaçının:
Maliyet çalışması, tasarruf sağlandıktan sonra ürün hala iyi performans gösteriyorsa başarılıdır. Kullanıcı deneyimi (UX) kötüleşirse, tablodaki kazanç sahtedir.
Hepsini Bir Araya Getirmek
| Teknik | Efor | Tipik Tasarruf |
|---|---|---|
| Prompt caching | Düşük (cache_control ekleyin) | Girdide %40-75 |
| Model yönlendirme | Orta (görevleri sınıflandırın) | Genelde %30-50 |
| Batch processing | Orta (asenkron iş akışı) | Batch işlerinde %50 |
| Token azaltma | Düşük (prompt'ları kırpın) | Girdide %10-30 |
Bu teknikler birbirini destekler. Dördünü de uygulayan bir ekip, çıktı kalitesinde herhangi bir düşüş olmadan aylık API faturasını gerçekçi bir şekilde 3.000 dolardan 1.000 doların altına indirebilir.
Temel içgörü: AI API'lerinde maliyet optimizasyonu daha ucuz sağlayıcılar bulmakla ilgili değildir. Her bir özel görev için doğru modeli, doğru fiyat katmanında, doğru caching stratejisiyle kullanmakla ilgilidir.
Zaten birden fazla sağlayıcı kullanıyorsanız, operasyonel taraf da önemlidir. Migration kılavuzu ve OpenRouter karşılaştırması, ayrı entegrasyonları yamamaya devam etmek yerine yönlendirmeyi ne zaman merkezileştirmeniz gerektiğine karar vermenize yardımcı olur.
Bugün optimize etmeye başlayın: LemonData, tek bir API key üzerinden 300'den fazla modele erişim sağlar; OpenAI ve Anthropic model aileleri için prompt caching desteği sunar ve kullanımları tek bir yerden karşılaştırmanıza olanak tanır.
