AI untuk pemulaPanduan
Mengapa chat AI yang panjang lebih mahal: API mengirim ulang riwayat
Setiap pesan baru dalam chat AI mengirim ulang seluruh riwayat, sehingga input bertambah setiap giliran. Lihat perhitungannya dan 3 cara menekan biayanya.

Di halaman ini
Pesan-pesan pertama dalam sebuah chat itu murah. Pesan kelima puluh biayanya jauh lebih mahal daripada pesan kesepuluh, padahal Anda mengetik jumlah yang sama. Tidak ada yang rusak: memang begitulah cara kerja API chat.
Jawaban singkat#
Model tidak mengingat permintaan Anda sebelumnya. Dokumentasi OpenAI menyatakannya secara langsung: "setiap permintaan pembuatan teks bersifat independen dan stateless", dan untuk percakapan multi-giliran Anda menyertakan pesan-pesan sebelumnya serta jawaban model sebelumnya dalam permintaan berikutnya. Messages API milik Anthropic menjelaskan pola yang sama: percakapan multi-giliran yang stateless, di mana giliran-giliran sebelumnya dikirim melalui parameter messages.
Jadi jendela chat yang Anda lihat di sebuah aplikasi adalah ilusi yang dibangun oleh aplikasi tersebut. Di baliknya, setiap pesan baru adalah permintaan baru yang membawa seluruh percakapan sejauh itu. Anda membayar token input pada setiap permintaan, dan riwayat adalah bagian dari input tersebut. Jika Anda baru mengenal istilah-istilahnya, baca dulu Apa itu token dan Token input vs output.
OpenAI menyatakan sisi penagihannya secara eksplisit untuk rantai responsnya: semua token input sebelumnya dalam rantai ditagih sebagai token input. Prinsip yang sama berlaku untuk API apa pun di mana Anda mengirim riwayatnya sendiri: apa yang Anda kirim itulah yang dihitung.
Contoh perhitungan dengan angka fiktif#
Angka-angka di bawah ini adalah contoh pengajaran, bukan hasil pengukuran. Anggap setiap pesan Anda sekitar 200 token dan setiap jawaban sekitar 300 token. Satu pertukaran yang selesai menambahkan 500 token ke riwayat.
Gulir tabel ke kanan →
| Giliran | Riwayat sebelumnya yang dikirim ulang | Pesan baru | Input permintaan ini | Output |
|---|---|---|---|---|
| 1 | 0 | 200 | 200 | 300 |
| 5 | 500 × 4 = 2.000 | 200 | 2.200 | 300 |
| 10 | 500 × 9 = 4.500 | 200 | 4.700 | 300 |
| 20 | 500 × 19 = 9.500 | 200 | 9.700 | 300 |
Jawabannya tetap sama panjangnya, tetapi input pada giliran 20 hampir lima puluh kali lipat input pada giliran 1. Output tidak bertambah; input yang bertambah.
Sekarang totalnya untuk chat 20 giliran. Riwayat dikirim ulang sebanyak 0, 1, 2 ... 19 kali pertukaran, yang merupakan penjumlahan sederhana:
- Pertukaran lama yang dikirim ulang: 500 × 190 = 95.000 token (190 adalah 0 + 1 + 2 + ... + 19).
- Pesan baru: 200 × 20 = 4.000 token.
- Total input untuk chat: 95.000 + 4.000 = 99.000 token.
- Total output: 300 × 20 = 6.000 token.
Jika model mengingat semuanya secara gratis, inputnya hanya 200 × 20 = 4.000 token. Sisanya adalah riwayat yang dikirim ulang. Menggandakan jumlah giliran tidak menggandakan biaya riwayat, melainkan kira-kira melipatgandakannya empat kali, karena jumlahnya tumbuh seiring kuadrat dari jumlah giliran.
Berapa biayanya pada harga terkini#
Berikut adalah chat 20 giliran yang sama (99.000 input, 6.000 output) pada harga saat ini. Tabelnya live dan diperbarui saat tarif berubah; kolom terakhir adalah harga referensi OpenRouter untuk perbandingan.
| Model | Input $/1Jt | Output $/1Jt | Biaya | OpenRouter |
|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.0022 | $0.0045 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.0021 | $0.0056 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.0059 | $0.0369 |
Total 99.000 token input dan 6.000 token output. Harga per 1 juta token adalah harga saat ini dan berubah seiring tarif kami; kolom OpenRouter menunjukkan harga referensi untuk beban kerja yang sama.
Untuk pengecekan cepat dalam teks: pada MiniMax-M2.7 seluruh percakapan ini berbiaya $0.0059. Untuk chat seperti ini, di mana input mendominasi, harga input paling penting: pada MiniMax-M2.7 harganya lebih murah daripada harga referensi OpenRouter. Per 1 juta token, MiniMax-M2.7 adalah $0.05 untuk input dan $0.15 untuk output.
Tiga cara untuk menekannya#
1. Mulai chat baru saat topik berubah#
Riwayat termurah adalah riwayat kosong. Jika Anda selesai men-debug sebuah fungsi dan sekarang ingin resep masakan, chat baru mengirim 200 token alih-alih 9.700. Di aplikasi ini satu tombol; di kode ini adalah history = []. Lakukan setiap kali konteks sebelumnya tidak lagi membantu pertanyaan berikutnya.
2. Pangkas riwayat#
Simpan hanya beberapa pesan terakhir dan buang sisanya. Misalkan Anda menyimpan tiga pertukaran terakhir, sehingga riwayat tidak pernah melebihi 500 × 3 = 1.500 token:
- Giliran 1-3 tumbuh normal: 0 + 500 + 1.000 = 1.500 token riwayat.
- Giliran 4-20 masing-masing membawa batas 1.500: 1.500 × 17 = 25.500 token.
- Total riwayat: 1.500 + 25.500 = 27.000 token, ditambah 4.000 pesan baru = 31.000 token input.
Itu 31.000 alih-alih 99.000 untuk 20 giliran yang sama, dan pada MiniMax-M2.7 menjadi $0.0025. Harga dari pemangkasan adalah model melupakan bagian awal chat, jadi simpan system prompt dan fakta apa pun yang tidak boleh hilang di luar bagian yang dipangkas.
3. Ganti giliran lama dengan ringkasan#
Saat riwayat menjadi panjang, minta model sekali untuk merangkumnya, lalu lanjutkan dengan ringkasan alih-alih teks lengkap. Dalam contoh di atas, sembilan pertukaran adalah 4.500 token; ringkasan sekitar 300 token membawa poin-poin utama ke depan. Anda membayar satu permintaan tambahan untuk menulis ringkasan, dan setiap permintaan berikutnya lebih ringan. Ini mempertahankan lebih banyak makna daripada pemangkasan biasa, dengan mengorbankan sedikit detail.
Jendela konteks adalah batas terpisah: ini membatasi berapa banyak token yang boleh dimuat satu permintaan, termasuk jawabannya. Riwayat pada akhirnya akan mencapai batas itu; Mengapa jawaban AI berhenti di tengah kalimat? menjelaskannya.
Lihat sendiri di kode Anda#
Responsnya berisi objek usage, jadi Anda bisa mengamati pertumbuhannya sendiri. Ini adalah contoh: ganti kuncinya dan ambil id model dari dokumentasi CheapTokens, karena id berbeda antar penyedia.
from openai import OpenAI
client = OpenAI(base_url='https://api.cheaptokens.dev/v1', api_key='YOUR_KEY')
system = {'role': 'system', 'content': 'You are a helpful assistant.'}
history = []
KEEP = 7 # new message + last 3 exchanges (6 messages); None keeps everything
def ask(text):
history.append({'role': 'user', 'content': text})
r = client.chat.completions.create(
model='MODEL_ID_FROM_DOCS',
messages=[system] + (history[-KEEP:] if KEEP else history),
)
answer = r.choices[0].message.content
history.append({'role': 'assistant', 'content': answer})
print(r.usage.prompt_tokens, r.usage.completion_tokens)
return answerPanggil ask() beberapa kali berturut-turut dan cetak prompt_tokens: dengan KEEP = None nilainya naik setiap giliran, dengan KEEP = 7 nilainya mendatar. Untuk agen yang melakukan perulangan melalui banyak langkah, efek yang sama berlaku pada setiap langkah; Cara memperkirakan biaya agen AI menunjukkan cara menganggarkannya.
Di mana menjalankan chat panjang#
Dialog panjang dan perulangan agen adalah persis beban kerja di mana volume input mendominasi, jadi jendela konteks yang besar dan ruang untuk jawaban panjang keduanya penting:
- MiniMax-M2.7: konteks 180K, hingga 8.192 token per jawaban, input dan output keduanya lebih murah daripada harga referensi OpenRouter.
- DeepSeek-V4-Flash: konteks 380K, hingga 32.768 token per jawaban, output lebih murah daripada harga referensi OpenRouter.
CheapTokens memiliki satu saldo untuk semua model, harga tetap per model tanpa jam sibuk, dan API yang kompatibel dengan OpenAI Chat Completions dan Anthropic Messages, sehingga kode di atas berfungsi hanya dengan mengubah base URL. Isi saldo dan kirim permintaan pertama Anda dengan mengikuti Permintaan API pertama Anda dengan CheapTokens.



