В этом руководстве представлено введение в токены и объясняется, как рассчитать использование токенов 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.
-
countTokens
(REST) -
count_tokens
(Python)