긴 디코딩

긴 디코드를 사용하면 Gemini 4 Argon이 통합된 100만 토큰 컨텍스트 창 (입력, 사고,출력 전반에서 공유되는 1,048, 576개 토큰)까지 심층 추론 작업을 위해 64, 000개 이상의 토큰을 생성할 수 있습니다. Interactions API에서 백그라운드 실행으로 긴 디코드를 사용 설정하면 서버에서 각 64, 000개 홉을 자동으로 생성하고 단일 상호작용으로 결합합니다.

긴 디코드 작동 방식

단일 모델 호출은 최대 64,000개 토큰을 생성합니다. 응답에 64,000개 이상의 토큰이 필요한 경우 서버는 이전 홉이 중지된 지점에서 계속되는 64,000개 홉으로 생성합니다. 각 홉은 동일한 상호작용 ID 아래의 interaction.steps에 model_output 단계를 추가하므로 이러한 단계를 조인하여 전체 응답을 읽습니다.

  1. background: true 및 65,536보다 큰 max_output_tokens(최대 100만)로 상호작용을 만듭니다.
  2. 서버는 최대 64, 000개 토큰의 첫 번째 홉을 생성합니다.
  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);

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

출력 한도

스트리밍 및 비스트리밍 상호작용은 기본적으로 64,000개 출력 토큰 한도로 설정되므로 최대 64,000개 토큰의 응답에는 코드 변경이 필요하지 않습니다. 64, 000개 이상의 토큰을 생성하려면 백그라운드 실행을 사용 설정하고 max_output_tokens를 늘립니다.

상호작용을 만드는 방법 출력 한도
background: false (스트리밍 또는 비스트리밍) 65,536개 토큰. 65,536보다 큰 값은 400 오류를 반환합니다. 긴 디코드가 곧 제공될 예정입니다.
background: true, max_output_tokens가 설정되지 않음 65,536개 토큰
background: true, max_output_tokens가 65,536보다 큼 입력을 뺀 최대 1,048,576개의 max_output_tokens

긴 디코드를 사용하는 경우

대부분의 요청은 64,000개 토큰 내에서 완료됩니다. 하나의 응답에 그보다 더 많은 사고와 출력이 필요한 경우에만 긴 디코드를 사용하세요.

워크로드 긴 디코드를 사용하시겠어요? 이유
어려운 수학, 과학, 연구, 공식 증명 예 모델은 추론을 탐색하고 확인하는 데 64,000개 이상의 토큰을 사용할 수 있습니다.
가장 어려운 코딩 및 에이전트 작업 예 일부 작업에는 하나의 응답에 64,000개 이상의 사고 및 코드가 필요합니다. 대부분의 코딩 및 에이전트 작업은 64,000개 미만으로 완료됩니다.
출력 한도에서 중지되는 평가 도구 예 긴 디코드는 모델이 사고에 전체 64,000개 응답을 사용하는 경우 잘린 답변을 방지합니다.
채팅, Q&A, 요약, 분류, 추출 아니요 이러한 작업은 32,000개 토큰 미만으로 완료됩니다.
'70만 단어 책 쓰기'와 같은 고정 길이 요청 아니요 모델은 길이 타겟을 따르지 않습니다.
짧은 턴으로 도구를 여러 번 호출하는 에이전트 아니요 각 턴은 짧습니다. 각 턴의 큰 출력은 공유 컨텍스트 창을 빠르게 채웁니다.
입력 한도에 가까운 프롬프트 아니요 출력은 입력을 뺀 1,048,576개 토큰만 사용할 수 있습니다.
지연 시간에 민감한 요청 아니요 긴 디코드는 몇 분 동안 실행될 수 있습니다.

높은 max_output_tokens를 설정하면 모델이 어려운 문제에 대해 더 오래 생각할 수 있지만 모델은 여전히 작성할 양을 결정합니다. 모델이 사용하는 추론 노력을 제어하려면 thinking_level을 설정하세요.

긴 디코드 실행 방법 선택

백그라운드 실행은 Interactions API에서 긴 디코드를 실행하는 가장 쉬운 방법입니다. 코드에서 각 홉을 시작하는 클라이언트 측 연속은 GenerateContent API에서 사용할 수 있습니다. 자체 복원력을 관리하는 고급 옵션으로 Interactions API에 곧 출시될 예정입니다.

백그라운드 실행 (Interactions API) 클라이언트 측 연속 (GenerateContent API)
각 홉을 시작하는 사용자 Google 서버 Google 생성형 AI SDK 또는 자체 코드
요청당 토큰 수 하나의 상호작용에서 max_output_tokens 스트림당 64,000개, 비스트리밍 요청당 32,000개
실행 시간 최대 24시간 20분
스토리지 store: true 필요 서버에 저장된 항목이 없습니다.
권장 긴 디코드를 실행하는 가장 쉬운 방법 재시도를 세밀하게 제어하여 자체 백오프, 오류 처리, 복원력을 빌드할 수 있습니다.

클라이언트 측 연속을 사용하려면 GenerateContent API를 사용한 긴 디코드를 참고하세요.

긴 디코드 스트리밍

출력 및 사고 요약을 도착하는 대로 스트리밍하려면 stream: true 및 thinking_summaries: "auto"를 추가하세요. 긴 스트림은 삭제될 수 있으므로 클라이언트가 다시 연결해야 합니다. 백그라운드 실행 가이드의 다시 연결 패턴을 따르세요. 긴 디코드는 다음 규칙을 추가합니다.

  • 상호작용 ID 저장: interaction.created 이벤트에서 읽습니다.
  • 모든 event_id 저장: event_id는 텍스트 델타뿐만 아니라 interaction.status_update 이벤트에서도 도착할 수 있습니다.
  • last_event_id로 다시 연결: interactions.get 및 마지막 event_id로 stream: true을 호출합니다. 스트림은 해당 이벤트 후에 계속됩니다.
  • 끝까지 읽기: 다시 연결한 후 상태를 확인하기 전에 스트림을 끝까지 읽습니다. 서버는 상호작용이 완료된 후에도 누락된 이벤트를 재생합니다.
  • 긴 제한 시간 설정: 스트림당 HTTP 읽기 제한 시간을 15~20분으로 설정합니다.
  • 5,000개 토큰 청크로 출력 예상: 처음 64,000개 토큰 (약 처음 10분) 후 스트림은 약 5,000개 토큰의 청크로 출력을 전송합니다. 청크 간의 일시중지는 정상입니다. 상호작용이 중지되지 않으므로 연결을 열어 두세요.

백그라운드 상태

백그라운드 상호작용은 최대 24시간 동안 실행될 수 있습니다. 상태가 더 이상 in_progress 또는 queued가 아니면 이 표를 사용하여 최종 상태를 처리합니다.

상태 의미 필요한 조치
completed 모델이 완료되었습니다. steps에서 model_output 단계를 조인하고 usage를 읽습니다. 대화를 계속하려면 이 상호작용의 id를 previous_interaction_id로 전달합니다.
requires_action 모델이 도구 호출을 요청했습니다. 도구를 실행합니다. 그런 다음 이 상호작용의 id로 결과를 전송합니다.
incomplete 모델이 모든 max_output_tokens를 사용했습니다. 모델이 여전히 사고 중인 경우 텍스트가 비어 있을 수 있습니다. 더 높은 max_output_tokens로 요청을 다시 전송합니다.
failed 서버가 완료할 수 없거나 상호작용이 24시간 넘게 실행되었습니다. 요청을 다시 시도하세요. 다시 실패하면 상호작용 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
한도가 32,000 미만인 기존 앱 32,768로 늘립니다. 백그라운드 실행은 필요하지 않습니다.
긴 코딩 및 에이전트 작업 65,536 (기본값)부터 시작합니다. 백그라운드 실행은 필요하지 않습니다.
복잡한 추론, 어려운 수학, 과학, 증명 background: true를 설정하고 262,144부터 시작하여 입력 토큰을 뺀 최대 1,048,576까지 설정합니다.

토큰을 더 적게 사용하려면 thinking_level을 낮추세요. 가장 어려운 추론 작업에는 high를 사용하세요. 대부분의 코딩 및 에이전트 작업에는 medium (기본값)을 사용하세요.

토큰 집계

interaction.usage는 모든 홉의 합계를 보고합니다. total_input_tokens, total_cached_tokens, total_output_tokens, total_thought_tokens, total_tokens 필드를 읽습니다.

total_input_tokens는 모든 홉의 입력 토큰을 합산합니다. 각 홉은 프롬프트와 지금까지 생성된 모든 항목을 입력으로 모델에 다시 전송하므로 동일한 토큰이 이후의 모든 홉에서 다시 집계됩니다. 예를 들어 200,000개 토큰의 사고 및 출력을 생성하는 1,000개 토큰 프롬프트는 4개의 홉을 사용합니다.

홉 모델에 전송된 입력 입력 토큰
1 프롬프트 1,000
2 프롬프트 + 홉 1 66,536
3 프롬프트 + 홉 1 및 2 132,072
4 프롬프트 + 홉 1~3 197,608
합계 397,216

total_input_tokens는 실제 컨텍스트 크기가 1,000개 토큰 프롬프트와 200,000개 토큰의 사고 및 출력인 약 201,000개 토큰에 불과하지만 약 397,000개 토큰 (반복되는 홉 입력은 암시적 캐싱으로 95% 자동 할인)을 보고합니다.

스트림 중에 step.stop 및 interaction.status_update 이벤트 모두 usage (상호작용의 누적)를 포함합니다. 이를 함께 추가하는 대신 최신 usage 값을 읽으세요.

청구 이해

사고만 포함된 홉을 포함하여 모든 홉의 모든 토큰에 대해 비용을 지불합니다.

  • 캐시 할인: 암시적 캐싱은 각 홉에서 반복되는 입력을 95% 할인합니다. 캐시된 입력 비용은 프로모션 기간 동안 200만 토큰당 2달러가 아닌 100만 토큰당 0.10달러입니다.
  • 취소되고 실패한 상호작용: 상호작용이 종료되기 전에 완료된 모든 작업에 대해 비용을 지불합니다.

문제 해결

증상 원인 및 해결 방법
출력이 64,000에서 중지됨 background가 false이거나 max_output_tokens가 설정되지 않았습니다. background: true 및 max_output_tokens를 65,536보다 크게 설정합니다.
400: 'max_output_tokens가 65536보다 큰 값은 아직 background=false에서 지원되지 않습니다.' 백그라운드 실행이 없는 긴 디코드는 아직 사용할 수 없습니다. background: true를 설정합니다.
400: '백그라운드 상호작용에는 store=true가 필요합니다.' 백그라운드 실행에는 store: true가 필요합니다.
텍스트가 비어 있는 상태 incomplete 모델이 사고에 모든 토큰을 사용했습니다. max_output_tokens를 늘리거나 thinking_level을 낮춥니다.
컨텍스트 압축이 너무 일찍 시작됨 에이전트 프레임워크 또는 평가 도구가 total_input_tokens를 읽습니다. 토큰 집계를 참고하세요.

제한사항

  • 백그라운드 실행이 없는 긴 디코드 없음: background: false가 있는 상호작용은 65,536개 토큰에서 중지됩니다. 곧 지원될 예정입니다.
  • 길이 타겟 없음: 모델은 토큰 길이 또는 단어 수 타겟을 따르지 않습니다.

다음 단계