توکن ها

این راهنما مقدمه ای بر توکن ها ارائه می دهد و نحوه محاسبه استفاده از توکن API Gemini را توضیح می دهد. آموزش مرتبط Colab نیز موجود است.

مشاهده در ai.google.dev در Google Colab اجرا شود مشاهده منبع در GitHub

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

Gemini و دیگر مدل‌های هوش مصنوعی مولد ورودی و خروجی را با جزئیاتی که کوچک‌تر از یک کلمه است اما بزرگ‌تر از یک کاراکتر یا نقطه کد واحد است پردازش می‌کنند: یک نشانه .

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

برای مدل های Gemini، یک توکن معادل حدود 4 کاراکتر است.

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

پنجره های زمینه

مدل‌های موجود از طریق Gemini API دارای پنجره‌های زمینه‌ای هستند که با توکن‌ها اندازه‌گیری می‌شوند. پنجره زمینه تعریف می کند که چه مقدار ورودی می توانید ارائه دهید و چه مقدار خروجی می تواند مدل تولید کند. شما می توانید اندازه پنجره زمینه را از طریق API یا در مستندات مدل تعیین کنید.

در مثال زیر می توانید ببینید که مدل gemini-1.0-pro-latest دارای ورودی 30 هزار توکن و خروجی 2 هزار توکن است که یک پنجره زمینه کل 32 هزار توکن ارائه می دهد.

model_info = genai.get_model('models/gemini-1.0-pro-latest')
(model_info.input_token_limit, model_info.output_token_limit)
# (30720, 2048)

همچنین می توانید از مدلی مانند gemini-1.5-pro-latest استفاده کنید که دارای یک پنجره زمینه توکن 1M است.

توکن ها را بشمار

Gemini API یک نقطه پایانی برای شمارش تعداد نشانه‌ها در یک درخواست ارائه می‌کند: GenerativeModel.count_tokens . شما همان آرگومان‌هایی را که به GenerativeModel.generate_content ارسال می‌کنید، ارسال می‌کنید و سرویس تعداد نشانه‌های موجود در آن درخواست را برمی‌گرداند.

نشانه های متنی

در اینجا مثالی از شمارش نشانه های متن آورده شده است:

model = genai.GenerativeModel('models/gemini-1.0-pro-latest')
model.count_tokens("The quick brown fox jumps over the lazy dog.")
# total_tokens: 10

وقتی GenerativeModel.generate_content (یا ChatSession.send_message ) را فرا می‌خوانید، شی پاسخ دارای یک ویژگی usage_metadata است که شامل تعداد توکن‌های ورودی و خروجی است ( prompt_token_count و candidates_token_count ):

response = model.generate_content("The quick brown fox jumps over the lazy dog.")
response.text
# 'This sentence is an example of a pangram, which is a sentence that contains all of the letters of the alphabet.'
response.usage_metadata
# prompt_token_count: 10
# candidates_token_count: 24

توکن های چند نوبتی

اشیاء مکالمه چند نوبتی (چت) به طور مشابه کار می کنند.

chat = model.start_chat(history=[{'role':'user', 'parts':'Hi my name is Bob'},  {'role':'model', 'parts':'Hi Bob!'}])
model.count_tokens(chat.history)
# total_tokens: 10

برای درک اینکه نوبت بعدی مکالمه شما چقدر بزرگ خواهد بود، باید هنگام تماس با count_tokens آن را به تاریخچه اضافه کنید.

from google.generativeai.types.content_types import to_contents
model.count_tokens(chat.history + to_contents('What is the meaning of life?'))
# total_tokens: 17

توکن های چند وجهی

تمام ورودی‌های API، از جمله تصاویر و سایر روش‌های غیر متنی، نشانه‌گذاری می‌شوند.

محتوای درون خطی

اشیاء رسانه‌ای را می‌توان به‌طور مستقیم با درخواست به API ارسال کرد:

your_image = # get image ...
model.count_tokens(['Tell me about this image', your_image])
# total_tokens: 263

Files API

اگر به جای آن بخش‌هایی از دستور را از طریق File API آپلود کنید، مدل نشانه‌های یکسانی را مشاهده می‌کند:

your_image_upload = genai.upload_file('image.jpg')
model.count_tokens(['Tell me about this image', your_image_upload])
# total_tokens: 263

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

در داخل، تصاویر اندازه ثابتی دارند، بنابراین بدون در نظر گرفتن اندازه نمایش، تعداد ثابتی توکن مصرف می کنند.

image1 = # get image...
image2 = # get image...
print(image1.size)
print(model.count_tokens(image1))

print(image2.size)
print(model.count_tokens(image2))
# (2048, 1362)
# total_tokens: 258

# (1068, 906)
# total_tokens: 258

صدا و تصویر هر کدام با نرخ ثابتی از توکن در دقیقه به توکن تبدیل می شوند.

audio_sample = genai.upload_file('sample.mp3')
model.count_tokens(audio_sample)
# total_tokens: 83552

دستورالعمل ها و ابزارهای سیستم

دستورالعمل ها و ابزارهای سیستم نیز در کل به حساب می آیند، همانطور که در این مثال ها نشان داده شده است:

genai
    .GenerativeModel()
    .count_tokens("The quick brown fox jumps over the lazy dog.")
# total_tokens: 10
genai
    .GenerativeModel(system_instruction='Talk like a pirate!')
    .count_tokens("The quick brown fox jumps over the lazy dog.")
# total_tokens: 15
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(model_name='gemini-1.0-pro',
                              tools=[add, subtract, multiply, divide])
model.count_tokens("The quick brown fox jumps over the lazy dog.")
# total_tokens: 194

بیشتر خواندن

برای اطلاعات بیشتر در مورد شمارش توکن، مرجع API را بررسی کنید.