المستوى: مبتدئ
مدة القراءة المتوقّعة: حوالي 8 دقائق
لو سألت Claude سؤال حسابي بسيط زي "عندي 23 تفاحة، أكلت 2 وبعت 5، فاضل كام" ورجعلك رقم غلط، المشكلة مش إن النموذج بيهلوس. هو بيرد من غير ما يفكّر. Chain-of-Thought (اختصاراً CoT) بيحلّ ده بكلمة واحدة في الـ prompt.
المشكلة باختصار
نماذج اللغة الكبيرة زي Claude أو GPT بتتدرّب على التنبؤ بالكلمة اللي بعد كل كلمة. لما تسأل النموذج سؤال محتاج خطوات، هو بيقفز من السؤال للإجابة في خطوة واحدة. النتيجة: غلطات حسابية، استنتاجات خاطئة، ومنطق مفكّك. الحل بسيط جداً - اطلب من النموذج يكتب خطوات الحل قبل الإجابة، وهتلاقي الدقة بتقفز قفزة محترمة.
المفهوم بمثال بسيط
تخيّل إنك سألت طالب في الصف الخامس السؤال ده: "لو 4 أشخاص بيشتروا 3 تذاكر للسينما، التذكرة بـ 12 جنيه، الباقي من ورقة 200 جنيه كام؟"
الطالب الأول بيرد سريع من غير ورقة، بيقول رقم على هواه. الطالب التاني بيكتب خطواته:
- عدد التذاكر الكلي: 4 × 3 = 12 تذكرة
- التكلفة الكلية: 12 × 12 = 144 جنيه
- الباقي: 200 - 144 = 56 جنيه
الطالب التاني بيوصل للإجابة الصح كل مرة. Chain-of-Thought بالظبط نفس الفكرة بس مع الـ AI - بتخلّي النموذج يكتب الخطوات اللي بتوصّله للإجابة، بدل ما يخمّن.
التعريف العلمي بشكل دقيق
Chain-of-Thought Prompting طريقة قدّمها Jason Wei وفريقه في Google Brain سنة 2022 في ورقة بعنوان "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models". الفكرة الأساسية: نموذج اللغة لما بيكتب reasoning trace (سلسلة تفكير) قبل الإجابة، الـ tokens اللي بيولّدها بتشتغل كـ scratchpad (مسوّدة) يخلّي العمليات المعقّدة قابلة للحل.
على benchmark GSM8K (مجموعة 8,500 مسألة رياضية للمدارس الابتدائية)، نموذج PaLM 540B بدون CoT كانت دقته 17.9% بس. مع CoT الدقة قفزت لـ 56.9% في نفس الورقة. الموديلات الأحدث زي Claude Sonnet 4.6 وصلت لـ 78%+ بنفس التقنية على نفس الـ benchmark.
أبسط شكل - Zero-Shot CoT
أسهل صورة من CoT اسمها Zero-Shot CoT، اكتشفها فريق Kojima et al. سنة 2022. كل اللي بتعمله: تضيف عبارة "فكّر خطوة بخطوة" في آخر السؤال. الفرق بين الطريقتين على نفس السؤال:
from anthropic import Anthropic
client = Anthropic()
# الطريقة العادية بدون CoT
response_normal = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{
"role": "user",
"content": "محل بيبيع 17 منتج باليوم العادي. يوم الجمعة باع ضعف العادي. يوم السبت باع 30% أقل من المعدل اليومي. كم منتج باع المحل في 7 أيام؟"
}]
)
# الطريقة الصح مع CoT
response_cot = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{
"role": "user",
"content": "محل بيبيع 17 منتج باليوم العادي. يوم الجمعة باع ضعف العادي. يوم السبت باع 30% أقل من المعدل اليومي. كم منتج باع المحل في 7 أيام؟\n\nفكّر خطوة بخطوة قبل ما تجاوب."
}]
)