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

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

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

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

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

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

  • ספירת האסימונים הכוללים

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

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

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

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

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

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

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

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

אין חיוב או הגבלת מכסות על השימוש ב-API של CountTokens. המכסה המקסימלית של ה-API CountTokens היא 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}");