Tokens verstehen und zählen

Gemini und andere generative KI-Modelle verarbeiten Ein- und Ausgabe in einer Granularität, die als Token bezeichnet wird.

Bei Gemini-Modellen entspricht ein Token etwa vier Zeichen. 100 Tokens entsprechen etwa 60–80 Wörtern.

Tokens

Tokens können einzelne Zeichen wie z oder ganze Wörter wie cat sein. Lange Wörter werden in mehrere Tokens aufgeteilt. Die Menge aller vom Modell verwendeten Tokens wird als Vokabular bezeichnet. Der Vorgang, Text in Tokens aufzuteilen, wird als Tokenisierung bezeichnet.

Wenn die Abrechnung aktiviert ist, werden die Kosten eines Aufrufs der Gemini API unter anderem durch die Anzahl der Eingabe- und Ausgabetokens bestimmt. Es kann also hilfreich sein, zu wissen, wie Tokens gezählt werden.


Tokens in Colab zählen

Sie können das Zählen von Tokens mit einem Colab ausprobieren.

Auf ai.google.dev ansehen Colab-Notebook ausprobieren Notebook auf GitHub ansehen

Verlaufszeiträume

Die über die Gemini API verfügbaren Modelle haben Kontextfenster, die in Tokens gemessen werden. Das Kontextfenster definiert, wie viele Eingaben Sie bereitstellen können und wie viele Ausgaben das Modell generieren kann. Sie können die Größe des Kontextfensters ermitteln, indem Sie den getModels-Endpunkt aufrufen oder in der Dokumentation zu Modellen nachsehen.

Im folgenden Beispiel sehen Sie, dass das Modell gemini-1.5-flash ein Eingabelimit von etwa 1.000.000 Tokens und ein Ausgabelimit von etwa 8.000 Tokens hat. Das Kontextfenster umfasst also 1.000.000 Tokens.

from google import genai

client = genai.Client()
model_info = client.models.get(model="gemini-2.0-flash")
print(f"{model_info.input_token_limit=}")
print(f"{model_info.output_token_limit=}")
# ( e.g., input_token_limit=30720, output_token_limit=2048 )

Tokens zählen

Alle Ein- und Ausgaben der Gemini API werden tokenisiert, einschließlich Text, Bilddateien und anderer nicht textbasierter Modalitäten.

Sie können Tokens auf folgende Weise zählen:

Text-Tokens zählen

from google import genai

client = genai.Client()
prompt = "The quick brown fox jumps over the lazy dog."

# Count tokens using the new client method.
total_tokens = client.models.count_tokens(
    model="gemini-2.0-flash", contents=prompt
)
print("total_tokens: ", total_tokens)
# ( e.g., total_tokens: 10 )

response = client.models.generate_content(
    model="gemini-2.0-flash", contents=prompt
)

# The usage_metadata provides detailed token counts.
print(response.usage_metadata)
# ( e.g., prompt_token_count: 11, candidates_token_count: 73, total_token_count: 84 )

Tokens für wechselseitige Chats zählen

from google import genai
from google.genai import types

client = genai.Client()

chat = client.chats.create(
    model="gemini-2.0-flash",
    history=[
        types.Content(
            role="user", parts=[types.Part(text="Hi my name is Bob")]
        ),
        types.Content(role="model", parts=[types.Part(text="Hi Bob!")]),
    ],
)
# Count tokens for the chat history.
print(
    client.models.count_tokens(
        model="gemini-2.0-flash", contents=chat.get_history()
    )
)
# ( e.g., total_tokens: 10 )

response = chat.send_message(
    message="In one sentence, explain how a computer works to a young child."
)
print(response.usage_metadata)
# ( e.g., prompt_token_count: 25, candidates_token_count: 21, total_token_count: 46 )

# You can count tokens for the combined history and a new message.
extra = types.UserContent(
    parts=[
        types.Part(
            text="What is the meaning of life?",
        )
    ]
)
history = chat.get_history()
history.append(extra)
print(client.models.count_tokens(model="gemini-2.0-flash", contents=history))
# ( e.g., total_tokens: 56 )

Multimodale Tokens zählen

Alle Eingaben für die Gemini API werden tokenisiert, einschließlich Text, Bilddateien und anderer nicht textbasierter Modalitäten. Hier sind einige wichtige Punkte zur Tokenisierung multimodaler Eingaben bei der Verarbeitung durch die Gemini API:

  • Bei Gemini 2.0 werden Bildeingaben mit beiden Dimensionen <=384 Pixel als 258 Tokens gezählt. Bilder, die in einer oder beiden Dimensionen größer sind, werden zugeschnitten und bei Bedarf in Kacheln mit 768 × 768 Pixeln skaliert. Jede Kachel wird als 258 Tokens gezählt. Vor Gemini 2.0 wurden für Bilder immer 258 Tokens verwendet.

  • Video- und Audiodateien werden zu den folgenden festen Raten in Tokens umgewandelt: Video mit 263 Tokens pro Sekunde und Audio mit 32 Tokens pro Sekunde.

Media-Auflösungen

Mit Gemini 3 Pro Preview wird die detaillierte Steuerung der multimodalen Bildverarbeitung mit dem Parameter media_resolution eingeführt. Der Parameter media_resolution bestimmt die maximale Anzahl von Tokens, die pro Eingabebild oder Videoframes zugewiesen werden. Höhere Auflösungen verbessern die Fähigkeit des Modells, feinen Text zu lesen oder kleine Details zu erkennen, erhöhen aber die Tokennutzung und die Latenz.

Weitere Informationen zum Parameter und dazu, wie er sich auf die Tokenberechnung auswirken kann, finden Sie im Leitfaden zur Media-Auflösung.

Bilddateien

Beispiel mit einem hochgeladenen Bild aus der File API:

from google import genai

client = genai.Client()
prompt = "Tell me about this image"
your_image_file = client.files.upload(file=media / "organ.jpg")

print(
    client.models.count_tokens(
        model="gemini-2.0-flash", contents=[prompt, your_image_file]
    )
)
# ( e.g., total_tokens: 263 )

response = client.models.generate_content(
    model="gemini-2.0-flash", contents=[prompt, your_image_file]
)
print(response.usage_metadata)
# ( e.g., prompt_token_count: 264, candidates_token_count: 80, total_token_count: 345 )

Beispiel, in dem das Bild als Inline-Daten bereitgestellt wird:

from google import genai
import PIL.Image

client = genai.Client()
prompt = "Tell me about this image"
your_image_file = PIL.Image.open(media / "organ.jpg")

# Count tokens for combined text and inline image.
print(
    client.models.count_tokens(
        model="gemini-2.0-flash", contents=[prompt, your_image_file]
    )
)
# ( e.g., total_tokens: 263 )

response = client.models.generate_content(
    model="gemini-2.0-flash", contents=[prompt, your_image_file]
)
print(response.usage_metadata)
# ( e.g., prompt_token_count: 264, candidates_token_count: 80, total_token_count: 345 )

Video- oder Audiodateien

Audio und Video werden zu den folgenden festen Raten in Tokens umgewandelt:

  • Video: 263 Tokens pro Sekunde
  • Audio: 32 Tokens pro Sekunde
from google import genai
import time

client = genai.Client()
prompt = "Tell me about this video"
your_file = client.files.upload(file=media / "Big_Buck_Bunny.mp4")

# Poll until the video file is completely processed (state becomes ACTIVE).
while not your_file.state or your_file.state.name != "ACTIVE":
    print("Processing video...")
    print("File state:", your_file.state)
    time.sleep(5)
    your_file = client.files.get(name=your_file.name)

print(
    client.models.count_tokens(
        model="gemini-2.0-flash", contents=[prompt, your_file]
    )
)
# ( e.g., total_tokens: 300 )

response = client.models.generate_content(
    model="gemini-2.0-flash", contents=[prompt, your_file]
)
print(response.usage_metadata)
# ( e.g., prompt_token_count: 301, candidates_token_count: 60, total_token_count: 361 )

Systemanweisungen und Tools

Systemanweisungen und Tools werden ebenfalls auf die Gesamtzahl der Tokens für die Eingabe angerechnet.

Wenn Sie Systemanweisungen verwenden, erhöht sich die Anzahl der total_tokens, um die Hinzufügung von system_instruction zu berücksichtigen.

Wenn Sie Funktionsaufrufe verwenden, erhöht sich die Anzahl der total_tokens, um die Hinzufügung von tools zu berücksichtigen.