ทําความเข้าใจและนับโทเค็น

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