Naar inhoud
lightbulb Welkom op de nieuwe kennisbank | We hebben de docs volledig vernieuwd met meer dan 160 features. Bekijk wat nieuw isarrow_forward

Tokens tellen met de Gemini API

Tel tokens voor en na een call om kosten te schatten, context-limieten te bewaken en je Gemini-applicatie efficiënt te bouwen met de google-genai SDK.

Waarom tokens tellen

Tokens zijn de rekeneenheid van taalmodellen. Een token is gemiddeld zo'n 4 tekens in het Engels en 3 tot 4 tekens in het Nederlands. Tokentelling helpt je bij vier dingen:

  • Kostenschatting: bereken vooraf de verwachte kosten van je prompts.
  • Context-limietbeheer: voorkom fouten doordat je input het contextvenster overschrijdt.
  • Efficientie: optimaliseer prompts en bespaar onnodige tokens.
  • Debugging: begrijp waarom een call duurder of goedkoper uitvalt dan verwacht.

Het tellen zelf is gratis. De count_tokens-methode kost geen credits en heeft een eigen quotum van ongeveer 3.000 verzoeken per minuut.

info

Welke SDK gebruik je in 2026

Gebruik de google-genai SDK (from google import genai). Dit is de actuele, ondersteunde Python-bibliotheek. De oudere google.generativeai-package is uitgefaseerd; nieuwe code kun je beter direct op google-genai bouwen.

Tokens tellen voor een call

from google import genai
import os

client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])

prompt = "Schrijf een gedetailleerde uitleg van hoe het internet werkt."

count_result = client.models.count_tokens(
    model="gemini-2.5-flash",
    contents=prompt,
)
print(f"Tokenaantal: {count_result.total_tokens}")

kosten_per_miljoen = 0.30
geschatte_kosten = (count_result.total_tokens / 1_000_000) * kosten_per_miljoen
print(f"Geschatte inputkosten: ${geschatte_kosten:.6f}")

Tokens tellen na een call

Elke respons bevat usage_metadata met het exacte verbruik:

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="Wat is de hoofdstad van Japan?",
)

meta = response.usage_metadata
print(f"Prompt tokens: {meta.prompt_token_count}")
print(f"Kandidaat tokens: {meta.candidates_token_count}")
print(f"Totaal: {meta.total_token_count}")

if meta.cached_content_token_count:
    print(f"Uit cache: {meta.cached_content_token_count}")
if meta.thoughts_token_count:
    print(f"Denk-tokens: {meta.thoughts_token_count}")

Bij denkende modellen verschijnt thoughts_token_count apart. Die denk-tokens worden als output gefactureerd, dus reken ze mee in je kostenraming.

Tokengewichten per modaliteit

Niet alle content kost evenveel. De richtwaarden volgens de officiele documentatie:

Type Tokenkost
Tekst ongeveer 1 token per 4 tekens
Afbeelding (beide zijden tot 384 px) 258 tokens
Afbeelding (groter) per tegel van 768 bij 768 px telt 258 tokens
Audio 32 tokens per seconde
Video 263 tokens per seconde
from google.genai import types

with open("diagram.png", "rb") as f:
    afbeelding = f.read()

count_met_afbeelding = client.models.count_tokens(
    model="gemini-2.5-flash",
    contents=[
        "Beschrijf dit diagram:",
        types.Part.from_bytes(data=afbeelding, mime_type="image/png"),
    ],
)
print(f"Tokens met afbeelding: {count_met_afbeelding.total_tokens}")

count_alleen_tekst = client.models.count_tokens(
    model="gemini-2.5-flash",
    contents="Beschrijf dit diagram:",
)
print(f"Alleen tekst: {count_alleen_tekst.total_tokens}")

verschil = count_met_afbeelding.total_tokens - count_alleen_tekst.total_tokens
print(f"Afbeelding kost: {verschil} tokens")
lightbulb

Tel grote prompts altijd vooraf

Een onverwacht grote afbeelding, een lange video of een dik PDF kan de kosten per call flink opdrijven. Een korte count_tokens-controle vooraf is gratis en voorkomt verrassingen op je factuur.

Context-limiet bewaken

Gemini 2.5 Flash en Gemini 3.5 Flash hebben een contextvenster van 1.048.576 tokens. Gemini 2.5 Pro biedt 1 miljoen tokens. Bouw altijd een veiligheidsmarge in, zodat het antwoord van het model er nog bij past.

MODEL_TOKEN_LIMIET = 1_048_576

def binnen_limiet(contents, marge: float = 0.9) -> bool:
    count = client.models.count_tokens(
        model="gemini-2.5-flash",
        contents=contents,
    )
    effectieve_limiet = MODEL_TOKEN_LIMIET * marge
    return count.total_tokens < effectieve_limiet

def splits_in_chunks(tekst: str, max_tokens: int = 50_000) -> list:
    woorden = tekst.split()
    chunks = []
    huidig = []

    for woord in woorden:
        huidig.append(woord)
        count = client.models.count_tokens(
            model="gemini-2.5-flash",
            contents=" ".join(huidig),
        )
        if count.total_tokens >= max_tokens:
            huidig.pop()
            chunks.append(" ".join(huidig))
            huidig = [woord]

    if huidig:
        chunks.append(" ".join(huidig))

    return chunks
warning

Tel niet per woord in productie

Het voorbeeld hierboven roept count_tokens per woord aan en is daarmee traag en quota-intensief. Voor grote teksten kun je beter grovere blokken proberen (bijvoorbeeld per alinea) en alleen bijsplitsen wanneer een blok te groot blijkt.

Kosten berekenen per model

Tarieven per miljoen tokens (betaalde tier, standaard, stand juni 2026). Controleer de actuele prijzen altijd op de officiele prijspagina, want tarieven worden regelmatig herzien.

Model Input per 1M Output per 1M
Gemini 2.5 Flash-Lite $0.10 $0.40
Gemini 2.5 Flash $0.30 $2.50
Gemini 2.5 Pro (tot 200k) $1.25 $10.00
Gemini 3.5 Flash $1.50 $9.00
KOSTEN_PER_MILJOEN = {
    "gemini-2.5-flash-lite": {"input": 0.10, "output": 0.40},
    "gemini-2.5-flash": {"input": 0.30, "output": 2.50},
    "gemini-2.5-pro": {"input": 1.25, "output": 10.00},
    "gemini-3.5-flash": {"input": 1.50, "output": 9.00},
}

def bereken_kosten(model_naam: str, input_tokens: int, output_tokens: int) -> dict:
    tarieven = KOSTEN_PER_MILJOEN.get(model_naam, {"input": 0, "output": 0})
    input_kosten = (input_tokens / 1_000_000) * tarieven["input"]
    output_kosten = (output_tokens / 1_000_000) * tarieven["output"]
    return {
        "input_tokens": input_tokens,
        "output_tokens": output_tokens,
        "input_kosten_usd": round(input_kosten, 6),
        "output_kosten_usd": round(output_kosten, 6),
        "totaal_usd": round(input_kosten + output_kosten, 6),
    }

Tokenverbruik loggen voor productie

import logging
from datetime import datetime, timezone

logger = logging.getLogger("gemini.tokens")

def genereer_en_log(model_naam: str, prompt: str, call_id: str = "") -> str:
    response = client.models.generate_content(
        model=model_naam,
        contents=prompt,
    )
    meta = response.usage_metadata

    kosten = bereken_kosten(
        model_naam,
        meta.prompt_token_count,
        meta.candidates_token_count,
    )

    logger.info(
        "gemini_call",
        extra={
            "call_id": call_id,
            "timestamp": datetime.now(timezone.utc).isoformat(),
            "prompt_tokens": meta.prompt_token_count,
            "output_tokens": meta.candidates_token_count,
            "kosten_usd": kosten["totaal_usd"],
        },
    )

    return response.text

Door per call het verbruik te loggen, kun je later precies zien welke prompts of gebruikers de meeste tokens verbruiken en waar optimalisatie het meest oplevert.

Hoeveel tokens passen in een Gemini-context?

Gemini 2.5 Flash en Gemini 3.5 Flash hebben een contextvenster van 1.048.576 tokens, ongeveer 1 miljoen. Gemini 2.5 Pro biedt eveneens 1 miljoen tokens. Een miljoen tokens komt ruwweg overeen met 750.000 woorden of zo'n 1.500 pagina's tekst.

Worden system instructions meegerekend in de tokencount?

Ja. System instructions tellen mee als input tokens bij elke call. Een lange system instruction verhoogt dus de inputkosten van iedere afzonderlijke aanroep.

Hoe nauwkeurig is count_tokens?

Heel nauwkeurig. count_tokens gebruikt dezelfde tokenizer als het model, dus het getal komt overeen met wat er als input gefactureerd wordt. Bij denkende modellen komen tijdens generatie nog denk-tokens als output bij.

Kost het tellen van tokens geld?

Nee. count_tokens is gratis op zowel de gratis als de betaalde tier en heeft een eigen quotum van ongeveer 3.000 verzoeken per minuut. De tokens die je telt worden pas in rekening gebracht wanneer je ze daadwerkelijk in een generate_content-call meestuurt.

Welke SDK moet ik gebruiken?

Gebruik google-genai (from google import genai). De oudere google.generativeai-package is uitgefaseerd. In google-genai werk je met een client en roep je client.models.count_tokens(...) en client.models.generate_content(...) aan.

Tellen afbeeldingen en audio anders dan tekst?

Ja. Een afbeelding met beide zijden tot 384 pixels telt als 258 tokens; grotere afbeeldingen worden in tegels van 768 bij 768 pixels verdeeld die elk 258 tokens kosten. Audio telt 32 tokens per seconde en video 263 tokens per seconde.