Токены

В этом руководстве представлено введение в токены и объясняется, как рассчитать использование токенов Gemini API. Также доступен соответствующий учебник 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.

Подсчитайте жетоны

API Gemini предоставляет конечную точку для подсчета количества токенов в запросе: 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

Файловый 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.