Kuptoni dhe numëroni shenjat


Gemini dhe modele të tjera gjeneruese të AI përpunojnë hyrjen dhe daljen në një shkallëzim të quajtur token .

Rreth argumenteve

Shenjat mund të jenë karaktere të vetme si z ose fjalë të tëra si cat . Fjalët e gjata ndahen në disa shenja. Grupi i të gjithë shenjave të përdorura nga modeli quhet fjalor, dhe procesi i ndarjes së tekstit në token quhet tokenizimi .

Për modelet Gemini, një shenjë është e barabartë me rreth 4 karaktere. 100 argumente janë të barabarta me rreth 60-80 fjalë angleze.

Kur faturimi është i aktivizuar, kostoja e një telefonate në API të Gemini përcaktohet pjesërisht nga numri i kodeve hyrëse dhe dalëse, kështu që të dish se si të numërosh argumentet mund të jetë e dobishme.

Numëroni argumentet

Të gjitha hyrjet dhe daljet nga Gemini API janë të tokenizuara, duke përfshirë tekstin, skedarët e imazheve dhe modalitete të tjera jo tekstuale.

Ju mund të numëroni argumentet në mënyrat e mëposhtme:

  • Thirrni countTokens me hyrjen e kërkesës.
    Kjo kthen numrin total të shenjave vetëm në hyrje . Mund ta bëni këtë telefonatë përpara se të dërgoni hyrjen te modeli për të kontrolluar madhësinë e kërkesave tuaja.

  • Përdorni atributin usageMetadata në objektin response pasi të keni thirrur generate_content .
    Kjo kthen numrin total të argumenteve si në hyrje ashtu edhe në dalje : totalTokenCount .
    Gjithashtu kthen numërimin e shenjave të hyrjes dhe daljes veçmas: promptTokenCount (shenjat hyrëse) dhe candidatesTokenCount (shenjat dalëse).

Numëroni shenjat e tekstit

Nëse thërrisni countTokens me një hyrje vetëm me tekst, ai kthen numrin e shenjave të tekstit vetëm në hyrje ( totalTokens ). Mund ta bëni këtë telefonatë përpara se të telefononi generateContent për të kontrolluar madhësinë e kërkesave tuaja.

Një tjetër opsion është thirrja e generateContent dhe më pas përdorimi i atributit usageMetadata në objektin response për të marrë sa vijon:

  • Numërimet e veçanta të shenjave të hyrjes ( promptTokenCount ) dhe daljes ( candidatesTokenCount )
  • Numri i përgjithshëm i argumenteve si në hyrje ashtu edhe në dalje ( 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);

Numëroni argumentet me shumë kthesa (chat).

Nëse quani countTokens me historikun e bisedës, ai kthen numrin total të shenjave të tekstit nga çdo rol në bisedë ( totalTokens ).

Një tjetër opsion është thirrja e sendMessage dhe më pas përdorimi i atributit usageMetadata në objektin response për të marrë sa vijon:

  • Numërimet e veçanta të shenjave të hyrjes ( promptTokenCount ) dhe daljes ( candidatesTokenCount )
  • Numri i përgjithshëm i argumenteve si në hyrje ashtu edhe në dalje ( totalTokenCount )

Për të kuptuar se sa e madhe do të jetë radha juaj e radhës në bisedë, duhet ta bashkëngjitni atë në histori kur telefononi 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,
);

Numëroni shenjat multimodale

Të gjitha hyrjet në Gemini API janë tokenizuar, duke përfshirë tekstin, skedarët e imazhit dhe modalitete të tjera jo tekstuale. Vini re pikat kryesore të mëposhtme të nivelit të lartë në lidhje me tokenizimin e hyrjes multimodale gjatë përpunimit nga Gemini API:

  • Me Gemini 2.0, hyrjet e imazhit me të dy dimensionet <=384 piksele llogariten si 258 shenja. Imazhet më të mëdha në një ose të dy dimensionet priten dhe shkallëzohen sipas nevojës në pllaka prej 768x768 pikselësh, secila e llogaritur si 258 shenja. Përpara Gemini 2.0, imazhet përdornin 258 shenja fikse.

  • Skedarët video dhe audio konvertohen në token me normat e mëposhtme fikse: video me 263 token për sekondë dhe audio me 32 argumente për sekondë.

Skedarët e imazhit

Nëse quani countTokens me një hyrje tekst-dhe-imazh, ai kthen numrin e kombinuar të shenjave të tekstit dhe imazhit vetëm në hyrje ( totalTokens ). Mund ta bëni këtë telefonatë përpara se të telefononi generateContent për të kontrolluar madhësinë e kërkesave tuaja. Ju gjithashtu mund të telefononi opsionalisht countTokens në tekst dhe skedar veçmas.

Një tjetër opsion është thirrja e generateContent dhe më pas përdorimi i atributit usageMetadata në objektin response për të marrë sa vijon:

  • Numërimet e veçanta të shenjave të hyrjes ( promptTokenCount ) dhe daljes ( candidatesTokenCount )
  • Numri i përgjithshëm i argumenteve si në hyrje ashtu edhe në dalje ( totalTokenCount )

Shembull që përdor një imazh të ngarkuar nga 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);

Shembull që ofron imazhin si të dhëna inline:

// 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);

Skedarët video ose audio

Audio dhe video konvertohen secila në token me tarifat fikse të mëposhtme:

  • Video: 263 argumente në sekondë
  • Audio: 32 shenja në sekondë

Nëse thërrisni countTokens me një hyrje tekst-dhe-video/audio, ai kthen numërimin e kombinuar të tokenit të tekstit dhe skedarit video/audio vetëm në hyrje ( totalTokens ). Mund ta bëni këtë telefonatë përpara se të telefononi generateContent për të kontrolluar madhësinë e kërkesave tuaja. Ju gjithashtu mund të telefononi opsionalisht countTokens në tekst dhe skedar veçmas.

Një tjetër opsion është thirrja e generateContent dhe më pas përdorimi i atributit usageMetadata në objektin response për të marrë sa vijon:

  • Numërimet e veçanta të shenjave të hyrjes ( promptTokenCount ) dhe daljes ( candidatesTokenCount )
  • Numri i përgjithshëm i argumenteve si në hyrje ashtu edhe në dalje ( 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);

Udhëzimet dhe mjetet e sistemit

Udhëzimet dhe mjetet e sistemit llogariten gjithashtu në numrin total të shenjave për hyrjen.

Nëse përdorni udhëzime të sistemit, numri totalTokens rritet për të pasqyruar shtimin e systemInstruction .

Nëse përdorni thirrjen e funksionit, numri totalTokens rritet për të pasqyruar shtimin e tools .