ما سرعة Claude Code؟ الرموز في الثانية، مقيسة على 20,000 دورة
لا يعرض Claude Code سرعة إخراجه أبدًا، لكن كل نص جلسة يحمل ما يلزم لحسابها. شغّلنا سكربتًا من 40 سطرًا على 319 جلسة من جلساتنا، أي 20,408 دورة و12 مليون رمز إخراج: يُخرج Opus 5 بوسيط 63 رمزًا في الثانية، وOpus 5.5 بـ 95، وSonnet 5 بـ 77، والإجابة القصيرة دائمًا أبطأ من الطويلة. الطريقة، والسكربت، والأرقام، وما يغيّره الوضع السريع.
يخبرك Claude Code بالكثير عن الرموز. يعرض /usage ما استهلكته من الجلسة ومن الأسبوع، ويحسب مراقب الجلسة في AgentsRoom رموز الإدخال والإخراج وقراءات التخزين المؤقت وكتاباته دورة بدورة، ويستطيع سطر الحالة طباعة الجزء المستخدم من نافذة السياق. لا أحد منها يطبع الرقم الذي يبحث عنه الناس باستمرار: كم رمزًا في الثانية ينتجه النموذج فعلًا بينما تنتظر.
الرقم ليس مخفيًا، هو فقط لا يُحسب أبدًا. كل رسالة في كل جلسة تنتهي في نص JSONL داخل ~/.claude/projects/، وكل رسالة من المساعد تحمل طابعًا زمنيًا واستهلاكها من الرموز. فحسبناه بأنفسنا، على جهازنا، خلال الأسابيع الأربعة الأخيرة. هذه هي الطريقة، والسكربت، وما خرج منه.
من أين تأتي البيانات
يكتب Claude Code ملفًا واحدًا لكل جلسة في ~/.claude/projects/<project slug>/<session id>.jsonl. سطر واحد لكل حدث. الأسطر المهمة هنا هي رسائل المساعد، وكل واحدة منها تبدو هكذا بعد أن تحتفظ بالحقول المفيدة فقط:
{
"type": "assistant",
"uuid": "24d13076-…",
"parentUuid": "d4447285-…",
"requestId": "req_011CepWq…",
"timestamp": "2026-09-07T18:00:08.412Z",
"message": {
"model": "claude-opus-5",
"usage": {
"input_tokens": 2,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 51591,
"output_tokens": 200,
"output_tokens_details": { "thinking_tokens": 0 },
"speed": "standard"
}
}
}
أربعة أشياء تجعل القياس ممكنًا:
- يُكتب
timestampعند إلحاق كتلة المحتوى، لذا فإن آخر كتلة في الدورة مؤرخة بنهاية التدفق. - يشير
parentUuidإلى السطر الذي جاء قبله مباشرة، أي رسالة المستخدم أو نتيجة الأداة التي كان النموذج يرد عليها. طابعه الزمني هو لحظة خروج الطلب. - يجمع
requestIdكتل استدعاء API واحد. الدورة التي تكتب نصًا ثم تستدعي أداة تنتج سطرين للمساعد بنفسrequestIdونفسusage، لذا يجب عدّ الرموز مرة واحدة لكل طلب، لا مرة لكل سطر. usage.output_tokensهو إجمالي إخراج الطلب، بما فيه التفكير؛ ويقولoutput_tokens_details.thinking_tokensكم منه كان تفكيرًا.
لا شيء في الملف يعطي الوقت حتى الرمز الأول. ما يمكنك قياسه هو الدورة كاملة: من خروج الطلب من جهازك حتى وصول آخر رمز. وهو أيضًا الرقم الوحيد الذي تشعر به أثناء الانتظار، لذا هو الذي احتفظنا به.
الطريقة
لكل requestId: خذ أول وآخر سطر للمساعد يحملانه، واقرأ الاستهلاك من الأول، وابحث عن أب السطر الأول، ثم اقسم رموز الإخراج على عدد الثواني بين الطابع الزمني للأب والطابع الزمني لآخر سطر. بعدها انظر إلى التوزيع حسب النموذج، لا إلى متوسط واحد أبدًا، لأن دورة من 40 ثانية ودورة من ثانيتين ليستا الشيء نفسه.
استبعدنا الدورات التي لا تحتوي أي رمز إخراج، والدورات ذات المدة السالبة أو الصفرية (قد يكون لجلسة مستأنفة أب مؤرخ بعد ابنه)، والدورات التي تزيد على خمس عشرة دقيقة، لأنها جلسات مقاطعة وليست إجابات طويلة. لم نرشّح شيئًا آخر.
السكربت 40 سطرًا من Python دون أي اعتمادية. شغّله من أي مكان؛ فهو يقرأ كل المشاريع على الجهاز.
import json, glob, os, statistics as st
from datetime import datetime
from collections import defaultdict
def ts(s): return datetime.fromisoformat(s.replace("Z", "+00:00")).timestamp()
turns = []
for path in glob.glob(os.path.expanduser("~/.claude/projects/*/*.jsonl")):
by_uuid, groups, order = {}, {}, []
with open(path) as fh:
for line in fh:
try: o = json.loads(line)
except ValueError: continue
if "uuid" in o: by_uuid[o["uuid"]] = o
msg = o.get("message") or {}
if o.get("type") == "assistant" and msg.get("usage") and o.get("timestamp"):
rid = o.get("requestId") or o["uuid"]
if rid not in groups: groups[rid] = []; order.append(rid)
groups[rid].append(o)
for rid in order:
first, last = groups[rid][0], groups[rid][-1]
out = first["message"]["usage"].get("output_tokens", 0)
parent = by_uuid.get(first.get("parentUuid"))
if not parent or not parent.get("timestamp") or out <= 0: continue
dur = ts(last["timestamp"]) - ts(parent["timestamp"])
if 0 < dur <= 900:
turns.append((first["message"].get("model"), out, dur))
by_model = defaultdict(list)
for model, out, dur in turns: by_model[model].append((out, dur))
for model, rows in sorted(by_model.items(), key=lambda kv: -len(kv[1])):
rates = [o / d for o, d in rows]
print(f"{model:18s} turns={len(rows):6d} median={st.median(rates):5.1f} tok/s "
f"weighted={sum(o for o, _ in rows) / sum(d for _, d in rows):5.1f} tok/s")
عمود weighted هو إجمالي الرموز مقسومًا على إجمالي الثواني. هذا ما يعيشه تشغيل مستقل طويل؛ أما الوسيط فهو ما تعيشه دورة تفاعلية واحدة.
الأرقام
جهاز Mac واحد في فرنسا، 319 نص جلسة، 20,408 دورة بين 27 أغسطس و25 سبتمبر 2026، و12.0 مليون رمز إخراج أُنتجت في 45 ساعة من التوليد. سرعة قياسية في كل دورة (انظر الوضع السريع أدناه). تظهر خمسة نماذج في النصوص بالأسماء التي يكتبها Claude Code.
| النموذج | الدورات | الوسيط tok/s | من المئين 25 إلى المئين 75 | tok/s المرجّح |
|---|---|---|---|---|
| Opus 5 | 16,708 | 62.7 | 51.5 إلى 71.8 | 69.8 |
| Opus 5.5 | 1,102 | 94.9 | 80.9 إلى 109.0 | 109.3 |
| Sonnet 5 | 426 | 77.0 | 62.6 إلى 91.5 | 87.0 |
| Fable 5.1 | 2,070 | 75.1 | 66.1 إلى 82.9 | 80.0 |
| Opus 4.8 | 102 | 60.9 | 49.1 إلى 66.5 | 64.2 |
قراءتان قبل أي شيء آخر. أولًا، Opus 5.5 ليس أسرع قليلًا من Opus 5، بل أسرع بمرة ونصف على الوسيط وبنسبة 57% على الرقم المرجّح، مع حصة أكبر بكثير من الدورات الطويلة. ثانيًا، التفاوت داخل النموذج الواحد أوسع من الفارق بين النماذج: دورة Opus 5 عند المئين 25 تتدفق بـ 51 رمزًا في الثانية، وعند المئين 75 بـ 72. السبب هو حجم الدورة، وهو يستحق قسمًا خاصًا به.
الإجابة القصيرة دائمًا أبطأ
هذا Opus 5 مرة أخرى، مقسّمًا حسب عدد رموز الإخراج في الدورة:
| رموز الإخراج في الدورة | الدورات | الوسيط tok/s | المدة الوسيطة |
|---|---|---|---|
| من 1 إلى 99 | 1,854 | 42.1 | 1.9 ث |
| من 100 إلى 499 | 10,743 | 60.6 | 3.4 ث |
| من 500 إلى 1,999 | 3,512 | 72.8 | 11.1 ث |
| 2,000 فأكثر | 599 | 78.4 | 38.8 ث |
النموذج نفسه، والشهر نفسه، والجهاز نفسه، والمعدل يتضاعف بين إجابة من سطر واحد وإجابة طويلة. النموذج لا يتدفق أسرع في الدورات الطويلة. كل دورة تدفع تكلفة ثابتة قبل ظهور الرمز الأول: يخرج الطلب، ويُعالَج الموجه، ويبدأ التدفق. في دورة من 80 رمزًا تمثل هذه التكلفة ثلث الوقت المنقضي؛ وفي دورة من 3,000 رمز تذوب في الضجيج.
انحدار بطريقة المربعات الصغرى للمدة على رموز الإخراج يفصل بين الاثنين. الميل يعطي سرعة التدفق، والجزء المقطوع يعطي التكلفة الثابتة:
| النموذج | التكلفة الثابتة لكل دورة | سرعة التدفق |
|---|---|---|
| Opus 5 | 1.03 ث | 81.6 tok/s |
| Opus 5.5 | 1.10 ث | 148.9 tok/s |
| Sonnet 5 | 0.45 ث | 94.9 tok/s |
| Fable 5.1 | 0.99 ث | 84.8 tok/s |
| Opus 4.8 | 1.40 ث | 69.9 tok/s |
لذلك عندما تبدو جلسة مليئة باستدعاءات الأدوات بطيئة، فنادرًا ما يكون السبب إنتاجية النموذج. السبب هو عدد الدورات. الوكيل الذي يقرأ اثني عشر ملفًا واحدًا تلو الآخر يدفع اثنتي عشرة تكلفة ثابتة؛ والوكيل نفسه حين يقرؤها في استدعاء مجمّع واحد يدفع تكلفة واحدة. إنه الدرس نفسه الذي في تقليل تكاليف الرموز: دورات أقل وأكبر، لا نموذج أسرع.
أطول دورة منفردة في مجموعة البيانات هي 21,332 رمز إخراج في 236 ثانية على Opus 5، أي 90 رمزًا في الثانية من البداية إلى النهاية: بعد استهلاك التكلفة الثابتة، هذا هو السقف الذي رصدناه على هذا النموذج بالسرعة القياسية.
رموز التفكير هي رموز إخراج
يشمل output_tokens التفكير الذي يقوم به النموذج قبل الإجابة، ويخبرك output_tokens_details.thinking_tokens بحجمه. في مجموعة بياناتنا يمثل التفكير 30% من كل ما أنتجه Opus 5، و18% لـ Opus 5.5، و36% لـ Fable 5.1، و54% لـ Sonnet 5، الذي شغّلناه في الغالب بمستوى جهد أعلى في مهام المراجعة.
هذا مهم عند قراءة دورة بطيئة. الدورة التي تفكر ثماني ثوانٍ ثم تطبع سطرين ليست نموذجًا بطيئًا، بل دورة أنتجت 600 رمز لم ترها أبدًا. الدورات التي فيها تفكير أسرع قليلًا لكل رمز من الدورات التي بلا تفكير: 67 مقابل 57 رمزًا في الثانية على Opus 5، لأنها أطول وتستهلك التكلفة الثابتة بشكل أفضل. إذا بدت جلسة متثاقلة ولم تكن بحاجة إلى الاستدلال، فالرافعة هي مستوى الجهد، لا النموذج.
قراءات التخزين المؤقت تغيّر الفاتورة، لا المعدل
كل دورة تقريبًا في Claude Code تصيب التخزين المؤقت للموجه: فقط 130 من أصل 16,680 دورة على Opus 5 كانت قيمة cache_read_input_tokens فيها صفرًا، وهي الدورات الأولى في الجلسات. في الدورات من 100 إلى 500 رمز إخراج، تتدفق الدورات المخزّنة مؤقتًا بوسيط 60.6 رمزًا في الثانية وتستغرق 3.4 ثانية؛ وغير المخزّنة تتدفق بـ 58.0 وتستغرق 3.7 ثانية. الفرق حقيقي لكنه صغير، ويقع في التكلفة الثابتة لا في سرعة التدفق. التخزين المؤقت يتعلق بسعر السياق الذي تحمله، ولهذا يعرض عداد الرموز في طرفية AgentsRoom قراءات التخزين المؤقت وكتاباته كرقمين منفصلين.
ثابت على مدى الشهر
قد يخفي الرقم التراكمي انحرافًا، لذا نظرنا أيضًا إلى الوسيط الأسبوعي لـ Opus 5 في الدورات من 100 إلى 500 رمز، وهي الأكثر شيوعًا: 63.6، ثم 64.1، ثم 60.9، ثم 61.7، ثم 56.9 رمزًا في الثانية أسبوعًا بعد أسبوع، ثم 68.7 في الأسبوع الأخير غير المكتمل. بين 57 و69، ولا اتجاه واضح. إذا بدت جلساتك أبطأ في عصر يوم ما، فمن المفيد تشغيل السكربت على ذلك اليوم وحده قبل لوم النموذج.
ما يغيّره الوضع السريع، وما لم نستطع قياسه
كل كتلة usage تحمل حقل speed، وكل الـ 20,408 لدينا تقول standard. توثّق Anthropic وضعًا سريعًا لـ Claude Opus، يُفعَّل بـ /fast في CLI أو بـ "fastMode": true في إعدادات المستخدم، يجعل النموذج أسرع بما يصل إلى 2.5 مرة بسعر أعلى لكل رمز: 8 دولارات لكل مليون رمز إدخال و40 لكل مليون رمز إخراج على Opus 5.5، و10 و50 على Opus 5 وOpus 4.8. في خطتي Pro وMax يُحتسب على أرصدة الاستخدام، خارج نوافذ الاشتراك؛ ولا يدعمه Sonnet ولا Haiku، وتفعيله ينقلك إلى Opus. أيقونة برق بجانب الموجه تخبرك أنه مفعّل.
لم ندفع مقابله، لذا ليس لدينا رقم مقيس نضعه بجانب الـ 2.5 مرة الموثّقة. إذا شغّلته، فالسكربت نفسه يخبرك بما حصلت عليه: رشّح الدورات على usage["speed"] == "fast" وقارن الوسيطات. أرسل لنا الأرقام.
ما يغيّره هذا في طريقة تشغيلنا للوكلاء
ثلاثة أشياء، لا شيء منها يتعلق باختيار نموذج أسرع.
الأول يتعلق بالتوقعات. إذا أنتج تشغيل ليلي لسبعة وكلاء مليوني رمز إخراج، فهذا يعني ثماني ساعات من التوليد بمعدل 70 رمزًا في الثانية، موزعة على وكلاء يعملون بالتوازي. معرفة المعدل هي ما يسمح لك بأن تقول إن كانت مهمة مجدولة تستطيع الانتهاء قبل أن تبدأ التالية.
الثاني يتعلق بالدورات. الثانية الثابتة لكل دورة هي نفسها في تأكيد من 30 رمزًا وفي diff من 3,000 رمز. الوكلاء الذين يسألون قبل كل خطوة صغيرة، أو يقرؤون الملفات واحدًا تلو الآخر، يقضون وقتهم في تلك الثانية. لهذا نكتب «اجمع قراءاتك المستقلة في دفعة واحدة» في موجهات الوكلاء الذين يعملون دون مراقبة.
الثالث يتعلق بما يجب أن يعرضه العداد. يعرض مراقب الجلسة في AgentsRoom الرموز والتخزين المؤقت، ويتحول إلى الأحمر عندما تثقل الجلسة؛ لا يعرض معدلًا، وبعد هذا القياس لسنا متأكدين أنه يجب أن يفعل. المعدل خاصية للنموذج ولحجم الدورة، لا للجلسة، والرقم الذي يحتاجه المطوّر هو الموجود في الجداول أعلاه. لهذا هذا مقال وليس أداة مصغّرة.
الأسئلة الشائعة
كم رمزًا في الثانية يولّد Claude Code؟
على 20,408 دورة سجّلناها بين 27 أغسطس و25 سبتمبر 2026: يحقق Opus 5 وسيطًا قدره 63 رمز إخراج في الثانية (69 إذا قسمت كل الرموز على كل الثواني)، وOpus 5.5 يحقق 95 (109)، وSonnet 5 يحقق 77 (87)، وFable 5.1 يحقق 75 (80)، وOpus 4.8 يحقق 61 (64). هذه الأرقام تحسب الدورة كاملة، من لحظة خروج الطلب من جهازك حتى آخر رمز يصل عبر التدفق، فهي ما تنتظره فعلًا.
هل يعرض /usage أو /cost عدد الرموز في الثانية؟
لا. يعرض /usage حصة خطتك، ونافذتي الخمس ساعات والأسبوع، والجزء المستخدم من نافذة السياق؛ و/cost اسم بديل لـ /usage. لا أحد منهما يطبع معدلًا. المكان الوحيد الذي توجد فيه السرعة هو نص الجلسة داخل ~/.claude/projects/، حيث تحمل كل رسالة من المساعد طابعًا زمنيًا وعدد رموز الإخراج الخاصة بها. هذا ما يقرؤه السكربت في هذا المقال.
لماذا تبدو الإجابة القصيرة أبطأ من الطويلة؟
لأن كل دورة تدفع تكلفة ثابتة قبل وصول الرمز الأول: رفع الطلب، ومعالجة الموجه، وبدء التدفق. في بياناتنا يبلغ هذا الوقت الإضافي نحو ثانية واحدة على Opus 5 وOpus 5.5 ونصف ثانية على Sonnet 5. في إجابة من 80 رمزًا، تمثل الثانية الواحدة ثلث الدورة، فينخفض المعدل المقيس إلى 40 رمزًا في الثانية؛ وفي إجابة من 3,000 رمز تختفي الثانية نفسها ويرتفع المعدل إلى 80 أو أكثر. أما سرعة التدفق نفسها فثابتة.
هل تُحسب رموز التفكير في السرعة؟
نعم. تُبلغ كتلة usage في كل رسالة عن output_tokens مع تفصيل output_tokens_details.thinking_tokens، ورموز التفكير جزء من output_tokens. في مجموعة بياناتنا تمثل 30% من كل ما أنتجه Opus 5، و18% لـ Opus 5.5، و54% لـ Sonnet 5 الذي عمل في الغالب بمستوى جهد أعلى. الدورة التي تفكر طويلًا ليست بطيئة، بل تنتج رموزًا لا تراها.
هل يجعل التخزين المؤقت للموجه Claude Code أسرع؟
ليس معدل الإخراج. في الدورات من 100 إلى 500 رمز، يُخرج Opus 5 بوسيط 60.6 رمزًا في الثانية عندما يصيب الطلب التخزين المؤقت للموجه، و58.0 عندما لا يصيبه، وتستغرق الدورة كاملة 3.4 ثانية مقابل 3.7. التخزين المؤقت يتعلق بما تدفعه مقابل السياق، لا بسرعة خروج الإجابة.
ما هو الوضع السريع في Claude Code، وكم هو أسرع؟
إعداد لـ Claude Opus توثّقه Anthropic على أنه أسرع بما يصل إلى 2.5 مرة، بسعر أعلى لكل رمز: 8 دولارات لكل مليون رمز إدخال و40 لكل مليون رمز إخراج على Opus 5.5، و10 و50 على Opus 5 وOpus 4.8، ويُحتسب على أرصدة الاستخدام لا على نوافذ الاشتراك. تفعّله بـ /fast، فتظهر أيقونة برق صغيرة بجانب الموجه. لم تعمل أي من الدورات الـ 20,408 التي قسناها بالوضع السريع (كل النصوص تقول speed: standard)، لذا ليس لدينا رقم مقيس له؛ أرقام هذا المقال بالسرعة القياسية.
تحميل AgentsRoom
شغّل كل وكلاء الذكاء الاصطناعي لديك، في كل مشاريعك، من نافذة واحدة.
التطبيق المرافق: تابع وكلاءك أينما كنت
استخدم Claude أو Codex أو Antigravity CLI أو أي مزود AI آخر.
أرسل الأخطاء والطلبات مباشرة إلى قائمة المهام العامة.
تابع القراءة
أين يحفظ Claude Code الـ scratchpad الخاص به، ولماذا يختفي
كل جلسة Claude Code تعلن عن مجلد scratchpad ثم لا تعود تذكره أبدًا. إليك المسار الدقيق على macOS وLinux وWindows، وما يجاوره، ولماذا تمحوه إعادة تشغيل أو تنظيف للملفات المؤقتة، وما يمكنك ضبطه وما لا يمكنك، والقاعدة الوحيدة التي أعطيناها للوكلاء السبعة الذين يكتبون فيه كل ليلة.
اقرأ المقالهل يستهلك Remote Control في Claude Code توكنات أكثر؟ وهل لدى Codex واحد؟
سؤالان يكتبهما الناس في Google منذ أن أطلقت Anthropic ميزة Remote Control: هل تكلّف قيادة جلسة Claude Code من هاتفك توكنات أكثر، وهل يوجد ما يعادلها لدى Codex. الجوابان المختصران: لا، فالدورة دورة أينما كتبتها، ونعم لكن نصفها فقط موجود. إليك ما هو Remote Control فعلاً، وكيف تقيس مسألة التوكنات بنفسك في أربعة أوامر، وما الذي يفعله codex remote-control اليوم، وكيف يغيّر جهاز تحكم عن بُعد من الهاتف لا يتحدث أبداً إلى أي مزوّد هذه الحسبة.
اقرأ المقالAntigravity Remote Control: ما الذي يفعله من هاتفك، وما الذي لا يفعله
أطلقت Google ميزة Remote Control لـ Antigravity 2.0 وAntigravity CLI في 21 أغسطس 2026، وحجم البحث عن اسمها يقول إن الناس يريدون معرفة ما هي فعلًا. إليك ما تفعله، بعد التحقق منه في الوثائق يوم 22 سبتمبر: مفتاح التبديل وأوامر agy remote-control، ولوحة التحكم على الويب التي تسجّل الدخول إليها بحساب Google، والتثبيت على الشاشة الرئيسية الذي يمنحك الإشعارات الفورية، وعدة أجهزة في مبدّل واحد، والحدود الثلاثة المهمة (Antigravity فقط، وخدمة خلفية واحدة لكل جهاز، والإعدادات تبقى على CLI). ثم كيف يغطي جهاز التحكم عن بُعد في تطبيق AgentsRoom للهاتف أدوات CLI الثلاث عشرة الأخرى، وكيف يتكامل الاثنان.
اقرأ المقال