مستوى المقال: متوسط — يفترض إنك تعرف أساسيات استدعاء Claude API، الفرق بين input tokens و output tokens، واتعرضت قبل كده لمفهوم temperature أو max_tokens. زمن القراءة المتوقع: 9 دقائق.
لو سألت Claude العادي يحلّ مسألة من AIME 24 (مسابقة الرياضيات الأمريكية)، النسبة المتوقعة للإجابة الصحيحة 16%. لو فعّلت Extended Thinking بميزانية 64K توكن على نفس الموديل، النسبة بتقفز لـ 61%. السؤال الحقيقي مش "هل أفعّله" — السؤال "إمتى تدفع 5x التكلفة و8x زمن الاستجابة عشان تكسب الدقة دي".
Extended Thinking في Claude: متى يستحق وما ثمنه الحقيقي
المشكلة باختصار
الـ LLM التقليدي بيولّد الرد token-by-token من اليسار لليمين بدون مراجعة. لو سألته "كم حرف r في كلمة strawberry"، بيرد فورًا غالبًا غلط. السبب مش غباء الموديل — السبب إنه ما عندوش "وقت تفكير" قبل ما يبدأ يكتب الإجابة. Extended Thinking بيدّيه الوقت ده على شكل توكنز إضافية بيستخدمها داخليًا قبل ما تظهرلك الإجابة النهائية.
مثال للمبتدئ — طالب الامتحان
تخيّل طالبين في امتحان رياضيات. الأول بيكتب الإجابة فور قراءة السؤال — صح أحيانًا، غلط أحيانًا. التاني بيقرا السؤال، يرسم، يجرّب طريقتين، يراجع، وبعدين يكتب الإجابة النهائية. التاني بياخد وقت أطول، لكن نسبة صحته أعلى بكتير في المسائل المعقّدة.
Claude العادي = الطالب الأول. Claude مع Extended Thinking = الطالب التاني. الفرق إن "وقت التفكير" في الموديل بيتحوّل لـ thinking tokens بيتولّدها الموديل داخليًا، بتدفع تكلفتها، لكن المستخدم النهائي مش بيشوفها — بيشوف الإجابة النهائية بس.
التعريف العلمي الدقيق
Extended Thinking (أو reasoning tokens) هي توكنز إضافية بيولّدها الموديل في مرحلة وسيطة بين الـ input والـ final output. الموديل بيتدرّب باستخدام Reinforcement Learning على سلاسل تفكير طويلة (Chain-of-Thought traces) عشان يتعلم يستخدم التوكنز دي بفاعلية. الفكرة الأساسية اتنشرت في ورقة OpenAI "Learning to Reason with LLMs" سبتمبر 2024، وطوّرتها DeepSeek في R1 (يناير 2025) و Anthropic في Claude 3.7 Sonnet (فبراير 2025) ثم Claude 4.
على مستوى الـ API، إنت بتحدد budget_tokens — أقصى عدد thinking tokens مسموح للموديل يستخدمه. الموديل بيوقف لو وصل للحد أو لو لقى نفسه خلص. التوكنز دي بتتحسب كـ output tokens في الفاتورة، يعني نفس سعر الـ output العادي.
الكود التنفيذي على Anthropic SDK 0.50+
from anthropic import Anthropic
client = Anthropic()
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=24000,
thinking={
"type": "enabled",
"budget_tokens": 16000
},
messages=[{
"role": "user",
"content": (
"احسب كم زاوية حادة في شكل سداسي منتظم "
"محفور داخله مثلث متطابق الأضلاع. اشرح خطواتك."
)
}]
)
# الرد بيرجع في content blocks: thinking + text
for block in response.content:
if block.type == "thinking":
print(f"[تفكير داخلي - {len(block.thinking)} حرف]")
elif block.type == "text":
print(f"الإجابة: {block.text}")
print(f"input tokens: {response.usage.input_tokens}")
print(f"output tokens (شامل thinking): {response.usage.output_tokens}")