Tính năng giải mã dài cho phép Gemini 4 Argon tạo ra hơn 64.000 token cho các nhiệm vụ suy luận sâu, lên đến cửa sổ ngữ cảnh hợp nhất 1 triệu token (1.048.576 token được chia sẻ giữa đầu vào, suy nghĩ và đầu ra). Trên Interactions API, bạn bật tính năng giải mã dài bằng cách thực thi trong nền để máy chủ của chúng tôi tự động tạo và kết hợp từng bước nhảy 64K thành một lượt tương tác duy nhất.
Thời gian giải mã
Một lệnh gọi mô hình duy nhất tạo ra tối đa 64.000 mã thông báo. Khi một phản hồi cần hơn 64.000 mã thông báo, máy chủ sẽ tạo phản hồi đó theo từng bước 64.000 mã thông báo, tiếp tục từ nơi bước trước đó dừng lại. Mỗi bước nhảy sẽ thêm một bước model_output vào interaction.steps trong cùng một mã nhận dạng tương tác, vì vậy, bạn sẽ kết hợp các bước đó để đọc toàn bộ phản hồi:
- Bạn tạo một lượt tương tác với
background: truevàmax_output_tokenslớn hơn 65.536, tối đa là 1 triệu. - Máy chủ tạo bước nhảy đầu tiên, tối đa 64.000 mã thông báo.
- Máy chủ bắt đầu hop tiếp theo từ nơi hop cuối cùng dừng lại và lặp lại cho đến khi mô hình hoàn tất hoặc sử dụng hết
max_output_tokens. - Bạn thăm dò ý kiến về hoạt động tương tác hoặc truyền trực tuyến hoạt động đó để nhận kết quả.
Python
import time
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-4-argon",
input="Write a complete, rigorous proof of the prime number theorem.",
background=True,
generation_config={
"max_output_tokens": 262144,
"thinking_level": "high",
},
)
while interaction.status in ("in_progress", "queued"):
time.sleep(5)
interaction = client.interactions.get(id=interaction.id)
# Each hop adds a model_output step, so join the text of all of them.
text = "".join(
content.text
for step in interaction.steps
if step.type == "model_output"
for content in step.content
if content.type == "text"
)
print(text)
print("Status:", interaction.status)
print("Usage:", interaction.usage)
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
let interaction = await client.interactions.create({
model: "gemini-4-argon",
input: "Write a complete, rigorous proof of the prime number theorem.",
background: true,
generation_config: {
max_output_tokens: 262144,
thinking_level: "high",
},
});
while (interaction.status === "in_progress" || interaction.status === "queued") {
await new Promise((resolve) => setTimeout(resolve, 5000));
interaction = await client.interactions.get(interaction.id);
}
// Each hop adds a model_output step, so join the text of all of them.
const text = interaction.steps
.filter((step) => step.type === "model_output")
.flatMap((step) => step.content ?? [])
.filter((content) => content.type === "text")
.map((content) => content.text)
.join("");
console.log(text);
console.log("Status:", interaction.status);
console.log("Usage:", interaction.usage);
REST
# 1. Create the background interaction. It returns an ID right away.
ID=$(curl -s -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-4-argon",
"input": "Write a complete, rigorous proof of the prime number theorem.",
"background": true,
"generation_config": {"max_output_tokens": 262144, "thinking_level": "high"}
}' | jq -r '.id')
# 2. Poll until the status is no longer in_progress or queued.
# The REST response has no output_text field, so join the text of every model_output step.
while true; do
RESP=$(curl -s "https://generativelanguage.googleapis.com/v1beta/interactions/$ID" \
-H "x-goog-api-key: $GEMINI_API_KEY")
STATUS=$(echo "$RESP" | jq -r '.status')
if [[ "$STATUS" != "in_progress" && "$STATUS" != "queued" ]]; then
echo "$RESP" | jq -r '[.steps[]? | select(.type == "model_output") | .content[]? | select(.type == "text") | .text] | join("")'
echo "$RESP" | jq '{status, usage}'
break
fi
sleep 5
done
Giới hạn đầu ra
Các lượt tương tác truyền trực tuyến và không truyền trực tuyến mặc định có giới hạn mã thông báo đầu ra là 64K, vì vậy, bạn không cần thay đổi mã đối với các phản hồi có tối đa 64K mã thông báo. Để tạo hơn 64.000 mã thông báo, hãy bật chế độ thực thi trong nền và tăng max_output_tokens.
| Cách bạn tạo hoạt động tương tác | Giới hạn đầu ra |
|---|---|
background: false (phát trực tuyến hoặc không phát trực tuyến) |
65.536 mã thông báo. Giá trị lớn hơn 65.536 sẽ trả về lỗi 400. Tính năng giải mã dài sắp ra mắt. |
background: true, max_output_tokens chưa được đặt |
65.536 mã thông báo |
background: true, max_output_tokens lớn hơn 65.536 |
max_output_tokens của bạn, tối đa là 1.048.576 trừ đi thông tin đầu vào của bạn |
Trường hợp sử dụng tính năng giải mã dài
Hầu hết các yêu cầu đều hoàn tất trong vòng 64.000 mã thông báo. Chỉ sử dụng chế độ giải mã dài khi một câu trả lời cần nhiều tư duy và kết quả hơn thế.
| Tải công việc | Sử dụng giải mã dài? | Lý do |
|---|---|---|
| Toán học, khoa học, nghiên cứu và chứng minh hình thức phức tạp | Có | Mô hình này có thể sử dụng hơn 64.000 mã thông báo để khám phá và kiểm tra khả năng suy luận của mình. |
| Những nhiệm vụ khó nhất về lập trình và tác nhân | Có | Một số nhiệm vụ cần nhiều hơn 64.000 mã thông báo suy nghĩ và mã trong một câu trả lời. Hầu hết các nhiệm vụ lập trình và nhiệm vụ dạng tác nhân đều hoàn thành trong phạm vi 64 nghìn mã thông báo. |
| Các công cụ đánh giá dừng lại ở giới hạn đầu ra | Có | Tính năng giải mã dài giúp tránh tình trạng câu trả lời bị cắt bớt khi mô hình dành toàn bộ câu trả lời 64K để suy nghĩ. |
| Trò chuyện, hỏi đáp, tóm tắt, phân loại và trích xuất | Không | Những nhiệm vụ này hoàn thành tốt dưới 32.000 mã thông báo. |
| Yêu cầu về độ dài cố định, chẳng hạn như "viết một cuốn sách dài 700.000 từ" | Không | Mô hình không tuân theo mục tiêu về độ dài. |
| Các tác nhân gọi công cụ trong nhiều lượt ngắn | Không | Mỗi lượt chơi đều ngắn. Đầu ra lớn ở mỗi lượt sẽ nhanh chóng lấp đầy cửa sổ ngữ cảnh dùng chung. |
| Câu lệnh gần đạt đến giới hạn đầu vào | Không | Đầu ra chỉ có thể sử dụng 1.048.576 mã thông báo trừ đi đầu vào của bạn. |
| Yêu cầu nhạy cảm về độ trễ | Không | Quá trình giải mã dài có thể chạy trong vài phút. |
Việc đặt max_output_tokens cao giúp mô hình có thêm thời gian suy nghĩ về các vấn đề khó, nhưng mô hình vẫn quyết định lượng nội dung cần viết. Để kiểm soát mức độ suy luận mà mô hình sử dụng, hãy đặt thinking_level.
Chọn cách chạy giải mã dài
Thực thi ở chế độ nền là cách dễ nhất để chạy quá trình giải mã dài trên Interactions API. Tính năng tiếp tục phía máy khách, trong đó mã của bạn bắt đầu mỗi bước nhảy, có sẵn trong GenerateContent API. Tính năng này sẽ sớm được cung cấp cho Interactions API dưới dạng một lựa chọn nâng cao hơn để quản lý khả năng phục hồi của riêng bạn.
| Thực thi trong nền (Interactions API) | Tiếp tục ở phía máy khách (GenerateContent API) | |
|---|---|---|
| Ai bắt đầu mỗi lượt chuyển tiếp | Máy chủ của chúng tôi | Google GenAI SDK hoặc mã của riêng bạn |
| Số mã thông báo cho mỗi yêu cầu | max_output_tokens của bạn, chỉ trong một lần tương tác |
64K cho mỗi luồng, 32K cho mỗi yêu cầu không phải là luồng |
| Thời gian chạy | Tối đa 24 giờ | 20 phút |
| Bộ nhớ | Yêu cầu phải có store: true |
Không có dữ liệu nào được lưu trữ trên máy chủ. |
| Phù hợp nhất cho | Cách dễ nhất để chạy giải mã dài | Kiểm soát chi tiết hơn đối với các lần thử lại, nhờ đó bạn có thể xây dựng cơ chế thời gian đợi, xử lý lỗi và khả năng phục hồi của riêng mình |
Để sử dụng tính năng tiếp tục phía máy khách, hãy xem phần giải mã dài bằng GenerateContent API.
Giải mã luồng dài
Để truyền trực tuyến các đầu ra và bản tóm tắt suy nghĩ khi chúng xuất hiện, hãy thêm stream: true và thinking_summaries: "auto". Các luồng dài có thể bị rớt, vì vậy, ứng dụng của bạn phải kết nối lại. Làm theo mẫu kết nối lại trong hướng dẫn thực thi trong nền. Giải mã dài sẽ thêm các quy tắc sau:
- Lưu mã nhận dạng lượt tương tác: Đọc mã này từ sự kiện
interaction.created. - Lưu mọi
event_id:event_idcó thể xuất hiện trên các sự kiệninteraction.status_update, không chỉ trên các phần chênh lệch văn bản. - Kết nối lại với
last_event_id: Gọi chointeractions.getbằngstream: truevàevent_idgần đây nhất. Luồng phát sẽ tiếp tục sau sự kiện đó. - Đọc đến cuối: Sau khi kết nối lại, hãy đọc luồng đến cuối trước khi kiểm tra trạng thái. Máy chủ phát lại các sự kiện bị bỏ lỡ, ngay cả sau khi quá trình tương tác hoàn tất.
- Đặt thời gian chờ dài: Đặt thời gian chờ đọc HTTP từ 15 đến 20 phút cho mỗi luồng.
- Dự kiến kết quả đầu ra theo từng đoạn 5.000 token: Sau 64.000 token đầu tiên (khoảng 10 phút đầu tiên), luồng sẽ gửi kết quả đầu ra theo từng đoạn khoảng 5.000 token. Việc có khoảng dừng giữa các đoạn là điều bình thường. Tương tác không bị kẹt, vì vậy hãy giữ kết nối mở.
Trạng thái nền
Một lượt tương tác ở chế độ nền có thể chạy trong tối đa 24 giờ. Khi trạng thái không còn là in_progress hoặc queued, hãy xử lý trạng thái kết thúc bằng bảng sau:
| Trạng thái | Ý nghĩa | Việc nên làm |
|---|---|---|
completed |
Mô hình đã hoàn tất. | Tham gia các bước model_output trong steps và đọc usage. Để tiếp tục cuộc trò chuyện, hãy truyền id của lượt tương tác này dưới dạng previous_interaction_id. |
requires_action |
Mô hình đã yêu cầu gọi công cụ. | Chạy công cụ này. Sau đó, gửi kết quả cùng với id của lượt tương tác này. |
incomplete |
Mô hình đã sử dụng toàn bộ max_output_tokens. Văn bản có thể trống nếu mô hình vẫn đang suy nghĩ. |
Gửi lại yêu cầu với max_output_tokens cao hơn. |
failed |
Máy chủ không thể hoàn tất hoặc hoạt động tương tác kéo dài hơn 24 giờ. | Thử gửi lại yêu cầu. Nếu yêu cầu không thành công lần nữa, hãy chia sẻ phiên tương tác id với nhóm hỗ trợ. |
cancelled |
Bạn đã huỷ yêu cầu tương tác. | Hãy đọc usage để xem số mã thông báo đã tính phí. |
Để dừng một hoạt động tương tác đang diễn ra, hãy gọi client.interactions.cancel(id=interaction.id) trong Python, client.interactions.cancel(interaction.id) trong JavaScript hoặc POST /v1beta/interactions/{id}/cancel trong REST.
Đặt max_output_tokens
max_output_tokens đặt giới hạn kết hợp cho quá trình tư duy và đầu ra trong suốt quá trình tương tác. Việc giảm giá trị này không khiến mô hình suy nghĩ ngắn gọn hơn mà thay vào đó sẽ cắt bớt câu trả lời sớm hơn.
| Khối lượng công việc của bạn | max_output_tokens đề xuất |
|---|---|
| Ứng dụng hiện có có giới hạn dưới 32.000 | Tăng lên 32.768. Không cần thực thi ở chế độ nền. |
| Các nhiệm vụ lập trình và nhiệm vụ dựa trên tác nhân dài | Bắt đầu từ 65.536 (mặc định). Không cần thực thi trong nền. |
| Suy luận phức tạp, toán khó, khoa học và chứng minh | Đặt background: true và bắt đầu ở mức 262.144, tối đa là 1.048.576 trừ đi số mã thông báo đầu vào của bạn. |
Để sử dụng ít mã thông báo hơn, hãy giảm thinking_level. Sử dụng high cho những nhiệm vụ suy luận khó nhất. Sử dụng medium (mặc định) cho hầu hết các công việc lập trình và tác nhân.
Đếm số token
interaction.usage báo cáo tổng số trên tất cả các bước nhảy. Đọc các trường sau: total_input_tokens, total_cached_tokens, total_output_tokens, total_thought_tokens và total_tokens.
total_input_tokens cộng dồn số mã thông báo đầu vào của mỗi bước. Mỗi bước sẽ gửi câu lệnh của bạn cùng với mọi nội dung đã tạo cho đến thời điểm đó trở lại mô hình dưới dạng dữ liệu đầu vào, vì vậy, các mã thông báo giống nhau sẽ được tính lại ở mỗi bước sau đó. Ví dụ: một câu lệnh 1.000 mã thông báo tạo ra 200.000 mã thông báo suy luận và đầu ra sẽ mất 4 bước:
| Hop | Thông tin đầu vào được gửi đến mô hình | Mã thông báo nhập |
|---|---|---|
| 1 | Câu lệnh | 1.000 |
| 2 | Lời nhắc + hop 1 | 66.536 |
| 3 | Câu lệnh + bước 1 và 2 | 132.072 |
| 4 | Câu lệnh + 1 đến 3 bước | 197.608 |
| Tổng cộng | 397.216 |
total_input_tokens báo cáo khoảng 397.000 mã thông báo (với các đầu vào lặp lại được giảm tự động 95% nhờ bộ nhớ đệm ngầm), mặc dù kích thước ngữ cảnh thực tế chỉ khoảng 201.000 mã thông báo: lời nhắc 1.000 mã thông báo cộng với 200.000 mã thông báo về suy nghĩ và đầu ra.
Trong một luồng phát, cả sự kiện step.stop và interaction.status_update đều bao gồm usage (tích luỹ cho lượt tương tác). Đọc giá trị usage mới nhất thay vì cộng các giá trị đó lại với nhau.
Tìm hiểu về thông tin thanh toán
Bạn phải trả phí cho mọi mã thông báo trong mỗi bước, kể cả những bước chỉ chứa suy nghĩ.
- Giảm giá bộ nhớ đệm: Tính năng lưu vào bộ nhớ đệm ngầm định sẽ giảm giá 95% cho dữ liệu đầu vào lặp lại trong mỗi bước nhảy. Đầu vào được lưu vào bộ nhớ đệm có giá 0,1 USD cho 1 triệu token thay vì 2 USD trong thời gian ưu đãi.
- Lượt tương tác bị huỷ và không thành công: Bạn thanh toán cho tất cả công việc đã hoàn thành trước khi lượt tương tác kết thúc.
Khắc phục sự cố
| Dấu hiệu | Nguyên nhân và cách khắc phục |
|---|---|
| Đầu ra dừng ở mức 64K | background là false hoặc max_output_tokens chưa được đặt. Đặt background: true và max_output_tokens lớn hơn 65.536. |
| 400: "max_output_tokens lớn hơn 65536 hiện chưa được hỗ trợ với background=false." | Tính năng giải mã dài mà không thực thi trong nền chưa hoạt động. Đặt background: true. |
| 400: "store=true là bắt buộc đối với các lượt tương tác ở chế độ nền" | Cần có store: true để thực thi trong nền. |
Trạng thái incomplete không có văn bản |
Mô hình này đã sử dụng tất cả các mã thông báo để tư duy. Giơ tay max_output_tokens hoặc hạ tay thinking_level. |
| Quá trình nén bối cảnh bắt đầu quá sớm | Khung tác nhân hoặc công cụ đánh giá của bạn đọc total_input_tokens. Xem phần Đếm mã thông báo. |
Các điểm hạn chế
- Không giải mã lâu mà không thực thi ở chế độ nền: Các hoạt động tương tác với
background: falsesẽ dừng ở 65.536 mã thông báo. Chúng tôi sẽ sớm hỗ trợ. - Không có mục tiêu về độ dài: Mô hình không tuân theo mục tiêu về độ dài mã thông báo hoặc số từ.