Gemini ve diğer üretken yapay zeka modelleri, giriş ve çıkışı jeton adı verilen bir ayrıntı düzeyinde işler.
Jetonlar hakkında
Jetonlar, z
gibi tek karakterler veya cat
gibi tam kelimeler olabilir. Uzun kelimeler birkaç jetona bölünür. Model tarafından kullanılan tüm jetonların kümesine kelime dağarcığı, metni jetonlara bölme işlemine ise jetonlara ayırma denir.
Gemini modellerinde bir jeton yaklaşık 4 karaktere eşdeğerdir. 100 jeton yaklaşık 60-80 İngilizce kelimeye eşittir.
Faturalandırma etkinleştirildiğinde Gemini API'ye yapılan bir çağrının maliyeti kısmen giriş ve çıkış jetonlarının sayısına göre belirlenir. Bu nedenle, jetonları nasıl sayacağınızı bilmek faydalı olabilir.
Jetonları sayma
Metin, resim dosyaları ve metin dışı diğer modlar da dahil olmak üzere Gemini API'ye gelen ve API'den gelen tüm girişler ve çıkışlar jetonlara ayrılır.
Jetonları aşağıdaki yöntemlerle sayabilirsiniz:
İsteği girip
countTokens
'yi arayın.
Bu işlev, yalnızca girişteki jetonların toplam sayısını döndürür. İstemlerinizin boyutunu kontrol etmek için girişi modele göndermeden önce bu çağrıyı yapabilirsiniz.generate_content
işlevini çağırdıktan sonraresponse
nesnesindeusageMetadata
özelliğini kullanın.
Bu işlev, hem girişte hem de çıkışta toplam jeton sayısını döndürür:totalTokenCount
.
Ayrıca giriş ve çıkışın jeton sayılarını ayrı ayrı döndürür:promptTokenCount
(giriş jetonları) vecandidatesTokenCount
(çıkış jetonları).
Metin jetonlarını sayma
countTokens
işlevini yalnızca metin içeren bir girişle çağırırsanız işlev, yalnızca girişteki metnin jeton sayısını döndürür (totalTokens
). İstemlerinizin boyutunu kontrol etmek için generateContent
işlevini çağırmadan önce bu işlevi çağırabilirsiniz.
Başka bir seçenek de generateContent
'ü çağırıp aşağıdakileri almak için response
nesnesinde usageMetadata
özelliğini kullanmaktır:
- Giriş (
promptTokenCount
) ve çıkışın (candidatesTokenCount
) ayrı jeton sayıları - Hem girişte hem de çıkışta toplam jeton sayısı (
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);
Çoklu turlu (sohbet) jetonları sayma
countTokens
işlevini sohbet geçmişiyle çağırırsanız sohbetteki her rolden gelen metnin toplam jeton sayısını döndürür (totalTokens
).
Başka bir seçenek de sendMessage
'ü çağırıp aşağıdakileri almak için response
nesnesinde usageMetadata
özelliğini kullanmaktır:
- Giriş (
promptTokenCount
) ve çıkışın (candidatesTokenCount
) ayrı jeton sayıları - Hem girişte hem de çıkışta toplam jeton sayısı (
totalTokenCount
)
Bir sonraki konuşma sıranızın ne kadar büyük olacağını anlamak için countTokens
işlevini çağırırken bunu geçmişe eklemeniz gerekir.
// 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,
);
Çok modlu jetonları sayma
Metin, resim dosyaları ve metin olmayan diğer modlar dahil olmak üzere Gemini API'ye yapılan tüm girişler jeton haline getirilir. Gemini API tarafından işlenirken çok modlu girişin jetonlaştırılmasıyla ilgili aşağıdaki üst düzey önemli noktaları göz önünde bulundurun:
Gemini 2.0'da, her iki boyutu da 384 pikselden küçük olan resim girişleri 258 jeton olarak sayılır. Bir veya her iki boyutu da daha büyük olan resimler, gerektiği şekilde kırpılır ve 768x768 piksellik karolara ölçeklendirilir. Her karo 258 jeton olarak sayılır. Gemini 2.0'dan önce, resimlerde sabit 258 jeton kullanılıyordu.
Video ve ses dosyaları aşağıdaki sabit hızlarda jetona dönüştürülür: video için saniyede 263 jeton, ses için saniyede 32 jeton.
Resim dosyaları
countTokens
işlevini metin ve resim girişiyle çağırırsanız işlev, metin ve resmin birleşik jeton sayısını yalnızca girişte (totalTokens
) döndürür. İstemlerinizin boyutunu kontrol etmek için generateContent
işlevini çağırmadan önce bu çağrıyı yapabilirsiniz. İsteğe bağlı olarak metin ve dosya üzerinde countTokens
işlevini ayrı ayrı da çağırabilirsiniz.
Başka bir seçenek de generateContent
'ü çağırıp aşağıdakileri almak için response
nesnesinde usageMetadata
özelliğini kullanmaktır:
- Giriş (
promptTokenCount
) ve çıkışın (candidatesTokenCount
) ayrı jeton sayıları - Hem girişte hem de çıkışta toplam jeton sayısı (
totalTokenCount
)
File API'den yüklenen bir resmi kullanan örnek:
// 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);
Resmi satır içi veri olarak sağlayan örnek:
// 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);
Video veya ses dosyaları
Ses ve video, aşağıdaki sabit ücretlerde jetona dönüştürülür:
- Video: Saniyede 263 jeton
- Ses: Saniyede 32 jeton
countTokens
işlevini metin ve video/ses girişi ile çağırırsanız metin ile video/ses dosyasının birleşik jeton sayısını yalnızca girişte (totalTokens
) döndürür. İstemlerinizin boyutunu kontrol etmek için generateContent
işlevini çağırmadan önce bu işlevi çağırabilirsiniz. Dilerseniz metin ve dosya üzerinde countTokens
işlevini ayrı ayrı da çağırabilirsiniz.
Başka bir seçenek de generateContent
'ü çağırıp aşağıdakileri almak için response
nesnesinde usageMetadata
özelliğini kullanmaktır:
- Giriş (
promptTokenCount
) ve çıkışın (candidatesTokenCount
) ayrı jeton sayıları - Hem girişte hem de çıkışta toplam jeton sayısı (
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);
Sistem talimatları ve araçları
Sistem talimatları ve araçları da girişin toplam jeton sayısına dahil edilir.
Sistem talimatlarını kullanırsanız totalTokens
sayısı, systemInstruction
eklenmesini yansıtacak şekilde artar.
İşlev çağrısı kullanırsanız totalTokens
sayısı, tools
eklenmesini yansıtacak şekilde artar.