Temperature في الـ AI: ليه نفس السؤال بيجيب إجابة مختلفة كل مرة
مستوى المقال: مبتدئ
لو سألت Claude أو GPT نفس السؤال 3 مرات وكل مرة جالك رد مختلف، السبب مش مزاج عشوائي من النموذج. السبب رقم بسيط اسمه temperature بتبعته أنت في كل طلب، وفهمه هيوفّر عليك ساعات debugging.
المشكلة باختصار
أكتر سؤال بيوصلني من المبتدئين في تطبيقات الـ AI: "ليه لما باعت نفس الـ prompt بنتيجة مختلفة كل مرة؟". المشكلة دي بتلخبط أي حد بيبني تطبيق AI لأول مرة، وبتعطّل الـ QA لأن الاختبارات بتفشل بشكل عشوائي. الحل في فهم بسيط لـ temperature، ومتى تخليه صفر، ومتى تخليه 0.7، ومتى تخليه 1.
مثال بسيط: زي صديق بيقترح عليك أكل العشاء
تخيل عندك صديق بتسأله كل يوم: "نأكل إيه النهاردة؟". الصديق ده عارف عاداتك بالظبط.
- لو الجو بارد جدًا (temperature = 0): هيقولك دايمًا نفس الإجابة - "نأكل بيتزا"، لأنه يعرف إن دي أكتر حاجة بتحبها. مفيش مفاجآت.
- لو الجو دافئ شوية (temperature = 0.5): هيقترح متغيّرات معقولة - "بيتزا، أو سوشي، أو شاورما". كله من ضمن مفضلاتك بس مش نفس الإجابة كل مرة.
- لو الجو حر جدًا (temperature = 1.5): هيقترح حاجات غريبة - "نجرب مطعم تايلاندي ما جربتهوش، أو نطلب صيني من حته بعيدة". أحيانًا هتحب الاقتراح، وأحيانًا هتكرهه.
الـ AI شغال بنفس المنطق بالظبط. كل مرة بيكتب كلمة جديدة، عنده قائمة احتمالات لكل الكلمات الممكنة. الـ temperature بيقرر هياخد الكلمة الأعلى احتمالًا دايمًا، ولا يدّي فرصة للكلمات الأقل احتمالًا تطلع كمان.
التعريف العلمي الدقيق
أي LLM (مثل Claude أو GPT أو Llama) لما بيكتب الكلمة الجاية، بيحسب توزيع احتمالات على كل الكلمات الممكنة في القاموس بتاعه - حوالي 50,000 إلى 200,000 token حسب النموذج. الـ temperature بيتطبق على القيم الخام (logits) قبل ما يتحول لاحتمالات. المعادلة:
# بدون temperature
probabilities = softmax(logits)
# مع temperature
probabilities = softmax(logits / temperature)
لما temperature → 0، التوزيع بيقرّب إن أعلى احتمال يساوي 1 وكل الباقي صفر. النتيجة: النموذج بياخد دايمًا الاختيار الأكثر ترجيحًا (greedy decoding). لما temperature = 1، التوزيع بيفضل زي ما طلع من تدريب النموذج. لما temperature > 1، الفروق بين الاحتمالات بتقل، فالنموذج بيختار كلمات أقل احتمالًا بنسبة أكبر.