הסבר על אסימונים וספירה שלהם

‫Gemini ומודלים אחרים של AI גנרטיבי מעבדים קלט ופלט ברמת פירוט שנקראת טוקן.

במודלים של Gemini, טוקן שווה בערך ל-4 תווים. ‫100 טוקנים שווים לכ-60-80 מילים באנגלית.

מידע על טוקנים

אסימונים יכולים להיות תווים בודדים כמו z או מילים שלמות כמו cat. מילים ארוכות מפוצלות לכמה טוקנים. קבוצת כל האסימונים שבהם נעשה שימוש במודל נקראת אוצר המילים, והתהליך של פיצול הטקסט לאסימונים נקרא טוקניזציה.

כשמופעל חיוב, העלות של קריאה ל-Gemini API נקבעת בין היתר לפי מספר הטוקנים של הקלט והפלט, ולכן כדאי לדעת איך לספור טוקנים.


איך סופרים טוקנים ב-Colab

אפשר לנסות לספור טוקנים באמצעות Colab.

לצפייה באתר ai.google.dev ניסיון של notebook ב-Colab הצגת ה-notebook ב-GitHub

חלונות הקשר

חלונות ההקשר של המודלים שזמינים דרך Gemini API נמדדים בטוקנים. חלון ההקשר מגדיר כמה קלט אפשר לספק וכמה פלט המודל יכול ליצור. כדי לדעת מה גודל חלון ההקשר, אפשר לקרוא לנקודת הקצה getModels או לעיין במסמכי התיעוד של המודלים.

בדוגמה הבאה אפשר לראות שלמודל gemini-1.5-flash יש מגבלת קלט של כ-1,000,000 טוקנים ומגבלת פלט של כ-8,000 טוקנים, כלומר חלון הקשר הוא 1,000,000 טוקנים.

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 )

ספירת טוקנים

כל הקלט והפלט של Gemini API עוברים טוקניזציה, כולל טקסט, קובצי תמונות ומוֹדָלִיוֹת אחרות שאינן טקסט.

אפשר לספור טוקנים בדרכים הבאות:

ספירת טוקנים של טקסט

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 )

ספירת טוקנים בשיחה עם זיכרון

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 )

ספירת טוקנים של multimodal

כל הקלט ל-Gemini API עובר טוקניזציה, כולל טקסט, קובצי תמונה וסוגים אחרים של נתונים שאינם טקסט. הנה כמה נקודות חשובות ברמה גבוהה לגבי טוקניזציה של קלט מולטימודאלי במהלך העיבוד על ידי Gemini API:

  • עם Gemini 2.0, תמונות קלט ששני הממדים שלהן הם ‎<=384 פיקסלים נספרות כ-258 טוקנים. תמונות שגדולות יותר באחד מהממדים או בשניהם נחתכות ומשנות את הגודל לפי הצורך לאריחים של 768x768 פיקסלים, וכל אחת מהן נספרת כ-258 טוקנים. לפני Gemini 2.0, תמונות השתמשו ב-258 טוקנים קבועים.

  • קבצים של וידאו ואודיו מומרים לטוקנים בשיעורים הקבועים הבאים: וידאו ב-263 טוקנים לשנייה ואודיו ב-32 טוקנים לשנייה.

רזולוציות של מדיה

בגרסת טרום ההשקה של Gemini 3 Pro, נוסף הפרמטר media_resolution שמאפשר שליטה מפורטת בעיבוד של ראייה מולטימודאלית. הפרמטר media_resolution קובע את המספר המקסימלי של טוקנים שמוקצים לכל תמונת קלט או פריים של סרטון. רזולוציות גבוהות יותר משפרות את היכולת של המודל לקרוא טקסט קטן או לזהות פרטים קטנים, אבל הן מגדילות את השימוש בטוקנים ואת זמן האחזור.

לפרטים נוספים על הפרמטר ועל האופן שבו הוא יכול להשפיע על חישובי האסימונים, אפשר לעיין במדריך בנושא media resolution.

קובצי תמונות

דוגמה לשימוש בתמונה שהועלתה מ-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 )

דוגמה שבה התמונה מסופקת כנתונים מוטבעים:

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 )

קובצי וידאו או אודיו

ההמרה של אודיו ושל וידאו לטוקנים מתבצעת לפי השיעורים הקבועים הבאים:

  • סרטון: 263 טוקנים לשנייה
  • אודיו: 32 טוקנים לשנייה
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 )

הוראות וכלים למערכת

ההוראות והכלים של המערכת נספרים גם הם במספר הכולל של הטוקנים בקלט.

אם משתמשים בהוראות מערכת, הערך של total_tokens גדל כדי לשקף את ההוספה של system_instruction.

אם משתמשים בהפעלת פונקציות, הערך של total_tokens גדל כדי לשקף את ההוספה של tools.