Tokens verstehen und zählen


Gemini und andere Modelle für generative KI verarbeiten Eingaben und Ausgaben mit einem Detaillierungsgrad wird als Token bezeichnet.

In diesem Leitfaden erfahren Sie, wie Sie die Kontextfenster bestimmter Modelle und wie Sie Tokens zählen für Anwendungsfälle wie Texteingabe, Chat, multimodales Modell Eingabe-, Systemanweisungen und -tools.

Tokens

Tokens können einzelne Zeichen wie z oder ganze Wörter wie cat sein. Lange Wörter in mehrere Tokens aufgeteilt werden. Der Satz aller vom Modell verwendeten Tokens ist wird als Vokabular bezeichnet und der Vorgang des Aufteilens von Text in Tokens Tokenisierung

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

Wenn die Abrechnung aktiviert ist, betragen die Kosten für einen Aufruf der Gemini API: die teilweise durch die Anzahl der Eingabe- und Ausgabetoken bestimmt werden. können hilfreich sein.

Auf ai.google.dev ansehen In Google Colab ausführen Quelle auf GitHub ansehen

Kontextfenster

Die über die Gemini API verfügbaren Modelle haben Kontextfenster, die in Tokens gemessen wird. Über das Kontextfenster wird festgelegt, wie viel Eingabe du geben kannst und wie viel Ausgabe das Modell generieren kann. Sie können die Größe der mithilfe der API oder in der models.

Im folgenden Beispiel sehen Sie, dass das Modell gemini-1.0-pro-001 Eingabelimit von etwa 30.000 Tokens und ein Ausgabelimit von etwa 2.000 Tokens, was bedeutet ein Kontextfenster von etwa 32.000 Tokens.

model_info = genai.get_model("models/gemini-1.0-pro-001")

# Returns the "context window" for the model,
# which is the combined input and output token limits.
print(f"{model_info.input_token_limit=}")
print(f"{model_info.output_token_limit=}")
# ( input_token_limit=30720, output_token_limit=2048 )

Wenn Sie stattdessen die Tokenlimits für ein Modell wie gemini-1.5-flash-001 enthält ein Kontextfenster von 2 Mio.

Anzahl der Tokens

Alle Ein- und Ausgaben von der Gemini API werden tokenisiert, einschließlich Text, Bild und und andere Nicht-Text-Modalitäten.

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

Texttoken zählen

model = genai.GenerativeModel("models/gemini-1.5-flash")

prompt = "The quick brown fox jumps over the lazy dog."

# Call `count_tokens` to get the input token count (`total_tokens`).
print("total_tokens: ", model.count_tokens(prompt))
# ( total_tokens: 10 )

response = model.generate_content(prompt)

# On the response for `generate_content`, use `usage_metadata`
# to get separate input and output token counts
# (`prompt_token_count` and `candidates_token_count`, respectively),
# as well as the combined token count (`total_token_count`).
print(response.usage_metadata)
# ( prompt_token_count: 11, candidates_token_count: 73, total_token_count: 84 )

Tokens für mehrere Runden (Chat) zählen

model = genai.GenerativeModel("models/gemini-1.5-flash")

chat = model.start_chat(
    history=[
        {"role": "user", "parts": "Hi my name is Bob"},
        {"role": "model", "parts": "Hi Bob!"},
    ]
)
# Call `count_tokens` to get the input token count (`total_tokens`).
print(model.count_tokens(chat.history))
# ( total_tokens: 10 )

response = chat.send_message(
    "In one sentence, explain how a computer works to a young child."
)

# On the response for `send_message`, use `usage_metadata`
# to get separate input and output token counts
# (`prompt_token_count` and `candidates_token_count`, respectively),
# as well as the combined token count (`total_token_count`).
print(response.usage_metadata)
# ( prompt_token_count: 25, candidates_token_count: 21, total_token_count: 46 )

from google.generativeai.types.content_types import to_contents

# You can call `count_tokens` on the combined history and content of the next turn.
print(model.count_tokens(chat.history + to_contents("What is the meaning of life?")))
# ( total_tokens: 56 )

Multimodale Tokens zählen

Alle Eingaben in die Gemini API, einschließlich Text-, Bilddateien und anderer Elemente, werden tokenisiert. nicht textbasierten Modalitäten. Beachten Sie die folgenden wichtigen Punkte zur Tokenisierung: multimodaler Eingaben während der Verarbeitung durch die Gemini API:

  • Da Images eine feste Größe haben, verbrauchen sie eine feste Anzahl Tokens (derzeit 258 Tokens), unabhängig von ihrer Anzeige- oder Dateigröße.

  • Video- und Audiodateien werden zu folgenden festen Preisen in Tokens konvertiert: Video mit 263 Tokens pro Sekunde und Audio mit 32 Tokens pro Sekunde.

Bilddateien

Bei der Verarbeitung stuft die Gemini API Bilder als feste Größe ein, sodass sie eine feste Anzahl von Tokens (derzeit 258 Tokens) verbrauchen, oder Dateigröße ändern.

Beispiel für die Verwendung eines hochgeladenen Bilds aus der File API:

model = genai.GenerativeModel("models/gemini-1.5-flash")

prompt = "Tell me about this image"
your_image_file = genai.upload_file(path="image.jpg")

# Call `count_tokens` to get the input token count
# of the combined text and file (`total_tokens`).
# An image's display or file size does not affect its token count.
# Optionally, you can call `count_tokens` for the text and file separately.
print(model.count_tokens([prompt, your_image_file]))
# ( total_tokens: 263 )

response = model.generate_content([prompt, your_image_file])
response.text
# On the response for `generate_content`, use `usage_metadata`
# to get separate input and output token counts
# (`prompt_token_count` and `candidates_token_count`, respectively),
# as well as the combined token count (`total_token_count`).
print(response.usage_metadata)
# ( prompt_token_count: 264, candidates_token_count: 80, total_token_count: 345 )

Beispiel für die Bereitstellung des Bildes als Inline-Daten:

import PIL.Image

model = genai.GenerativeModel("models/gemini-1.5-flash")

prompt = "Tell me about this image"
your_image_file = PIL.Image.open("image.jpg")

# Call `count_tokens` to get the input token count
# of the combined text and file (`total_tokens`).
# An image's display or file size does not affect its token count.
# Optionally, you can call `count_tokens` for the text and file separately.
print(model.count_tokens([prompt, your_image_file]))
# ( total_tokens: 263 )

response = model.generate_content([prompt, your_image_file])

# On the response for `generate_content`, use `usage_metadata`
# to get separate input and output token counts
# (`prompt_token_count` and `candidates_token_count`, respectively),
# as well as the combined token count (`total_token_count`).
print(response.usage_metadata)
# ( prompt_token_count: 264, candidates_token_count: 80, total_token_count: 345 )

Video- oder Audiodateien

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

  • Video: 263 Tokens pro Sekunde
  • Audio: 32 Tokens pro Sekunde
import time

model = genai.GenerativeModel("models/gemini-1.5-flash")

prompt = "Tell me about this video"
your_file = genai.upload_file(path=media / "Big_Buck_Bunny.mp4")

# Videos need to be processed before you can use them.
while your_file.state.name == "PROCESSING":
    print("processing video...")
    time.sleep(5)
    your_file = genai.get_file(your_file.name)

# Call `count_tokens` to get the input token count
# of the combined text and video/audio file (`total_tokens`).
# A video or audio file is converted to tokens at a fixed rate of tokens per second.
# Optionally, you can call `count_tokens` for the text and file separately.
print(model.count_tokens([prompt, your_file]))
# ( total_tokens: 300 )

response = model.generate_content([prompt, your_file])

# On the response for `generate_content`, use `usage_metadata`
# to get separate input and output token counts
# (`prompt_token_count` and `candidates_token_count`, respectively),
# as well as the combined token count (`total_token_count`).
print(response.usage_metadata)
# ( prompt_token_count: 301, candidates_token_count: 60, total_token_count: 361 )

Systemanleitung und Tools

Systemanweisungen und -tools werden ebenfalls auf die Gesamtzahl der Tokens für den Eingabe.

Wenn du eine Systemanweisung verwendest, erhöht sich die Anzahl von total_tokens, um dies zu berücksichtigen das Hinzufügen von system_instruction.

model = genai.GenerativeModel(model_name="gemini-1.5-flash")

prompt = "The quick brown fox jumps over the lazy dog."

print(model.count_tokens(prompt))
# total_tokens: 10

model = genai.GenerativeModel(
    model_name="gemini-1.5-flash", system_instruction="You are a cat. Your name is Neko."
)

# The total token count includes everything sent to the `generate_content` request.
# When you use system instructions, the total token count increases.
print(model.count_tokens(prompt))
# ( total_tokens: 21 )

Wenn Sie Funktionsaufrufe verwenden, erhöht sich die Anzahl von total_tokens entsprechend der Hinzufügung von tools

model = genai.GenerativeModel(model_name="gemini-1.5-flash")

prompt = "I have 57 cats, each owns 44 mittens, how many mittens is that in total?"

print(model.count_tokens(prompt))
# ( total_tokens: 22 )

def add(a: float, b: float):
    """returns a + b."""
    return a + b

def subtract(a: float, b: float):
    """returns a - b."""
    return a - b

def multiply(a: float, b: float):
    """returns a * b."""
    return a * b

def divide(a: float, b: float):
    """returns a / b."""
    return a / b

model = genai.GenerativeModel(
    "models/gemini-1.5-flash-001", tools=[add, subtract, multiply, divide]
)

# The total token count includes everything sent to the `generate_content` request.
# When you use tools (like function calling), the total token count increases.
print(model.count_tokens(prompt))
# ( total_tokens: 206 )