AI
Biaya Token LLM Bahasa Indonesia: 1.23x, Bukan 2-3x
September 202612 menit baca

Tidak pada tokenizer terkini. Diukur pada 20 pasang kalimat Inggris dan Indonesia yang setara dengan gpt-tokenizer, sisi Indonesia berjumlah 369 token berbanding 300 token Inggris pada o200k_base, rasio 1.23x. Angka 2-3x yang beredar lebih mendekati hasil encoding lama, dan bahkan saat itu pun terlalu dibesar-besarkan.
o200k_base membawa vocabulary yang jauh lebih besar, dan slot tambahannya jatuh secara tidak proporsional ke rangkaian non-Inggris karena bahasa Inggris sudah tercakup baik. Pada corpus yang sama penaltinya turun dari 52 persen ke 23 persen, sementara sisi Inggris tetap tepat 300 token. Kata seperti pengiriman dan keuangan turun dari tiga token menjadi dua.
Pakai endpoint count tokens milik vendornya. Anthropic menyediakan POST ke /v1/messages/count_tokens, yang didokumentasikan gratis dipakai dan ber-rate limit terpisah dari generation, sedangkan Google menyediakan models.countTokens. Keduanya menjalankan tokenizer sesuai model id yang Anda kirim, jadi hitunglah terhadap model yang benar-benar akan Anda pakai.
Umumnya tidak. Anda menambah satu panggilan API penuh berikut token output-nya demi menghemat sekitar 23 persen token input pada satu panggilan, dan membayar dua round trip latency di live chat. Register Bahasa Indonesia seperti beda Anda dan kamu juga hilang. Cara itu baru sepadan pada batch pipeline dokumen yang output Indonesianya tidak dibaca siapa pun.
Tidak, dan rata-rata menyembunyikan hal itu. Tiga dari 20 kalimat Indonesia yang saya ukur lebih murah daripada kembaran Inggrisnya, yang terbaik di 0.72x, karena Bahasa Indonesia tidak memakai article dan tidak berinfleksi untuk kala. Pasangan terburuk mencapai 1.64x karena tersusun dari kata kerja berafiks seperti diperpanjang dan membatalkannya.

Ringkasan Utama
Teks Bahasa Indonesia memakan sekitar 23 persen token lebih banyak daripada makna yang sama dalam bahasa Inggris pada encoding o200k_base milik OpenAI, diukur pada 20 pasang kalimat setara, bukan dua sampai tiga kali lipat seperti yang sering diulang. Pada cl100k_base yang lebih lama selisihnya 52 persen. Tiga dari 20 kalimat Indonesia itu justru lebih murah daripada kembaran Inggrisnya.
Saya sedang menghitung biaya support assistant berbahasa Indonesia dan butuh tepat satu angka: berapa kali lebih mahal Bahasa Indonesia dibanding bahasa Inggris per pesan. Semua sumber yang saya temukan mengulang multiplier 2x sampai 3x yang sama, tidak satu pun menunjukkan pengukuran, dan sebagian besar diam-diam saling mengutip. Pada 2.5x proyeknya nyaris tidak masuk akal. Pada 1.2x aman. Tidak ada yang bisa memberi tahu saya yang mana.
Jadi pada 18 September 2026 saya mengukurnya sendiri. Dua puluh pasang kalimat Inggris dan Indonesia, ditulis tangan dengan register yang benar-benar dikirim produk nyata - balasan support, notifikasi ERP, copy produk, teks privacy - lalu dijalankan lewat package gpt-tokenizer pada o200k_base dan cl100k_base. Tulisan ini adalah pengukuran itu: berapa angkanya, kenapa angkanya bergeser, kenapa merata-ratakannya menyesatkan, dan mitigasi mana yang sepadan dengan usahanya.
Bahasa Indonesia memakan 23 persen token lebih banyak daripada bahasa Inggris untuk 20 kalimat yang sama pada o200k_base, encoding di balik keluarga GPT-4o dan GPT-5. Corpus-nya berjumlah 300 token Inggris berbanding 369 token Indonesia. Pada cl100k_base, encoding lama yang dipakai GPT-4 dan GPT-3.5 Turbo, teks yang persis sama menjadi 300 berbanding 456 - selisih 52 persen. Sisi bahasa Inggrisnya tidak bergeser satu token pun di antara kedua encoding itu.
| Encoding | Keluarga model | Karakter per token EN | Karakter per token ID | Token corpus EN / ID | Rasio ID terhadap EN |
|---|---|---|---|---|---|
| o200k_base | Keluarga GPT-4o dan GPT-5 | 5.40 | 4.38 | 300 / 369 | 1.23x |
| cl100k_base | GPT-4 dan GPT-3.5 Turbo | 5.40 | 3.54 | 300 / 456 | 1.52x |
Karakter per token adalah satuan yang bertahan dalam perbandingan ini, karena hitungan token mentah menguntungkan bahasa mana pun yang lebih singkat secara karakter. Di corpus ini keduanya imbang: sisi Inggris 1.619 karakter dan sisi Indonesia 1.615 karakter, selisih empat karakter saja. Dua sisi itu sama panjang di halaman dan berbeda panjang di sistem billing, dan justru itulah intinya. Di sini bahasa Inggris memadatkan 5,40 karakter ke dalam satu token dan Bahasa Indonesia 4,38. Pengukurannya tidak butuh API key dan selesai di bawah satu detik.
// npm i [email protected] - OpenAI's BPE encodings, offline, no API key.
import { encode as o200k } from "gpt-tokenizer/encoding/o200k_base";
import { encode as cl100k } from "gpt-tokenizer/encoding/cl100k_base";
// Both sides hand-written by the same person in the same register. Feeding
// machine translation in here measures the translator, not the language.
const pairs = [
["The refund has been processed and will appear in your account within three working days.",
"Pengembalian dana sudah diproses dan akan masuk ke rekening Anda dalam tiga hari kerja."],
["Your subscription will renew automatically unless you cancel it before the billing date.",
"Langganan Anda akan diperpanjang secara otomatis kecuali Anda membatalkannya sebelum tanggal penagihan."],
// ...18 more: support replies, ERP notices, product copy, privacy text
];
for (const [name, enc] of [["o200k_base", o200k], ["cl100k_base", cl100k]]) {
let en = 0, id = 0, enChars = 0, idChars = 0;
for (const [a, b] of pairs) {
en += enc(a).length; id += enc(b).length;
enChars += a.length; idChars += b.length;
}
// chars/token, not raw token count. Raw counts flatter whichever language
// happens to need fewer characters to say the same thing.
console.log(name, (id / en).toFixed(2) + "x",
"EN", (enChars / en).toFixed(2), "ID", (idChars / id).toFixed(2));
}
// o200k_base 1.23x EN 5.40 ID 4.38
// cl100k_base 1.52x EN 5.40 ID 3.54gpt-tokenizer adalah implementasi murni TypeScript dari encoding BPE milik OpenAI, tanpa dependency native dan tanpa panggilan jaringan, jadi Anda bisa menghitung sejuta string di CI tanpa key dan tanpa tagihan. Versi 4.0.0 menyediakan setiap encoding lewat import path-nya sendiri, jadi Anda memuat satu vocabulary yang dibutuhkan, bukan semuanya.
Penyebabnya adalah afiksasi. Bahasa Indonesia membentuk satu kata tertulis dari awalan, kata dasar, akhiran, dan sering ditambah klitik, sementara encoding ini mempelajari vocabulary-nya dari teks yang didominasi bahasa Inggris. Akibatnya kata Indonesia yang panjang tidak punya token sendiri dan dipotong menjadi beberapa bagian. Men-decode setiap token id kembali menjadi string-nya memperlihatkan persis di mana potongan itu jatuh.
// Each token id decoded back to its own string, so you can see the seams.
// o200k_base, the encoding behind the GPT-4o and GPT-5 families.
membatalkannya 5 tokens m | emb | at | alk | annya
ketidaknyamanannya 5 tokens ket | idak | ny | aman | annya
dijadwalkan 5 tokens d | ij | ad | walk | an
memverifikasi 3 tokens mem | ver | ifikasi
penghapusan 3 tokens peng | hap | usan
// One Indonesian orthographic word is often prefix + root + suffix + clitic.
// "membatalkannya" is meN- plus batal plus -kan plus -nya: cancel it. English
// spends three cheap words on that; Indonesian spends one expensive one.
// The other direction is why the tax is 1.23x and not 2x. The loanwords a
// real product leans on are already whole tokens:
invoice 1 token invoice
pelanggan 2 tokens pel | angganParuh kedua output itulah alasan pajaknya 1.23x dan bukan 2x. Bahasa Indonesia formal memang padat afiks, tetapi kosakata kerja produk Indonesia nyata penuh dengan loanword bahasa Inggris yang sudah punya token sendiri - invoice terhitung satu token di kedua encoding dalam corpus saya - dan Bahasa Indonesia tidak mengeluarkan biaya apa pun untuk article yang harus dibayar bahasa Inggris di setiap kata benda. Kata kerja berafiks itu mahal; banyak kata bendanya tidak. Mana dari keduanya yang mendominasi copy Anda menentukan rasio yang Anda dapat.
1.52x menjadi 1.23x tanpa satu huruf pun berubah. o200k_base membawa vocabulary yang jauh lebih besar daripada cl100k_base, dan slot tambahannya jatuh secara tidak proporsional ke rangkaian yang bukan bahasa Inggris, karena bahasa Inggris sudah tercakup dengan baik sebelumnya. Tiga kata dari corpus memperlihatkan mekanismenya langsung:
Sisi bahasa Inggris dari corpus ini berjumlah tepat 300 token di kedua encoding, jadi setiap token yang dihemat encoding baru di sini, dihematnya di sisi Indonesia. Itulah temuan yang benar-benar penting bagi sebuah budget. Siapa pun yang menghitung biaya workload Indonesia berdasarkan artikel tahun 2023 sedang menganggarkan penalti yang sudah lunas sekitar separuhnya, pada generasi model yang hampir pasti tidak lagi mereka pakai.
Jangan berasumsi arahnya selalu turun. Dokumentasi token counting milik Anthropic menyatakan bahwa model Claude 4.7 dan setelahnya memakai tokenizer baru, bahwa teks input yang sama menghasilkan sekitar 30 persen token lebih banyak daripada pada model sebelumnya, dan bahwa Anda sebaiknya menghitung ulang alih-alih memakai hitungan lama. Tokenizer adalah variabel harga, dan ia bisa bergerak melawan Anda di antara dua model dari vendor yang sama.
Rata-rata menyembunyikan rentang 0.72x sampai 1.64x. Pasangan medianya 1.29x, di atas rasio corpus, dan tiga dari 20 kalimat Indonesia memakan token lebih sedikit daripada kembaran Inggrisnya pada o200k_base. Ini kedua ujung distribusinya.
| Pasangan kalimat | Token EN | Token ID | Rasio |
|---|---|---|---|
| Pembayaran sudah masuk, invoice belum diterima | 18 | 13 | 0.72x |
| Stock opname bulanan pada hari kerja terakhir | 17 | 16 | 0.94x |
| Gratis ongkos kirim di atas ambang rupiah | 13 | 20 | 1.54x |
| Langganan diperpanjang kecuali dibatalkan tepat waktu | 14 | 23 | 1.64x |
Ujung murahnya adalah Bahasa Indonesia melakukan apa yang paling dikuasainya: tanpa article, tanpa infleksi kala, dan dua loanword bahasa Inggris duduk di satu kalimat pendek. Ujung mahalnya adalah kalimat kebijakan yang disusun dari kata kerja berafiks - diperpanjang, membatalkannya, penagihan - dan itu persis register yang dipakai syarat dan ketentuan, notifikasi ERP, serta email penagihan. Kalau Bahasa Indonesia di produk Anda didominasi pemberitahuan formal, anggarkan lebih dekat ke ujung atas rentang itu, bukan ke tengahnya.
Jalankan script-nya pada katalog pesan Anda sendiri, bukan punya saya. Dua puluh kalimat cukup untuk membantah 2.5x dan jauh dari cukup untuk menetapkan budget. Arahkan ke string yang benar-benar Anda kirim - system prompt, blok few-shot, satu bulan turn pengguna nyata - dan rasio yang keluar milik produk Anda, bukan milik corpus orang lain.
Semua di atas berlaku untuk encoding OpenAI, karena OpenAI-lah vendor yang mempublikasikannya: tiktoken merilis vocabulary BPE sebagai open source, dan hanya itu alasan hitungan offline mungkin dilakukan. Anthropic dan Google tidak menyediakan padanannya, dan metode yang jujur di sana adalah endpoint count tokens - POST ke path messages count_tokens untuk Claude, models.countTokens untuk Gemini. Anthropic mendokumentasikan endpoint-nya gratis dipakai, dengan rate limit terpisah dari generation, dan mengembalikan estimasi yang bisa berbeda sedikit dari angka yang ditagihkan.
# Anthropic publishes no offline tokenizer, so you count over the wire.
# The endpoint is free and rate-limited separately from generation.
curl https://api.anthropic.com/v1/messages/count_tokens \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "content-type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-opus-5",
"messages": [{
"role": "user",
"content": "Langganan Anda akan diperpanjang secara otomatis."
}]
}'
# -> {"input_tokens": 14}
# Google is the same shape: models.countTokens runs the model's own tokenizer.
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:countTokens?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" -X POST \
-d '{"contents":[{"parts":[{"text":"Langganan Anda akan diperpanjang otomatis."}]}]}'
# The model id is not decoration. Anthropic counts under the tokenizer of the
# model you pass, and its docs say Claude 4.7 and later produce about 30 percent
# more tokens for the same text than earlier models. A count is per model, not
# per vendor - and never per blog post.Perbedaan itu lebih besar daripada kedengarannya. Tokenizer offline memungkinkan Anda menghitung sejuta string di dalam sebuah test. Endpoint jaringan mengubah eksperimen rasio bahasa yang sama menjadi batch job ber-rate limit yang terikat pada satu model id tertentu, yang harus Anda anggarkan lalu ulangi setiap kali ganti model - dan itu persis yang diminta dokumentasi Anthropic, alih-alih memakai ulang hitungan lama.
Harga list per satu juta token, dibaca dari halaman pricing masing-masing vendor pada 18 September 2026. Harga bergerak, jadi periksa sendiri alih-alih mengutip balik tabel ini ke siapa pun.
| Provider | Model | Input per 1 juta token | Output per 1 juta token |
|---|---|---|---|
| OpenAI | gpt-5 | $1.25 | $10.00 |
| Anthropic | Claude Sonnet 5 | $2.00 | $10.00 |
| Gemini 2.5 Flash | $0.30 | $2.50 |
Ambil workload yang versi bahasa Inggrisnya menagih satu juta token input. Versi Indonesianya menagih 1.230.000 - tambahan 230.000 token. Itu 29 sen lebih mahal di gpt-5, 46 sen lebih mahal di Claude Sonnet 5, dan 7 sen lebih mahal di Gemini 2.5 Flash. Pada cl100k_base workload yang sama akan membawa tambahan 520.000 token, bukan 230.000, dan dari situlah angka-angka menakutkan di artikel lama berasal.
Output-lah tempat penalti itu benar-benar mendarat, karena output berharga paling tidak lima kali input di setiap baris tabel tadi - tambahan 230.000 token yang sama menjadi 2,30 dolar sebagai output gpt-5, bukan 29 sen sebagai input. Dan perbandingan yang jarang dibuat justru yang mendudukkan semuanya: input Claude Sonnet 5 adalah 6,7 kali input Gemini 2.5 Flash. Bahasanya 1.23x. Pemilihan model dan caching adalah tuasnya; bahasa hanyalah penyesuaian di atasnya.
Tiga di antaranya layak dikerjakan. Yang keempat justru yang paling sering dipilih lebih dulu, dan biasanya penghematan semu.
Tersisa yang terdengar paling pintar: terjemahkan Bahasa Indonesia pengguna ke bahasa Inggris, prompt dalam bahasa Inggris, lalu terjemahkan jawabannya balik. Anda menambah satu panggilan API penuh demi menghemat 23 persen token input pada satu panggilan, dan panggilan tambahan itu menghasilkan token output, jenis yang mahal. Anda juga membayar dua round trip latency di dalam chat UI, dan kehilangan register. Bahasa Indonesia menandai formalitas dengan cara yang tidak dimiliki bahasa Inggris - Anda berbanding kamu, jarak antara Mohon maaf dan Maaf ya - dan perjalanan bolak-balik lewat bahasa Inggris meratakan semuanya. Perataan itu terlihat oleh pelanggan dengan cara yang tidak pernah dicapai hitungan token.
Translate-first layak dipakai pada tepat satu bentuk: batch pipeline atas dokumen, ketika tidak ada yang membaca output Indonesianya, latency tidak jadi masalah, dan terjemahannya sendiri berjalan di model murah. Di live support chat, ia memakan uang, waktu dan nada bicara sekaligus.
Empat batasan, semuanya milik saya.
Semua itu tidak membuat latihannya sia-sia. Itu menjadikannya metode, bukan angka: script-nya dua puluh baris, corpus Anda sudah ada di repository Anda, dan rasio yang dihasilkannya adalah satu-satunya yang pantas masuk spreadsheet Anda.
Multiplier bahasa yang datang tanpa pengukuran adalah rumor, dan 2x sampai 3x adalah rumor paling nyaring dalam perhitungan biaya AI di Indonesia. Angka sebenarnya pada encoding OpenAI terkini adalah 1.23x untuk corpus saya, 1.52x dua generasi model lalu, dan tiga kalimat dari dua puluh justru bergerak ke arah sebaliknya. Ukur string Anda sendiri terhadap model id yang benar-benar akan Anda pakai, ukur ulang saat menggantinya, lalu habiskan sore itu untuk prompt caching - tempat cache read dihargai sepersepuluh base input, dan penghematannya jauh melampaui apa pun yang pernah dibebankan bahasa.
Sumber dan bacaan lanjutan