Prompt'u shiplemeden önce gör
Çoğu ekip prompt'larının çok uzun olduğunu faturada öğreniyor. Çoğu ekip prompt'larının context window'a yaklaştığını model system instruction'ları silmeye başladığında öğreniyor. Çoğu ekip prompt-caching boundary'sinin yanlış yerde olduğunu hit oranı %30'un üstüne çıkmayınca öğreniyor.
Üçü de önceden, dört saniyede, ücretsiz teşhis edilebilir. Olmaya devam etmelerinin nedeni: her Claude developer'ının uzandığı araçlar — chat playground'ları, IDE eklentileri, resmi SDK — post-hoc. Sana ne az önce olduğunu gösteriyorlar. Hiçbiri prompt'unun göndermeden önce nasıl göründüğünü göstermiyor.
Bu suite'te shiplediğim diğer dört tool da post-hoc. claudoscope biten bir response'u x-ray'liyor. agent-replay biten bir trace'i scrub ediyor. prompt-lab biten iki çalıştırmayı karşılaştırıyor. tool-lab agent loop'unu sandbox'lıyor. Hepsi "az önce ne oldu" mikroskopları. Hiçbiri "yapmak üzere olduğun şeye bak" lensi değil.
context-lens öyle. Bir system prompt ve user mesajı yapıştır; API'nin onları tam olarak nasıl sayacağını, 200K window içinde nerede durduğunu, caching boundary'lerinin nereye düştüğünü ve her çağrının ne kadara mal olacağını gör. Tahmini ölçüme çeviren pre-flight check.
TL;DR
- Token cost, context-window pozisyonu ve prompt-caching layout'u — hepsi prompt'tan tek başına bilinebilir, istek göndermene gerek yok.
- Anthropic'in
count_tokensendpoint'i sana kesin sayıyı veriyor;~3.7 chars/tokenheuristic'i yazarken yeterli tahmin veriyor. - En faydalı tek sayı "token × günlük çağrı × dolar/token" — bunu deploy etmeden hesaplayabildiğinde, "bu prompt'u shiple" estetik bir karar olmaktan çıkıp bütçe kararı oluyor.
- Anlam olarak eşdeğer iki prompt arasında input uzunluğunda 4× fark normal. Production'a gitmeden yakalamak, tool'un kendisini kurmaktan daha çok tasarruf ediyor.
Aslında pre-flight ne yapabilirsin
Üç şey, hepsi prompt metninden türetilebilir:
1. Kesin token sayısı. Tahmin değil. Anthropic bir /v1/messages/count_tokens endpoint'i sunuyor — /v1/messages ile tam aynı şekli (system, messages, tools) alıyor ve sadece input_tokens sayısını dönüyor. Asıl API çağrısının kullanacağı aynı tokenization. Model invocation yok, output yok, tek bir küçük istek dışında ücret yok.
2. Context window pozisyonu. Sonnet 4.5'in 200K-token window'u var. Aşmak hata vermiyor; model sessizce en eski içeriği bırakıyor — ki bu genellikle system instruction'larını bırakmak demek, ki bu da modelin istediğin şeyi yapmayı bırakması demek. Matematik: (input + max_output) / 200_000. Production'da bilmediğin bir "window'un %78'i" durumunu asla görmemelisin.
3. Çağrı başına cost. Input token'ları input fiyatıyla çarp (Sonnet'te $3/M), output token'ları output fiyatıyla çarp ($15/M), ve bir çağrının cost'u için tek bir sayı al. Trafiğinle çarpınca fatura çıkıyor. İlginç hamle: bunu prompt tasarımına commit etmeden önce yap, sonra değil.
Dördüncü şey — prompt-caching boundary'lerinin nereye oturması gerektiği — saf olarak metinden türetmek daha zor, ama hala pre-flight: cache_control'u nereye koyacağını, gerçek trafiğinde hangi prefix'in stabil olduğuna göre seçiyorsun. context-lens senin için seçmiyor, ama seçtiğin boundary'leri sana gösterip sanity check yapmana izin veriyor.
Kimsenin aramadığı dört-kat cost farkı
Gerçek bir örnek, çalıştırılmış olanından. Aynı agent system prompt'unun iki versiyonu:
- Versiyon A — Markdown başlıklar, örnekler, uzun taksonomi, JSON şema gömülü — 3,847 input token
- Versiyon B — Tek paragraf, şema bir örnekle ima edilmiş, preamble yok — 612 input token
Aynı model (Sonnet 4.5). Aynı user input'ları (code review görevi). Output beş gerçek trafik örneğinde anlam olarak eşdeğerdi — ikisi de aynı kritik bug'ları yakaladı, ikisi de geçerli JSON üretti, ikisi de 800 output token'ın altında kaldı.
Cost farkı mekanik:
- A:
(3847 × 3 + 800 × 15) / 1_000_000= $0.0235 çağrı başına - B:
(612 × 3 + 800 × 15) / 1_000_000= $0.0138 çağrı başına
Günde 10,000 çağrıda bu $97/gün tasarruf, ya da $3,000/ay. context-lens'te iki saatlik bir prompt yeniden yazımıyla.
Önemli detay: versiyon B'yi daha ucuz olsun diye yazmadım. Daha okunabilir olsun diye yazdım. Cost azalması bir yan etkiydi ki pre-flight sayı olmadan fark etmeyecektim, çünkü bir editörde ikisi de bana "yaklaşık aynı uzunlukta" hissettirdi. context-lens bana birinin diğerinin 6.3×'i kadar uzun olduğunu söyledi — önemli olan tek metrikte: API'nin kullandığı metrikte.
Ders şu: "yaklaşık aynı" token sayısı için tutarlı olarak kötü bir estimator. Shiplemeden önce ölçmeye başladığın gün hatayı yapmayı bırakıyorsun.
Heuristic mode neden var
context-lens iki şey yapıyor:
- Yazarken canlı: kabaca İngilizce-benzeri metin için
3.7 chars/tokenhızlı bir heuristic, her tuş vuruşunda güncellenir. API call yok, key gerekmez, anlık. - İstek üzerine: gerçek
count_tokensAPI call'u — Anthropic'in kullanacağı kesin sayıyı verir.
Heuristic tam doğru değil — Türkçe, kod ve JSON İngilizce düzyazıdan farklı tokenize oluyor, bazen %30 farkla. Ama iterate ederken real-time sinyal — accurate-ama-asenkron olandan daha faydalı. Commit etmeye hazır olduğunda butonu tıklıyorsun ve kesin sayıyı alıyorsun. İki mod kasıtlı: biri iteration için, biri verification için.
Pattern genelleşiyor. Hızlı-yaklaşık ve yavaş-kesin metriklerinin olduğu her yerde, ikisini de shiple, açıkça etiketle, varsayılan olarak hızlıyı kullan. Hızlı metriği ~%30'dan fazla yanlış olmamalı; yoksa faydalı bir yaklaşıklık değil. ~3.7 chars/token context-lens'in handle etmesi gereken diller için bu çıtayı geçiyor.
Prompt caching tarafı
Caching, çoğu ekibin yetersiz kullandığı kaldıraç — ve context-lens'in boundary'leri yüzeye çıkararak en çok yardım ettiği şey. Anthropic prompt'unun herhangi bir segmentini cache_control: { type: "ephemeral" } ile cache-able işaretlemeye izin veriyor. Sonraki 5 dakikada, o tam prefix'i paylaşan istekler cache'lenmiş kısmı input fiyatının %10'una alıyor. Matematik dönüyor: çağrı başına $0.012'lık 4,000 token'lık bir system prompt warm çağrıda $0.0012 ediyor. Bu 10×.
Çıkmaz: cache_control boundary'sinden önceki her byte aynı olmalı. System prompt'a user'ın adını interpolate ediyorsan — gitti. Tool list'in istekler arası reorder oluyorsa — gitti. Timestamp ekliyorsan — gitti.
context-lens sana gönderdiğin yapıyı gösteriyor. Otomatik cacheability tespit etmiyor, ama "input cache-read varsayılır" toggle'ı ile caching'in çalışsa cost'un ne olacağını görebiliyorsun. Eğer $0.012 → $0.0012 senin trafik seviyende ilginçse, gerçekten çalıştığını doğrulamanın yolu claudoscope'ta — sana canlı bir çağrıda gerçek cache-read ve cache-write breakdown'ını gösteriyor. İki tool birbirini tamamlıyor: context-lens tahmin ediyor, claudoscope ölçüyor.
Caching observability case'i üzerine daha uzun bir yazı yazdım: Prompt caching, Claude'un en ucuz optimizasyonu. Kimse ölçmüyor. — full argümanı isteyenler için.
Bu hafta ne yapmanı tavsiye ediyorum
Üç eskalasyon hamlesi:
Bugün (5 dakika): Ekibinizin şu an shiplediği herhangi bir prompt'u al. context-lens'e temsili bir user mesajıyla yapıştır. Token sayısını not et. Şimdi aynı prompt'un 1-paragraflık bir versiyonunu yaz ve yapıştır. Üç gerçek input'ta kalite regression'ı olmadan sayı %50 düşerse, ücretsiz bir production cost cut'ın var.
Bu sprint (bir öğleden sonra): Prompt değişikliği workflow'una pre-merge bir adım ekle: prompt'a dokunan her PR description'da context-lens token sayılarını (önce / sonra) içermek zorunda. Code review'da test sonuçlarını gösterir gibi. Bir PR input token'larını üçe katlıyorsa, bu bir konuşma olmalı — stealth deploy değil.
Bu çeyrek (bir alışkanlık): Ürünün boyunca prompt-cost-per-feature sayısını gerçek bir metrik olarak takip et. Feature X çağrı başına
$0.02ediyor ve feature Y$0.20ediyorsa, bu fatura sana öğretmeden önce bilmen gereken bir bilgi. context-lens onu toplamaya başlamak için en ucuz yer —count_tokensçağrılması ücretsiz.
LLM uygulamalarının 2026 ekonomisi model seçimi hakkında değil, çoğunlukla. Prompt tasarımı hakkında. Prompt'larını shiplemeden görebilen ekipler göremeyenleri yenecek, önce cost'ta sonra kalitede. Eksik olan "görme" kısmı, ve context-lens onun için.
Bu context-lens'a shipledim — Claude prompt'u yapıştır, shiplemeden ne kadar tutacağını gör. BYOK, backend yok, tarayıcıda çalışıyor. Kaynak: github.com/ferhatatagun/context-lens.
Aynı protokol-seviye yaklaşımı ayrıca dört kardeş tool'a güç veriyor — claudoscope, agent-replay, prompt-lab, tool-lab. Hepsi açık kaynak, hepsi BYOK: ferhatatagun.com/tools.