Giải mã dài

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:

  1. Bạn tạo một lượt tương tác với background: true và max_output_tokens lớn hơn 65.536, tối đa là 1 triệu.
  2. Máy chủ tạo bước nhảy đầu tiên, tối đa 64.000 mã thông báo.
  3. 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.
  4. 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_id có thể xuất hiện trên các sự kiện interaction.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 cho interactions.get bằng stream: true và event_id gầ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: false sẽ 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ừ.

Các bước tiếp theo