Tokens
View Original →Ya está disponible la versión preliminar de Gemini 3.1 Flash-Lite. Pruébalo en AI Studio.
Página principal
Gemini API
Documentos
Enviar comentarios
Comprender y contar tokens
Gemini y otros modelos de IA generativa procesan la entrada y la salida con una granularidad
llamada un token.
En el caso de los modelos de Gemini, un token equivale a aproximadamente 4 caracteres.
100 tokens equivalen a entre 60 y 80 palabras en inglés.
Acerca de los tokens
Los tokens pueden ser caracteres individuales, como z, o palabras completas, como cat. Las palabras largas
se dividen en varios tokens. El conjunto de todos los tokens que usa el modelo se
denomina vocabulario, y el proceso de dividir el texto en tokens se denomina
tokenización.Cuando la facturación está habilitada, el costo de una llamada a la API de Gemini se
determina, en parte, por la cantidad de tokens de entrada y salida, por lo que puede ser útil saber cómo
contarlos.
Puedes probar el recuento de tokens en nuestro Colab.
Cuenta tokens
Toda la entrada y la salida de la API de Gemini se tokenizan, incluido el texto, los archivos de imagen
y otras modalidades que no son de texto.
Puedes contar tokens de las siguientes maneras:
Llama a count_tokens con la entrada
de la solicitud.
Esto muestra la cantidad total de tokens solo en la entrada. Puedes realizar esta llamada antes de enviar la entrada al
modelo para verificar el tamaño de tus solicitudes.
Usa el atributo usage_metadata en el objeto response después de
llamar a generate_content.
Esto muestra la cantidad total de
tokens tanto en la entrada como en la salida: total_token_count.
También
muestra los recuentos de tokens de la entrada y la salida por separado:
prompt_token_count (tokens de entrada) y candidates_token_count
(tokens de salida).
Si usas un modelo
de pensamiento, el token que se usa durante el proceso de pensamiento se muestra en thoughts_token_count. Si usas el almacenamiento en caché de
almacenados en caché estará en cached_content_token_count.
Cuenta tokens de texto
Si llamas a count_tokens con una entrada solo de texto, se muestra el recuento de tokens de
el texto solo en la entrada (total_tokens). Puedes realizar esta llamada antes de
llamar a generate_content para verificar el tamaño de tus solicitudes.
Otra opción es llamar a generate_content y, luego, usar el usage_metadata
atributo en el objeto response para obtener lo siguiente:
- Los recuentos de tokens separados de la entrada (
prompt_token_count), el contenido almacenado en caché (cached_content_token_count) y la salida (candidates_token_count)
- El recuento de tokens para el proceso de pensamiento (
thoughts_token_count)
La cantidad total de tokens en tanto en la entrada como en la salida
(total_token_count)
Python
from google import genai
client = genai.Client()
prompt = "The quick brown fox jumps over the lazy dog."
total_tokens = client.models.count_tokens(
model="gemini-3-flash-preview", contents=prompt
)
print("total_tokens: ", total_tokens)
response = client.models.generate_content(
model="gemini-3-flash-preview", contents=prompt
)
print(response.usage_metadata)
JavaScript
import { GoogleGenAI } from '@google/genai';
const ai = new GoogleGenAI({});
const prompt = "The quick brown fox jumps over the lazy dog.";
async function main() {
const countTokensResponse = await ai.models.countTokens({
model: "gemini-3-flash-preview",
contents: prompt,
});
console.log(countTokensResponse.totalTokens);
const generateResponse = await ai.models.generateContent({
model: "gemini-3-flash-preview",
contents: prompt,
});
console.log(generateResponse.usageMetadata);
}
await main();
Go
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
// Convert prompt to a slice of *genai.Content using the helper.
contents := []*genai.Content{
genai.NewContentFromText(prompt, genai.RoleUser),
}
countResp, err := client.Models.CountTokens(ctx, "gemini-3-flash-preview", contents, nil)
if err != nil {
return err
}
fmt.Println("total_tokens:", countResp.TotalTokens)
response, err := client.Models.GenerateContent(ctx, "gemini-3-flash-preview", contents, nil)
if err != nil {
log.Fatal(err)
}
usageMetadata, err := json.MarshalIndent(response.UsageMetadata, "", " ")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(usageMetadata))
Cuenta tokens de varios turnos (chat)
Si llamas a count_tokens con el historial de chat, se muestra el recuento total de tokens del texto de cada rol en el chat (total_tokens).
Otra opción es llamar a send_message y, luego, usar el atributo usage_metadata
en el objeto response para obtener lo siguiente:
- Los recuentos de tokens separados de la entrada (
prompt_token_count), el contenido almacenado en caché (cached_content_token_count) y la salida (candidates_token_count)
- El recuento de tokens para el proceso de pensamiento (
thoughts_token_count)
La cantidad total de tokens en tanto en la entrada como en la salida
(total_token_count)
Para comprender el tamaño de tu próximo turno conversacional, debes agregar
lo al historial cuando llames a count_tokens.
Python
from google import genai
from google.genai import types
client = genai.Client()
chat = client.chats.create(
model="gemini-3-flash-preview",
history=[
types.Content(
role="user", parts=[types.Part(text="Hi my name is Bob")]
),
types.Content(role="model", parts=[types.Part(text="Hi Bob!")]),
],
)
print(
client.models.count_tokens(
model="gemini-3-flash-preview", contents=chat.get_history()
)
)
response = chat.send_message(
message="In one sentence, explain how a computer works to a young child."
)
print(response.usage_metadata)
extra = types.UserContent(
parts=[
types.Part(
text="What is the meaning of life?",
)
]
)
history = [*chat.get_history(), extra]
print(client.models.count_tokens(model="gemini-3-flash-preview", contents=history))
JavaScript
import { GoogleGenAI } from '@google/genai';
const ai = new GoogleGenAI({});
async function main() {
const history = [
{ role: "user", parts: [{ text: "Hi my name is Bob" }] },
{ role: "model", parts: [{ text: "Hi Bob!" }] },
];
const chat = ai.chats.create({
model: "gemini-3-flash-preview",
history: history,
});
const countTokensResponse = await ai.models.countTokens({
model: "gemini-3-flash-preview",
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);
const extraMessage = {
role: "user",
parts: [{ text: "What is the meaning of life?" }],
};
const combinedHistory = [...chat.getHistory(), extraMessage];
const combinedCountTokensResponse = await ai.models.countTokens({
model: "gemini-3-flash-preview",
contents: combinedHistory,
});
console.log(
"Combined history token count:",
combinedCountTokensResponse.totalTokens,
);
}
await main();
Go
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
history := []*genai.Content{
{Role: genai.RoleUser, Parts: []*genai.Part({Text: "Hi my name is Bob"})},
{Role: genai.RoleModel, Parts: []*genai.Part({Text: "Hi Bob!"})},
}
chat, err := client.Chats.Create(ctx, "gemini-3-flash-preview", nil, history)
if err != nil {
log.Fatal(err)
}
firstTokenResp, err := client.Models.CountTokens(ctx, "gemini-3-flash-preview", chat.History(false), nil)
if err != nil {
log.Fatal(err)
}
fmt.Println(firstTokenResp.TotalTokens)
resp, err := chat.SendMessage(ctx, genai.NewPartFromText("In one sentence, explain how a computer works to a young child."))
if err != nil {
log.Fatal(err)
}
fmt.Printf("%#v\n", resp.UsageMetadata)
extra := genai.NewContentFromText("What is the meaning of life?", genai.RoleUser)
hist := chat.History(false)
hist = append(hist, extra)
secondTokenResp, err := client.Models.CountTokens(ctx, "gemini-3-flash-preview", hist, nil)
if err != nil {
log.Fatal(err)
}
fmt.Println(secondTokenResp.TotalTokens)
```
Cuenta tokens multimodales
Toda la entrada a la API de Gemini se tokeniza, incluido el texto, los archivos de imagen y otras
modalidades que no son de texto. Ten en cuenta los siguientes puntos clave de alto nivel sobre la tokenización
de la entrada multimodal durante el procesamiento de la API de Gemini:
Las entradas de imágenes con ambas dimensiones <=384 píxeles se cuentan como
258 tokens. Las imágenes más grandes en un
Related Articles
Data Engineering for Scaling Language Models to 128K Context
We study the continual pretraining recipe for scaling language models' context lengths to 128K, with a focus on data engineering. We hypothesize that long context modeling, in particular \textit{the...
How Important Is Tokenization in French Medical Masked Language Models?
Subword tokenization has become the prevailing standard in the field of natural language processing (NLP) over recent years, primarily due to the widespread utilization of pre-trained language...
Towards Adaptive Context Management for Intelligent Conversational Question Answering
This particular paper introduces an Adaptive Context Management (ACM) framework for the Conversational Question Answering (ConvQA) systems. The key objective of the ACM framework is to optimize the...
How_to_count_tokens_with_tiktoken
{ "cells": { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": " How to count tokens with tiktoken\n", "\n", " tiktoken ...