Gemini และโมเดล Generative AI อื่นๆ จะประมวลผลอินพุตและเอาต์พุตที่ระดับความละเอียด ที่เรียกว่าโทเค็น
สำหรับโมเดล Gemini โทเค็นจะเท่ากับอักขระประมาณ 4 ตัว โดย 100 โทเค็นจะเท่ากับคำภาษาอังกฤษประมาณ 60-80 คำ
เกี่ยวกับโทเค็น
โทเค็นอาจเป็นอักขระเดียว เช่น z หรือทั้งคำ เช่น cat ระบบจะแบ่งคำยาวๆ
ออกเป็นโทเค็นหลายรายการ ชุดโทเค็นทั้งหมดที่โมเดลใช้เรียกว่าคำศัพท์ และกระบวนการแยกข้อความเป็นโทเค็นเรียกว่าการโทเค็น
เมื่อเปิดใช้การเรียกเก็บเงิน ค่าใช้จ่ายในการเรียกใช้ Gemini API จะ พิจารณาจากจำนวนโทเค็นอินพุตและเอาต์พุตบางส่วน ดังนั้นการรู้วิธี นับโทเค็นจึงอาจเป็นประโยชน์
ลองนับโทเค็นใน Colab
คุณลองนับโทเค็นได้โดยใช้ Colab
|
|
ลองใช้ Colab Notebook
|
ดูสมุดบันทึกใน GitHub
|
หน้าต่างบริบท
โมเดลที่พร้อมใช้งานผ่าน Gemini API มีหน้าต่างบริบทที่ วัดเป็นโทเค็น หน้าต่างบริบทจะกำหนดปริมาณอินพุตที่คุณระบุได้ และปริมาณเอาต์พุตที่โมเดลสร้างได้ คุณสามารถกำหนดขนาดของ หน้าต่างบริบทได้โดยการเรียกใช้ปลายทาง getModels หรือ ดูในเอกสารประกอบของโมเดล
ในตัวอย่างต่อไปนี้ คุณจะเห็นว่าgemini-2.0-flashโมเดลมี
ขีดจำกัดอินพุตประมาณ 1,000,000 โทเค็นและขีดจำกัดเอาต์พุตประมาณ 8,000 โทเค็น
ซึ่งหมายความว่าหน้าต่างบริบทคือ 1,000,000 โทเค็น
from google import genai
client = genai.Client()
model_info = client.models.get(model="gemini-2.0-flash")
print(f"{model_info.input_token_limit=}")
print(f"{model_info.output_token_limit=}")
# ( e.g., input_token_limit=30720, output_token_limit=2048 )
นับโทเค็น
อินพุตและเอาต์พุตทั้งหมดของ Gemini API จะได้รับการโทเค็น รวมถึงข้อความ ไฟล์รูปภาพ และรูปแบบอื่นๆ ที่ไม่ใช่ข้อความ
คุณนับโทเค็นได้ด้วยวิธีต่อไปนี้
โทรหา
count_tokensพร้อมข้อมูลที่ป้อนของคำขอ
ฟังก์ชันนี้จะแสดงผลจำนวนโทเค็นทั้งหมดในอินพุต เท่านั้น คุณสามารถเรียกใช้ฟังก์ชันนี้ก่อนส่งอินพุตไปยังโมเดลเพื่อตรวจสอบ ขนาดของคำขอใช้แอตทริบิวต์
usage_metadataในออบเจ็กต์responseหลังจากเรียกใช้generate_content
ซึ่งจะแสดงจำนวนโทเค็นทั้งหมดในทั้งอินพุตและเอาต์พุต:total_token_count
นอกจากนี้ยังแสดงผลจำนวนโทเค็น ของอินพุตและเอาต์พุตแยกกันด้วย ได้แก่prompt_token_count(โทเค็นอินพุต) และcandidates_token_count(โทเค็นเอาต์พุต)หากคุณใช้โมเดลการคิด เช่น โมเดล 2.5 ระบบจะส่งโทเค็นที่ใช้ในกระบวนการคิดกลับมาใน
thoughts_token_countและหากคุณใช้การแคชบริบท จำนวนโทเค็นที่แคชไว้จะอยู่ในcached_content_token_count
นับโทเค็นข้อความ
หากเรียกใช้ count_tokens ด้วยอินพุตที่เป็นข้อความเท่านั้น ระบบจะแสดงผลจำนวนโทเค็นของข้อความในอินพุตเท่านั้น (total_tokens) คุณสามารถเรียกใช้ฟังก์ชันนี้ก่อนเรียกใช้ generate_content เพื่อตรวจสอบขนาดของคำขอได้
อีกทางเลือกหนึ่งคือการเรียก generate_content แล้วใช้แอตทริบิวต์ usage_metadata
ในออบเจ็กต์ response เพื่อรับข้อมูลต่อไปนี้
- จำนวนโทเค็นแยกกันของอินพุต (
prompt_token_count) เนื้อหาที่แคชไว้ (cached_content_token_count) และเอาต์พุต (candidates_token_count) - จำนวนโทเค็นสำหรับกระบวนการคิด (
thoughts_token_count) - จำนวนโทเค็นทั้งหมดทั้งในอินพุตและเอาต์พุต
(
total_token_count)
from google import genai
client = genai.Client()
prompt = "The quick brown fox jumps over the lazy dog."
# Count tokens using the new client method.
total_tokens = client.models.count_tokens(
model="gemini-2.0-flash", contents=prompt
)
print("total_tokens: ", total_tokens)
# ( e.g., total_tokens: 10 )
response = client.models.generate_content(
model="gemini-2.0-flash", contents=prompt
)
# The usage_metadata provides detailed token counts.
print(response.usage_metadata)
# ( e.g., prompt_token_count: 11, candidates_token_count: 73, total_token_count: 84 )
นับโทเค็นหลายรอบ (แชท)
หากคุณเรียกใช้ count_tokens พร้อมประวัติการแชท ระบบจะแสดงผลจำนวนโทเค็นทั้งหมด
ของข้อความจากแต่ละบทบาทในการแชท (total_tokens)
อีกทางเลือกหนึ่งคือการเรียก send_message แล้วใช้แอตทริบิวต์ usage_metadata
ในออบเจ็กต์ response เพื่อรับข้อมูลต่อไปนี้
- จำนวนโทเค็นแยกกันของอินพุต (
prompt_token_count) เนื้อหาที่แคชไว้ (cached_content_token_count) และเอาต์พุต (candidates_token_count) - จำนวนโทเค็นสำหรับกระบวนการคิด (
thoughts_token_count) - จำนวนโทเค็นทั้งหมดทั้งในอินพุตและเอาต์พุต
(
total_token_count)
หากต้องการทราบว่าการสนทนาครั้งถัดไปจะมีขนาดเท่าใด คุณต้องต่อท้าย
การสนทนาครั้งถัดไปไว้ในประวัติเมื่อเรียกใช้ count_tokens
from google import genai
from google.genai import types
client = genai.Client()
chat = client.chats.create(
model="gemini-2.0-flash",
history=[
types.Content(
role="user", parts=[types.Part(text="Hi my name is Bob")]
),
types.Content(role="model", parts=[types.Part(text="Hi Bob!")]),
],
)
# Count tokens for the chat history.
print(
client.models.count_tokens(
model="gemini-2.0-flash", contents=chat.get_history()
)
)
# ( e.g., total_tokens: 10 )
response = chat.send_message(
message="In one sentence, explain how a computer works to a young child."
)
print(response.usage_metadata)
# ( e.g., prompt_token_count: 25, candidates_token_count: 21, total_token_count: 46 )
# You can count tokens for the combined history and a new message.
extra = types.UserContent(
parts=[
types.Part(
text="What is the meaning of life?",
)
]
)
history = chat.get_history()
history.append(extra)
print(client.models.count_tokens(model="gemini-2.0-flash", contents=history))
# ( e.g., total_tokens: 56 )
นับโทเค็นหลายรูปแบบ
อินพุตทั้งหมดไปยัง Gemini API จะได้รับการโทเค็น รวมถึงข้อความ ไฟล์รูปภาพ และรูปแบบที่ไม่ใช่ข้อความอื่นๆ โปรดทราบประเด็นสำคัญระดับสูงต่อไปนี้เกี่ยวกับการแปลงเป็นโทเค็น ของอินพุตมัลติโมดอลระหว่างการประมวลผลโดย Gemini API
เมื่อใช้ Gemini 2.0 ระบบจะนับอินพุตรูปภาพที่มีทั้ง 2 ขนาด <=384 พิกเซลเป็น โทเค็น 258 รายการ รูปภาพที่มีขนาดใหญ่กว่าในมิติข้อมูลอย่างน้อย 1 มิติจะถูกครอบตัดและปรับขนาดตาม ความจำเป็นเป็นไทล์ขนาด 768x768 พิกเซล โดยแต่ละไทล์จะนับเป็น 258 โทเค็น ก่อน Gemini 2.0 รูปภาพจะใช้โทเค็นคงที่ 258 โทเค็น
ระบบจะแปลงไฟล์วิดีโอและเสียงเป็นโทเค็นในอัตราคงที่ต่อไปนี้ วิดีโอที่ 263 โทเค็นต่อวินาที และเสียงที่ 32 โทเค็นต่อวินาที
ความละเอียดของสื่อ
รุ่นตัวอย่างของ Gemini 3 Pro มีการควบคุมแบบละเอียดในการประมวลผลวิชันซิสเต็มหลายรูปแบบด้วยพารามิเตอร์
media_resolution พารามิเตอร์ media_resolution จะกำหนดจำนวนโทเค็นสูงสุดที่จัดสรรต่อรูปภาพอินพุตหรือเฟรมวิดีโอ
ความละเอียดที่สูงขึ้นจะช่วยปรับปรุงความสามารถของโมเดลในการอ่านข้อความขนาดเล็กหรือระบุรายละเอียดเล็กๆ แต่จะเพิ่มการใช้โทเค็นและเวลาในการตอบสนอง
ดูรายละเอียดเพิ่มเติมเกี่ยวกับพารามิเตอร์และผลกระทบที่อาจมีต่อการคำนวณโทเค็นได้ที่คู่มือความละเอียดของสื่อ
ไฟล์ภาพ
หากเรียกใช้ count_tokens ด้วยอินพุตข้อความและรูปภาพ ระบบจะแสดงผลจำนวนโทเค็นรวมของข้อความและรูปภาพในอินพุตเท่านั้น (total_tokens) คุณ
สามารถเรียกใช้ฟังก์ชันนี้ก่อนเรียกใช้ generate_content เพื่อตรวจสอบขนาดของคำขอ
ได้ นอกจากนี้ คุณยังเรียกใช้ count_tokens ในข้อความและไฟล์
แยกกันได้ด้วย
อีกทางเลือกหนึ่งคือการเรียก generate_content แล้วใช้แอตทริบิวต์ usage_metadata
ในออบเจ็กต์ response เพื่อรับข้อมูลต่อไปนี้
- จำนวนโทเค็นแยกกันของอินพุต (
prompt_token_count) เนื้อหาที่แคชไว้ (cached_content_token_count) และเอาต์พุต (candidates_token_count) - จำนวนโทเค็นสำหรับกระบวนการคิด (
thoughts_token_count) - จำนวนโทเค็นทั้งหมดทั้งในอินพุตและเอาต์พุต
(
total_token_count)
ตัวอย่างที่ใช้รูปภาพที่อัปโหลดจาก File API
from google import genai
client = genai.Client()
prompt = "Tell me about this image"
your_image_file = client.files.upload(file=media / "organ.jpg")
print(
client.models.count_tokens(
model="gemini-2.0-flash", contents=[prompt, your_image_file]
)
)
# ( e.g., total_tokens: 263 )
response = client.models.generate_content(
model="gemini-2.0-flash", contents=[prompt, your_image_file]
)
print(response.usage_metadata)
# ( e.g., prompt_token_count: 264, candidates_token_count: 80, total_token_count: 345 )
ตัวอย่างที่แสดงรูปภาพเป็นข้อมูลแบบอินไลน์
from google import genai
import PIL.Image
client = genai.Client()
prompt = "Tell me about this image"
your_image_file = PIL.Image.open(media / "organ.jpg")
# Count tokens for combined text and inline image.
print(
client.models.count_tokens(
model="gemini-2.0-flash", contents=[prompt, your_image_file]
)
)
# ( e.g., total_tokens: 263 )
response = client.models.generate_content(
model="gemini-2.0-flash", contents=[prompt, your_image_file]
)
print(response.usage_metadata)
# ( e.g., prompt_token_count: 264, candidates_token_count: 80, total_token_count: 345 )
ไฟล์วิดีโอหรือเสียง
ระบบจะแปลงเสียงและวิดีโอแต่ละรายการเป็นโทเค็นในอัตราคงที่ต่อไปนี้
- วิดีโอ: 263 โทเค็นต่อวินาที
- เสียง: 32 โทเค็นต่อวินาที
หากเรียกใช้ count_tokens ด้วยอินพุตข้อความและวิดีโอ/เสียง ระบบจะแสดงจำนวนโทเค็นรวมของข้อความและไฟล์วิดีโอ/เสียงในอินพุตเท่านั้น
(total_tokens) คุณสามารถเรียกใช้ฟังก์ชันนี้ก่อนเรียกใช้ generate_content เพื่อ
ตรวจสอบขนาดของคำขอได้ นอกจากนี้ คุณยังเรียกใช้ count_tokens ใน
ข้อความและไฟล์แยกกันได้ด้วย
อีกทางเลือกหนึ่งคือการเรียก generate_content แล้วใช้แอตทริบิวต์ usage_metadata
ในออบเจ็กต์ response เพื่อรับข้อมูลต่อไปนี้
- จำนวนโทเค็นแยกกันของอินพุต (
prompt_token_count) เนื้อหาที่แคชไว้ (cached_content_token_count) และเอาต์พุต (candidates_token_count) - จำนวนโทเค็นสำหรับกระบวนการคิด (
thoughts_token_count) - จำนวนโทเค็นทั้งหมดทั้งในอินพุตและเอาต์พุต
(
total_token_count)
from google import genai
import time
client = genai.Client()
prompt = "Tell me about this video"
your_file = client.files.upload(file=media / "Big_Buck_Bunny.mp4")
# Poll until the video file is completely processed (state becomes ACTIVE).
while not your_file.state or your_file.state.name != "ACTIVE":
print("Processing video...")
print("File state:", your_file.state)
time.sleep(5)
your_file = client.files.get(name=your_file.name)
print(
client.models.count_tokens(
model="gemini-2.0-flash", contents=[prompt, your_file]
)
)
# ( e.g., total_tokens: 300 )
response = client.models.generate_content(
model="gemini-2.0-flash", contents=[prompt, your_file]
)
print(response.usage_metadata)
# ( e.g., prompt_token_count: 301, candidates_token_count: 60, total_token_count: 361 )
คำสั่งและเครื่องมือของระบบ
คำสั่งและเครื่องมือของระบบจะนับรวมในจำนวนโทเค็นทั้งหมดสำหรับ อินพุตด้วย
หากคุณใช้คำสั่งของระบบ จำนวน total_tokens จะเพิ่มขึ้นเพื่อแสดงการเพิ่ม system_instruction
หากใช้การเรียกใช้ฟังก์ชัน จำนวน total_tokens จะเพิ่มขึ้นเพื่อแสดงถึงการเพิ่ม tools
ลองใช้ Colab Notebook
ดูสมุดบันทึกใน GitHub