Подсчет жетонов и оплачиваемых символов для моделей Gemini

Генеративные модели разбивают данные на единицы, называемые токенами , для обработки. Каждая модель имеет максимальное количество токенов , которые она может обработать в приглашении и ответе.

На этой странице показано, как использовать API подсчета токенов, чтобы получить оценку количества токенов и количества оплачиваемых символов для запроса к модели Gemini . Не существует API для получения оценки токенов в ответе .

Обратите внимание, что API подсчета токенов нельзя использовать для моделей Imagen .

Какая информация содержится в расчете?

Обратите внимание на следующее относительно подсчета токенов и оплачиваемых символов:

  • Подсчет общего количества жетонов

    • Этот счетчик помогает убедиться, что ваши запросы не выходят за пределы допустимого контекстного окна.

    • Количество токенов будет отражать размер всех файлов (например, изображений), которые предоставляются как часть входных данных запроса . Он не будет считать количество изображений или количество секунд в видео.

    • Для всех моделей Gemini токен эквивалентен примерно 4 символам. 100 токенов — это примерно 60-80 английских слов.

  • Подсчет общего количества оплачиваемых символов

    • Этот подсчет полезен для понимания и контроля ваших затрат, поскольку для Vertex AI количество символов является частью расчета цены.

    • Оплачиваемое количество символов будет отражать количество символов в тексте , предоставленном во входных данных запроса .

Для более старых моделей Gemini токены не учитываются при расчете цены; однако для моделей Gemini 2.0 при расчете цен используются токены. Узнайте больше об ограничениях токенов для каждой модели и ценах на каждую модель .

Цены и квота на подсчет токенов и оплачиваемых символов

За использование API CountTokens не взимается плата или ограничения по квотам. Максимальная квота для API CountTokens — 3000 запросов в минуту (RPM).

Примеры кода

Только текстовый ввод

Быстрый

let response = try await model.countTokens("Write a story about a magic backpack.")
print("Total Tokens: \(response.totalTokens)")
print("Total Billable Characters: \(response.totalBillableCharacters)")

Kotlin

val response = generativeModel.countTokens("Write a story about a magic backpack.")
println("Total Tokens: ${response.totalTokens}")
println("Total Billable Characters: ${response.totalBillableCharacters}")

Java

Content prompt = new Content.Builder()
    .addText("Write a story about a magic backpack.")
    .build();

GenerativeModelFutures modelFutures = GenerativeModelFutures.from(model);
ListenableFuture<CountTokensResponse> countTokensResponse =
    modelFutures.countTokens(prompt);

Futures.addCallback(countTokensResponse, new FutureCallback<CountTokensResponse>() {
    @Override
    public void onSuccess(CountTokensResponse response) {
        System.out.println("Total Tokens = " + response.getTotalTokens());
        System.out.println("Total Billable Characters: = " +
          response.getTotalBillableCharacters());
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

Web

const { totalTokens, totalBillableCharacters } = await model.countTokens("Write a story about a magic backpack.");
console.log(`Total tokens: ${totalTokens}, total billable characters: ${totalBillableCharacters}`);

Dart

final tokenCount = await model.countTokens(Content.text("Write a story about a magic backpack."));
print('Token count: ${tokenCount.totalTokens}, billable characters: ${tokenCount.totalBillableCharacters}');

Мультимодальный ввод

Быстрый

let response = try await model.countTokens(image, "What's in this picture?")
print("Total Tokens: \(response.totalTokens)")
print("Total Billable Characters: \(response.totalBillableCharacters)")

Kotlin

val prompt = content {
  image(bitmap)
  text("What's in this picture?")
}
val response = generativeModel.countTokens(prompt)
println("Total Tokens: ${response.totalTokens}")
println("Total Billable Characters: ${response.totalBillableCharacters}")

Java

Content prompt = new Content.Builder()
    .addImage(bitmap)
    .addText("What's in this picture?")
    .build();

GenerativeModelFutures modelFutures = GenerativeModelFutures.from(model);
ListenableFuture<CountTokensResponse> countTokensResponse =
    modelFutures.countTokens(prompt);

Futures.addCallback(countTokensResponse, new FutureCallback<CountTokensResponse>() {
    @Override
    public void onSuccess(CountTokensResponse response) {
        System.out.println("Total Tokens = " + response.getTotalTokens());
        System.out.println("Total Billable Characters: = " +
          response.getTotalBillableCharacters());
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

Web

const prompt = "What's in this picture?";
const imagePart = { inlineData: { mimeType: 'image/jpeg', data: imageAsBase64 }};

const { totalTokens, totalBillableCharacters } = await model.countTokens([prompt, imagePart]);
console.log(`Total tokens: ${totalTokens}, total billable characters: ${totalBillableCharacters}`);

Dart

final prompt = TextPart("What's in the picture?");
final tokenCount = await model.countTokens([
  Content.multi([prompt, imagePart])
]);
print('Token count: ${tokenCount.totalTokens}, billable characters: ${tokenCount.totalBillableCharacters}');