Gemini 4 Argonの目玉である100万トークンは、その出力上限であり、コンテキストウィンドウではありません。Googleによると、Argonの単一応答は最大100万トークンに達する可能性があり、これは以前の64K上限の約16倍です。Argonの入力ウィンドウは一切公開されていません。まだ呼び出すべきものもありません。Argonは現在、Fairwind Programの保護者のみが利用可能で、Googleがアクセスを解放すれば、有料API顧客が次に利用できるようになります(リリース日とアクセスガイドを参照)。
そのような長い応答は、ほとんどのAPIスタックが依存している3つの前提を破ります。すなわち、呼び出しが数秒で完了すること、ボディがメモリに収まること、および1つのリクエストが小さく予測可能なコストを持つことです。このガイドでは、アクセスが開始される前に、最大出力応答のコスト、ストリーミング、タイムアウト、出力上限、ストレージ、およびApidogでそれらすべてをテストする方法について説明します。モデルの概要については、Gemini 4 Argonとは何かを、リクエストの形式については、Gemini 4 Argon APIガイドを参照してください。
100万出力トークンは100万コンテキストウィンドウではない
Argonで上位に表示されるいくつかのページでは、100万という数字をコンテキストウィンドウとして説明しており、ある見出しでは「16倍大きなコンテキストウィンドウ」と呼んでいます。これは逆です。Googleの発表記事では、「モデルの出力トークン制限を業界をリードする100万トークンに拡大した」と述べています。その64Kは、Googleの以前のトップProモデルであるGemini 3.1 Pro Previewの65,536トークンの出力上限と一致します。
入力はGoogleが公開していない別の数値です。評価方法論で説明されているその長文コンテキスト評価では、256Kから1Mトークンの間のプロンプトを使用しました。これはベンチマークのサブセットであり、仕様ではありません。出力側にも注意点があります。Vals AIは、テストしたArgon構成の最大出力を262Kと記載しています。Googleはモデルの上限を100万と述べていますが、少なくとも1つの第三者評価者は、使用したエンドポイントでより低い上限を確認しました。
| モデル | 応答あたりの最大出力 | 入力またはコンテキストウィンドウ |
|---|---|---|
| Gemini 4 Argon | 100万(Google公称上限) | 未公開 |
| Gemini 3.1 Pro Preview | 65,536 | 1,048,576 |
| Gemini 3.8 Flash | 65,536 | 1,048,576 |
| GPT-6 Astra | 128,000 | 1,050,000(最大入力922K) |
| Claude Opus 5.5 | 128K(ベータヘッダー付きのバッチでは300K) | 100万 |
競合他社はすべて同期出力を128Kに制限しているため、Argonの公称上限はその約8倍です。Googleの理由は推論の深さにあります。余裕があることで、モデルは「単一の軌跡で数十万トークンを生成」し、難しい問題を一度に解決できるとされています。他のベンダーが長時間実行をどのように処理するかについては、Claude Opus 5.5の18時間タスクおよびGPT-6 Astra APIガイドを参照してください。

最大出力応答1つにかかる費用
まず上限価格を設定します。Argonの導入期間中は100万トークンあたり10ドル、その後は20ドルで出力が課金されるため、1つの全長の応答にかかる費用は次のとおりです。
- 導入期間: 1,000,000 x $10/1M = $10.00(出力)
- 通常期間: 1,000,000 x $20/1M = $20.00(出力)
入力はこれに加えて課金されます。200,000トークンのプロンプトは、導入料金で200,000 x $2/1M = $0.40、通常料金で$0.80を追加するため、1回の最大出力呼び出しは$10.40または$20.80になります。それらを100回実行する夜間ジョブは、導入料金で$1,040の費用がかかります。
思考トークンがこれを分かりにくくします。現在のGeminiモデルでは、思考トークンは出力として課金されます。Googleは、Argonがそのルールに従うのか、思考トークンが100万の上限にカウントされるのかについて述べていません。いずれにせよ、短い目に見える応答でも、高額な出力課金が発生する可能性があります。Gemini 4 Argonの料金ガイドでは、95%割引のキャッシュされた入力を含む、より多くのシナリオを説明しています。
なぜストリーミングが必須なのか
非ストリーミング呼び出しは、応答全体が完了するまで何も返しません。数十万トークンでは、それは長く静かな接続となり、スタック全体のアイドルタイムアウトが最初のバイトが到着する前に接続を閉じてしまう可能性があります。
代わりにストリーミングを使用してください。generateContentでは、メソッドを:streamGenerateContent?alt=sseに置き換えると、Googleはサーバー送信イベント(SSE)を送信し、イベントごとに部分的な候補チャンクを1つ送ります。各イベントが到着したらそれを読み取り、書き出してください。最初にボディ全体を収集しないでください。これは現在Gemini 3.8 Flashで動作しており、GoogleがArgonのモデルIDを公開していないため、モデルは変数に入っています(設定は当社のGemini 3.8 Flash APIガイドにあります)。
import json, os, requests
MODEL = os.environ.get("GEMINI_MODEL", "gemini-3.8-flash")
URL = ("https://generativelanguage.googleapis.com/v1beta/models/"
f"{MODEL}:streamGenerateContent?alt=sse")
body = {
"contents": [{"parts": [{"text": "Write a test plan for every endpoint in a payments API."}]}],
"generationConfig": {"maxOutputTokens": 60000},
}
usage = None
with requests.post(URL, json=body, stream=True, timeout=(10, 120),
headers={"x-goog-api-key": os.environ["GEMINI_API_KEY"]}) as r, \
open("response.txt", "a", encoding="utf-8") as out:
r.raise_for_status()
for line in r.iter_lines(decode_unicode=True):
if not line or not line.startswith("data:"):
continue
event = json.loads(line[5:])
for cand in event.get("candidates", []):
for part in cand.get("content", {}).get("parts", []):
out.write(part.get("text", ""))
out.flush()
usage = event.get("usageMetadata", usage)
print(usage)
timeout=(10, 120)は、10秒の接続タイムアウトと120秒の読み取りタイムアウトを設定します。requestsでは、読み取りタイムアウトは合計期間ではなく、バイト間の最長の間隔であるため、継続的に送信されるストリームは必要なだけ実行できます。各チャンクは到着するとすぐにディスクに書き込まれます。3.8 Flashでは、すべてのイベントが実行中のusageMetadataを運びます。したがって、最後のイベントがログと課金のための最終的なトークン数を提供します。
各ホップでのタイムアウト
あなたのクライアントは1つのホップです。長いストリームは、リバースプロキシ、APIゲートウェイ、ロードバランサー、そしておそらくサーバーレスランタイムも経由し、これらのいずれかが応答を早期に終了させる可能性があります。
| ホップ | 確認すべき点 | 問題が発生した場合の症状 |
|---|---|---|
| HTTPクライアント | 読み取りまたはアイドルタイムアウト、およびリクエスト全体のタイムアウト | 長い応答の場合にのみストリーム途中で例外が発生する |
| リバースプロキシ | 読み取りタイムアウトとtext/event-streamの応答バッファリング |
イベントがバースト的に届く、またはストリームが途切れる |
| APIゲートウェイ | 最大リクエスト期間 | 常に同じ経過時間でリクエストが失敗する |
| ロードバランサー | アイドルタイムアウト | 最初のイベントまでの長い一時停止中に切断される |
| サーバーレス関数 | 最大実行時間 | モデルがまだ書き込み中に関数が終了する |
固定されたカットオフに注意してください。長い応答が常に同じ経過時間で失敗する場合、一部のホップにはストリーミングでは修正できない厳格な時間制限があり、その作業はリクエストパスから外す必要があります。
バックグラウンドで長時間ジョブを実行する
最も長いジョブについては、ライブ接続から作業を切り離してください。Interactions APIは、background=trueを使用して長時間実行タスクのバックグラウンド実行をサポートしています。バックグラウンド実行は保存されたインタラクションに依存します。ドキュメントにはstore=falseがバックグラウンド実行と互換性がないと記載されているため、これらのリクエストではストレージを有効にしておいてください。完了したバックグラウンドインタラクションを取得するには、Googleのドキュメントに従ってください。ポーリングエンドポイントを推測しないでください。Googleは新しいモデルがInteractions APIで起動すると述べているため、Argonの長時間ジョブがそこで実行されることを計画してください。
意図的に出力を制限する
100万の上限は天井であり、目標ではありません。generateContentでは、generationConfig.maxOutputTokensが各応答を制限します。ストリーミングの例では60,000に設定されています。3.8 Flashでは、思考トークンがその上限にカウントされます。2,000に設定されたテスト実行では、1,340の思考トークンと656の可視トークンが返されました。Interactions APIについては、依存する前にGoogleのドキュメントで出力上限フィールドを確認してください。次に、呼び出しごとに許容できるコストから上限を選択してください。
| 出力上限 | 最悪の場合の出力コスト、標準 ($20/1M) | 導入期間 ($10/1M) |
|---|---|---|
| 64,000 | 64,000 x $20/1M = $1.28 | $0.64 |
| 128,000 | $2.56 | $1.28 |
| 500,000 | $10.00 | $5.00 |
| 1,000,000 | $20.00 | $10.00 |
上限に達した応答は途中で停止するため、不完全として扱ってください。最終イベントのfinishReasonを確認してください。MAX_TOKENSは、上限によって切断されたことを意味します。その後、フォローアップのターンで続けるか、そのジョブの上限を引き上げてください。
バッファリングせずに巨大な出力を保存および解析する
100万トークンは、応答あたり数メガバイトのテキストに相当します。いくつかのルールに従うことで、ワーカーがダウンするのを防ぐことができます。
- メモリ内で1つの文字列を構築する代わりに、チャンクが到着するたびにファイルまたはマルチパートオブジェクトアップロードに書き込む。
- 接続が切断された場合でも部分ファイルを保持する。最初から盲目的に再試行すると、出力が再度生成され、課金される。
- 構造が必要な場合はJSON Linesを要求する。これにより、巨大なドキュメントが閉じられるのを待つのではなく、各行が独立して解析される。
- 完全なボディではなく、
usageMetadataとバイト数をログに記録する。 - 800Kトークンの応答がデータベースやキューに影響を与える前に、それらのカラムとメッセージサイズ制限を確認する。
アクセス開始前にApidogでテストする
これらすべてを代役を使ってリハーサルできます。Apidogをダウンロードして、以下の3つのチェックを実行してください。
ストリームを監視する。GEMINI_API_KEYとGEMINI_MODELを環境変数として3.8 Flashに対してストリーミングリクエストを送信する。Apidogはtext/event-stream応答を解析し、各イベントをタイムラインビューで到着と同時に表示するため、チャンクサイズ、ギャップ、および最終的なusageMetadataを確認できます。
はるかに長い偽の応答をストリーミングする。実際の3.8 Flashの出力は最大65,536トークンであるため、同じイベント形式ではるかに多くのデータをストリーミングするローカルモックを実行します。
# long_stream_mock.py: Gemini-shaped SSE for parser and timeout tests (fake data)
import json, time
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
EVENTS, DELAY, CHUNK = 20000, 0.005, "lorem ipsum " * 40
class Handler(BaseHTTPRequestHandler):
def do_POST(self):
self.rfile.read(int(self.headers.get("Content-Length", 0)))
self.send_response(200)
self.send_header("Content-Type", "text/event-stream")
self.end_headers()
for i in range(EVENTS):
event = {"candidates": [{"content": {"parts": [{"text": CHUNK}]}}]}
if i == EVENTS - 1: # fake counts sized like a near-max reply
event["usageMetadata"] = {"promptTokenCount": 1200,
"candidatesTokenCount": 950000, "thoughtsTokenCount": 40000,
"totalTokenCount": 991200}
self.wfile.write(f"data: {json.dumps(event)}\n\n".encode())
self.wfile.flush()
time.sleep(DELAY)
ThreadingHTTPServer(("127.0.0.1", 8787), Handler).serve_forever()
「モック」環境のベースURLをhttp://127.0.0.1:8787に向け、同じストリーミングリクエストをそこから送信します。ストリームは約2分間(テストでは128秒)実行され、960万文字のテキストを転送します。これは、バッファリングパーサー、イベントを保持するプロキシ、または短すぎるタイムアウト設定を露呈させるのに十分です。
トークン数をアサートする。非ストリーミングのgenerateContentリクエストでは、usageMetadata内のcandidatesTokenCountとthoughtsTokenCountが上限以下であること、および計算されたコストがArgon価格で設定した上限を下回ることをアサートします。Argon APIガイドには、すぐに使えるコストスクリプトがあります。
よくある質問
100万はGemini 4 Argonのコンテキストウィンドウですか?いいえ。100万は、64Kから増加した応答ごとの出力上限です。GoogleはArgonの入力ウィンドウを公開していません。
100万トークンのArgon応答の費用はいくらですか?導入料金で$10、通常料金で$20の出力コストに加えて入力コストがかかります。Gemini 4 Argonの料金で詳細なシナリオを確認してください。
今日、100万トークンの応答を生成できますか?Argonアクセスを持つFairwindグループに組織が属していない限り、できません。Gemini 3.8 Flashおよび3.1 Pro Previewは出力を65,536トークンに制限しており、Vals AIはテストしたArgon構成で最大出力を262Kと記載しています。
長いArgon応答をストリーミングする必要がありますか?GoogleはArgonのストリーミングガイドラインを公開していませんが、数分間実行される非ストリーミング呼び出しは、スタック内のあらゆるアイドルタイムアウトにさらされます。ストリーミングするか、Interactions APIでバックグラウンド実行を使用してください。
Argonの出力上限はGPT-6 AstraやClaude Opus 5.5と比べてどうですか?どちらも同期出力を128Kに制限しています。Anthropicはベータヘッダー付きのバッチで300Kを許可しています。Argonの公称100万トークンは、その約8倍です。
次のステップ
Geminiクライアントに今すぐストリーミングと出力上限を追加し、3.8 Flashで、スタック内の何かがそれを遮断しなくなるまで、長いモックストリームに対して実行してください。ArgonのIDが出荷されたら、GEMINI_MODELを変更し、Apidogで同じテストを再実行してください。
