Gemini และโมเดล Generative AI อื่นๆ จะประมวลผลอินพุตและเอาต์พุตในระดับรายละเอียดที่เรียกว่า โทเค็น
เกี่ยวกับโทเค็น
โดยโทเค็นอาจเป็นอักขระเดี่ยว เช่น z
หรือทั้งคำ เช่น cat
คํายาวๆ จะแบ่งออกเป็นโทเค็นหลายรายการ ชุดโทเค็นทั้งหมดที่โมเดลใช้เรียกว่าคําศัพท์ และกระบวนการแยกข้อความออกเป็นโทเค็นเรียกว่าการแยกโทเค็น
สำหรับโมเดล Gemini โทเค็นจะเท่ากับประมาณ 4 อักขระ 100 โทเค็นเท่ากับคำภาษาอังกฤษประมาณ 60-80 คำ
เมื่อเปิดใช้การเรียกเก็บเงิน ต้นทุนของการเรียกใช้ Gemini API จะพิจารณาจากจำนวนโทเค็นอินพุตและเอาต์พุตส่วนหนึ่ง ดังนั้นการทราบวิธีนับโทเค็นจึงมีประโยชน์
นับโทเค็น
อินพุตและเอาต์พุตทั้งหมดจาก Gemini API จะได้รับการจัดทําเป็นโทเค็น ซึ่งรวมถึงข้อความ ไฟล์รูปภาพ และรูปแบบอื่นๆ ที่ไม่ใช่ข้อความ
คุณนับโทเค็นได้ดังนี้
โทรหา
countTokens
พร้อมข้อมูลคำขอ
การดำเนินการนี้จะแสดงผลจํานวนโทเค็นทั้งหมดในอินพุตเท่านั้น คุณเรียกใช้การเรียกนี้ก่อนส่งอินพุตไปยังโมเดลเพื่อตรวจสอบขนาดของคำขอได้ใช้แอตทริบิวต์
usageMetadata
ในออบเจ็กต์response
หลังจากเรียกใช้generate_content
การดำเนินการนี้จะแสดงจํานวนโทเค็นทั้งหมดในทั้งอินพุตและเอาต์พุต ดังนี้totalTokenCount
นอกจากนี้ยังแสดงผลจํานวนโทเค็นของอินพุตและเอาต์พุตแยกกัน ดังนี้promptTokenCount
(โทเค็นอินพุต) และcandidatesTokenCount
(โทเค็นเอาต์พุต)
นับโทเค็นข้อความ
หากคุณเรียกใช้ countTokens
ด้วยอินพุตที่เป็นข้อความเท่านั้น ระบบจะแสดงผลจํานวนโทเค็นของข้อความในอินพุตเท่านั้น (totalTokens
) คุณสามารถเรียกใช้ฟังก์ชันนี้ก่อนเรียกใช้ generateContent
เพื่อตรวจสอบขนาดของคําขอ
อีกทางเลือกหนึ่งคือการเรียกใช้ generateContent
แล้วใช้แอตทริบิวต์ usageMetadata
ในออบเจ็กต์ response
เพื่อรับผลลัพธ์ต่อไปนี้
- จํานวนโทเค็นแยกต่างหากของอินพุต (
promptTokenCount
) และเอาต์พุต (candidatesTokenCount
) - จํานวนโทเค็นทั้งหมดในทั้งอินพุตและเอาต์พุต
(
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
) และเอาต์พุต (candidatesTokenCount
) - จํานวนโทเค็นทั้งหมดในทั้งอินพุตและเอาต์พุต
(
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 หรือทั้ง 2 มิติเป็นไทล์ขนาด 768x768 พิกเซลตามที่จำเป็น โดยแต่ละรูปภาพจะนับเป็นโทเค็น 258 รายการ ก่อน Gemini 2.0 รูปภาพใช้โทเค็น 258 รายการแบบคงที่
ระบบจะแปลงไฟล์วิดีโอและไฟล์เสียงเป็นโทเค็นในอัตราคงที่ต่อไปนี้ วิดีโอที่ 263 โทเค็นต่อวินาทีและเสียงที่ 32 โทเค็นต่อวินาที
ไฟล์ภาพ
หากคุณเรียกใช้ countTokens
ด้วยอินพุตข้อความและรูปภาพ ระบบจะแสดงผลจำนวนโทเค็นรวมของข้อความและรูปภาพในอินพุตเท่านั้น (totalTokens
) คุณสามารถเรียกใช้การเรียกนี้ก่อนเรียกใช้ generateContent
เพื่อตรวจสอบขนาดของคำขอ นอกจากนี้ คุณยังเรียก countTokens
ในข้อความและไฟล์แยกกันได้
อีกทางเลือกหนึ่งคือการเรียกใช้ generateContent
แล้วใช้แอตทริบิวต์ usageMetadata
ในออบเจ็กต์ response
เพื่อรับผลลัพธ์ต่อไปนี้
- จํานวนโทเค็นแยกต่างหากของอินพุต (
promptTokenCount
) และเอาต์พุต (candidatesTokenCount
) - จํานวนโทเค็นทั้งหมดในทั้งอินพุตและเอาต์พุต
(
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
) และเอาต์พุต (candidatesTokenCount
) - จํานวนโทเค็นทั้งหมดในทั้งอินพุตและเอาต์พุต
(
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