Gemini và các mô hình AI tạo sinh khác xử lý dữ liệu đầu vào và đầu ra ở mức độ chi tiết được gọi là mã thông báo.
Giới thiệu về mã thông báo
Mã thông báo có thể là một ký tự đơn như z
hoặc toàn bộ từ như cat
. Các từ dài được chia thành nhiều mã thông báo. Tập hợp tất cả các mã thông báo mà mô hình sử dụng được gọi là từ vựng và quá trình chia văn bản thành các mã thông báo được gọi là tạo mã thông báo.
Đối với 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 với khoảng 60 đến 80 từ tiếng Anh.
Khi bật tính năng thanh toán, chi phí của một lệnh gọi đến API Gemini sẽ được xác định một phần theo số lượng mã thông báo đầu vào và đầu ra. Vì vậy, bạn nên biết cách tính mã thông báo.
Thử đếm mã thông báo trong Colab
Bạn có thể thử đếm mã thông báo bằng cách sử dụng Colab.
Cửa sổ ngữ cảnh
Các mô hình có sẵn thông qua Gemini API có cửa sổ ngữ cảnh được đo bằng mã thông báo. Cửa sổ ngữ cảnh xác định lượng dữ liệu đầu vào mà bạn có thể cung cấp và lượng dữ liệu đầu ra mà mô hình có thể tạo ra. Bạn có thể xác định kích thước của cửa sổ ngữ cảnh bằng cách gọi điểm cuối getModels hoặc bằng cách xem trong tài liệu về mô hình.
Trong ví dụ sau, bạn có thể thấy rằng mô hình gemini-1.5-flash
có giới hạn đầu vào khoảng 1.000.000 mã thông báo và giới hạn đầu ra khoảng 8.000 mã thông báo, nghĩa là cửa sổ ngữ cảnh là 1.000.000 mã thông báo.
from google import genai
client = genai.Client()
model_info = client.models.get(model="gemini-2.0-flash")
print(f"{model_info.input_token_limit=}")
print(f"{model_info.output_token_limit=}")
# ( e.g., input_token_limit=30720, output_token_limit=2048 )
Đếm mã thông báo
Tất cả dữ liệu đầu vào và đầu ra của API Gemini đều được mã hoá, bao gồm cả văn bản, tệp hình ảnh và các phương thức không phải văn bản khác.
Bạn có thể đếm mã thông báo theo các cách sau:
Gọi
count_tokens
bằng dữ liệu đầu vào của yêu cầu.
Hàm này trả về tổng số mã thông báo trong phần đầu vào. Bạn có thể thực hiện lệnh gọi này trước khi gửi dữ liệu đầu vào đến mô hình để kiểm tra kích thước của các yêu cầu.Sử dụng thuộc tính
usage_metadata
trên đối tượngresponse
sau khi gọigenerate_content
.
Hàm này trả về tổng số mã thông báo trong cả dữ liệu đầu vào và đầu ra:total_token_count
.
Hàm này cũng trả về số lượng mã thông báo của dữ liệu đầu vào và đầu ra riêng biệt:prompt_token_count
(mã thông báo đầu vào) vàcandidates_token_count
(mã thông báo đầu ra).
Đếm mã thông báo văn bản
Nếu bạn gọi count_tokens
bằng dữ liệu đầu vào chỉ văn bản, thì hàm này sẽ trả về số lượng mã thông báo của văn bản trong dữ liệu đầu vào (total_tokens
). Bạn có thể thực hiện lệnh gọi này trước khi gọi generate_content
để kiểm tra kích thước của các yêu cầu.
Một lựa chọn khác là gọi generate_content
, sau đó sử dụng thuộc tính usage_metadata
trên đối tượng response
để nhận được kết quả sau:
- Số lượng mã thông báo riêng biệt của dữ liệu đầu vào (
prompt_token_count
) và đầu ra (candidates_token_count
) - Tổng số mã thông báo trong cả dữ liệu đầu vào và đầu ra (
total_token_count
)
from google import genai
client = genai.Client()
prompt = "The quick brown fox jumps over the lazy dog."
# Count tokens using the new client method.
total_tokens = client.models.count_tokens(
model="gemini-2.0-flash", contents=prompt
)
print("total_tokens: ", total_tokens)
# ( e.g., total_tokens: 10 )
response = client.models.generate_content(
model="gemini-2.0-flash", contents=prompt
)
# The usage_metadata provides detailed token counts.
print(response.usage_metadata)
# ( e.g., prompt_token_count: 11, candidates_token_count: 73, total_token_count: 84 )
Đếm mã thông báo nhiều lượt (trò chuyện)
Nếu bạn gọi count_tokens
bằng nhật ký trò chuyện, hàm này sẽ trả về tổng số mã thông báo của văn bản từ mỗi vai trò trong cuộc trò chuyện (total_tokens
).
Một lựa chọn khác là gọi send_message
, sau đó sử dụng thuộc tính usage_metadata
trên đối tượng response
để nhận được kết quả sau:
- Số lượng mã thông báo riêng biệt của dữ liệu đầu vào (
prompt_token_count
) và đầu ra (candidates_token_count
) - Tổng số mã thông báo trong cả dữ liệu đầu vào và đầu ra (
total_token_count
)
Để biết lượt trò chuyện tiếp theo sẽ dài bao nhiêu, bạn cần thêm lượt trò chuyện đó vào nhật ký khi gọi count_tokens
.
from google import genai
from google.genai import types
client = genai.Client()
chat = client.chats.create(
model="gemini-2.0-flash",
history=[
types.Content(
role="user", parts=[types.Part(text="Hi my name is Bob")]
),
types.Content(role="model", parts=[types.Part(text="Hi Bob!")]),
],
)
# Count tokens for the chat history.
print(
client.models.count_tokens(
model="gemini-2.0-flash", contents=chat.get_history()
)
)
# ( e.g., total_tokens: 10 )
response = chat.send_message(
message="In one sentence, explain how a computer works to a young child."
)
print(response.usage_metadata)
# ( e.g., prompt_token_count: 25, candidates_token_count: 21, total_token_count: 46 )
# You can count tokens for the combined history and a new message.
extra = types.UserContent(
parts=[
types.Part(
text="What is the meaning of life?",
)
]
)
history = chat.get_history()
history.append(extra)
print(client.models.count_tokens(model="gemini-2.0-flash", contents=history))
# ( e.g., total_tokens: 56 )
Đếm mã thông báo đa phương thức
Tất cả dữ liệu đầu vào cho API Gemini đều được mã hoá, bao gồm cả văn bản, tệp hình ảnh và các phương thức không phải văn bản khác. Hãy lưu ý những điểm chính sau đây về việc mã hoá dữ liệu đầu vào đa phương thức trong quá trình xử lý bằng Gemini API:
Với Gemini 2.0, dữ liệu đầu vào hình ảnh có cả hai kích thước <=384 pixel được tính là 258 mã thông báo. Những hình ảnh lớn hơn ở một hoặc cả hai kích thước sẽ được cắt và điều chỉnh theo tỷ lệ nếu cần thành các ô có kích thước 768x768 pixel, mỗi ô được tính là 258 mã thông báo. Trước Gemini 2.0, hình ảnh sử dụng 258 mã thông báo cố định.
Tệp video và âm thanh được chuyển đổi thành mã thông báo theo các tốc độ cố định sau: video ở tốc độ 263 mã thông báo mỗi giây và âm thanh ở tốc độ 32 mã thông báo mỗi giây.
Tệp hình ảnh
Nếu bạn gọi count_tokens
bằng dữ liệu đầu vào văn bản và hình ảnh, thì hàm này sẽ trả về số lượng mã thông báo kết hợp của văn bản và hình ảnh trong chỉ dữ liệu đầu vào (total_tokens
). Bạn có thể thực hiện lệnh gọi này trước khi gọi generate_content
để kiểm tra kích thước của các yêu cầu. Bạn cũng có thể gọi count_tokens
trên văn bản và tệp
riêng biệt.
Một lựa chọn khác là gọi generate_content
, sau đó sử dụng thuộc tính usage_metadata
trên đối tượng response
để nhận được kết quả sau:
- Số lượng mã thông báo riêng biệt của dữ liệu đầu vào (
prompt_token_count
) và đầu ra (candidates_token_count
) - Tổng số mã thông báo trong cả dữ liệu đầu vào và đầu ra (
total_token_count
)
Ví dụ sử dụng hình ảnh đã tải lên từ API Tệp:
from google import genai
client = genai.Client()
prompt = "Tell me about this image"
your_image_file = client.files.upload(file=media / "organ.jpg")
print(
client.models.count_tokens(
model="gemini-2.0-flash", contents=[prompt, your_image_file]
)
)
# ( e.g., total_tokens: 263 )
response = client.models.generate_content(
model="gemini-2.0-flash", contents=[prompt, your_image_file]
)
print(response.usage_metadata)
# ( e.g., prompt_token_count: 264, candidates_token_count: 80, total_token_count: 345 )
Ví dụ cung cấp hình ảnh dưới dạng dữ liệu nội tuyến:
from google import genai
import PIL.Image
client = genai.Client()
prompt = "Tell me about this image"
your_image_file = PIL.Image.open(media / "organ.jpg")
# Count tokens for combined text and inline image.
print(
client.models.count_tokens(
model="gemini-2.0-flash", contents=[prompt, your_image_file]
)
)
# ( e.g., total_tokens: 263 )
response = client.models.generate_content(
model="gemini-2.0-flash", contents=[prompt, your_image_file]
)
print(response.usage_metadata)
# ( e.g., prompt_token_count: 264, candidates_token_count: 80, total_token_count: 345 )
Tệp video hoặc âm thanh
Âm thanh và video được chuyển đổi thành mã thông báo theo các tỷ lệ cố định sau:
- Video: 263 mã thông báo mỗi giây
- Âm thanh: 32 mã thông báo mỗi giây
Nếu bạn gọi count_tokens
bằng dữ liệu đầu vào văn bản và video/âm thanh, thì hàm này sẽ trả về số lượng mã thông báo kết hợp của văn bản và tệp video/âm thanh ở chỉ đầu vào (total_tokens
). Bạn có thể thực hiện lệnh gọi này trước khi gọi generate_content
để kiểm tra kích thước của các yêu cầu. Bạn cũng có thể tuỳ ý gọi count_tokens
trên văn bản và tệp riêng biệt.
Một lựa chọn khác là gọi generate_content
, sau đó sử dụng thuộc tính usage_metadata
trên đối tượng response
để nhận được kết quả sau:
- Số lượng mã thông báo riêng biệt của dữ liệu đầu vào (
prompt_token_count
) và đầu ra (candidates_token_count
) - Tổng số mã thông báo trong cả dữ liệu đầu vào và đầu ra (
total_token_count
)
from google import genai
import time
client = genai.Client()
prompt = "Tell me about this video"
your_file = client.files.upload(file=media / "Big_Buck_Bunny.mp4")
# Poll until the video file is completely processed (state becomes ACTIVE).
while not your_file.state or your_file.state.name != "ACTIVE":
print("Processing video...")
print("File state:", your_file.state)
time.sleep(5)
your_file = client.files.get(name=your_file.name)
print(
client.models.count_tokens(
model="gemini-2.0-flash", contents=[prompt, your_file]
)
)
# ( e.g., total_tokens: 300 )
response = client.models.generate_content(
model="gemini-2.0-flash", contents=[prompt, your_file]
)
print(response.usage_metadata)
# ( e.g., prompt_token_count: 301, candidates_token_count: 60, total_token_count: 361 )
Hướng dẫn và công cụ hệ thống
Các hướng dẫn và công cụ của hệ thống cũng được tính vào tổng số mã thông báo cho dữ liệu đầu vào.
Nếu bạn sử dụng hướng dẫn hệ thống, số lượng total_tokens
sẽ tăng lên để phản ánh việc thêm system_instruction
.
Nếu bạn sử dụng lệnh gọi hàm, số lượng total_tokens
sẽ tăng lên để phản ánh việc thêm tools
.