Liczenie tokenów i płatnych znaków w modelach Gemini

Modele generatywne dzielą dane na jednostki zwane tokenami w celu ich przetwarzania. Każdy model ma maksymalną liczbę tokenów, które może obsłużyć w promptach i odpowiedziach.

Na tej stronie dowiesz się, jak użyć interfejsu Count Tokens API, aby uzyskać szacunkową liczbę tokenów i liczbę znaków podlegających rozliczeniu żądaniu do modelu Gemini. Nie ma interfejsu API, który umożliwiałby uzyskanie szacowanej liczby tokenów w odpowiedzi.

Pamiętaj, że interfejsu Count Tokens API nie można używać w przypadku modeli Imagen.

Jakie informacje są podawane w liczbie?

Pamiętaj o tych kwestiach dotyczących zliczania tokenów i znaków podlegających opłacie:

  • Zliczanie łącznej liczby tokenów

    • Ta liczba jest przydatna, ponieważ pozwala sprawdzić, czy żądania nie przekraczają dozwolonego okna kontekstu.

    • Liczba tokenów będzie odzwierciedlać rozmiar wszystkich plików (np. obrazów), które są dostarczane jako część danych wejściowych żądania. Nie będzie ona uwzględniać liczby obrazów ani liczby sekund w filmie.

    • W przypadku wszystkich modeli Gemini token odpowiada około 4 znakom. 100 tokenów to około 60–80 słów w języku angielskim.

  • Liczenie łącznej liczby znaków podlegających opłacielności

    • Ta liczba jest przydatna do zrozumienia i kontrolowania kosztów, ponieważ w przypadku Vertex AI liczba znaków jest uwzględniana w obliczeniach cen.

    • Liczbę znaków podlegających rozliczeniu oblicza się na podstawie liczby znaków w tekście podanym w danych wejściowych żądania.

W przypadku starszych modeli Gemini tokeny nie są uwzględniane w obliczeniach cen. Jednak w modelach Gemini 2.0 i Gemini 2.5 tokeny są używane w obliczeniach cen. Dowiedz się więcej o limitach tokenów na modelcenach na model.

Ceny i limity dotyczące zliczania tokenów i znaków podlegających opłacie

Korzystanie z interfejsu API CountTokens nie wiąże się z opłatami ani ograniczeniami dotyczącymi limitu. Maksymalny limit interfejsu API CountTokens to 3000 żądań na minutę (RPM).

Przykładowe fragmenty kodu

Dane wejściowe tylko z tekstem

Swift

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 =
        modelFutures.countTokens(prompt);

Futures.addCallback(countTokensResponse, new FutureCallback() {
    @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}');

Unity

var response = await model.CountTokensAsync("Write a story about a magic backpack.");
UnityEngine.Debug.Log($"Total Tokens: {response.TotalTokens}");
UnityEngine.Debug.Log($"Total Billable Characters: {response.TotalBillableCharacters}");

Dane multimodalne

Swift

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 =
        modelFutures.countTokens(prompt);

Futures.addCallback(countTokensResponse, new FutureCallback() {
    @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}');

Unity

var response = await model.CountTokensAsync(new [] {
  ModelContent.Text("What's in this picture?"),
  ModelContent.InlineData("image/png", imageData)
});
UnityEngine.Debug.Log($"Total Tokens: {response.TotalTokens}");
UnityEngine.Debug.Log($"Total Billable Characters: {response.TotalBillableCharacters}");