الرقم الرئيسي المعلن عنه لـ Gemini 4 Argon، وهو مليون توكن، هو حد إخراجه، وليس نافذة السياق الخاصة به. تقول Google إن استجابة واحدة من Argon يمكن أن تصل إلى مليون توكن، أي ما يقرب من 16 ضعف الحد الأقصى السابق البالغ 64 ألفًا، ولم تنشر نافذة الإدخال الخاصة بـ Argon على الإطلاق. لا يوجد شيء يمكن استدعاؤه بعد: Argon متاح اليوم فقط لمدافعي برنامج Fairwind، ثم عملاء واجهة برمجة التطبيقات المدفوعة بمجرد أن تفتح Google الوصول (انظر تاريخ الإصدار ودليل الوصول).
استجابة بهذا الطول تكسر ثلاثة افتراضات تعتمد عليها معظم حزم API: تنتهي المكالمة في ثوانٍ، ويتناسب الجسم مع الذاكرة، ويكون للطلب الواحد تكلفة صغيرة ويمكن التنبؤ بها. يغطي هذا الدليل تكلفة الاستجابة القصوى، والتدفق (streaming)، والمهلات (timeouts)، وحدود الإخراج، والتخزين، وكيفية اختبار كل ذلك في Apidog قبل وصول الوصول. للحصول على نظرة عامة على النموذج، راجع ما هو Gemini 4 Argon؛ لأشكال الطلب، راجع دليل API لـ Gemini 4 Argon.
مليون توكن إخراج ليس نافذة سياق بمليون توكن
تصف عدة صفحات تتصدر نتائج البحث عن Argon الرقم 1 مليون على أنه نافذة سياق، ويتحدث أحد العناوين الرئيسية عن "نافذة سياق أكبر بـ 16 ضعفًا." هذا خطأ. يقول منشور الإطلاق من Google إنه وسّع "حد توكنات الإخراج للنموذج إلى مليون توكن، وهو الأفضل في الصناعة". ويتطابق هذا الحد البالغ 64 ألفًا مع حد الإخراج البالغ 65,536 توكن في Gemini 3.1 Pro Preview، وهو نموذج Pro السابق الأفضل من Google.
الإدخال هو رقم منفصل لم تُعلن عنه Google. استخدم تقييم السياق الطويل الخاص بها، الموصوف في منهجية التقييمات، مطالبات تتراوح بين 256 ألف ومليون توكن. هذه مجموعة فرعية معيارية، وليست مواصفات. هناك تحذير على جانب الإخراج أيضًا: تسرد Vals AI حد إخراج أقصى يبلغ 262 ألفًا لتكوين Argon الذي اختبرته. تقول Google إن حد النموذج هو مليون توكن؛ وقد رأى مُقَيِّم طرف ثالث واحد على الأقل حدًا أقل على نقطة النهاية التي استخدمها.
| النموذج | الحد الأقصى للإخراج لكل استجابة | نافذة الإدخال أو السياق |
|---|---|---|
| Gemini 4 Argon | 1 مليون (حد 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 (922 ألف كحد أقصى للإدخال) |
| Claude Opus 5.5 | 128 ألف (300 ألف على Batch مع ترويسة تجريبية) | 1 مليون |
تحدد كل المنافسين الإخراج المتزامن بـ 128 ألفًا، لذا فإن الحد المعلن عنه لـ Argon يبلغ حوالي 8 أضعاف حدودهم. سبب Google هو عمق التفكير: مع وجود مساحة كافية، يمكن للنموذج "توليد مئات الآلاف من التوكنات في مسار واحد" وحل المشكلات الصعبة في تمريرة واحدة. لمعرفة كيفية تعامل البائعين الآخرين مع التشغيلات الطويلة، انظر مهام Claude Opus 5.5 التي تستغرق 18 ساعة ودليل API لـ GPT-6 Astra.

تكلفة استجابة واحدة بحدها الأقصى
احسب السعر الأقصى أولاً. يتم احتساب تكلفة الإخراج بمبلغ 10 دولارات لكل مليون توكن خلال الفترة التمهيدية لـ Argon و20 دولارًا بعد ذلك، لذا فإن استجابة واحدة كاملة الطول تكلف:
- مقدمة: 1,000,000 × 10 دولارات/مليون = 10.00 دولارات للإخراج
- قياسي: 1,000,000 × 20 دولارًا/مليون = 20.00 دولارًا للإخراج
يُضاف الإدخال على ذلك. تضيف مطالبة مكونة من 200,000 توكن 200,000 × 2 دولار/مليون = 0.40 دولارًا بالأسعار التمهيدية أو 0.80 دولارًا بالأسعار القياسية، لذا فإن مكالمة واحدة بحدها الأقصى تكلف 10.40 دولارًا أو 20.80 دولارًا. وظيفة ليلية تستدعي 100 من هذه تكلف 1,040 دولارًا بالأسعار التمهيدية.
التفكير يجعل هذا الأمر أصعب في الفهم. في نماذج Gemini الحالية، تُحتسب توكنات التفكير كإخراج؛ لم تُصرّح Google عما إذا كان Argon يتبع هذه القاعدة أو ما إذا كان التفكير يُحتسب ضمن سقف المليون توكن. في كلتا الحالتين، يمكن أن تُكلف الإجابة القصيرة الظاهرة فاتورة إخراج كبيرة. يستعرض دليل تسعير Gemini 4 Argon المزيد من السيناريوهات، بما في ذلك الإدخال المخزن مؤقتًا بخصم 95%.
لماذا يعد التدفق (streaming) إلزاميًا
لا تُرجع المكالمة غير المتدفقة شيئًا حتى تكتمل الاستجابة بأكملها. عند مئات الآلاف من التوكنات، يُعد ذلك اتصالًا صامتًا طويلًا، ويمكن أن تُغلقه مهلات الخمول عبر مكدس التطبيقات الخاص بك قبل وصول أول بايت.
قم بالتدفق بدلاً من ذلك. في `generateContent`، استبدل الطريقة بـ `::streamGenerateContent?alt=sse` وترسل Google أحداثًا مرسلة من الخادم (server-sent events)، جزءًا جزئيًا من المرشحات لكل حدث. اقرأ كل حدث فور وصوله واكتبه؛ لا تجمع الجسم أولاً. يعمل هذا على Gemini 3.8 Flash اليوم، مع وجود النموذج في متغير لأن Google لم تنشر معرف نموذج Argon (الإعداد في دليل API لـ Gemini 3.8 Flash):
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` جاريًا، لذا يمنحك الأخير إجمالي عدد التوكنات النهائي لتسجيله واحتسابه.
مهلات في كل نقطة اتصال
عميلك هو نقطة اتصال واحدة. يقطع التدفق الطويل أيضًا وكيلًا عكسيًا (reverse proxy)، وبوابة API (API gateway)، وموازن تحميل (load balancer)، وربما وقت تشغيل بلا خادم (serverless runtime)، ويمكن لأي منها إنهاء الاستجابة مبكرًا:
| نقطة الاتصال | ما يجب التحقق منه | العرض عند الخطأ |
|---|---|---|
| عميل HTTP | مهلة القراءة أو الخمول، بالإضافة إلى أي مهلة إجمالية للطلب | استثناءات في منتصف التدفق على الإجابات الطويلة فقط |
| الوكيل العكسي | مهلة القراءة وتخزين الاستجابة المؤقت لـ text/event-stream |
تصل الأحداث على دفعات، أو ينقطع التدفق |
| بوابة API | الحد الأقصى لمدة الطلب | تفشل الطلبات في نفس الوقت المنقضي في كل مرة |
| موازن التحميل | مهلة الخمول | ينقطع أثناء التوقفات الطويلة قبل الحدث الأول |
| دالة بلا خادم (Serverless function) | الحد الأقصى لوقت التنفيذ | تتوقف الدالة بينما لا يزال النموذج يكتب |
راقب نقطة قطع ثابتة. إذا فشلت الاستجابات الطويلة دائمًا في نفس الوقت المنقضي، فإن بعض نقاط الاتصال لديها حد زمني صارم لا يمكن للتدفق إصلاحه، ويجب نقل هذا العمل خارج مسار الطلب.
تشغيل المهام الطويلة في الخلفية
بالنسبة للمهام الأطول، انقل العمل بعيدًا عن الاتصال المباشر. تدعم واجهة برمجة تطبيقات التفاعلات (Interactions API) التنفيذ في الخلفية للمهام طويلة الأمد باستخدام `background=true`. تعتمد عمليات التشغيل في الخلفية على التفاعلات المخزنة: تشير الوثائق إلى أن `store=false` غير متوافق مع التنفيذ في الخلفية، لذا اترك التخزين قيد التشغيل لهذه الطلبات. لاسترداد تفاعل خلفي مكتمل، اتبع وثائق Google؛ لا تخمن نقاط نهاية الاستقصاء. نظرًا لأن Google تقول إن النماذج الجديدة تُطلق على Interactions API، خطط لتشغيل مهام Argon الطويلة هناك.
تحديد سقف الإخراج عن قصد
الحد الأقصى البالغ مليون هو سقف، وليس هدفًا. في `generateContent`، تحدد `generationConfig.maxOutputTokens` كل استجابة؛ ويحدد مثال التدفق 60,000. على 3.8 Flash، يُحتسب التفكير ضمن هذا السقف: فلقد أعادت عملية الاختبار الخاصة بنا بحد أقصى 2,000 توكن 1,340 توكن فكري و 656 توكن مرئي. بالنسبة لـ Interactions API، تأكد من حقل حد الإخراج في وثائق Google قبل الاعتماد عليه. ثم اختر الحد الأقصى من التكلفة التي ستقبلها لكل مكالمة:
| حد الإخراج | أسوأ تكلفة إخراج، قياسي (20 دولارًا/مليون) | تمهيدي (10 دولارات/مليون) |
|---|---|---|
| 64,000 | 64,000 × 20 دولارًا/مليون = 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` يعني أن الحد الأقصى قطعه. ثم إما أن تستمر في جولة متابعة أو ترفع الحد الأقصى لتلك المهمة الواحدة.
تخزين وتحليل المخرجات الضخمة بدون تخزين مؤقت
مليون توكن يعني ميغابايت من النص لكل استجابة. إليك بعض القواعد لمنع ذلك من تعطيل العامل:
- اكتب الأجزاء فور وصولها، إلى ملف أو تحميل كائن متعدد الأجزاء، بدلاً من بناء سلسلة واحدة في الذاكرة.
- احتفظ بالملف الجزئي إذا انقطع الاتصال. إعادة المحاولة العشوائية من البداية تولد وتُفوتر الإخراج مرة أخرى.
- اطلب JSON Lines عندما تحتاج إلى بنية، بحيث يتم تحليل كل سطر بمفرده بدلاً من انتظار إغلاق مستند عملاق واحد.
- سجل `usageMetadata` وعدد البايتات، وليس الأجسام الكاملة.
- تحقق من حدود حجم الأعمدة والرسائل في قاعدة بياناتك وقائمة الانتظار قبل أن تصل إليها إجابة مكونة من 800 ألف توكن.
اختبرها في Apidog قبل فتح الوصول
يمكنك التدرب على كل هذا باستخدام بديل. قم بتنزيل Apidog وأجرِ ثلاثة فحوصات.
شاهد التدفق. أرسل طلب التدفق مقابل 3.8 Flash باستخدام `GEMINI_API_KEY` و `GEMINI_MODEL` كمتغيرات بيئة. يحلل Apidog استجابات `text/event-stream` ويعرض كل حدث في عرض "الجدول الزمني" (Timeline) الخاص به فور وصوله، بحيث يمكنك رؤية أحجام الأجزاء والفجوات و`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 الأساسي لبيئة "وهمية" (mock) إلى `http://127.0.0.1:8787` وأرسل نفس طلب التدفق من خلالها. يستمر التدفق لمدة دقيقتين تقريبًا (128 ثانية في اختبارنا) ويحمل 9.6 مليون حرف من النص، وهو ما يكفي لكشف محلل تخزين مؤقت (buffering parser)، أو وكيل يحتفظ بالأحداث، أو مهلة زمنية قصيرة جدًا.
تحقق من عدد التوكنات. في طلب `generateContent` غير المتدفق، تأكد من أن `candidatesTokenCount` بالإضافة إلى `thoughtsTokenCount` في `usageMetadata` يبقى عند الحد الأقصى أو أقل منه، وأن التكلفة المحسوبة تبقى ضمن سقفك بأسعار Argon. يحتوي دليل Argon API على سكربت جاهز لحساب التكلفة.
الأسئلة الشائعة
هل 1 مليون توكن هو نافذة السياق لـ Gemini 4 Argon؟ لا. 1 مليون هو حد الإخراج لكل استجابة، ارتفاعًا من 64 ألفًا. لم تنشر Google نافذة الإدخال لـ Argon.
كم تكلف استجابة Argon بمليون توكن؟ 10 دولارات للإخراج بالأسعار التمهيدية و20 دولارًا بالأسعار القياسية، بالإضافة إلى الإدخال. راجع تسعير Gemini 4 Argon لمزيد من السيناريوهات.
هل يمكنني إنشاء استجابة بمليون توكن اليوم؟ ليس إلا إذا كانت مؤسستك ضمن مجموعة Fairwind التي لديها وصول إلى Argon. يحدد Gemini 3.8 Flash و 3.1 Pro Preview الإخراج بحد أقصى 65,536 توكنًا، وتسرد Vals AI حد إخراج أقصى يبلغ 262 ألفًا لتكوين Argon الذي اختبرته.
هل يجب عليّ تدفق استجابات Argon الطويلة؟ لم تنشر Google إرشادات للتدفق (streaming) لـ Argon، ولكن المكالمة غير المتدفقة التي تستمر لدقائق تكون عرضة لكل مهلة خمول في مكدس تطبيقاتك. قم بتدفقها، أو استخدم التنفيذ في الخلفية على Interactions API.
كيف يقارن حد إخراج Argon بـ GPT-6 Astra و Claude Opus 5.5؟ كلاهما يحدد الإخراج المتزامن بـ 128 ألفًا؛ بينما تسمح Anthropic بـ 300 ألف في Batch باستخدام ترويسة تجريبية. الحد المعلن عنه لـ Argon البالغ مليون يمثل حوالي 8 أضعاف ذلك.
خطوتك التالية
أضف التدفق وحدًا أقصى للإخراج إلى عميل Gemini الخاص بك الآن، على 3.8 Flash، وشغّله مقابل التدفق الوهمي الطويل حتى لا يقطعه أي شيء في مكدس تطبيقاتك. عند شحن معرف Argon، غيّر `GEMINI_MODEL` وأعد تشغيل نفس الاختبارات في Apidog.
