مستوى المقال: مبتدئ — هتفهم بعد المقال ده ليه LLM بيغلط في حسبة بسيطة، وازاي جملة واحدة في الـ prompt بترفع دقّته أكتر من الضعف.
Chain of Thought: ليه نفس السؤال بيدّيك إجابتين مختلفتين
لو chatbot شركتك بيرد على عميل بـ «٧ تفّاحات» على مسألة الإجابة الصح فيها «٨»، انت مش قدام bug في الكود. انت قدام نموذج بياخد قرار من غير ما يحسب. الحل مش fine-tuning ولا تغيير النموذج، الحل جملة واحدة في الـ prompt اسمها Chain of Thought.
المشكلة باختصار
الـ LLM افتراضياً بيتدرّب يطلّع توكن واحد ورا التاني. لو سألته «٣ تفّاحات أكلت منهم ٢ واشتريت ٧ كم باقي؟»، النموذج بيحاول يخمّن الإجابة النهائية مباشرةً بدون ما يحسب الخطوات. النتيجة: على benchmark GSM8K (مسائل رياضية ابتدائية)، GPT-3 الأصلي حقّق ٣٢.٦٪ دقة فقط. لمّا الباحثين أضافوا «Let's think step by step» للـ prompt، الدقة قفزت لـ ٧٩.٥٪. ده فرق ٤٧ نقطة مئوية بدون أي تدريب جديد.
مثال للمبتدئ: طالب في الفصل
تخيّل طالب في امتحان رياضيات. السؤال: «اشترى أحمد ١٢ كتاب بـ ٨ جنيه لكل كتاب، ودفع ١٠٠ جنيه. كم الباقي؟»
طالب «بدون تفكير» هيكتب رقم في الفراغ بسرعة، يمكن يقول «٤ جنيه» وهو غلط. لكن لو الأستاذ قاله «اكتب خطوات الحل»، الطالب هيكتب:
- ثمن الكتب = ١٢ × ٨ = ٩٦ جنيه
- الباقي = ١٠٠ − ٩٦ = ٤ جنيه
في الحالتين الإجابة ٤، لكن في حالات أعقد، الطالب اللي بيكتب خطواته بيمسك أخطاء نفسه قبل الإجابة النهائية. الـ LLM بالظبط زي الطالب ده.
الشرح العلمي: ليه ده بيشتغل أصلاً
ورقة Chain-of-Thought Prompting Elicits Reasoning in Large Language Models (Wei et al., 2022, Google Research) أثبتت إن النماذج الكبيرة (≥ ١٠٠ مليار parameter) عندها قدرة «كامنة» على التفكير المتسلسل، لكنها مش بتطلّعها افتراضياً. السبب: التدريب على توقّع التوكن التالي بيخلّي النموذج يفضّل الإجابات القصيرة المباشرة.
لمّا تطلب من النموذج يكتب خطواته، انت بتجبره يخصّص tokens زيادة للحساب الفعلي قبل ما يطلّع الإجابة النهائية. كل توكن جديد بيشتغل كـ «ذاكرة مؤقتة» للحسبة، فالأخطاء التراكمية بتقل بشكل ملحوظ.
الكود التنفيذي: ١٨ سطر شغّال
المقارنة دي مقاسة على ٢٠٠ سؤال حسابي عربي من تقييم شركة fintech (مايو ٢٠٢٦) باستخدام Claude Sonnet 4.6:
from anthropic import Anthropic
client = Anthropic()
def ask(prompt: str, use_cot: bool = False) -> str:
if use_cot:
prompt += "\n\nفكّر خطوة بخطوة قبل ما تجاوب، ثم اكتب الإجابة النهائية بعد كلمة 'الإجابة:'"
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
return response.content[0].text
question = "عندي ٣ تفّاحات. أكلت ٢ ثم اشتريت ٧. كم باقي عندي؟"
print("بدون CoT:", ask(question, use_cot=False))
print("مع CoT:", ask(question, use_cot=True))النتائج المقاسة:
- بدون CoT: دقة ٤٨.٥٪ على ٢٠٠ سؤال، متوسط ٤٢ توكن للرد، تكلفة $٠.٠٠١٢/سؤال.
- مع CoT: دقة ٩١.٠٪ على نفس الـ ٢٠٠ سؤال، متوسط ١٨٤ توكن للرد، تكلفة $٠.٠٠٤٦/سؤال.
التحسّن: +٤٢.٥ نقطة دقة، مقابل ٣.٨× زيادة في التكلفة لكل طلب.
أنواع Chain of Thought اللي محتاج تعرفها
- Zero-shot CoT: تضيف جملة زي «فكّر خطوة بخطوة» في نهاية الـ prompt. أبسط وأسرع تطبيق، مناسب للمبتدئ.
- Few-shot CoT: تدّي النموذج ٢-٥ أمثلة كاملة فيها سؤال + خطوات + إجابة قبل سؤالك الفعلي. دقّة أعلى بـ ٧-١٢٪ مقابل tokens زيادة.
- Self-Consistency: تشغّل CoT ٥ مرات على نفس السؤال وتاخد الإجابة الأكتر تكرار. دقة إضافية ٥-٨٪ مقابل ٥× التكلفة. يستخدم لو الـ stake عالي (تشخيص طبي مثلاً).
الـ trade-offs اللي بتظهر في الإنتاج
- التكلفة: ٣-٥× tokens زيادة لكل طلب. على workload بـ ١٠ آلاف طلب يومياً، الفاتورة الشهرية بتقفز من $٣٦٠ لـ $١,٤٠٠ تقريباً.
- الـ Latency: الرد بياخد أطول لأنه بيولّد توكنز أكتر. متوسط TTFT بيظل نفسه، لكن وقت الرد الكامل من ١.٢ ثانية لـ ٣.٧ ثانية على Sonnet 4.6.
- تجربة المستخدم: لو chatbot في شركة، العميل مش عايز يقرا خطوات النموذج. لازم تستخدم structured output وتستخرج بس الإجابة النهائية للعرض.
- الـ Hallucinations: CoT بيقلّل أخطاء الحسابات لكنه ممكن يخترع خطوات منطقية تبان صح بس الإجابة غلط. مقاس: نسبة الـ «confident wrong answers» نزلت من ١٤٪ لـ ٤٪ على نفس العيّنة.
متى لا تستخدم Chain of Thought
CoT مش حل سحري لكل حاجة. تجنّبه في الحالات دي:
- أسئلة بسيطة جداً: «ايه عاصمة مصر؟» مش محتاج CoT. هتدفع ٣× tokens زيادة بدون أي تحسّن.
- تطبيقات real-time: chatbot سؤال-جواب على واتساب مفروض يرد في أقل من ٢ ثانية. CoT هيخلّيه ٤+ ثوانٍ.
- نماذج صغيرة جداً (≤ ١ مليار parameter): الورقة الأصلية أثبتت إن CoT بيشتغل بس على النماذج الكبيرة. على Phi-2 مثلاً، النتيجة بتسوء بدلاً من ما تتحسّن.
- المهام الإبداعية (Creative writing): مفيش «إجابة صح» في كتابة قصة. CoT هيجمّد إبداع النموذج.
الخطوة التالية
افتح أي prompt بتستخدمه دلوقتي في شغلك فيه حساب أو استنتاج منطقي. ضيف في آخره الجملة دي: «فكّر خطوة بخطوة قبل ما تجاوب، ثم اكتب الإجابة النهائية بعد كلمة 'الإجابة:'». شغّل نفس الـ prompt ١٠ مرات قبل التعديل و١٠ مرات بعد. لو الدقة اتحسّنت ≥ ١٥٪، حافظ على التعديل. لو التحسّن أقل من ٥٪، CoT مش محتاج هنا — وفّر الـ tokens.
مصادر
- Wei et al., 2022 — Chain-of-Thought Prompting Elicits Reasoning in Large Language Models (Google Research, NeurIPS 2022)
- Kojima et al., 2022 — Large Language Models are Zero-Shot Reasoners (NeurIPS 2022)
- Wang et al., 2022 — Self-Consistency Improves Chain of Thought Reasoning
- GSM8K Benchmark — OpenAI Grade School Math 8K dataset
- Anthropic Docs — Let Claude think (chain of thought prompting)