Maliyet optimizasyonuKılavuz
Python ile proje başına API harcamasını izleyin ve bütçe uyarıları alın
Kısa bir Python betiği kullanım günlüğünüzü proje başına maliyet raporuna dönüştürür ve aylık bütçenin %50, %75, %95 ve %100'ünde uyarır.

Bu sayfada
Her API çağrısından sonra dosyaya bir JSON satırı ekleyin, ona bir proje adı etiketi verin ve 30 satırlık bir Python betiğinin bu dosyayı proje başına maliyet raporuna ve aylık bütçenizin %50, %75, %95 ve %100'ünde bir uyarıya dönüştürmesine izin verin. Bu, Anthropic'in Claude Enterprise ekiplerine sunduğu görünümün aynısı, kendi günlüğünüzden inşa edilmiş hali.
Diyelim ki tek bir bakiye bir ajanı, bir blog taslağı betiğini ve küçük bir destek botunu besliyor. Ay sonu gelir, bakiye umduğunuzdan düşüktür ve hiçbir şey üçünden hangisinin bunu yaptığını söylemez. Bu kapatılan boşluk tam da budur.
Anthropic ne yayınladı ve siz neyi kopyalayabilirsiniz#
Anthropic'in duyurusu (28 Ekim 2026) akıllı raporları, uygulama içi anketleri ve havuzlanmış grup bütçelerini kapsıyor ve yalnızca Claude Enterprise planlarında genel kullanıma sunuluyor (kaynak). Burada iki kısım önemli. Bir rapor, bir ekibin işini iş akışlarına gruplar ve her birinin harcamasını gösterir. Havuzlanmış bütçe, tek bir paylaşılan aylık sayıdır ve faturalama yöneticileri bunun %50, %75, %95 ve %100'ünde e-posta alır. Anthropic, raporların yatırım planlaması için olduğunu, bireyleri yargılamak için olmadığını ekliyor.
Aynı şekil için kurumsal plana ihtiyacınız yok. Bir iş akışı sadece seçtiğiniz bir etikettir ve dört eşik kodda tek bir listedir. Anthropic'in verdiği nedenle kişiye göre değil, projeye göre gruplayın.
Hızlı kontrol
Ön ödemeli bakiyeniz zaten istekleri sıfırda durduruyor. Neden %50 ve %75'te uyarı ekleyesiniz?
Cevabı göster
Cevap: Çünkü sıfır çok geç: kontrolden çıkmış bir döngüyü, hâlâ inceleyecek paranız varken fark etmek istersiniz
Bakiye sert bir durdurucudur, alarm değil. Erken eşikler, %100'deki bir sürprizi dokuzuncu günde bir soruya dönüştürür.
Günlük: istek başına bir satır#
Her sohbet tamamlama yanıtı, prompt_tokens ve completion_ içeren bir usage nesnesi taşır. Raporun ihtiyacı olan tek şey bu, artı kendi eklediğiniz bir proje etiketi. Bu sarmalayıcı isteği gönderir ve aylık bir dosyaya bir satır ekler (dosya adı her ay değişir, böylece yeni ay sıfırdan başlar):
import json, os, time
from openai import OpenAI
client = OpenAI(base_url="https://api.cheaptokens.dev/v1",
api_key=os.environ["CHEAPTOKENS_API_KEY"])
def ask(project, model, messages):
r = client.chat.completions.create(model=model, messages=messages)
with open(time.strftime("usage-%Y-%m.jsonl"), "a") as f:
f.write(json.dumps({"project": project, "model": model,
"prompt_tokens": r.usage.prompt_tokens,
"completion_tokens": r.usage.completion_tokens}) + "\n")
return r
ask("support-bot", "zai-org/GLM-5.3-Flash",
[{"role": "user", "content": "Where is my order?"}])CheapTokens belgelerindeki tam model kimliğini kullanın (deepseek-, zai-); fiyat tablolarındaki kısa adlar API tarafından kabul edilmez. Anahtar bir ortam değişkeninden gelir, asla dosyadan değil.

Betik: proje başına maliyet ve eşik uyarıları#
Bunu report.py olarak kaydedin. Fiyatlar yer tutucudur: güncel olanları fiyatlandırma tablosundan kopyalayın (burada her iki model de yalnızca aritmetiği okunabilir tutmak için tek bir örnek fiyatı paylaşıyor).
import json, os, sys, time
from collections import defaultdict
LOG = time.strftime("usage-%Y-%m.jsonl")
BUDGET = float(os.environ.get("BUDGET_USD", "10")) # example, substitute your own
STATE = LOG + ".alert"
LEVELS = [50, 75, 95, 100]
PRICES = { # USD per 1M tokens (input, output): example, substitute current prices
"deepseek-ai/DeepSeek-V4-Flash-0731": (1.0, 2.0),
"zai-org/GLM-5.3-Flash": (1.0, 2.0),
}
spend = defaultdict(float)
with open(LOG) as f:
for line in f:
r = json.loads(line)
p_in, p_out = PRICES[r["model"]]
spend[r["project"]] += (r["prompt_tokens"] * p_in
+ r["completion_tokens"] * p_out) / 1_000_000
total = sum(spend.values())
if total == 0:
sys.exit("log is empty")
for name, usd in sorted(spend.items(), key=lambda kv: -kv[1]):
print(f"{name:<8} ${usd:6.2f} {usd / total:5.0%}")
print(f"{'total':<8} ${total:6.2f} of ${BUDGET:.2f} ({total / BUDGET:.0%})")
last = int(open(STATE).read()) if os.path.exists(STATE) else 0
crossed = [l for l in LEVELS if total >= BUDGET * l / 100 and l > last]
if crossed:
print(f"WARNING: budget passed {crossed[-1]}%")
open(STATE, "w").write(str(crossed[-1]))Son dört satır insanların unuttuğu kısımdır. Küçük durum dosyası olmadan, betik ayın geri kalanında her çalıştırmada "%50 aşıldı" diye bağırırdı. Onunla, her seviye bir kez tetiklenir.
Çalıştırın ve sonucu okuyun#
Dört satırlık oyuncak bir günlük alın (gerçek olanda istek başına bir satır vardır, yani binlerce):
{"project": "agent", "model": "deepseek-ai/DeepSeek-V4-Flash-0731", "prompt_tokens": 2400000, "completion_tokens": 300000}
{"project": "agent", "model": "deepseek-ai/DeepSeek-V4-Flash-0731", "prompt_tokens": 1000000, "completion_tokens": 100000}
{"project": "blog", "model": "zai-org/GLM-5.3-Flash", "prompt_tokens": 800000, "completion_tokens": 400000}
{"project": "bot", "model": "zai-org/GLM-5.3-Flash", "prompt_tokens": 500000, "completion_tokens": 100000}Örnek fiyatlar ve 10'luk bir bütçeyle, python report.py şunu yazdırır:
agent $ 4.20 65%
blog $ 1.60 25%
bot $ 0.70 11%
total $ 6.50 of $10.00 (65%)
WARNING: budget passed 50%Ajan faturanın neredeyse üçte ikisidir ve uyarı sonunda değil, %50'de geldi. Tekrar çalıştırın ve toplam %75'e ulaşana kadar uyarı sessiz kalır.

Bunu her ay çalıştırmak için üç adıma ihtiyacınız var:
Adım adım
Üç adımda bağlayın
Her çağrıyı günlüğe kaydedin
Tüm çağrılarınızı ask(project, model, messages) üzerinden yönlendirin ve kısa, sabit bir proje etiketi seçin. Etiketleri ay ortasında yeniden adlandırmak bir projeyi iki satıra böler.
Fiyatları ve bütçeyi ayarlayın
Fiyatlandırma tablosundaki güncel fiyatları PRICES içine koyun ve limitinizi dışa aktarın: export BUDGET_.
Bir zamanlamayla çalıştırın
Saatlik bir cron satırı yeterlidir: 0 * * * * cd ~/. Uyarının size iletilmesini istiyorsanız çıktıyı bir posta veya sohbet komutuna gönderin.
Ucuz modellerde bir ay nasıl görünür#
Sayılar sizin sayılarınız olduğunda işe yarar. Oyuncak günlükteki ajanın adım başına ortalama 30.000 giriş ve 2.000 çıkış tokenı kullandığını, görev başına 20 adım, günde iki görev olduğunu varsayın. DeepSeek-V4-Flash'te bir adım $0.00065 tutar; GLM-5.3-Flash'te $0.00068. Bir gün 40 adım, bir ay 1.200. Kaydırıcıları kendi ajanınıza uyacak şekilde hareket ettirin:
Maliyet hesaplayıcı
Ajanın bir günü: görev başına adım çarpı gün başına görev
İstek başına giriş token'ı: 30.000 · İstek başına çıkış token'ı: 2.000 · Günlük istek sayısı: 40
| Model | Günlük | Aylık |
|---|---|---|
| GLM-5.3-Flash$0.02$0.04 | $0.0272 | $0.816 |
| DeepSeek-V4-Flash$0.015$0.10 | $0.026 | $0.78 |
| MiniMax-M2.7$0.05$0.15 | $0.072 | $2.16 |
Ve 1.200 adımda ay, giriş ve çıkış birlikte sayıldığında:
| Model | Giriş $/1M | Çıkış $/1M | İstek başına | 1.200 istek | OpenRouter, 1.200 istek |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.00068 | $0.816 | $1.41 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.00065 | $0.78 | $2.86 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.0018 | $2.16 | $25.92 |
İstek başına 30.000 giriş ve 2.000 çıkış token'ı. 1M token başına fiyatlar günceldir ve tarifelerimizle birlikte değişir; OpenRouter sütunu aynı iş yükü için referans fiyatları gösterir.
Toplamda, giriş ve çıkış birlikte sayıldığında, her iki model de o tablodaki OpenRouter referans fiyatlarından daha ucuza gelir; her saatte tek fiyat ve yoğun saat ek ücreti yok. DeepSeek-V4-Flash ayrıca yanıt başına 32.768 çıkış tokenına ve 380K bağlama izin verir; GLM-5.3-Flash 390K bağlama sahiptir. Rapor hangi projenin ağır olan olduğunu gösterdiğinde, yalnızca o projenin model dizesini değiştirmek tek satırlık bir değişikliktir ve tek bir bakiye her modeli kapsar. Tek bir isteğin gerçekte kaç token kullandığı için bir API isteğinin kaç token kullandığına bakın; bir ajan çalıştırmasını yarıda durdurmak için AI ajanı token maliyetini izleme yazısına bakın. Fiyatlar ve modeller CheapTokens modeller sayfasında.
Bunun ters gittiği yerler#
PRICESiçinde bir model eksik. Betik, modeli adlandıran birKeyErrorile durur. Ekleyin; sıfıra varsayılan yapmayın, yoksa proje bedava görünür.- Akışlı çağrılar. Son parça, yalnızca isterseniz kullanım taşır (OpenAI SDK'da
stream_). Aksi halde günlüğünüzde boşluklar olur.options={"include_ usage": True} - Başarısız istekler. Yalnızca
usagenesnesi olan yanıtları günlüğe kaydedin; hata veren bir istekte sayılacak bir şey yoktur. - Kişi başına raporlar. Etiketi bir proje veya ajan adıyla sınırlı tutun. İnsanlar hakkında bir rapor yanlış sonuçlara davet çıkarır.



