فهم الرموز المميزة واحتسابها
تعالج نماذج الذكاء الاصطناعي التوليدي، مثل Gemini، المدخلات والمخرجات بدقة تُعرف باسم الرمز المميز.
في نماذج Gemini، يعادل الرمز المميز الواحد حوالي 4 أحرف. يساوي 100 رمز مميز حوالي 60 إلى 80 كلمة إنجليزية.
لمحة عن الرموز المميزة
يمكن أن تكون الرموز المميزة أحرفًا مفردة مثل z أو كلمات كاملة مثل cat. يتم تقسيم الكلمات الطويلة إلى عدة رموز مميزة. تُعرف مجموعة جميع الرموز المميزة التي يستخدمها النموذج باسم المفردات، وتُعرف عملية تقسيم النص إلى رموز مميزة باسم التقسيم إلى رموز مميزة.
عند تفعيل الفوترة، يتم تحديد تكلفة طلب البيانات من Gemini API جزئيًا من خلال عدد الرموز المميزة للإدخال والإخراج، لذا قد يكون من المفيد معرفة كيفية عدّ الرموز المميزة.
عدد الرموز المميزة
يتم تحويل جميع البيانات المدخلة إلى واجهة Gemini API والناتجة عنها إلى رموز مميزة، بما في ذلك النصوص وملفات الصور وغيرها من الوسائط غير النصية.
يمكنك احتساب الرموز المميزة بالطرق التالية:
استدعاء الدالة
count_tokensمع إدخال الطلب تعرض هذه الدالة إجمالي عدد الرموز المميزة في الإدخال فقط. يجب إجراء هذه المكالمة قبل إرسال أي إدخال للتحقّق من حجم طلباتك.استخدِم
usageفي ردّك على التفاعل. تعرض هذه السمة عدد الرموز المميزة للإدخال (total_input_tokens) والإخراج (total_output_tokens) والتفكير (total_thought_tokens) والمحتوى المخزّن مؤقتًا (total_cached_tokens) واستخدام الأدوات (total_tool_use_tokens) والإجمالي (total_tokens).
احتساب الرموز المميّزة النصية
Python
from google import genai
client = genai.Client()
prompt = "The quick brown fox jumps over the lazy dog."
# Count tokens before sending
total_tokens = client.models.count_tokens(
model="gemini-3-flash-preview",
contents=prompt
)
print("total_tokens:", total_tokens)
# Get usage from interaction
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input=prompt
)
print(interaction.usage)
JavaScript
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
const prompt = "The quick brown fox jumps over the lazy dog.";
// Count tokens before sending
const countResponse = await client.models.countTokens({
model: "gemini-3-flash-preview",
contents: prompt,
});
console.log(countResponse.totalTokens);
// Get usage from interaction
const interaction = await client.interactions.create({
model: "gemini-3-flash-preview",
input: prompt,
});
console.log(interaction.usage);
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:countTokens" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"contents": [{"parts": [{"text": "The quick brown fox."}]}]}'
عدّ الرموز المميّزة للمحادثات المتعدّدة الجولات
احتساب الرموز المميزة في سجلّ المحادثات باستخدام previous_interaction_id:
Python
# First interaction
interaction1 = client.interactions.create(
model="gemini-3-flash-preview",
input="Hi, my name is Bob"
)
# Second interaction continues the conversation
interaction2 = client.interactions.create(
model="gemini-3-flash-preview",
input="What's my name?",
previous_interaction_id=interaction1.id
)
# Usage includes tokens from both turns
print(f"Input tokens: {interaction2.usage.total_input_tokens}")
print(f"Output tokens: {interaction2.usage.total_output_tokens}")
print(f"Total tokens: {interaction2.usage.total_tokens}")
JavaScript
// First interaction
const interaction1 = await client.interactions.create({
model: "gemini-3-flash-preview",
input: "Hi, my name is Bob"
});
// Second interaction continues the conversation
const interaction2 = await client.interactions.create({
model: "gemini-3-flash-preview",
input: "What's my name?",
previousInteractionId: interaction1.id
});
console.log(`Input tokens: ${interaction2.usage.totalInputTokens}`);
console.log(`Output tokens: ${interaction2.usage.totalOutputTokens}`);
احتساب الرموز المميّزة المتعددة الوسائط
يتم تحويل جميع البيانات المُدخَلة إلى Gemini API إلى رموز مميزة، بما في ذلك الصور والفيديو والصوت. في ما يلي النقاط الرئيسية حول عملية الترميز:
- الصور: يتم احتساب الصور التي يبلغ حجمها 384 بكسل أو أقل في كلا البُعدين على أنّها 258 رمزًا مميزًا. يتم تقسيم الصور الأكبر حجمًا إلى مربّعات بحجم 768x768 بكسل، ويتم احتساب كل مربّع على أنّه 258 رمزًا مميزًا.
- الفيديو: 263 رمزًا مميزًا في الثانية
- الصوت: 32 رمزًا مميزًا في الثانية
رموز الصور المميزة
Python
uploaded_file = client.files.upload(file="path/to/image.jpg")
# Count tokens for image + text
total_tokens = client.models.count_tokens(
model="gemini-3-flash-preview",
contents=["Tell me about this image", uploaded_file]
)
print(f"Total tokens: {total_tokens}")
# Generate with image
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input=[
{"type": "text", "text": "Tell me about this image"},
{"type": "image", "uri": uploaded_file.uri, "mime_type": uploaded_file.mime_type}
]
)
print(interaction.usage)
JavaScript
const uploadedFile = await client.files.upload({
file: "path/to/image.jpg",
config: { mimeType: "image/jpeg" }
});
// Count tokens
const countResponse = await client.models.countTokens({
model: "gemini-3-flash-preview",
contents: [
{ text: "Tell me about this image" },
{ fileData: { fileUri: uploadedFile.uri, mimeType: uploadedFile.mimeType } }
]
});
console.log(countResponse.totalTokens);
مثال على البيانات المضمّنة:
Python
import base64
with open('image.jpg', 'rb') as f:
image_bytes = f.read()
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input=[
{"type": "text", "text": "Describe this image"},
{
"type": "image",
"data": base64.b64encode(image_bytes).decode('utf-8'),
"mime_type": "image/jpeg"
}
]
)
print(interaction.usage)
رموز الفيديو المميّزة
Python
import time
video_file = client.files.upload(file="path/to/video.mp4")
while not video_file.state or video_file.state.name != "ACTIVE":
print("Processing video...")
time.sleep(5)
video_file = client.files.get(name=video_file.name)
# A 60-second video is approximately 263 * 60 = 15,780 tokens
total_tokens = client.models.count_tokens(
model="gemini-3-flash-preview",
contents=["Summarize this video", video_file]
)
print(f"Total tokens: {total_tokens}")
# Generate with video
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input=[
{"type": "text", "text": "Summarize this video"},
{"type": "video", "uri": video_file.uri, "mime_type": video_file.mime_type}
]
)
print(interaction.usage)
الرموز الصوتية
Python
audio_file = client.files.upload(file="path/to/audio.mp3")
# A 60-second audio clip is approximately 32 * 60 = 1,920 tokens
total_tokens = client.models.count_tokens(
model="gemini-3-flash-preview",
contents=["Transcribe this audio", audio_file]
)
print(f"Total tokens: {total_tokens}")
# Generate with audio
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input=[
{"type": "text", "text": "Transcribe this audio"},
{"type": "audio", "uri": audio_file.uri, "mime_type": audio_file.mime_type}
]
)
print(interaction.usage)
احتساب الرموز المميزة لتعليمات النظام
يتم احتساب تعليمات النظام كجزء من الرموز المميزة للإدخال:
Python
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input="Hello!",
system_instruction="You are a helpful assistant who speaks like a pirate."
)
# system_instruction tokens included in total_input_tokens
print(f"Input tokens: {interaction.usage.total_input_tokens}")
رموز أداة الاحتساب
يتم أيضًا احتساب الأدوات (الدوال، وتنفيذ التعليمات البرمجية، و"بحث Google"):
Python
tools = [
{
"type": "function",
"name": "get_weather",
"description": "Get current weather",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string"}
}
}
}
]
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input="What's the weather in Tokyo?",
tools=tools
)
print(f"Input tokens: {interaction.usage.total_input_tokens}")
print(f"Tool use tokens: {interaction.usage.total_tool_use_tokens}")
قدرة الاستيعاب
لكل نموذج من نماذج Gemini حدّ أقصى لعدد الرموز المميزة التي يمكنه معالجتها. تحدّد نافذة السياق الحدّ الأقصى المسموح به لعدد الرموز المميزة في كل من الطلب والرد.
الحصول على حجم قدرة الاستيعاب آليًا
Python
model_info = client.models.get(model="gemini-3-flash-preview")
print(f"Input token limit: {model_info.input_token_limit}")
print(f"Output token limit: {model_info.output_token_limit}")
JavaScript
const modelInfo = await client.models.get({ model: "gemini-3-flash-preview" });
console.log(`Input token limit: ${modelInfo.inputTokenLimit}`);
console.log(`Output token limit: ${modelInfo.outputTokenLimit}`);
يمكنك الاطّلاع على أحجام قدرة الاستيعاب في صفحة النماذج.
الخطوات التالية
- إنشاء النصوص: الأساسيات
- التخزين المؤقت: خفض التكاليف باستخدام التخزين المؤقت
- الأسعار: التعرّف على التكاليف