Bir şey üzerinde çalışırken ya da bir LLM ajanıyla başka bir şekilde etkileşim kurarken birden "Kullanım limitinize ulaştınız" mesajını aldığınız anı bilir misiniz? Artık sıfırlanmasını beklemeniz gerekir ya da belki model değiştirebilirsiniz, ama o model limite takılan kadar iyi değildir. Merak etmeyin — o mesajın altında bir yerde, kredi kartı ekleme ve etkileşime devam etmenin kaç token tuttuğunu görme seçeneğini bulacaksınız.
İklim değişikliğinin etkilerini göstermeye devam ettiği bir dünyada — dünyanın dört bir yanında orman yangınları, düşük su seviyeleri ve eriyen buzullar — token tasarrufu, gezegenin bir parçasını kurtarmak anlamına gelebilir. Kullanıcılar token'larını verimli kullanabilirse, yapay zeka modellerini çalıştırmak için gereken enerji ve bu enerjiye giden tüm kaynaklar azaltılabilir. Evdeki bilgisayarınızın bir LLM modeli çalıştırabildiği ve işiniz için ihtiyaç duyduğunuz her şeyi yapabildiği bir noktaya gelebiliriz.
Token'ları yapay zeka modellerinin para birimi olarak düşünebilirsiniz, ama mesele bundan ibaret değil. Token'lar her model tarafından farklı hesaplanır ve hem input hem de output boyutu önemlidir. Kaba bir kural olarak 1 token yaklaşık 4 karaktere denk gelir. Örneğin "My coffee machine does not turn on" yazarsam, bu cümle 6 boşluk dahil 34 karakterdir. Çoğu model token tasarrufu için boşluk karakterlerini ayıklar; onları çıkarırsak 28 karakter kalır, bu da 28 / 4 = 7 token eder. Diyelim ki modeliniz Claude Fable 5'e benzer bir fiyata sahip — 1 milyon input token'ı için 10 €, 1 milyon output token'ı için 50 €. Sadece input için 0,00007 € ödersiniz ve output'un uzunluğuna bağlı olarak — diyelim 300 karakter — output için yaklaşık 0,00375 € ödersiniz; yani bu tek soru için toplamda neredeyse 0,004 € ödemiş olursunuz.
İşte basitleştirilmiş hesap:
Cümle: "My coffee machine does not turn on" → 34 karakter (6 boşluk dahil) → boşluksuz: 34 − 6 = 28 karakter
Input token'ları: 28 karakter ÷ 4 = 7 token
Input maliyeti (10 € / 1M token): 7 × (10 € ÷ 1.000.000) = 0,00007 €
Output: 300 karakter 300 ÷ 4 = 75 token
Output maliyeti (50 € / 1M token): 75 × (50 € ÷ 1.000.000) = 0,00375 €
Toplam: 0,00007 € + 0,00375 € = 0,00382 €
ChatGPT veya Claude gibi LLM'leri kullanırken kontrol edemediğimiz bir şey var: cevabın ne kadar uzun olacağı ya da etkileşim için önceden ne kadar para harcamak istediğimiz. LLM'leri kodlama için kullanmaya başladığınızda işler iyice karışır, çünkü izin verirseniz LLM terminal komutları çalıştırır, dosyaları yapılandırır, kod yazar, MCP sunucularından veya skill'lerden bilgi çeker ve daha fazlasını yapar. LLM'leri bu şekilde kullanırsanız kontrolü kaybetmek çok kolaydır.
Kendime, geliştirme sırasında ya da genel olarak yapay zekayla çalışırken nasıl token tasarrufu yapabileceğimi sordum. Hedefim minimum-orta düzeyde input ve minimum output'tu. Bunu test etmek için Claude Code kullandım ve aynı projeyi üç şekilde kurmayı denedim: framework'süz ve MCP sunucusuz, framework'lü ama MCP'siz ve framework ile MCP sunucusu birlikte.
İşte sonuçlar:
Tablo 1
| Vanilla Node (T1) | Next.js, MCP'siz (T2) | Next.js + MCP (T3) | |
|---|---|---|---|
| Input token'ları | 50 | 51 | 14.800 (tahmini) |
| Output token'ları | ~27.000 | 44.065 | 5.700 (tahmini) |
| Toplam token | ~27.050 | 44.116 | ~20.500 (tahmini) / ~30.200 (ölçülen) |
| Maliyet | 0,675 $ | 1,102 $ | 0,217 $ |
Sonuç şu oldu: framework + MCP sunucusu yaklaşımı çok daha az token kullandı — daha net söylemek gerekirse neredeyse 3,5 kat daha ucuzdu ve 2 kat daha az token harcadı.
Framework + MCP yaklaşımı biraz manuel iş gerektirdi. MCP sunucusunu kendim kurmam ve ilk yapılandırmayı kendim yapmam gerekti. Yine de bu el emeğine rağmen avantajlar açık: daha az token harcıyorsunuz, muhtemelen daha az enerji tüketiyorsunuz ve para biriktiriyorsunuz. Bu ayrıca LLM kullanımınızın ve bilginizin, sadece büyük miktarda token tüketen kullanıcılardan daha iyi olduğu anlamına da gelebilir.
Hepinizi framework'leri ve MCP sunucularını kullanmaya, ayrıca A2A, ACP, ANP ve UCP gibi diğer yapay zeka protokollerini denemeye teşvik ediyorum; çünkü bunlar LLM'inize en alakalı ve en hızlı bağlamı veriyor. Sonuçlarınız da muhtemelen daha iyi olacak — bunu somut kanıtlarla test etmedim, ama gördüğüm kadarıyla projenin yapısı ve temeli sağlam görünüyor.
Token kullanımınıza dikkat edin ve gezegeni koruyun.
Aşağıda, bu küçük deney için kullanılan tabloların geri kalanını ve prompt'ları bulacaksınız.
Claude Code v2.1.233, Model: Opus 5 (varsayılan)
Prompt: "Endpoint'ime bir API çağrısı yapan ve yanıtın başlığını, içeriğini ve yazarını gösteren bir proje oluştur. Endpoint URL'si: http://URL:8081/endpoint. Ayrıca bu görev için her adımda kaç token harcadığını listele."
Tablo 2
| # | Adım | ~Bu adımdaki token | ~Kümülatif |
|---|---|---|---|
| 1 | Endpoint'e curl (büyük JSON yanıtı) | ~9.500 | ~9.500 |
| 2 | node/npm kontrolü, hedef dizin | ~1.600 | ~11.100 |
| 3 | package.json yaz | ~1.000 | ~12.100 |
| 4 | api.js yaz | ~1.300 | ~13.400 |
| 5 | server.js yaz | ~1.400 | ~14.800 |
| 6 | public/index.html yaz | ~2.400 | ~17.200 |
| 7 | cli.js yaz | ~1.000 | ~18.200 |
| 8 | CLI'yi çalıştır (tüm makaleyi basar) | ~1.900 | ~20.100 |
| 9 | Sunucu testi — 3000 portunda EADDRINUSE | ~1.900 | ~22.000 |
| 10 | 4300'de sunucuyu yeniden test et | ~1.600 | ~23.600 |
| 11 | Varsayılan portu düzenle | ~800 | ~24.400 |
| 12 | README.md yaz | ~1.200 | ~25.600 |
| 13 | Özet | ~1.300 | ~26.900 |
Prompt: "Next.js kullanarak, endpoint'ime bir API çağrısı yapan ve yanıtın başlığını, içeriğini ve yazarını gösteren bir proje oluştur. Endpoint URL'si: http://URL:8081/endpoint. Ayrıca bu görev için her adımda kaç token harcadığını listele."
Tablo 3
| # | Adım | Token |
|---|---|---|
| 1 | Dizini listele, node kontrol et, endpoint'i yokla | 24.411 |
| 2 | create-next-app iskeleti | 1.951 |
| 3 | Oluşturulan dosyaları incele | 396 |
| 4 | .env.local + drafts.ts yaz | 1.251 |
| 5 | page.tsx yaz | 972 |
| 6 | layout.tsx oku (AGENTS.md'yi ortaya çıkardı) | 164 |
| 7 | Pakete gömülü Next dokümanlarını listele | 904 |
| 8 | Doküman dizinini + app ağacını oku | 163 |
| 9 | Başarısız cd (eski shell yolu) | 1.960 |
| 10 | Veri çekme rehberini oku | 204 |
| 11 | force-dynamic için grep | 2.309 |
| 12 | Önbellekleme rehberini oku | 397 |
| 13 | 3 düzenleme (no-store/force-dynamic kaldır, metadata) | 2.156 |
| 14 | Build #1 — statik prerender hatasını yakaladı | 507 |
| 15 | Eski önbellekleme rehberinde grep | 770 |
| 16 | Segment yapılandırma bölümünü oku | 302 |
| 17 | force-dynamic'i geri getiren 2 düzenleme | 2.386 |
| 18 | Build #2 — dinamik olduğunu doğrular | 337 |
| 19 | Dev sunucusunu başlat, HTML çek | 846 |
| 20 | Port çakışmasını teşhis et | 206 |
| 21 | :3001'de render edilen çıktıyı doğrula | 751 |
| 22 | Author işaretlemesini incele | 451 |
| 23 | Dev sunucusunun PID'sini al | 1.271 |
| Toplam | ~44.065 |
Tablo 4
| # | Adım | Input (tahmini) | Output (tahmini) | Sayac farkı (ölçülen) |
|---|---|---|---|---|
| 1 | Proje yapısını incele + dokümanları bul | 400 | 130 | 468 |
| 2 | Doküman dizinini + 01-app ağacını oku | 950 | 110 | 924 |
| 3 | Doküman klasörlerini listele | 450 | 120 | 1.791 |
| 4 | fetching-data.md + route-handlers.md oku | 7.200 | 90 | 1.190 |
| 5 | App dosyaları, yapılandırmalar + caching.md oku | 3.000 | 120 | 11.043 |
| 6 | fetch.md oku + deprecation'ları grep'le | 2.020 | 110 | 4.770 |
| 7 | lib/drafts.ts + route.ts yaz | 80 | 600 | 4.197 |
| 8 | app/page.tsx yaz | 40 | 1.650 | 2.496 |
| 9 | tsc --noEmit | 30 | 70 | 257 |
| 10 | Dev sunucusunu başlat | 150 | 110 | 324 |
| 11 | /api/drafts ve / testleri | 250 | 330 | 765 |
| 12 | İçeriği doğrula + lint | 200 | 230 | 821 |
| 13 | Önceki özet mesajı | — | 1.150 | ~1.200 |
| 14 | Bu mesaj | — | 900 | — |
| Toplam | ~14.800 | ~5.700 | ~30.200 |