توکن ها را بفهمید و بشمارید


Gemini و سایر مدل‌های هوش مصنوعی مولد ورودی و خروجی را با یک دانه‌بندی به نام توکن پردازش می‌کنند.

در مورد توکن ها

توکن ها می توانند نویسه های تکی مانند z یا کلمات کامل مانند cat باشند. کلمات طولانی به چندین نشانه تقسیم می شوند. مجموعه تمام نشانه های استفاده شده توسط مدل، واژگان نامیده می شود، و فرآیند تقسیم متن به نشانه ها، توکن سازی نامیده می شود.

برای مدل های Gemini، یک توکن معادل حدود 4 کاراکتر است. 100 توکن برابر با 60-80 کلمه انگلیسی است.

وقتی صورت‌حساب فعال است، هزینه تماس با Gemini API تا حدی با تعداد نشانه‌های ورودی و خروجی تعیین می‌شود، بنابراین دانستن نحوه شمارش نشانه‌ها می‌تواند مفید باشد.

شمارش توکن ها را در Colab امتحان کنید

می توانید با استفاده از Colab شمارش نشانه ها را امتحان کنید.

مشاهده در ai.google.dev یک نوت بوک کولب را امتحان کنید مشاهده نوت بوک در 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 )

نشانه های چندمودال را بشمارید

تمام ورودی به API Gemini ، از جمله متن ، پرونده های تصویری و سایر روشهای غیر متن ، نشانه گذاری شده است. توجه داشته باشید نکات کلیدی سطح بالا در مورد سموم سازی ورودی مولتی حالت در هنگام پردازش توسط API Gemini:

  • با Gemini 2.0 ، ورودی های تصویر با هر دو بعد <= 384 پیکسل به عنوان 258 توکن شمارش می شوند. تصاویر بزرگتر در یک یا هر دو بعد ، در صورت نیاز به کاشی های 768x768 پیکسل ، خرد شده و مقیاس می شوند که هر یک به عنوان 258 توکن شمارش می شوند. قبل از Gemini 2.0 ، تصاویر از 258 نشانه ثابت استفاده می کردند.

  • فایلهای ویدئویی و صوتی با نرخ ثابت زیر به نشانه ها تبدیل می شوند: فیلم در 263 نشانه در ثانیه و صوتی با 32 نشانه در ثانیه.

فایل های تصویری

مثالی که از یک تصویر بارگذاری شده از 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 باشد.