ทำความเข้าใจและนับโทเค็น
Gemini และโมเดล Generative AI อื่นๆ จะประมวลผลอินพุตและเอาต์พุตที่ระดับความละเอียด ที่เรียกว่าโทเค็น
สำหรับโมเดล Gemini โทเค็นจะเท่ากับอักขระประมาณ 4 ตัว โดยโทเค็น 100 รายการจะเท่ากับคำภาษาอังกฤษประมาณ 60-80 คำ
เกี่ยวกับโทเค็น
โทเค็นอาจเป็นอักขระเดียว เช่น z หรือทั้งคำ เช่น cat ระบบจะแบ่งคำยาวๆ
ออกเป็นหลายโทเค็น ชุดโทเค็นทั้งหมดที่โมเดลใช้เรียกว่า
คำศัพท์ และกระบวนการแยกข้อความเป็นโทเค็นเรียกว่า
การโทเค็น
เมื่อเปิดใช้การเรียกเก็บเงิน ค่าใช้จ่ายในการเรียกใช้ Gemini API จะขึ้นอยู่กับจำนวนโทเค็นอินพุตและเอาต์พุตบางส่วน ดังนั้นการทราบวิธีนับโทเค็นจึงมีประโยชน์
นับโทเค็น
อินพุตและเอาต์พุตทั้งหมดจาก Gemini API จะได้รับการโทเค็น รวมถึงข้อความ ไฟล์รูปภาพ และรูปแบบอื่นๆ ที่ไม่ใช่ข้อความ
คุณนับโทเค็นได้ด้วยวิธีต่อไปนี้
โทรหา
count_tokensพร้อมระบุข้อมูลคำขอ แสดงผลจำนวนโทเค็นทั้งหมดในอินพุตเท่านั้น เรียกใช้ฟังก์ชันนี้ก่อนส่งอินพุต เพื่อตรวจสอบขนาดของคำขอใช้
usageในการตอบกลับการโต้ตอบ แสดงผลจำนวนโทเค็น สำหรับอินพุต (total_input_tokens), เอาต์พุต (total_output_tokens), การคิด (total_thought_tokens), เนื้อหาที่แคช (total_cached_tokens), การใช้เครื่องมือ (total_tool_use_tokens) และทั้งหมด (total_tokens)
นับโทเค็นข้อความ
Python
from google import genai
client = genai.Client()
prompt = "The quick brown fox jumps over the lazy dog."
# Count tokens before sending
total_tokens = client.models.count_tokens(
model="gemini-3-flash-preview",
contents=prompt
)
print("total_tokens:", total_tokens)
# Get usage from interaction
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input=prompt
)
print(interaction.usage)
JavaScript
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
const prompt = "The quick brown fox jumps over the lazy dog.";
// Count tokens before sending
const countResponse = await client.models.countTokens({
model: "gemini-3-flash-preview",
contents: prompt,
});
console.log(countResponse.totalTokens);
// Get usage from interaction
const interaction = await client.interactions.create({
model: "gemini-3-flash-preview",
input: prompt,
});
console.log(interaction.usage);
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:countTokens" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"contents": [{"parts": [{"text": "The quick brown fox."}]}]}'
นับโทเค็นแบบหลายรอบ
นับโทเค็นในประวัติการสนทนาโดยใช้ previous_interaction_id:
Python
# First interaction
interaction1 = client.interactions.create(
model="gemini-3-flash-preview",
input="Hi, my name is Bob"
)
# Second interaction continues the conversation
interaction2 = client.interactions.create(
model="gemini-3-flash-preview",
input="What's my name?",
previous_interaction_id=interaction1.id
)
# Usage includes tokens from both turns
print(f"Input tokens: {interaction2.usage.total_input_tokens}")
print(f"Output tokens: {interaction2.usage.total_output_tokens}")
print(f"Total tokens: {interaction2.usage.total_tokens}")
JavaScript
// First interaction
const interaction1 = await client.interactions.create({
model: "gemini-3-flash-preview",
input: "Hi, my name is Bob"
});
// Second interaction continues the conversation
const interaction2 = await client.interactions.create({
model: "gemini-3-flash-preview",
input: "What's my name?",
previousInteractionId: interaction1.id
});
console.log(`Input tokens: ${interaction2.usage.totalInputTokens}`);
console.log(`Output tokens: ${interaction2.usage.totalOutputTokens}`);
นับโทเค็นหลายรูปแบบ
อินพุตทั้งหมดไปยัง Gemini API จะได้รับการแปลงเป็นโทเค็น ซึ่งรวมถึงรูปภาพ วิดีโอ และเสียง ประเด็นสำคัญเกี่ยวกับการแปลงข้อมูลเป็นโทเค็น
- รูปภาพ: รูปภาพที่มีขนาด ≤384 พิกเซลทั้ง 2 ด้านจะนับเป็น 258 โทเค็น รูปภาพขนาดใหญ่ จะแบ่งเป็นไทล์ขนาด 768x768 พิกเซล โดยแต่ละไทล์จะนับเป็น 258 โทเค็น
- วิดีโอ: 263 โทเค็นต่อวินาที
- เสียง: 32 โทเค็นต่อวินาที
โทเค็นรูปภาพ
Python
uploaded_file = client.files.upload(file="path/to/image.jpg")
# Count tokens for image + text
total_tokens = client.models.count_tokens(
model="gemini-3-flash-preview",
contents=["Tell me about this image", uploaded_file]
)
print(f"Total tokens: {total_tokens}")
# Generate with image
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input=[
{"type": "text", "text": "Tell me about this image"},
{"type": "image", "uri": uploaded_file.uri, "mime_type": uploaded_file.mime_type}
]
)
print(interaction.usage)
JavaScript
const uploadedFile = await client.files.upload({
file: "path/to/image.jpg",
config: { mimeType: "image/jpeg" }
});
// Count tokens
const countResponse = await client.models.countTokens({
model: "gemini-3-flash-preview",
contents: [
{ text: "Tell me about this image" },
{ fileData: { fileUri: uploadedFile.uri, mimeType: uploadedFile.mimeType } }
]
});
console.log(countResponse.totalTokens);
ตัวอย่างข้อมูลในบรรทัด
Python
import base64
with open('image.jpg', 'rb') as f:
image_bytes = f.read()
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input=[
{"type": "text", "text": "Describe this image"},
{
"type": "image",
"data": base64.b64encode(image_bytes).decode('utf-8'),
"mime_type": "image/jpeg"
}
]
)
print(interaction.usage)
โทเค็นวิดีโอ
Python
import time
video_file = client.files.upload(file="path/to/video.mp4")
while not video_file.state or video_file.state.name != "ACTIVE":
print("Processing video...")
time.sleep(5)
video_file = client.files.get(name=video_file.name)
# A 60-second video is approximately 263 * 60 = 15,780 tokens
total_tokens = client.models.count_tokens(
model="gemini-3-flash-preview",
contents=["Summarize this video", video_file]
)
print(f"Total tokens: {total_tokens}")
# Generate with video
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input=[
{"type": "text", "text": "Summarize this video"},
{"type": "video", "uri": video_file.uri, "mime_type": video_file.mime_type}
]
)
print(interaction.usage)
โทเค็นเสียง
Python
audio_file = client.files.upload(file="path/to/audio.mp3")
# A 60-second audio clip is approximately 32 * 60 = 1,920 tokens
total_tokens = client.models.count_tokens(
model="gemini-3-flash-preview",
contents=["Transcribe this audio", audio_file]
)
print(f"Total tokens: {total_tokens}")
# Generate with audio
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input=[
{"type": "text", "text": "Transcribe this audio"},
{"type": "audio", "uri": audio_file.uri, "mime_type": audio_file.mime_type}
]
)
print(interaction.usage)
นับโทเค็นคำสั่งของระบบ
คำสั่งของระบบจะนับเป็นส่วนหนึ่งของโทเค็นอินพุต
Python
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input="Hello!",
system_instruction="You are a helpful assistant who speaks like a pirate."
)
# system_instruction tokens included in total_input_tokens
print(f"Input tokens: {interaction.usage.total_input_tokens}")
โทเค็นเครื่องมือนับ
ระบบจะนับเครื่องมือ (ฟังก์ชัน การเรียกใช้โค้ด Google Search) ด้วย
Python
tools = [
{
"type": "function",
"name": "get_weather",
"description": "Get current weather",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string"}
}
}
}
]
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input="What's the weather in Tokyo?",
tools=tools
)
print(f"Input tokens: {interaction.usage.total_input_tokens}")
print(f"Tool use tokens: {interaction.usage.total_tool_use_tokens}")
หน้าต่างบริบท
โมเดล Gemini แต่ละรุ่นมีจำนวนโทเค็นสูงสุดที่จัดการได้ หน้าต่างบริบท จะกำหนดขีดจำกัดรวมของโทเค็นอินพุตและเอาต์พุต
รับขนาดหน้าต่างบริบทโดยใช้โปรแกรม
Python
model_info = client.models.get(model="gemini-3-flash-preview")
print(f"Input token limit: {model_info.input_token_limit}")
print(f"Output token limit: {model_info.output_token_limit}")
JavaScript
const modelInfo = await client.models.get({ model: "gemini-3-flash-preview" });
console.log(`Input token limit: ${modelInfo.inputTokenLimit}`);
console.log(`Output token limit: ${modelInfo.outputTokenLimit}`);
ดูขนาดหน้าต่างบริบทได้ในหน้าโมเดล
ขั้นตอนถัดไป
- การสร้างข้อความ: พื้นฐานการสร้าง
- การแคช: ลดค่าใช้จ่ายด้วยการแคช
- การกำหนดราคา: ทำความเข้าใจค่าใช้จ่าย