رمزگشایی طولانی

«رمزگشایی طولانی» به Gemini 4 Argon امکان می‌دهد تا برای تکالیف استدلال عمیق، بیش‌از ۶۴ هزار داده‌واحد تولید کند، تا پنجره بافت یکپارچه ۱ میلیون داده‌واحد (۱٬۰۴۸٬۵۷۶ داده‌واحد که بین ورودی، تفکر، و برونداد هم‌رسانی می‌شود). در Interactions API، رمزگشایی طولانی را با اجرای پس‌زمینه فعال می‌کنید تا سرورهای ما به‌طور خودکار هر پرش ۶۴ کیلوبایتی را تولید و در یک تعامل واحد ترکیب کنند.

رمزگشایی چقدر طول می‌کشد

یک فراخوانی مدل تا ۶۴ هزار نشانه تولید می‌کند. وقتی پاسخ به بیش‌از ۶۴ هزار واحد نیاز داشته باشد، سرور آن را در ۶۴ هزار گام تولید می‌کند که از جایی که گام قبلی متوقف شده است ادامه می‌یابد. هر پرش یک مرحله model_output به interaction.steps تحت همان شناسه تعامل اضافه می‌کند، بنابراین شما آن مراحل را به هم می‌پیوندید تا پاسخ کامل را بخوانید:

  1. تعاملی با background: true و max_output_tokens بزرگ‌تر از ۶۵٬۵۳۶ و تا ۱ میلیون ایجاد می‌کنید.
  2. سرور اولین گام را تا ۶۴ هزار توکن تولید می‌کند.
  3. سرور پرش بعدی را از جایی که پرش قبلی متوقف شده است شروع می‌کند و این کار را تا زمانی که مدل تمام شود یا از همه max_output_tokens استفاده کند تکرار می‌کند.
  4. برای دریافت نتیجه، تعامل را نظرسنجی یا جاری‌سازی می‌کنید.

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);

استراحت

# 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

محدودیت‌های برونداد

تعامل‌های جاری‌سازی و غیرجاری‌سازی به‌طور پیش‌فرض به حد مجاز ۶۴ هزار نمانه خروجی محدود می‌شوند، بنابراین پاسخ‌های تا ۶۴ هزار نمانه نیازی به تغییر کد ندارند. برای تولید بیش‌از ۶۴ هزار نمانه، اجرای پس‌زمینه‌ای را روشن کنید و max_output_tokens را افزایش دهید.

نحوه ایجاد تعامل حد برونداد
background: false (جاری‌سازی یا غیرجاری‌سازی) ‫۶۵٬۵۳۶ داده‌واحد. مقادیر بزرگ‌تر از ۶۵٬۵۳۶ خطای ۴۰۰ برمی‌گرداند. رمزگشایی طولانی به‌زودی ارائه می‌شود.
‫background: true،‏ max_output_tokens تنظیم نشده است ‫۶۵٬۵۳۶ داده‌واحد
‫background: true،‏ max_output_tokens بزرگ‌تر از ۶۵۵۳۶ ‫max_output_tokens شما، تا سقف ۱٬۰۴۸٬۵۷۶ منهای ورودی شما

چه زمانی از رمزگشایی طولانی استفاده کنیم

بیشتر درخواست‌ها در ۶۴ هزار کد تمام می‌شود. فقط زمانی از رمزگشایی طولانی استفاده کنید که یک پاسخ به تفکر و برونداد بیشتری نسبت‌به آن نیاز داشته باشد.

بار کاری از رمزگشایی طولانی استفاده شود؟ چرا
ریاضیات، علوم، پژوهش، و اثبات‌های رسمی دشوار بله مدل می‌تواند بیش‌از ۶۴ هزار نمانه را برای کاوش و بررسی استدلال خود صرف کند.
سخت‌ترین تکالیف کدنویسی و عامل‌گرا بله برخی‌از تکالیف به بیش‌از ۶۴ هزار نمان برای تفکر و کدنویسی در یک پاسخ نیاز دارند. اکثر تکالیف کدنویسی و عامل‌گرا در کمتر از ۶۴ هزار تمام می‌شوند.
ابزارهای ارزیابی که در حد خروجی متوقف می‌شوند بله رمزگشایی طولانی از پاسخ‌های بریده‌شده جلوگیری می‌کند، زیرا مدل کل پاسخ ۶۴ هزارتایی را صرف فکر کردن می‌کند.
گپ، پرسش و پاسخ، خلاصه‌سازی، طبقه‌بندی، و استخراج نه این تکالیف خیلی کمتر از ۳۲ هزار کد تمام می‌شوند.
درخواست‌هایی برای طول ثابت، مثل «کتابی با ۷۰۰٬۰۰۰ کلمه بنویس» نه مدل از اهداف طول پیروی نمی‌کند.
عامل‌هایی که ابزارها را در نوبت‌های کوتاه متعدد فراخوانی می‌کنند نه هر نوبت کوتاه است. خروجی‌های بزرگ در هر نوبت، پنجره بافت مشترک را به‌سرعت پر می‌کند.
پیام‌واره‌ها نزدیک به حد ورودی است نه خروجی فقط می‌تواند از ۱٬۰۴۸٬۵۷۶ نشانه منهای ورودی شما استفاده کند.
درخواست‌های حساس به تأخیر نه رمزگشایی طولانی می‌تواند چند دقیقه طول بکشد.

تنظیم کردن max_output_tokens بالا به مدل فرصت می‌دهد تا بیشتر درباره مسائل دشوار فکر کند، اما مدل همچنان تصمیم می‌گیرد که چقدر بنویسد. برای کنترل میزان تلاش استدلالی که مدل استفاده می‌کند، thinking_level را تنظیم کنید.

انتخاب نحوه اجرای رمزگشایی طولانی

اجرای پس‌زمینه‌ای ساده‌ترین راه برای اجرای رمزگشایی طولانی در Interactions API است. ادامه سمت کارخواه، که در آن کد شما هر پرش را شروع می‌کند، با GenerateContent API دردسترس است. این ویژگی به‌زودی به‌عنوان گزینه‌ای پیشرفته‌تر برای مدیریت انعطاف‌پذیری خودتان به Interactions API اضافه خواهد شد.

اجرا در پس‌زمینه (Interactions API) ادامه سمت کارخواه (GenerateContent API)
چه کسی هر پرش را شروع می‌کند سرورهای ما کیت توسعه نرم‌افزار Google GenAI، یا کد خودتان
کدها به‌ازای هر درخواست ‫max_output_tokens شما، در یک تعامل ۶۴ هزار به‌ازای هر جاری‌سازی، ۳۲ هزار به‌ازای هر درخواست غیرجاری‌سازی
زمان اجرا حداکثر ۲۴ ساعت ‫۲۰ دقیقه
فضای ذخیره‌سازی مورد لزوم store: true چیزی در سرور ذخیره نشده است.
بهترین برای ساده‌ترین راه برای اجرای رمزگشایی طولانی کنترل دقیق‌تر بر تلاش‌های مجدد، تا بتوانید عقب‌نشینی، مدیریت خطا، و انعطاف‌پذیری خودتان را بسازید

برای استفاده از ادامه سمت کارخواه، به رمزگشایی طولانی با GenerateContent API مراجعه کنید.

رمزگشایی طولانی جاری‌سازی

برای جاری‌سازی خروجی‌ها و خلاصه‌های فکری به‌محض رسیدن، stream: true و thinking_summaries: "auto" را اضافه کنید. جاری‌سازی‌های طولانی ممکن است قطع شوند، بنابراین کارخواه شما باید دوباره متصل شود. الگوی اتصال مجدد را در راهنمای اجرای پس‌زمینه دنبال کنید. رمزگشایی طولانی این قوانین را اضافه می‌کند:

  • شناسه تعامل را ذخیره کنید: آن را از رویداد interaction.created بخوانید.
  • ذخیره هر event_id: event_id می‌تواند در interaction.status_update رویداد برسد، نه فقط در تغییرات نوشتاری.
  • اتصال مجدد با last_event_id: با interactions.get بااستفاده از stream: true و آخرین event_id تماس بگیرید. جاری‌سازی پس‌از آن رویداد ادامه می‌یابد.
  • تا آخر بخوانید: پس‌از اتصال مجدد، پیش‌از بررسی وضعیت، جاری‌سازی را تا آخر بخوانید. سرور رویدادهای ازدست‌رفته را حتی پس‌از تکمیل تعامل بازپخش می‌کند.
  • تنظیم زمان‌های طولانی برای اتمام مهلت: زمان اتمام مهلت خواندن HTTP را روی ۱۵ تا ۲۰ دقیقه برای هر جاری‌سازی تنظیم کنید.
  • انتظار برونداد در تکه‌های ۵ هزار توکنی: پس‌از ۶۴ هزار توکن اول (حدود ۱۰ دقیقه اول)، جاری‌سازی برونداد را در تکه‌های حدود ۵ هزار توکنی ارسال می‌کند. مکث بین بخش‌ها طبیعی است. تعامل گیر نکرده است، بنابراین اتصال را باز نگه دارید.

وضعیت پس‌زمینه

تعامل پس‌زمینه می‌تواند تا ۲۴ ساعت اجرا شود. وقتی وضعیت دیگر in_progress یا queued نبود، وضعیت پایانه را بااستفاده از این جدول مدیریت کنید:

وضعیت معنی چه کاری باید انجام داد
completed مدل تمام شد. به model_output مرحله در steps بپیوندید و usage را بخوانید. برای ادامه مکالمه، id این تعامل را به‌عنوان previous_interaction_id ارسال کنید.
requires_action مدل درخواست فراخوانی ابزار کرد. ابزار را اجرا کنید. سپس نتیجه را با id این تعامل ارسال کنید.
incomplete مدل از همه max_output_tokens استفاده کرد. اگر مدل هنوز درحال فکر کردن باشد، نوشتار می‌تواند خالی باشد. درخواست را با max_output_tokens بالاتر دوباره ارسال کنید.
failed سرور نتوانست کار را تمام کند یا تعامل بیشتر از ۲۴ ساعت طول کشید. درخواست را دوباره امتحان کنید. اگر دوباره ناموفق بود، تعامل id را با پشتیبانی هم‌رسانی کنید.
cancelled تعامل را لغو کردید. برای دیدن توکن‌های صورت‌حساب‌شده، usage را بخوانید.

برای متوقف کردن تعامل درحال اجرا، در Python، client.interactions.cancel(id=interaction.id)، در JavaScript، client.interactions.cancel(interaction.id)، یا در REST، POST /v1beta/interactions/{id}/cancel را فراخوانی کنید.

دور max_output_tokens

max_output_tokens حد ترکیبی را برای تفکر و خروجی در سراسر تعامل تنظیم می‌کند. پایین آوردن آن باعث نمی‌شود که مدل مختصرتر فکر کند، بلکه پاسخ را زودتر قطع می‌کند.

بار کاری شما max_output_tokens توصیه‌شده
برنامه‌های موجود با محدودیت کمتر از ۳۲ هزار به ۳۲٬۷۶۸ افزایش دهید. اجرا در پس‌زمینه لازم نیست.
تکالیف عامل‌گرا و کدنویسی طولانی از ۶۵۵۳۶ (پیش‌فرض) شروع کنید. اجرا در پس‌زمینه لازم نیست.
استدلال پیچیده، ریاضیات دشوار، علوم، و اثبات‌ها background: true را تنظیم کنید و از ۲۶۲٬۱۴۴ شروع کنید، تا ۱٬۰۴۸٬۵۷۶ منهای کدهای ورودی شما.

برای استفاده از نشان‌های کمتر، thinking_level را کاهش دهید. از high برای سخت‌ترین تکالیف استدلالی استفاده کنید. از medium (پیش‌فرض) برای اکثر کارهای کدنویسی و عامل‌گرا استفاده کنید.

شمارش داده‌واحدها

interaction.usage مجموع کل پرش‌ها را گزارش می‌کند. این فیلدها را بخوانید: total_input_tokens، total_cached_tokens، total_output_tokens، total_thought_tokens، و total_tokens.

total_input_tokens کدهای ورودی هر گام را جمع می‌کند. هر پرش پیام‌واره شما و همه موارد تولیدشده تا آن زمان را به‌عنوان ورودی به مدل برمی‌گرداند، بنابراین همان نشان‌ها در هر پرش بعدی دوباره شمارش می‌شوند. برای مثال، یک پیام‌واره ۱۰۰۰ توکنی که ۲۰۰٬۰۰۰ توکن تفکر و برونداد تولید می‌کند، چهار جهش دارد:

Hop ورودی به مدل ارسال شد داده‌واحدهای ورودی
1 پیام‌واره ‫۱٬۰۰۰
2 پیام‌واره + پرش ۱ ۶۶۵۳۶
3 پیام‌واره + گام‌های ۱ و ۲ 132,072
4 پیام‌واره + ۱ تا ۳ جهش ۱۹۷٬۶۰۸
جمع ۳۹۷٬۲۱۶

‫total_input_tokens حدود ۳۹۷٬۰۰۰ کد متن گزارش می‌کند (با ورودی‌های پرش تکراری که به‌طور خودکار ۹۵٪ با ذخیره ضمنی در حافظه نهان تخفیف داده می‌شود)، حتی اگر اندازه واقعی زمینه‌ای فقط حدود ۲۰۱٬۰۰۰ کد متن باشد: پیام‌واره ۱٬۰۰۰ کد متنی به‌علاوه ۲۰۰٬۰۰۰ کد متنی برای فکر کردن و برونداد.

درطول جاری‌سازی، هر دو رویداد step.stop و interaction.status_update شامل usage (تجمعی برای تعامل) هستند. به‌جای جمع کردن مقادیر usage، آخرین مقدار را بخوانید.

آشنایی با صورت‌حساب

شما برای هر کد در هر گام، ازجمله گام‌هایی که فقط شامل تفکر هستند، هزینه پرداخت می‌کنید.

  • تخفیف حافظه پنهان: ذخیره‌سازی ضمنی در حافظه پنهان، ورودی تکراری را در هر گام ۹۵٪ تخفیف می‌دهد. هزینه ورودی ذخیره‌شده در حافظه نهان درطول دوره مقدماتی به‌جای ۲٫۰۰ دلار، ۰٫۱۰ دلار به‌ازای هر ۱ میلیون داده‌واحد است.
  • تعامل‌های لغوشده و ناموفق: هزینه همه کارهای تکمیل‌شده قبل‌از پایان تعامل را پرداخت می‌کنید.

عیب‌یابی

نشانه علت و رفع مشکل
برونداد در ۶۴ هزار متوقف می‌شود ‫background‏ false است، یا max_output_tokens تنظیم نشده است. ‫background: true و max_output_tokens را بزرگ‌تر از ۶۵۵۳۶ تنظیم کنید.
‫400: «max_output_tokens بیشتر از ۶۵۵۳۶ هنوز با background=false پشتیبانی نمی‌شود.» رمزگشایی طولانی بدون اجرای پس‌زمینه هنوز دردسترس نیست. ‫background: true تنظیم شود.
‫۴۰۰: «store=true is required for background interactions» اجرا در پس‌زمینه به store: true نیاز دارد.
وضعیت incomplete با نوشتار خالی مدل از همه نشان‌ها در اندیشیدن استفاده کرد. max_output_tokens را بالا ببرید یا thinking_level را پایین بیاورید.
فشرده‌سازی بافت خیلی زود شروع می‌شود چارچوب عامل یا ابزار ارزیابی شما total_input_tokens را می‌خواند. شمارش نشان‌ها را ببینید.

محدودیت‌ها

  • بدون رمزگشایی طولانی بدون اجرای پس‌زمینه: تعاملات با background: false در ۶۵٬۵۳۶ توکن متوقف می‌شود. پشتیبانی به‌زودی ارائه می‌شود.
  • بدون هدف طول: مدل از اهداف طول-نماد یا تعداد کلمات پیروی نمی‌کند.

مراحل بعدی