การถอดรหัสแบบยาวช่วยให้ Gemini 4 Argon สร้างเอาต์พุตได้เกินขีดจำกัดของคำขอเดียวสำหรับงานที่ต้องใช้การให้เหตุผลเชิงลึก โดยรองรับหน้าต่างบริบทแบบรวมขนาด 1 ล้านโทเค็น (1,048,576 โทเค็นที่แชร์ระหว่างอินพุต การคิด และเอาต์พุต)
การเปลี่ยนรหัสโมเดลเพียงอย่างเดียวไม่ได้เปิดใช้การถอดรหัสแบบยาว หากไม่มีการตั้งค่าเพิ่มเติม เอาต์พุตจะหยุดที่ 64,000 โทเค็นสำหรับการโทรแบบสตรีมมิง และ 32,000 โทเค็นสำหรับการโทรแบบไม่สตรีมมิง วิธีที่เร็วที่สุดในการเปิดการถอดรหัสแบบยาวคือการอัปเกรด Google GenAI SDK และตั้งค่า max_output_tokens ให้มากกว่า 65,536 คู่มือนี้จะอธิบายวิธีการทำงานของการถอดรหัสแบบยาว กรณีที่ควรใช้ และวิธีเปิดใช้ด้วย generateContent
ระยะเวลาที่การถอดรหัสทำงาน
คำขอสตรีมมิงหรือ SDK รายการเดียวจะสร้างโทเค็นได้สูงสุด 64,000 รายการ และคำขอ REST ที่ไม่ใช่สตรีมมิงจะสร้างโทเค็นได้สูงสุด 32,000 รายการ เมื่อคำตอบต้องการโทเค็นเพิ่มเติม โมเดลจะสร้างโทเค็นดังกล่าวในการส่งคำขอและการตอบกลับหลายครั้ง โดยแต่ละครั้งจะดำเนินการต่อจากที่การส่งต่อครั้งก่อนหน้าหยุด
- ขีดจำกัดโทเค็นอินพุตและเอาต์พุตแบบรวม: อินพุต การคิด การเรียกใช้ฟังก์ชัน และคำตอบสุดท้ายจะใช้หน้าต่างโทเค็นขนาด 1 ล้านโทเค็นร่วมกัน เอาต์พุตสามารถใช้โทเค็นได้สูงสุด 1,048,576 ลบด้วยโทเค็นอินพุต
- ขีดจำกัดของแต่ละฮอป: ฮอปหนึ่งๆ จะแสดงโทเค็นเอาต์พุตได้สูงสุด 65,536 รายการ คำขอ REST ที่ไม่ใช่สตรีมมิงจะแสดงผลได้สูงสุด 32,768 รายการ
- สัญญาณความต่อเนื่อง: หากโมเดลถึงขีดจำกัดและยังมีโทเค็นเหลืออยู่ คำตอบจะสิ้นสุดด้วย
finish_reason: CONTINUATIONและcontinuation_token - การ Hop ถัดไป: ไคลเอ็นต์จะส่งคำขอเดิมอีกครั้งพร้อมโทเค็น โมเดลจะดำเนินการต่อจากจุดที่หยุดไว้
- ยอดรวมเดียวสำหรับฮ็อปทั้งหมด:
max_output_tokensจะกำหนดโทเค็นการคิดและเอาต์พุตรวมสำหรับฮ็อปทั้งหมดรวมกัน - สัญญาณหยุด: เมื่อโมเดลใช้
max_output_tokensทั้งหมด คำตอบจะลงท้ายด้วยfinish_reason: MAX_TOKENS
สำหรับปัญหาที่ยาก ฮอปอาจใช้โทเค็นทั้งหมดไปกับการคิดภายในและส่งคืนข้อความว่างพร้อมด้วย continuation_token ซึ่งเป็นเรื่องปกติ และคำตอบสุดท้ายจะมาถึงในฮ็อปถัดไป
ขีดจำกัดเอาต์พุตเริ่มต้น
หากไม่มีการถอดรหัสแบบยาว คำขอเดียวจะหยุดที่ขีดจำกัดต่อคำขอต่อไปนี้
- คำขอสตรีมและคำขอที่ไม่ใช่การสตรีมผ่าน Google GenAI SDK (
generate_content): ค่าเริ่มต้นคือโทเค็นเอาต์พุต 64,000 รายการ - การเรียก REST แบบไม่สตรีมโดยตรง (
generateContent): ค่าเริ่มต้นคือโทเค็นเอาต์พุต 32,000 รายการ การตั้งค่าmax_output_tokensมากกว่า 32,768 ในการเรียก REST ที่ไม่ใช่การสตรีมโดยไม่มีcontinuation_tokenจะแสดงข้อผิดพลาด400
| วิธีเรียกใช้โมเดล | ขีดจำกัดเอาต์พุตโดยไม่มีการถอดรหัสแบบยาว | ถอดรหัสแบบยาวเมื่อเปิดตัว | สิ่งที่ต้องทำ |
|---|---|---|---|
| Google GenAI SDK เวอร์ชันล่าสุด | 64 K | ใช่ SDK จะยังคงใช้งานได้ | ตั้งค่า max_output_tokens |
| Google GenAI SDK เวอร์ชันเก่ากว่าแบบไม่สตรีม | 64 K | ไม่ใช่ | อัปเกรด SDK |
REST streamGenerateContent |
64 K | ได้ โดยใช้ลูปของคุณเอง | เขียนลูป ดูตัวเลือกที่ 2 |
REST generateContent |
3.2 หมื่น | ได้ โดยใช้ลูปของคุณเอง | เขียนลูป ดูตัวเลือกที่ 2 |
เมื่อใดที่ควรใช้การถอดรหัสแบบยาว
คำขอส่วนใหญ่จะเสร็จสิ้นภายในขีดจำกัดของคำขอเดียว (64,000 โทเค็นสำหรับการสตรีมและการเรียก SDK หรือ 32,000 โทเค็นสำหรับการเรียก REST ที่ไม่ใช่การสตรีม) ใช้การถอดรหัสแบบยาวเมื่อคำตอบต้องใช้โทเค็นการคิดและเอาต์พุตรวมกันมากกว่าที่คำขอเดียวอนุญาต การเพิ่ม max_output_tokens จะทำให้โมเดลมีเพดานที่สูงขึ้นในการให้เหตุผลผ่านปัญหาที่ยาก แทนที่จะทำให้คำตอบมาตรฐานยาวขึ้น
| ภาระงาน | ใช้การถอดรหัสแบบยาวไหม | ทำไม |
|---|---|---|
| คณิตศาสตร์ วิทยาศาสตร์ การวิจัย และการพิสูจน์อย่างเป็นทางการที่ยาก | ใช่ | โมเดลสามารถใช้โทเค็นได้มากกว่า 64,000 รายการเพื่อสำรวจและตรวจสอบการให้เหตุผล |
| งานเขียนโค้ดและงานที่ใช้ Agent ที่ยากที่สุด | ใช่ | งานบางอย่างต้องใช้โทเค็นการคิดและโค้ดมากกว่า 64,000 รายการในคำตอบเดียว งานเขียนโค้ดและงานที่ใช้ Agent ส่วนใหญ่จะเสร็จสิ้นภายใน 64,000 โทเค็น |
| ชุดเครื่องมือประเมินที่หยุดเมื่อถึงขีดจำกัดเอาต์พุต | ใช่ | การถอดรหัสแบบยาวจะช่วยป้องกันไม่ให้คำตอบถูกตัดเมื่อโมเดลใช้คำขอ 64K หรือ 32K ทั้งหมดในการคิด |
| แชท, ถามและตอบ, การสรุป, การแยกประเภท และการดึงข้อมูล | ไม่ใช่ | งานเหล่านี้จะเสร็จสิ้นได้ดีโดยใช้โทเค็นไม่เกิน 32,000 รายการ |
| คำขอความยาวคงที่ เช่น "เขียนหนังสือ 700,000 คำ" | ไม่ใช่ | โมเดลไม่เป็นไปตามเป้าหมายความยาว |
| Agent ที่เรียกใช้เครื่องมือในหลายๆ เทิร์นสั้นๆ | ไม่ใช่ | แต่ละรอบจะสั้น เอาต์พุตขนาดใหญ่ในแต่ละเทิร์นจะเติมเต็มหน้าต่างอินพุตและเอาต์พุตแบบรวมขนาด 1 ล้านโทเค็นได้อย่างรวดเร็ว |
| พรอมต์ใกล้ถึงขีดจำกัดอินพุต 1 ล้านรายการ | ไม่ใช่ | เอาต์พุตใช้ได้เพียง 1 ล้านลบด้วยอินพุตของคุณ |
| คำขอที่ไวต่อเวลาในการตอบสนอง | ไม่ใช่ | การถอดรหัสแบบยาวอาจใช้เวลาหลายนาที |
การตั้งค่า max_output_tokens สูงจะช่วยให้โมเดลมีเวลาคิดนานขึ้นสำหรับปัญหาที่ยาก แต่โมเดลจะยังคงเป็นผู้กำหนดปริมาณข้อความที่จะเขียน หากต้องการควบคุมความพยายามในการให้เหตุผลที่โมเดลใช้ ให้ตั้งค่า thinking_level
เปิดใช้การถอดรหัสแบบยาว
คุณสามารถเรียกใช้การถอดรหัสแบบยาวโดยอัตโนมัติด้วย Google GenAI SDK (ตัวเลือกที่ 1 แนะนำสำหรับแอปส่วนใหญ่) หรือเขียนลูปความต่อเนื่องของคุณเอง (ตัวเลือกที่ 2) ทั้ง 2 ตัวเลือกนี้รองรับหน้าต่างบริบทขนาด 1 ล้านโทเค็นแบบเต็ม
| ตัวเลือกที่ 1: Google GenAI SDK (แนะนำ) | ตัวเลือกที่ 2: ลูปการสตรีมของคุณเอง | ตัวเลือกที่ 2: ลูปของคุณเองที่ไม่ใช่สตรีม | |
|---|---|---|---|
| ใครเป็นผู้เริ่มการฮ็อปแต่ละครั้ง | SDK คุณตั้งค่า max_output_tokens |
โค้ดของคุณที่จุดตรวจสอบแต่ละจุดหรือหลังจากสตรีมหยุด | โค้ดของคุณทุกๆ 32, 000 โทเค็น |
| โทเค็นต่อคำขอ | 64K ต่อ Hop | 64,000 ต่อสตรีม โดยมีจุดตรวจสอบทุกๆ 5,000 โทเค็นหลังจาก 32,000 | 32,000 รายการต่อคำขอ |
| การจำกัดเวลาต่อคำขอ | 20 นาที | 20 นาที | 20 นาที |
| พื้นที่เก็บข้อมูล | ไม่มีพื้นที่เก็บข้อมูลเซิร์ฟเวอร์ | ไม่มีพื้นที่เก็บข้อมูลเซิร์ฟเวอร์ | ไม่มีพื้นที่เก็บข้อมูลเซิร์ฟเวอร์ |
| เหมาะสำหรับ | แอปพลิเคชันส่วนใหญ่ | ผู้เรียก REST และชุดทดสอบที่กำหนดเองซึ่งสตรีม | ชุดทดสอบการประเมินแบบง่าย |
continuation_token ที่เข้ารหัสจะเก็บสถานะของโมเดลไว้ระหว่างคำขอ จึงไม่มีการจัดเก็บข้อมูลใดๆ ไว้ในเซิร์ฟเวอร์
ตัวเลือกที่ 1: ใช้ Google GenAI SDK (แนะนำ)
ใน Google GenAI SDK เวอร์ชันล่าสุด ระบบจะเปิดใช้ automatic_continuation โดยค่าเริ่มต้นสำหรับการเรียกทั้งแบบสตรีมมิงและไม่ใช่สตรีมมิง คุณจึงไม่จำเป็นต้องตั้งค่า เมื่อตั้งค่าmax_output_tokensสูงกว่าขีดจํากัดต่อคําขอ SDK จะเรียกใช้การเปลี่ยนเส้นทางต่อเนื่องโดยอัตโนมัติและแสดงผลการตอบกลับที่รวมกัน
อัปเกรด SDK
Python
pip install -U "google-genai>=2.30.1"JavaScript
npm install "@google/genai@>=2.29.1"ตั้งค่า
max_output_tokensให้มากกว่า 65,536Python
from google import genai from google.genai import types client = genai.Client() # Reads GEMINI_API_KEY response = client.models.generate_content( model="gemini-4-argon", contents="Write a complete, rigorous proof of the prime number theorem.", config=types.GenerateContentConfig( max_output_tokens=262_144, # Total thinking and output for all hops thinking_config=types.ThinkingConfig(thinking_level="high"), automatic_continuation=True, # Default. Shown for clarity. ), ) print(response.text) print("Finish reason:", response.candidates[0].finish_reason) print("Prompt size:", response.usage_metadata.initial_prompt_token_count) print("Billed tokens:", response.usage_metadata.total_token_count)JavaScript
import { GoogleGenAI, ThinkingLevel } from "@google/genai"; const ai = new GoogleGenAI({}); // Reads GEMINI_API_KEY const response = await ai.models.generateContent({ model: "gemini-4-argon", contents: "Write a complete, rigorous proof of the prime number theorem.", config: { maxOutputTokens: 262144, // Total thinking and output for all hops thinkingConfig: { thinkingLevel: ThinkingLevel.HIGH }, automaticContinuation: true, // Default. Shown for clarity. }, }); console.log(response.text); console.log("Finish reason:", response.candidates?.[0]?.finishReason); console.log("Prompt size:", response.usageMetadata?.initialPromptTokenCount); console.log("Billed tokens:", response.usageMetadata?.totalTokenCount);
โปรดจดจำประเด็นต่างๆ เหล่านี้ไว้เสมอ
- สตรีมมิง:
generate_content_stream(Python) และgenerateContentStream(JavaScript) จะเขียนต่อให้คุณด้วย หากสตรีมหยุดลงหลังจากจุดตรวจสอบ SDK จะกลับมาทำงานต่อจากจุดตรวจสอบนั้น - ระยะหมดเวลา: ระยะหมดเวลาและการลองใหม่จะมีผลกับการส่งต่อแต่ละครั้ง ไม่ใช่การเรียกใช้ทั้งหมด
- การควบคุมด้วยตนเอง: หากต้องการเรียกใช้ลูปด้วยตนเอง ให้ตั้งค่า
automatic_continuation=False(Python) หรือautomaticContinuation: false(JavaScript) จากนั้นทำตามตัวเลือกที่ 2 - การใช้งาน: ฟิลด์การใช้งานจะแสดงผลรวมของการส่งต่อทั้งหมด หากต้องการดูขนาดของพรอมต์ โปรดอ่าน
initial_prompt_token_countดูนับโทเค็น
ตัวเลือกที่ 2: เขียนลูปของคุณเอง
เขียนลูปของคุณเองหากเรียกใช้ REST โดยตรง ใช้ภาษาที่ไม่มี SDK ล่าสุด หรือต้องการควบคุมอย่างเต็มที่ นอกจากนี้ คุณยังดูการติดตั้งใช้งาน Google GenAI SDK ใน Python และ JavaScript/TypeScript เพื่อใช้เป็นข้อมูลอ้างอิงได้ด้วย
โดยทำตามกฎต่อไปนี้
- ส่งคำขอเดียวกันในทุกฮ็อป ส่ง
contents,system_instruction,toolsและgeneration_configต้นฉบับ คงค่าmax_output_tokensไว้เหมือนเดิม - อย่าเพิ่มเอาต์พุตบางส่วนลงใน
contentscontinuation_tokenจะเก็บสถานะของโมเดล รวมถึงการคิดของโมเดล - ส่งเฉพาะโทเค็นล่าสุด โทเค็นแต่ละรายการจะมีความคืบหน้าก่อนหน้าทั้งหมด
- ดำเนินการต่อขณะที่
finish_reasonCONTINUATIONหยุดด้วยเหตุผลอื่นใดก็ตาม - รวมส่วนต่างๆ หลังจากฮอปสุดท้าย รวมส่วนต่างๆ จากการฮ็อปทั้งหมดไว้ในเทิร์นโมเดลเดียวสำหรับประวัติการสนทนา
Python
from google import genai
from google.genai import types
client = genai.Client() # Reads GEMINI_API_KEY
PROMPT = "Write a complete, rigorous proof of the prime number theorem."
parts = []
token = None
while True:
response = client.models.generate_content(
model="gemini-4-argon",
contents=PROMPT, # The original contents on every request
config=types.GenerateContentConfig(
max_output_tokens=262_144, # The same total on every request
thinking_config=types.ThinkingConfig(thinking_level="high"),
automatic_continuation=False, # You run the loop
continuation_token=token,
),
)
candidate = response.candidates[0]
if candidate.content and candidate.content.parts:
parts.extend(candidate.content.parts)
token = candidate.continuation_token
if candidate.finish_reason != types.FinishReason.CONTINUATION or not token:
break
print("".join(p.text for p in parts if p.text and not p.thought))
print("Finish reason:", candidate.finish_reason)
JavaScript
import { GoogleGenAI, ThinkingLevel } from "@google/genai";
const ai = new GoogleGenAI({}); // Reads GEMINI_API_KEY
const PROMPT = "Write a complete, rigorous proof of the prime number theorem.";
const parts = [];
let token = undefined;
let candidate = undefined;
while (true) {
const response = await ai.models.generateContent({
model: "gemini-4-argon",
contents: PROMPT, // The original contents on every request
config: {
maxOutputTokens: 262144, // The same total on every request
thinkingConfig: { thinkingLevel: ThinkingLevel.HIGH },
automaticContinuation: false, // You run the loop
continuationToken: token,
},
});
candidate = response.candidates?.[0];
if (candidate?.content?.parts) {
parts.push(...candidate.content.parts);
}
token = candidate?.continuationToken;
if (candidate?.finishReason !== "CONTINUATION" || !token) {
break;
}
}
console.log(parts.filter((p) => p.text && !p.thought).map((p) => p.text).join(""));
console.log("Finish reason:", candidate?.finishReason);
REST
# Hop 1: send the request with max_output_tokens.
curl -s "https://generativelanguage.googleapis.com/v1beta/models/gemini-4-argon:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"role": "user", "parts": [{"text": "Write a complete, rigorous proof of the prime number theorem."}]}],
"generationConfig": {
"maxOutputTokens": 262144,
"thinkingConfig": {"thinkingLevel": "high"}
}
}'
# Hop 2: if finishReason is CONTINUATION, send the same request plus the token.
curl -s "https://generativelanguage.googleapis.com/v1beta/models/gemini-4-argon:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"role": "user", "parts": [{"text": "Write a complete, rigorous proof of the prime number theorem."}]}],
"generationConfig": {
"maxOutputTokens": 262144,
"thinkingConfig": {"thinkingLevel": "high"}
},
"continuationToken": "TOKEN_FROM_HOP_1"
}'
การฮ็อปที่ใช้เวลาทั้งหมดไปกับการคิดจะแสดงผล text ที่ว่างเปล่าพร้อม finishReason: "CONTINUATION" ให้ถือว่านี่เป็นความคืบหน้าตามปกติและขอการ Hop ถัดไปโดยทำดังนี้
{
"candidates": [{
"content": {"role": "model", "parts": [{"text": ""}]},
"finishReason": "CONTINUATION",
"continuationToken": "CiQ4ZmQ3..."
}],
"usageMetadata": {
"promptTokenCount": 142,
"candidatesTokenCount": 0,
"thoughtsTokenCount": 32768,
"totalTokenCount": 32910
}
}
ลูปสตรีมมิงต้องมีกฎอีก 1 ข้อ หลังจาก 32,768 โทเค็นแรก สตรีมจะส่งโทเค็นจุดตรวจสอบทุกๆ 5,000 โทเค็น เก็บกลุ่มใหม่ไว้ในรายการที่รอดำเนินการ เมื่อกลุ่มมี continuation_token ให้ย้ายกลุ่มที่รอดำเนินการไปยังเอาต์พุตที่คอมมิตแล้วและบันทึกโทเค็น หากสตรีมหยุดทำงาน ให้ทิ้งก้อนข้อมูลที่รอดำเนินการและเล่นต่อจากโทเค็นสุดท้าย หากสตรีมหยุดลงก่อนจุดตรวจสอบแรก ให้ส่งคำขอเดิมอีกครั้ง
ชุด max_output_tokens
max_output_tokens กำหนดขีดจำกัดรวมสำหรับการคิดและเอาต์พุตในทุกฮ็อป การลดค่านี้ไม่ได้ทำให้โมเดลคิดอย่างกระชับมากขึ้น แต่จะทำให้โมเดลตัดคำตอบออกเร็วขึ้น
| ภาระงานของคุณ | ระยะเวลาที่แนะนำ max_output_tokens |
|---|---|
| แอปที่มีอยู่ซึ่งมีขีดจำกัดต่ำกว่า 32,000 รายการ | เพิ่มเป็น 32,768 |
| การเขียนโค้ดที่ใช้เวลานานและงานที่ดำเนินการโดย Agent | เริ่มที่ 65,536 |
| คณิตศาสตร์ วิทยาศาสตร์ การวิจัย และการพิสูจน์ที่ยาก | ทดสอบค่าตั้งแต่ 262,144 ถึง 1,048,576 ลบด้วยโทเค็นอินพุต |
หากต้องการใช้โทเค็นน้อยลง ให้ลด thinking_level ใช้ high สำหรับงานที่ต้องใช้การให้เหตุผลที่ยากที่สุด ใช้ medium (ค่าเริ่มต้น) สำหรับงานการเขียนโค้ดและงานแบบ Agent ส่วนใหญ่ ใช้ low สำหรับงานที่ซับซ้อนน้อยกว่า
จัดการคำขอที่ใช้เวลานาน
เนื่องจาก Gemini 4 Argon ใช้เวลาคิดนานกว่าโมเดล Gemini 3.x สำหรับปัญหาที่ยาก คุณจึงควรเพิ่มระยะหมดเวลาของไคลเอ็นต์เพื่อให้คำขอที่ใช้เวลานานไม่ถูกตัดการเชื่อมต่อก่อนเวลาอันควร
- การโทรที่ไม่ได้สตรีม: เซิร์ฟเวอร์จะปิดการเชื่อมต่อหลังจากผ่านไป 10 นาที
- การเรียกแบบสตรีมมิง: เซิร์ฟเวอร์จะปิดสตรีมหลังจากผ่านไป 20 นาที
- ระยะหมดเวลาของไคลเอ็นต์: ตั้งค่าระยะหมดเวลาในการอ่าน HTTP เป็น 20 นาที การหมดเวลา 3 นาทีหรือ 5 นาทีจะหยุดคำขอก่อนเวลา
ใน Python ให้ตั้งค่าการหมดเวลาในไคลเอ็นต์เป็นมิลลิวินาที
client = genai.Client(http_options=types.HttpOptions(timeout=1_200_000)) # 20 minutes
สำหรับงานที่ไคลเอ็นต์ของคุณสำรวจ Interactions API จะทำการถอดรหัสแบบยาวในเซิร์ฟเวอร์ ดูการดำเนินการในเบื้องหลัง
กลับมาทำงานต่อเมื่อโมเดลใช้โทเค็นเอาต์พุตทั้งหมด
เมื่อการตอบกลับลงท้ายด้วย MAX_TOKENS การตอบกลับจะยังคงมี continuation_token คุณมี 2 ทางเลือก ดังนี้
- ดำเนินการต่อ: ส่งคำขอเดียวกันพร้อมโทเค็นและ
max_output_tokensที่สูงขึ้น ค่าต้องสูงกว่าโทเค็นที่ใช้ไปแล้ว ไม่เช่นนั้น API จะแสดงข้อผิดพลาด 400 - เริ่มอีกครั้ง: ส่งคำขอเดิมที่มี
max_output_tokensสูงขึ้นและไม่มีโทเค็น คุณต้องจ่ายค่าบริการทั้ง 2 ครั้ง
นับโทเค็น
เมื่อใช้การติดตามต่ออัตโนมัติ usage_metadata จะรายงานยอดรวมในทุกฮ็อป SDK จะรวมช่องจำนวนทั้งหมด ได้แก่ prompt_token_count, cached_content_token_count, candidates_token_count, thoughts_token_count และ total_token_count
prompt_token_count จะรวมโทเค็นอินพุตของทุกฮ็อป แต่ละฮ็อปจะส่งพรอมต์ของคุณพร้อมกับทุกอย่างที่สร้างขึ้นจนถึงตอนนี้กลับไปยังโมเดลเป็นอินพุต ดังนั้นระบบจะนับโทเค็นเดียวกันอีกครั้งในทุกฮ็อปที่ตามมา ตัวอย่างเช่น เมื่อใช้ Google GenAI SDK พรอมต์ที่มีโทเค็น 1,000 รายการซึ่งสร้างโทเค็นการคิดและเอาต์พุต 200,000 รายการจะใช้การข้าม 4 ครั้ง ดังนี้
| Hop | อินพุตที่ส่งไปยังโมเดล | โทเค็นอินพุต |
|---|---|---|
| 1 | พรอมต์ | 1,000 |
| 2 | พรอมต์ + ฮอป 1 | 66,536 |
| 3 | พรอมต์ + ฮ็อป 1 และ 2 | 132,072 |
| 4 | พรอมต์ + การข้าม 1 ถึง 3 ครั้ง | 197,608 |
| รวม | 397,216 |
prompt_token_count รายงานโทเค็นประมาณ 397,000 รายการ (โดยอินพุต Hop ที่ซ้ำกันจะลดลง 95% โดยอัตโนมัติด้วยการแคชโดยนัย) และ total_token_count รายงานโทเค็นประมาณ 597,000 รายการ แม้ว่าขนาดบริบทจริงจะอยู่ที่ประมาณ 201,000 โทเค็นเท่านั้น ซึ่งก็คือพรอมต์ 1,000 โทเค็นบวกกับการคิดและเอาต์พุต 200,000 โทเค็น ลูป REST ที่ไม่ใช่การสตรีมใช้ 32, 000 Hop ดังนั้นจึงใช้ 7 Hop สำหรับเอาต์พุตเดียวกันและรายงานโทเค็นอินพุต 695,128 รายการ
| วิธีเรียกใช้โมเดล | สิ่งที่ usage_metadata แสดง |
สำหรับค่าใช้จ่าย | สำหรับขนาดพรอมต์ |
|---|---|---|---|
| Google GenAI SDK, ความต่อเนื่องอัตโนมัติ (ค่าเริ่มต้น) | ผลรวมในการส่งต่อทั้งหมด | อ่านช่องการใช้งานตามที่เป็นอยู่ | อ่าน usage_metadata.initial_prompt_token_count (Python) หรือ usageMetadata.initialPromptTokenCount (JavaScript) |
SDK ที่มี automatic_continuation=False หรือ REST |
1 Hop ต่อการตอบกลับ | เพิ่มแต่ละช่องในฮ็อป | อ่าน prompt_token_count จากฮ็อปแรก |
prompt_token_count และ total_token_count คือผลรวมของทุกฮ็อป ไม่ใช่ขนาดของบริบท อย่าใช้เพื่อตัดสินใจว่าจะสรุปหรือตัดประวัติการสนทนา (การบีบอัดบริบท) เมื่อใด หรือเพื่อบังคับใช้ขีดจำกัดบริบท หากต้องการประมาณขนาดบริบท ให้เพิ่มขนาดพรอมต์จากตารางลงใน candidates_token_count และ thoughts_token_count
อัปเดตเฟรมเวิร์กของ Agent, เครื่องมือประเมิน หรือพร็อกซี ก่อนที่จะเรียกใช้การถอดรหัสแบบยาว
- Agent และเครื่องมือประเมิน: หากโค้ดของคุณบีบอัดบริบทหรือหยุดการเรียกใช้ที่ขีดจำกัดโทเค็น ให้ใช้
initial_prompt_token_count(หรือprompt_token_countของฮ็อปแรกใน REST) แทนprompt_token_countที่รวมแล้ว การตอบกลับที่เสร็จสิ้นในฮ็อปเดียวจะรายงานค่าเดียวกันในทั้ง 2 ฟิลด์ ดังนั้นการทดสอบระยะสั้นจึงไม่แสดงปัญหา - พร็อกซีและเกตเวย์ที่เรียก REST: การตอบกลับ REST แต่ละรายการจะรายงานเฉพาะการส่งต่อของตัวเอง เพิ่มแต่ละฟิลด์ในการส่งต่อแต่ละครั้งสำหรับค่าใช้จ่าย และเก็บ
promptTokenCountของการส่งต่อครั้งแรกไว้เป็นขนาดพรอมต์ ไม่เช่นนั้น ผู้ใช้จะเห็นตัวเลขที่แตกต่างจากผู้ใช้ SDK สำหรับคำขอเดียวกัน - บันทึกและการตอบกลับที่แปลงเป็นอนุกรม: SDK จะคำนวณ
initial_prompt_token_countในไคลเอ็นต์ ซึ่งไม่ได้อยู่ในการตอบกลับ REST หรือในเอาต์พุต JSON ของ SDK เช่นmodel_dump()บันทึกเป็นค่าแยกต่างหากหากต้องการใช้ในภายหลัง
หากคุณสตรีมในลูปของตัวเอง usage_metadata จะสะสมภายในแต่ละสตรีม เก็บเฉพาะค่าสุดท้ายของแต่ละสตรีม แล้วบวกค่าต่างๆ ในฮ็อป
ทำความเข้าใจการเรียกเก็บเงิน
คุณต้องจ่ายค่าโทเค็นทุกรายการในทุกฮ็อป รวมถึงฮ็อปที่มีเฉพาะการคิดเท่านั้น
- ส่วนลดการแคช: การแคชโดยนัยจะลดราคาอินพุตที่ซ้ำกันในแต่ละฮ็อป 95% อินพุตที่แคชไว้จะมีค่าใช้จ่าย $0.10 ต่อ 1 ล้านโทเค็นแทนที่จะเป็น $2.00 ในช่วงแนะนำ
- การหมดอายุของแคช: แคชจะหมดอายุหลังจากที่ไม่มีการใช้งานเป็นเวลา 15-20 นาที การหยุดพักเป็นเวลานานระหว่างการกระโดดจะทำให้ระบบคิดอัตราการป้อนข้อมูลเต็มอีกครั้ง
- การข้ามที่ไม่ใช่การสตรีมที่ล้มเหลว: คุณจะจ่ายเมื่อคำตอบเสร็จสมบูรณ์เท่านั้น คำขอที่ไม่สำเร็จหรือถูกทิ้งจะมีค่าใช้จ่าย $0
- สตรีมที่หยุดกลางคัน: สตรีมที่หยุดก่อนถึง 32,000 โทเค็นจะไม่มีค่าใช้จ่าย หลังจากนั้น คุณจะชำระเงินสำหรับโทเค็นจุดตรวจสอบสุดท้าย เนื่องจากคุณสามารถดำเนินการต่อจากจุดนั้นได้
การแก้ปัญหา
| ลักษณะปัญหา | สาเหตุและวิธีแก้ไข |
|---|---|
เอาต์พุตจะหยุดที่ 64K หรือ 32K เมื่อใช้ CONTINUATION |
โมเดลมีโทเค็นเหลืออยู่ แต่ไม่มีอะไรดำเนินการต่อตามคำขอ อัปเกรด SDK หรือเพิ่มลูป |
เอาต์พุตจะหยุดที่ 64K หรือ 32K เมื่อใช้ MAX_TOKENS |
ไม่ได้ตั้งค่า max_output_tokens หรือตั้งค่าต่ำเกินไป ตั้งค่าเป็นมากกว่า 65,536 |
ข้อความว่างเปล่าที่มี MAX_TOKENS |
โมเดลใช้โทเค็นทั้งหมดในการคิด เพิ่ม max_output_tokens หรือลด thinking_level |
| 400: "Continuation token has already used output tokens..." | max_output_tokens ไม่เกินจำนวนโทเค็นที่ใช้ไปจนถึงตอนนี้ ยกขึ้น |
ข้อผิดพลาดสำหรับ thinking_level: "minimal" หรือสำหรับ thinking_budget ที่มี thinking_level |
Gemini 4 Argon ไม่รองรับ minimal ใช้ low, medium หรือ high ตั้งค่า thinking_level หรือ thinking_budget แต่อย่าตั้งค่าทั้ง 2 อย่าง |
คำเตือนสำหรับ thinking_budget, temperature, top_p หรือ top_k |
Gemini 4 Argon จะไม่สนใจหรือแมปฟิลด์เหล่านี้ ใช้ thinking_level และนำพารามิเตอร์การสุ่มตัวอย่างออก |
| คำขอจะสิ้นสุดหลังจากผ่านไป 3 หรือ 5 นาที | ระยะหมดเวลาของไคลเอ็นต์สั้นเกินไป ตั้งเป็น 20 นาที |
| การบีบอัดบริบทเริ่มเร็วเกินไป | ชุดสายไฟจะอ่านอินพุตที่รวมแล้ว โปรดอ่าน initial_prompt_token_count แทน |
ข้อจำกัด
- ปลายทางความเข้ากันได้กับ OpenAI: การถอดรหัสแบบยาวไม่พร้อมใช้งาน เอาต์พุตจะหยุดที่ขีดจำกัดต่อคำขอ
- SDK เวอร์ชันเก่า: เวอร์ชันที่ต่ำกว่าเวอร์ชันขั้นต่ำในหมายเหตุจะไม่ดำเนินการต่อโดยอัตโนมัติ
- ความยาว: โมเดลไม่เป็นไปตามเป้าหมายความยาวโทเค็นหรือจำนวนคำ
เช็กลิสต์
- อัปเกรด Google GenAI SDK เป็นเวอร์ชันขั้นต่ำ
- ตั้งค่า
max_output_tokensให้มากกว่า 65,536 - ใช้
thinking_level(low,mediumหรือhigh) ไม่ใช่thinking_budget - ตั้งค่าการหมดเวลาอ่าน HTTP เป็น 20 นาที
- ใช้
initial_prompt_token_countสำหรับขนาดบริบทและการบีบอัด - เรียกใช้พรอมต์ 1 รายการเป็นการทดสอบก่อนการประเมินขนาดใหญ่