המודל של Gemini ומודלים אחרים של 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, קלט של תמונות עם שני המימדים קטנים מ-384 פיקסלים נספר כ-258 אסימונים. תמונות גדולות יותר במידות אחת או בשתיהן חתוכות ומשוקללות לפי הצורך, כך שיתאימו לתמונות בגודל 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
.