Đếm mã thông báo và ký tự có thể tính phí cho các mô hình Gemini

Các mô hình tạo sinh phân tích dữ liệu thành các đơn vị gọi là mã thông báo để xử lý. Mỗi mô hình có một số lượng mã thông báo tối đa mà mô hình đó có thể xử lý trong một câu lệnh và câu trả lời.

Trang này hướng dẫn bạn cách sử dụng API Đếm mã thông báo để ước tính số lượng mã thông báo và số lượng ký tự có tính phí cho một yêu cầu đối với một Geminimô hình. Không có API nào để ước tính số lượng mã thông báo trong một phản hồi.

Xin lưu ý rằng bạn không thể dùng Count Tokens API cho các mô hình Imagen.

Số lượng này cung cấp thông tin gì?

Xin lưu ý những điều sau đây về việc tính mã thông báo và ký tự có tính phí:

  • Đếm tổng số mã thông báo

    • Số lượng này rất hữu ích để đảm bảo các yêu cầu của bạn không vượt quá cửa sổ ngữ cảnh cho phép.

    • Số lượng mã thông báo sẽ phản ánh kích thước của tất cả các tệp (ví dụ: hình ảnh) được cung cấp trong phần đầu vào yêu cầu. Công cụ này không tính số lượng hình ảnh hoặc số giây trong một video.

    • Đối với tất cả các mô hình Gemini, một mã thông báo tương đương với khoảng 4 ký tự. 100 mã thông báo tương đương khoảng 60 đến 80 từ tiếng Anh.

  • Đếm tổng số ký tự có tính phí

    • Số lượng này rất hữu ích để bạn hiểu và kiểm soát chi phí, vì đối với Vertex AI, số lượng ký tự là một phần trong cách tính giá.

    • Số ký tự có tính phí sẽ phản ánh số ký tự trong văn bản được cung cấp trong dữ liệu đầu vào yêu cầu.

Đối với các mô hình Gemini cũ hơn, mã thông báo không thuộc quy trình tính giá; tuy nhiên, đối với các mô hình Gemini 2.0Gemini 2.5, mã thông báo được dùng trong quy trình tính giá. Tìm hiểu thêm về giới hạn mã thông báo cho mỗi mô hìnhmức giá cho mỗi mô hình.

Giá và hạn mức để tính mã thông báo và ký tự có tính phí

Bạn không phải trả phí hoặc bị hạn chế hạn mức khi sử dụng API CountTokens. Hạn mức tối đa cho API CountTokens là 3.000 yêu cầu mỗi phút (RPM).

Mã mẫu

Chỉ nhập bằng văn bản

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

Thông tin đầu vào đa phương thức

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