Langsung ke konten
Tutorial

Penghitungan token untuk GPT, Claude, dan Llama dalam satu API

| 7 min read

Hitung dan potong token di 15 model LLM dengan satu permintaan POST. Cegah luapan jendela konteks dan perkirakan biaya sebelum setiap panggilan API.

AI model comparison dashboard
Photo by Possessed Photography on Unsplash

Anda mengirimkan perintah ke GPT-4o dan responsnya terpotong di tengah kalimat. Anda memeriksa tagihan Anda dan menemukannya pekerjaan batch menghabiskan $40 karena masukannya 3x lebih besar dari yang Anda harapkan. Anda menempelkannya yang panjang dokumen ke Claude dan dapatkan kesalahan: jendela konteks terlampaui. Setiap masalah ini memiliki jejak kembali ke akar permasalahan yang sama; Anda tidak tahu berapa banyak token yang terkandung dalam teks Anda sebelum Anda mengirimkannya.

Penghitungan token adalah pemeriksaan pra-penerbangan yang dibutuhkan setiap integrasi LLM. Jumlah karakter tidak akan membantu Anda. Jumlah kata membuat Anda menjadi kasar, tetapi tokenizer membagi teks secara berbeda tergantung pada modelnya. Anda memerlukan hitungan pasti untuk model yang Anda panggil.

Mengapa jumlah karakter bukan jumlah token

LLM tidak memproses karakter mentah. Mereka memecah teks menjadi token menggunakan tokenizer, yaitu a kosakata potongan subkata yang dilatih pada korpus besar. Pemetaan dari teks ke token adalah tidak jelas dan spesifik model.

Beberapa contoh yang menunjukkan mengapa menghitung karakter menyesatkan Anda:

  • "Aku tidak bisa" dibagi menjadi 3 token di GPT-4: I, can, 't. Itu 7 karakter tetapi 3 token.
  • "antidisbuildingtarianisme" adalah satu kata tetapi 6-8 token tergantung pada model. Tokenizer memecahnya menjadi beberapa subkata yang dikenalinya.
  • "Halo" adalah 1 tanda. " Halo" (dengan spasi di depan) mungkin 2 token karena spasi mendapat tokennya sendiri.
  • Cuplikan kode tokenize berbeda dari prosa. kurung kurawal, titik koma, dan lekukan setiap token yang dikonsumsi. Fungsi 500 karakter dapat dengan mudah menghabiskan biaya 200+ token.

Model GPT menggunakan BPE (byte-pair coding) dengan kosakata cl100k_base atau o200k_base. Claude menggunakan tokenizer BPE yang serupa namun berbeda. Llama menggunakan SentencePiece. Paragraf yang sama menghasilkan berbeda jumlah token di ketiganya.

Hitung token dengan satu panggilan API

Kirim SMS Anda ke botoi /v1/token/count titik akhir dengan model target. APInya mengembalikan perkiraan jumlah token bersama dengan jumlah karakter dan kata.

curl -X POST https://api.botoi.com/v1/token/count \\
  -H "Content-Type: application/json" \\
  -d '{
    "text": "The quick brown fox jumps over the lazy dog. This sentence is used to test tokenizers across different language models.",
    "model": "gpt-4o"
  }'

Tanggapan:

{
  "success": true,
  "data": {
    "tokens": 24,
    "model": "gpt-4o",
    "method": "estimated",
    "characters": 116,
    "words": 20
  }
}

Tanggapannya memberi tahu Anda bahwa kalimat 20 kata ini berharga 24 token di GPT-4o. Anda juga mendapatkan characters Dan words untuk referensi cepat. Itu method bidang menunjukkan pendekatan penghitungan yang digunakan.

Token dihitung berdasarkan model

Teks yang sama menghasilkan jumlah token yang berbeda bergantung pada model yang Anda targetkan. Itu model parameter menerima 15 model di seluruh keluarga besar. Berikut perbandingannya untuk masukan yang sama:

Model Tokenizer Jendela konteks Token (teks yang sama)
gpt-4o o200k_base (BPE) 128K 24
gpt-3.5-turbo cl100k_base (BPE) 16K 24
claude-3.5-soneta Claude BPE 200K 25
tutup-4-kerja Claude BPE 200K 25
llama-3.2 Potongan Kalimat 128K 24
gemini-2.0-flash Potongan Kalimat 1M 24
mistral Potongan Kalimat (BPE) 32K 24

Perbedaannya kecil untuk kalimat bahasa Inggris pendek tetapi bertambah seiring bertambahnya panjang masukan. Non-Inggris teks, kode, dan data terstruktur (JSON, XML) dapat menunjukkan variasi yang lebih besar. Selalu hitung token dengan model tertentu yang ingin Anda hubungi.

Pangkas teks hingga batas token

Ketika prompt Anda melebihi jendela konteks, Anda perlu memangkasnya tanpa merusak kata tengah. Itu /v1/token/truncate titik akhir memotong teks ke jumlah token target pada batas kata.

curl -X POST https://api.botoi.com/v1/token/truncate \\
  -H "Content-Type: application/json" \\
  -d '{
    "text": "You are a helpful assistant. Summarize the following document in three bullet points. The document discusses the impact of renewable energy adoption on global carbon emissions over the past decade, with specific focus on solar and wind installations in Europe and Southeast Asia.",
    "max_tokens": 20,
    "model": "claude-3.5-sonnet"
  }'

Tanggapan:

{
  "success": true,
  "data": {
    "truncated": "You are a helpful assistant. Summarize the following document in three bullet points. The",
    "tokens": 18,
    "was_truncated": true,
    "model": "claude-3.5-sonnet",
    "max_tokens": 20,
    "original_tokens": 48
  }
}

Permintaan aslinya adalah 48 token. API memotongnya menjadi 18 token (sesuai anggaran 20 token) pada batas kata yang bersih. Itu was_truncated bendera memberi tahu Anda apakah teks telah diubah. Itu original_tokens bidang menunjukkan berapa banyak token yang terdapat dalam teks lengkap.

Hal ini berguna untuk menyesuaikan perintah sistem dengan anggaran token yang ketat, sehingga memangkas riwayat obrolan agar tetap ada dalam jendela konteks, dan memotong dokumen sebelum mengirimnya ke API embeddings.

Buat pemeriksaan pra-penerbangan untuk panggilan LLM

Integrasi dengan nilai tertinggi: fungsi yang menghitung token, dibandingkan dengan konteks model jendela, dan terpotong jika perintahnya terlalu panjang. Hal ini mencegah pemotongan diam-diam dan kesalahan API.

const MODEL_LIMITS = {
  "gpt-4o": 128000,
  "gpt-4o-mini": 128000,
  "claude-3.5-sonnet": 200000,
  "claude-4-sonnet": 200000,
  "llama-3.2": 128000,
};

async function countTokens(text, model = "gpt-4o") {
  const res = await fetch("https://api.botoi.com/v1/token/count", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ text, model }),
  });
  const { data } = await res.json();
  return data.tokens;
}

async function truncateText(text, maxTokens, model = "gpt-4o") {
  const res = await fetch("https://api.botoi.com/v1/token/truncate", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ text, max_tokens: maxTokens, model }),
  });
  const { data } = await res.json();
  return data;
}

async function preflightCheck(prompt, model = "gpt-4o") {
  const limit = MODEL_LIMITS[model];
  if (!limit) throw new Error("Unknown model: " + model);

  const tokens = await countTokens(prompt, model);

  // Reserve 20% of the context window for the model's response
  const inputBudget = Math.floor(limit * 0.8);

  if (tokens <= inputBudget) {
    return { safe: true, tokens, limit, model };
  }

  // Truncate to fit within the input budget
  const result = await truncateText(prompt, inputBudget, model);

  return {
    safe: false,
    original_tokens: tokens,
    truncated_tokens: result.tokens,
    truncated_text: result.truncated,
    limit,
    model,
  };
}

// Usage
const prompt = buildPromptFromChatHistory(messages);
const check = await preflightCheck(prompt, "claude-3.5-sonnet");

if (!check.safe) {
  console.log(
    "Prompt truncated from " +
    check.original_tokens + " to " +
    check.truncated_tokens + " tokens"
  );
  prompt = check.truncated_text;
}

const response = await callLLM(prompt, "claude-3.5-sonnet");

Fungsi ini mencadangkan 20% jendela konteks untuk respons model. Jika masukannya cocok, itu melewati tidak berubah. Jika terlalu besar, maka akan terpotong pada anggaran masukan. Kamu selalu tahu persis berapa banyak token yang Anda kirim.

Bungkus ini di setiap panggilan LLM di aplikasi Anda. Ia menambahkan satu permintaan HTTP (dua jika ada pemotongan diperlukan) dan menghilangkan seluruh kelompok kegagalan produksi.

Kasus penggunaan dunia nyata

  • Estimasi biaya sebelum panggilan API. Hitung token dalam kumpulan petunjuk, kalikan berdasarkan harga per token model, dan ketahui total biaya sebelum Anda berkomitmen. Fungsi Node.js ini melakukannya dalam beberapa baris:
async function estimateCost(text, model = "gpt-4o") {
  const tokens = await countTokens(text, model);

  // Price per 1M input tokens (March 2026 pricing)
  const rates = {
    "gpt-4o": 2.50,
    "gpt-4o-mini": 0.15,
    "claude-3.5-sonnet": 3.00,
    "claude-4-sonnet": 4.00,
    "llama-3.2": 0.00,  // self-hosted
  };

  const rate = rates[model] || 0;
  const cost = (tokens / 1_000_000) * rate;

  return {
    tokens,
    model,
    estimated_cost_usd: cost.toFixed(6),
  };
}

// Check cost before sending a large document
const estimate = await estimateCost(longDocument, "gpt-4o");
console.log(estimate);
// { tokens: 14320, model: "gpt-4o", estimated_cost_usd: "0.035800" }
  • Validasi ukuran yang cepat. Tolak atau potong perintah yang dikirimkan pengguna yang melebihi permintaan Anda anggaran token aplikasi. Cegah satu masukan panjang menghabiskan seluruh batas tarif Anda.
  • Memotong dokumen untuk disematkan. Pisahkan dokumen panjang menjadi beberapa bagian yang sesuai dalam batas token model penyematan Anda (biasanya 512 atau 8.192 token). Hitung token per potongan untuk memastikan tidak ada yang melebihi batas.
  • Manajemen riwayat obrolan. Seiring berkembangnya percakapan, pesan-pesan lama semakin meningkat jumlah token melewati jendela konteks. Hitung total token kumulatif setelah setiap pesan dan hapus pesan terlama saat Anda mendekati batas.
  • Pelindung saluran pipa CI/CD. Tambahkan langkah penghitungan token ke alur penerapan Anda. Jika templat cepat melebihi ambang batas yang ditentukan, gagalkan pembangunan sebelum mencapai produksi.

Poin-poin penting

  • Jumlah token bervariasi berdasarkan model. GPT, Claude, dan Llama memberi token pada teks yang sama berbeda. Selalu tentukan model target saat menghitung.
  • Dua titik akhir mencakup alur kerja penuh. /v1/token/count memberitahumu ukurannya. /v1/token/truncate trim agar pas. Keduanya mendukung 15 model.
  • Pemeriksaan pra-penerbangan mencegah kegagalan produksi. Hitung token sebelum setiap LLM panggilan untuk menghindari tanggapan terpotong, kesalahan jendela konteks, dan biaya yang tidak terduga.
  • Tidak diperlukan akun. Tingkat gratis mengizinkan 5 permintaan per menit tanpa pendaftaran. Dapatkan kunci API untuk volume yang lebih tinggi di botoi.com/api.

Itu dokumen API lengkap mencakup daftar lengkap model yang didukung dan titik akhir utilitas pengembang tambahan.

FAQ

Berapa banyak token dalam satu kata?
Rata-rata, satu kata dalam bahasa Inggris setara dengan 1,3 token. Kata-kata umum yang pendek seperti "the" atau "is" adalah salah satu tandanya. Kata yang lebih panjang atau tidak umum seperti "otentikasi" dibagi menjadi 2-4 token subkata. Jumlah pastinya bergantung pada tokenizer model.
Apa itu token di GPT?
Token adalah potongan teks yang diproses model sebagai satu unit. Model GPT menggunakan tokenizer byte-pair coding (BPE) yang membagi teks menjadi beberapa bagian subkata. Kata-kata umum tetap utuh, sedangkan kata-kata langka atau panjang dipecah menjadi bagian-bagian yang lebih kecil. Tanda baca dan spasi juga diberi token.
Bagaimana cara menghitung token sebelum panggilan API?
Kirim teks Anda ke POST https://api.botoi.com/v1/token/count dengan parameter model opsional (gpt-4o, claude-3.5-sonnet, llama-3, dll.). API mengembalikan perkiraan jumlah token, jumlah kata, dan jumlah karakter dalam satu respons.
Apakah LLM yang berbeda memberi token pada teks dengan cara yang sama?
Tidak. Model GPT menggunakan pengkodean cl100k_base atau o200k_base. Claude menggunakan tokenizer BPE yang serupa namun berbeda. Llama menggunakan SentencePiece. Kalimat yang sama menghasilkan jumlah token yang berbeda di seluruh model. Selalu hitung token dengan model spesifik yang ingin Anda panggil.
Apa yang terjadi jika Anda melampaui jendela konteks model?
Kebanyakan LLM API mengembalikan kesalahan ketika input melebihi jendela konteks. Beberapa secara diam-diam memotong masukan, yang dapat memotong instruksi atau konteks penting. Pemeriksaan awal jumlah token dan pemotongan agar sesuai mencegah kedua mode kegagalan.

Mulai membangun dengan botoi

150+ endpoint API untuk pencarian, pemrosesan teks, pembuatan gambar, dan utilitas developer. Paket gratis, tanpa kartu kredit.