Optimasi biayaPanduan
Lacak pengeluaran API per proyek dan dapatkan peringatan anggaran di Python
Skrip Python singkat mengubah log penggunaan Anda menjadi laporan biaya per proyek dan memperingatkan pada 50, 75, 95 dan 100% dari anggaran bulanan.

Di halaman ini
Tambahkan satu baris JSON ke sebuah file setelah setiap panggilan API, beri label dengan nama proyek, dan biarkan skrip Python 30 baris mengubah file itu menjadi laporan biaya per proyek dan peringatan pada 50, 75, 95 dan 100% dari anggaran bulanan Anda. Ini adalah tampilan yang sama yang baru saja diberikan Anthropic kepada tim Claude Enterprise, dibangun dari log Anda sendiri.
Katakan satu saldo memberi makan sebuah agen, skrip penyusun draf blog dan bot dukungan kecil. Akhir bulan tiba, saldo lebih rendah dari yang Anda harapkan, dan tidak ada yang memberi tahu Anda mana dari ketiganya yang menyebabkannya. Itulah celah yang ditutup ini.
Apa yang dikirim Anthropic, dan apa yang bisa Anda tiru#
Pengumuman Anthropic (28 Oktober 2026) mencakup laporan pintar, survei dalam aplikasi dan anggaran grup gabungan, yang tersedia secara umum hanya pada paket Claude Enterprise (sumber). Dua bagian penting di sini. Sebuah laporan mengelompokkan pekerjaan tim ke dalam alur kerja dan menunjukkan pengeluaran masing-masing. Anggaran gabungan adalah satu angka bulanan bersama, dan admin penagihan mendapat email pada 50%, 75%, 95% dan 100% darinya. Anthropic menambahkan bahwa laporan tersebut untuk merencanakan investasi, bukan untuk menilai individu.
Anda tidak perlu paket enterprise untuk bentuk yang sama. Alur kerja hanyalah label yang Anda pilih, dan keempat ambang batas adalah satu daftar dalam kode. Kelompokkan berdasarkan proyek, bukan berdasarkan orang, karena alasan yang diberikan Anthropic.
Cek cepat
Saldo prabayar Anda sudah menghentikan permintaan pada nol. Mengapa menambahkan peringatan pada 50% dan 75%?
Tampilkan jawaban
Jawaban: Karena nol terlalu terlambat: Anda ingin menyadari loop yang lepas kendali saat masih ada uang untuk menyelidikinya
Saldo adalah penghentian keras, bukan alarm. Ambang batas awal mengubah kejutan pada 100% menjadi pertanyaan pada hari kesembilan.
Log: satu baris per permintaan#
Setiap respons chat completion membawa objek usage dengan prompt_tokens dan completion_. Itu semua yang dibutuhkan laporan, ditambah label proyek yang Anda tambahkan sendiri. Pembungkus ini mengirim permintaan dan menambahkan satu baris ke file bulanan (nama file berubah setiap bulan, jadi bulan baru dimulai dari nol):
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?"}])Gunakan id model lengkap dari dokumentasi CheapTokens (deepseek-, zai-); nama pendek dari tabel harga tidak diterima oleh API. Kunci berasal dari variabel lingkungan, tidak pernah dari file.

Skrip: biaya per proyek dan peringatan ambang batas#
Simpan ini sebagai report.py. Harga adalah placeholder: salin yang terkini dari tabel harga (kedua model berbagi satu harga contoh di sini hanya agar aritmetika tetap mudah dibaca).
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]))Empat baris terakhir adalah bagian yang orang lupakan. Tanpa file status kecil, skrip akan berteriak "melewati 50%" pada setiap eksekusi selama sisa bulan. Dengan itu, setiap level menyala sekali.
Jalankan dan baca hasilnya#
Ambil log mainan berisi empat baris (yang asli memiliki satu baris per permintaan, jadi ribuan):
{"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}Dengan harga contoh dan anggaran 10, python report.py mencetak:
agent $ 4.20 65%
blog $ 1.60 25%
bot $ 0.70 11%
total $ 6.50 of $10.00 (65%)
WARNING: budget passed 50%Agen hampir dua pertiga dari tagihan, dan peringatan datang pada 50%, bukan di akhir. Jalankan lagi dan peringatan tetap diam sampai total mencapai 75%.

Agar ini berjalan setiap bulan, Anda perlu tiga langkah:
Langkah demi langkah
Sambungkan dalam tiga langkah
Catat setiap panggilan
Rutekan semua panggilan Anda melalui ask(project, model, messages) dan pilih label proyek yang pendek dan stabil. Mengganti nama label di tengah bulan memecah satu proyek menjadi dua baris.
Tetapkan harga dan anggaran
Masukkan harga terkini dari tabel harga ke PRICES, dan ekspor batas Anda: export BUDGET_.
Jalankan sesuai jadwal
Satu baris cron per jam sudah cukup: 0 * * * * cd ~/. Kirim output ke perintah mail atau chat jika Anda ingin peringatan didorong kepada Anda.
Bagaimana sebulan terlihat pada model murah#
Angka menjadi berguna setelah menjadi angka Anda. Asumsikan agen dari log mainan rata-rata 30.000 token input dan 2.000 token output per langkah, 20 langkah per tugas, dua tugas sehari. Satu langkah pada DeepSeek-V4-Flash berbiaya $0.00065; pada GLM-5.3-Flash, $0.00068. Sehari adalah 40 langkah, sebulan 1.200. Geser slider agar sesuai dengan agen Anda sendiri:
Kalkulator biaya
Satu hari agen: langkah per tugas dikali tugas per hari
Token input per permintaan: 30.000 · Token output per permintaan: 2.000 · Permintaan per hari: 40
| Model | Per hari | Per bulan |
|---|---|---|
| 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 |
Dan sebulan pada 1.200 langkah, dengan input dan output dihitung bersama:
| Model | Input $/1Jt | Output $/1Jt | Per permintaan | 1.200 permintaan | OpenRouter, 1.200 permintaan |
|---|---|---|---|---|---|
| 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 |
30.000 token input dan 2.000 token output per permintaan. Harga per 1 juta token adalah harga saat ini dan berubah seiring tarif kami; kolom OpenRouter menunjukkan harga referensi untuk beban kerja yang sama.
Secara total, dengan input dan output dihitung bersama, kedua model lebih murah daripada harga referensi OpenRouter dalam tabel itu, dengan satu harga pada jam berapa pun dan tanpa biaya tambahan jam sibuk. DeepSeek-V4-Flash juga mengizinkan hingga 32.768 token output per jawaban dan konteks 380K; GLM-5.3-Flash memiliki konteks 390K. Setelah laporan menunjukkan proyek mana yang berat, mengganti string model hanya proyek itu adalah perubahan satu baris, dan satu saldo mencakup setiap model. Untuk berapa banyak token yang benar-benar digunakan satu permintaan, lihat berapa banyak token yang digunakan permintaan API; untuk menghentikan satu eksekusi agen di tengah jalan, lihat melacak biaya token agen AI. Harga dan model ada di halaman model CheapTokens.
Di mana ini salah#
- Sebuah model hilang dari
PRICES. Skrip berhenti denganKeyErroryang menyebutkan model tersebut. Tambahkan; jangan default ke nol, atau proyek tampak gratis. - Panggilan streaming. Potongan terakhir membawa usage hanya jika Anda memintanya (
stream_di OpenAI SDK). Jika tidak, log Anda memiliki celah.options={"include_ usage": True} - Permintaan gagal. Catat hanya respons yang memiliki objek
usage; permintaan yang error tidak memiliki apa pun untuk dihitung. - Laporan per orang. Jaga label tetap pada nama proyek atau agen. Laporan tentang orang mengundang kesimpulan yang salah.



