Gemini และโมเดล Generative AI อื่นๆ จะประมวลผลอินพุตและเอาต์พุตที่ระดับความละเอียด ที่เรียกว่าโทเค็น
สำหรับโมเดล Gemini โทเค็นจะเท่ากับอักขระประมาณ 4 ตัว โดย 100 โทเค็นจะเท่ากับคำภาษาอังกฤษประมาณ 60-80 คำ
เกี่ยวกับโทเค็น
โทเค็นอาจเป็นอักขระเดียว เช่น z หรือทั้งคำ เช่น cat ระบบจะแบ่งคำยาวๆ
ออกเป็นโทเค็นหลายรายการ ชุดโทเค็นทั้งหมดที่โมเดลใช้เรียกว่าคำศัพท์ และกระบวนการแยกข้อความเป็นโทเค็นเรียกว่าการโทเค็น
เมื่อเปิดใช้การเรียกเก็บเงิน ค่าใช้จ่ายในการเรียกใช้ Gemini API จะ พิจารณาจากจำนวนโทเค็นอินพุตและเอาต์พุตบางส่วน ดังนั้นการรู้วิธี นับโทเค็นจึงอาจเป็นประโยชน์
นับโทเค็น
อินพุตและเอาต์พุตทั้งหมดของ Gemini API จะได้รับการโทเค็น รวมถึงข้อความ ไฟล์รูปภาพ และรูปแบบอื่นๆ ที่ไม่ใช่ข้อความ
คุณนับโทเค็นได้ด้วยวิธีต่อไปนี้
โทรหา
countTokensพร้อมข้อมูลที่ป้อนของคำขอ
ฟังก์ชันนี้จะแสดงผลจำนวนโทเค็นทั้งหมดในอินพุต เท่านั้น คุณสามารถเรียกใช้ฟังก์ชันนี้ก่อนส่งอินพุตไปยังโมเดลเพื่อตรวจสอบ ขนาดของคำขอใช้แอตทริบิวต์
usageMetadataในออบเจ็กต์responseหลังจากเรียกใช้generate_content
ซึ่งจะแสดงจำนวนโทเค็นทั้งหมดในทั้งอินพุตและเอาต์พุต:totalTokenCount
นอกจากนี้ยังแสดงผลโทเค็น จำนวนของอินพุตและเอาต์พุตแยกกันด้วย ได้แก่promptTokenCount(โทเค็นอินพุต) และcandidatesTokenCount(โทเค็นเอาต์พุต) และหากคุณใช้การแคชบริบท จำนวนโทเค็นที่แคชไว้จะอยู่ในcachedContentTokenCountหากคุณใช้โมเดลการคิด เช่น โมเดล 2.5 ระบบจะส่งโทเค็นที่ใช้ในกระบวนการคิดกลับมาใน
thoughtsTokenCount
นับโทเค็นข้อความ
หากเรียกใช้ countTokens ด้วยอินพุตที่เป็นข้อความเท่านั้น ระบบจะแสดงผลจำนวนโทเค็นของข้อความในอินพุตเท่านั้น (totalTokens) คุณสามารถเรียกใช้ฟังก์ชันนี้ก่อนเรียกใช้ generateContent เพื่อตรวจสอบขนาดของคำขอได้
อีกทางเลือกหนึ่งคือการเรียก generateContent แล้วใช้แอตทริบิวต์ usageMetadata
ในออบเจ็กต์ response เพื่อรับข้อมูลต่อไปนี้
- จำนวนโทเค็นแยกกันของอินพุต (
promptTokenCount) เนื้อหาที่แคช (cachedContentTokenCount) และเอาต์พุต (candidatesTokenCount) - จำนวนโทเค็นสำหรับกระบวนการคิด (
thoughtsTokenCount) - จำนวนโทเค็นทั้งหมดทั้งในอินพุตและเอาต์พุต
(
totalTokenCount)
// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const prompt = "The quick brown fox jumps over the lazy dog.";
const countTokensResponse = await ai.models.countTokens({
model: "gemini-2.0-flash",
contents: prompt,
});
console.log(countTokensResponse.totalTokens);
const generateResponse = await ai.models.generateContent({
model: "gemini-2.0-flash",
contents: prompt,
});
console.log(generateResponse.usageMetadata);
นับโทเค็นหลายรอบ (แชท)
หากคุณเรียกใช้ countTokens พร้อมประวัติการแชท ระบบจะแสดงผลจำนวนโทเค็นทั้งหมด
ของข้อความจากแต่ละบทบาทในการแชท (totalTokens)
อีกทางเลือกหนึ่งคือการเรียก sendMessage แล้วใช้แอตทริบิวต์ usageMetadata
ในออบเจ็กต์ response เพื่อรับข้อมูลต่อไปนี้
- จำนวนโทเค็นแยกกันของอินพุต (
promptTokenCount) เนื้อหาที่แคช (cachedContentTokenCount) และเอาต์พุต (candidatesTokenCount) - จำนวนโทเค็นสำหรับกระบวนการคิด (
thoughtsTokenCount) - จำนวนโทเค็นทั้งหมดทั้งในอินพุตและเอาต์พุต
(
totalTokenCount)
หากต้องการทราบว่าการสนทนาครั้งถัดไปจะมีขนาดเท่าใด คุณต้องต่อท้าย
การสนทนาครั้งถัดไปไว้ในประวัติเมื่อเรียกใช้ countTokens
// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
// Initial chat history.
const history = [
{ role: "user", parts: [{ text: "Hi my name is Bob" }] },
{ role: "model", parts: [{ text: "Hi Bob!" }] },
];
const chat = ai.chats.create({
model: "gemini-2.0-flash",
history: history,
});
// Count tokens for the current chat history.
const countTokensResponse = await ai.models.countTokens({
model: "gemini-2.0-flash",
contents: chat.getHistory(),
});
console.log(countTokensResponse.totalTokens);
const chatResponse = await chat.sendMessage({
message: "In one sentence, explain how a computer works to a young child.",
});
console.log(chatResponse.usageMetadata);
// Add an extra user message to the history.
const extraMessage = {
role: "user",
parts: [{ text: "What is the meaning of life?" }],
};
const combinedHistory = chat.getHistory();
combinedHistory.push(extraMessage);
const combinedCountTokensResponse = await ai.models.countTokens({
model: "gemini-2.0-flash",
contents: combinedHistory,
});
console.log(
"Combined history token count:",
combinedCountTokensResponse.totalTokens,
);
นับโทเค็นหลายรูปแบบ
อินพุตทั้งหมดไปยัง Gemini API จะได้รับการโทเค็น รวมถึงข้อความ ไฟล์รูปภาพ และรูปแบบที่ไม่ใช่ข้อความอื่นๆ โปรดทราบประเด็นสำคัญระดับสูงต่อไปนี้เกี่ยวกับการแปลงเป็นโทเค็น ของอินพุตมัลติโมดอลระหว่างการประมวลผลโดย Gemini API
เมื่อใช้ Gemini 2.0 ระบบจะนับอินพุตรูปภาพที่มีทั้ง 2 ขนาด <=384 พิกเซลเป็น โทเค็น 258 รายการ รูปภาพที่มีขนาดใหญ่กว่าในมิติข้อมูลอย่างน้อย 1 มิติจะถูกครอบตัดและปรับขนาดตาม ความจำเป็นเป็นไทล์ขนาด 768x768 พิกเซล โดยแต่ละไทล์จะนับเป็น 258 โทเค็น ก่อน Gemini 2.0 รูปภาพจะใช้โทเค็นคงที่ 258 โทเค็น
ระบบจะแปลงไฟล์วิดีโอและเสียงเป็นโทเค็นในอัตราคงที่ต่อไปนี้ วิดีโอที่ 263 โทเค็นต่อวินาที และเสียงที่ 32 โทเค็นต่อวินาที
ความละเอียดของสื่อ
รุ่นตัวอย่างของ Gemini 3 Pro มีการควบคุมแบบละเอียดในการประมวลผลวิชันซิสเต็มหลายรูปแบบด้วยพารามิเตอร์
media_resolution พารามิเตอร์ media_resolution จะกำหนดจำนวนโทเค็นสูงสุดที่จัดสรรต่อรูปภาพอินพุตหรือเฟรมวิดีโอ
ความละเอียดที่สูงขึ้นจะช่วยปรับปรุงความสามารถของโมเดลในการอ่านข้อความขนาดเล็กหรือระบุรายละเอียดเล็กๆ แต่จะเพิ่มการใช้โทเค็นและเวลาในการตอบสนอง
ดูรายละเอียดเพิ่มเติมเกี่ยวกับพารามิเตอร์และผลกระทบที่อาจมีต่อการคำนวณโทเค็นได้ที่คู่มือความละเอียดของสื่อ
ไฟล์ภาพ
หากเรียกใช้ countTokens ด้วยอินพุตข้อความและรูปภาพ ระบบจะแสดงผลจำนวนโทเค็นรวมของข้อความและรูปภาพในอินพุตเท่านั้น (totalTokens) คุณ
สามารถเรียกใช้ฟังก์ชันนี้ก่อนเรียกใช้ generateContent เพื่อตรวจสอบขนาดของคำขอ
ได้ นอกจากนี้ คุณยังเรียกใช้ countTokens ในข้อความและไฟล์
แยกกันได้ด้วย
อีกทางเลือกหนึ่งคือการเรียก generateContent แล้วใช้แอตทริบิวต์ usageMetadata
ในออบเจ็กต์ response เพื่อรับข้อมูลต่อไปนี้
- จำนวนโทเค็นแยกกันของอินพุต (
promptTokenCount) เนื้อหาที่แคช (cachedContentTokenCount) และเอาต์พุต (candidatesTokenCount) - จำนวนโทเค็นสำหรับกระบวนการคิด (
thoughtsTokenCount) - จำนวนโทเค็นทั้งหมดทั้งในอินพุตและเอาต์พุต
(
totalTokenCount)
ตัวอย่างที่ใช้รูปภาพที่อัปโหลดจาก File API
// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const prompt = "Tell me about this image";
const organ = await ai.files.upload({
file: path.join(media, "organ.jpg"),
config: { mimeType: "image/jpeg" },
});
const countTokensResponse = await ai.models.countTokens({
model: "gemini-2.0-flash",
contents: createUserContent([
prompt,
createPartFromUri(organ.uri, organ.mimeType),
]),
});
console.log(countTokensResponse.totalTokens);
const generateResponse = await ai.models.generateContent({
model: "gemini-2.0-flash",
contents: createUserContent([
prompt,
createPartFromUri(organ.uri, organ.mimeType),
]),
});
console.log(generateResponse.usageMetadata);
ตัวอย่างที่แสดงรูปภาพเป็นข้อมูลแบบอินไลน์
// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const prompt = "Tell me about this image";
const imageBuffer = fs.readFileSync(path.join(media, "organ.jpg"));
// Convert buffer to base64 string.
const imageBase64 = imageBuffer.toString("base64");
// Build contents using createUserContent and createPartFromBase64.
const contents = createUserContent([
prompt,
createPartFromBase64(imageBase64, "image/jpeg"),
]);
const countTokensResponse = await ai.models.countTokens({
model: "gemini-2.0-flash",
contents: contents,
});
console.log(countTokensResponse.totalTokens);
const generateResponse = await ai.models.generateContent({
model: "gemini-2.0-flash",
contents: contents,
});
console.log(generateResponse.usageMetadata);
ไฟล์วิดีโอหรือเสียง
ระบบจะแปลงเสียงและวิดีโอแต่ละรายการเป็นโทเค็นในอัตราคงที่ต่อไปนี้
- วิดีโอ: 263 โทเค็นต่อวินาที
- เสียง: 32 โทเค็นต่อวินาที
หากเรียกใช้ countTokens ด้วยอินพุตข้อความและวิดีโอ/เสียง ระบบจะแสดงจำนวนโทเค็นรวมของข้อความและไฟล์วิดีโอ/เสียงในอินพุตเท่านั้น
(totalTokens) คุณสามารถเรียกใช้ฟังก์ชันนี้ก่อนเรียกใช้ generateContent เพื่อ
ตรวจสอบขนาดของคำขอได้ นอกจากนี้ คุณยังเรียกใช้ countTokens ใน
ข้อความและไฟล์แยกกันได้ด้วย
อีกทางเลือกหนึ่งคือการเรียก generateContent แล้วใช้แอตทริบิวต์ usageMetadata
ในออบเจ็กต์ response เพื่อรับข้อมูลต่อไปนี้
- จำนวนโทเค็นแยกกันของอินพุต (
promptTokenCount) เนื้อหาที่แคช (cachedContentTokenCount) และเอาต์พุต (candidatesTokenCount) - จำนวนโทเค็นสำหรับกระบวนการคิด (
thoughtsTokenCount) - จำนวนโทเค็นทั้งหมดทั้งในอินพุตและเอาต์พุต
(
totalTokenCount)
// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const prompt = "Tell me about this video";
let videoFile = await ai.files.upload({
file: path.join(media, "Big_Buck_Bunny.mp4"),
config: { mimeType: "video/mp4" },
});
// Poll until the video file is completely processed (state becomes ACTIVE).
while (!videoFile.state || videoFile.state.toString() !== "ACTIVE") {
console.log("Processing video...");
console.log("File state: ", videoFile.state);
await sleep(5000);
videoFile = await ai.files.get({ name: videoFile.name });
}
const countTokensResponse = await ai.models.countTokens({
model: "gemini-2.0-flash",
contents: createUserContent([
prompt,
createPartFromUri(videoFile.uri, videoFile.mimeType),
]),
});
console.log(countTokensResponse.totalTokens);
const generateResponse = await ai.models.generateContent({
model: "gemini-2.0-flash",
contents: createUserContent([
prompt,
createPartFromUri(videoFile.uri, videoFile.mimeType),
]),
});
console.log(generateResponse.usageMetadata);
คำสั่งและเครื่องมือของระบบ
คำสั่งและเครื่องมือของระบบจะนับรวมในจำนวนโทเค็นทั้งหมดสำหรับ อินพุตด้วย
หากคุณใช้คำสั่งของระบบ จำนวน totalTokens จะเพิ่มขึ้นเพื่อแสดง
การเพิ่ม systemInstruction
หากใช้การเรียกใช้ฟังก์ชัน จำนวน totalTokens จะเพิ่มขึ้นเพื่อแสดงถึงการเพิ่ม tools