ספירת אסימונים ותווים לחיוב במודלים של Gemini

מודלים גנרטיביים מפרקים נתונים ליחידות שנקראות טוקנים לצורך עיבוד. לכל מודל יש מספר אסימונים מקסימלי שהוא יכול לטפל בו בהנחיה ובתגובה.

בדף הזה מוסבר איך משתמשים ב-Count Tokens API כדי לקבל הערכה של מספר הטוקנים ומספר התווים שניתנים לחיוב עבור בקשה למודל Gemini. אין API לקבלת הערכה של מספר הטוקנים בתגובה.

חשוב לזכור שאי אפשר להשתמש ב-Count Tokens API במודלים של Imagen.

איזה מידע מופיע בספירה?

חשוב לדעת את הנקודות הבאות לגבי ספירת טוקנים ותווים לחיוב:

  • ספירת הטוקנים הכוללת

    • המספר הזה עוזר לוודא שהבקשות לא חורגות מחלון ההקשר המותר.

    • ספירת האסימונים תשקף את הגודל של כל הקבצים (לדוגמה, תמונות) שמסופקים כחלק מהקלט של הבקשה. הוא לא יספור את מספר התמונות או את מספר השניות בסרטון.

    • בכל המודלים של Gemini, טוקן שווה בערך ל-4 תווים. ‫100 טוקנים הם בערך 60-80 מילים באנגלית.

  • ספירת התווים הכוללת לחיוב

    • המספר הזה עוזר להבין את העלויות ולשלוט בהן, כי עבור Vertex AI, מספר התווים הוא חלק מחישוב התמחור.

    • מספר התווים לחיוב ישקף את מספר התווים ב-text שסופק כחלק מקלט הבקשה.

במודלים ישנים יותר של Gemini, טוקנים לא נכללים בחישוב התמחור. עם זאת, במודלים Gemini 2.0 ו-Gemini 2.5, טוקנים נכללים בחישוב התמחור. מידע נוסף על מגבלות הטוקנים לכל מודל ועל התמחור לכל מודל

תמחור ומכסה לספירת טוקנים ותווים לחיוב

אין חיוב או הגבלת מכסה על השימוש ב-CountTokens API. המכסה המקסימלית של CountTokens API היא 3,000 בקשות לדקה (RPM).

דוגמאות קוד

קלט טקסט בלבד

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}");

קלט מרובה מצבים

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}");