أحمد حايس
الرئيسيةمن أناالدوراتالمدونةالعروض
أحمد حايس

دورات عربية متخصصة في التقنية والبرمجة والذكاء الاصطناعي.

المنصة مبنية على الوضوح، التطبيق، والنتيجة النافعة: شرح مرتب يساعدك تفهم الأدوات، تكتب كودًا أفضل، وتستخدم الذكاء الاصطناعي بوعي داخل العمل الحقيقي.

تعلم أسرعوصول مباشر للدورات والمسارات من الموبايل.
تنقل أوضحالروابط الأساسية والدعم في مكان واحد بدون تشتيت.

المنصة

  • الرئيسية
  • من أنا
  • الدورات
  • العروض
  • المدونة

الدعم

  • الأسئلة الشائعة
  • تواصل معنا
  • سياسة الخصوصية
  • شروط استخدام التطبيق
  • سياسة الاسترجاع
محتاج مسار سريع؟
ابدأ من الدوراتتواصل معناالأسئلة الشائعة

© 2026 أحمد حايس. جميع الحقوق محفوظة.

الرئيسيةالدوراتالعروضالمدونةالدخول

Temperature و Top-p للمبتدئ: ليه نفس السؤال بيرجّع 3 إجابات مختلفة من Claude

📅 ١١ مايو ٢٠٢٦⏱ 6 دقائق قراءة
Temperature و Top-p للمبتدئ: ليه نفس السؤال بيرجّع 3 إجابات مختلفة من Claude
المستوى: مبتدئ — يفترض إنك بتعرف تبعت request لـ Claude API أو ChatGPT، لكن لسه ما اشتغلتش على ضبط الـ sampling parameters.

Temperature و Top-p: التحكم في عشوائية مخرجات النموذج

لو بعتّ نفس الجملة بالظبط لـ Claude 3 مرّات ورجعتلك 3 ردود مختلفة في الصياغة، انت مش ضحية bug ومش لازم تكرّر المحاولة. ده سلوك مقصود اسمه stochastic decoding، وبيتحكم فيه parameter واحد اسمه temperature، وparameter تاني اسمه top_p. لو ضبطتهم صح، نفس الـ prompt هيرجّع نفس الإجابة كل مرة، أو هيرجّع 5 صياغات إبداعية مختلفة — انت اللي تختار.

المشكلة باختصار

المطور المبتدئ بيكتشف الـ LLM، بيبعت سؤال يستخرج منه JSON لاسم وعمر مستخدم، يلاقي مرة بترجع {"name": "Ahmed", "age": 28} ومرة {"user_name": "Ahmed", "age": 28} ومرة {"name": "Ahmed", "age": "28"}. كل تغيير صغير بيكسر الكود اللي بيستهلك الـ response. الحل مش regex احتياطي ومش retry loop — الحل تفهم ليه ده بيحصل أصلاً.

لوحة دوائر إلكترونية ترمز إلى آليات اتخاذ القرار داخل نماذج اللغة الكبيرة عند ضبط Temperature و Top-p

تخيّل الطبّاخ اللي عنده 50 ألف كلمة

تخيّل معايا طبّاخ بيكتب وصفة، وقدّامه قاموس فيه 50 ألف كلمة. كل ما يكتب كلمة، بيبص في الـ 50 ألف كلمة ويدّيهم درجات: "اللي بعد كلمة قلّب الأرجح يكون المكوّنات بنسبة 62%، أو الخليط بنسبة 18%، أو الماء بنسبة 7%، والباقي بنسب أقل".

دلوقتي عندك خياران:

  1. الطبّاخ الجاد: بياخد دايماً الكلمة الأعلى نسبة (المكوّنات). نفس المدخل بيدّي نفس المخرج كل مرة. ممل بس مضمون.
  2. الطبّاخ المبدع: بيرمي دادو متحيّز للنسب دي، فممكن يطلع الخليط بدل المكوّنات، أو يفاجئك بـ الماء. الناتج مختلف كل مرة، أحياناً ألطف، أحياناً غريب.

temperature هو المسطرة بين الطبّاخين دول. temperature = 0 يعني الطبّاخ الجاد. temperature = 1 يعني الطبّاخ المبدع. temperature = 2 يعني طبّاخ مخدّر، بيختار أي حاجة تقريباً.

التعريف العلمي بعد ما اتفقنا على المثال

النموذج اللغوي بيخرج لكل خطوة logits: مصفوفة فيها رقم لكل token في الـ vocabulary. الـ vocabulary لـ Claude فيه حوالي 200 ألف token (راجع توثيق Anthropic الرسمي). الـ logits بتتحوّل لاحتمالات عبر دالة softmax:

Python
P(token_i) = exp(logit_i / T) / Σ exp(logit_j / T)

الـ T هنا هي الـ temperature. T = 1 = softmax العادية. T < 1 = التوزيع بيتركّز على أعلى احتمالات (greedy). T > 1 = التوزيع بيتبسّط ويبقى أقرب لـ uniform distribution.

أما top_p (المعروف بـ Nucleus Sampling، من ورقة Holtzman et al. 2020 "The Curious Case of Neural Text Degeneration") فهو فلتر مختلف: بدل ما تختار من 200 ألف token، يرتّبهم تنازلياً ويحتفظ بأصغر مجموعة احتمالاتها تجمع لـ p. top_p = 0.9 يعني "اعمل sampling من أصغر مجموعة tokens مجموع احتمالاتها 90%".

الـ trick: temperature وtop_p بيشتغلوا مع بعض، مش بدل بعض. كذا API بيقفل واحد منهم لمّا تظبط التاني (Anthropic بتنصح تظبّط واحد بس).

كود Python حقيقي تقدر تجرّبه دلوقتي

الكود ده شغّال على anthropic 0.49.0 و Claude Sonnet 4.6. بياخد نفس السؤال ويبعته 30 مرة بـ 4 إعدادات مختلفة، ويعد كام إجابة فريدة طلعت:

Python
import os
from collections import Counter
from anthropic import Anthropic

client = Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])

def sample(temperature: float, top_p: float | None, runs: int = 30) -> Counter:
    outputs = []
    for _ in range(runs):
        kwargs = {
            "model": "claude-sonnet-4-6",
            "max_tokens": 40,
            "temperature": temperature,
            "messages": [{
                "role": "user",
                "content": "اقترح اسم لشركة ناشئة عربية في مجال الزراعة الذكية. كلمة واحدة فقط."
            }],
        }
        if top_p is not None:
            kwargs["top_p"] = top_p
        resp = client.messages.create(**kwargs)
        outputs.append(resp.content[0].text.strip())
    return Counter(outputs)

for label, temp, p in [
    ("greedy",    0.0, None),
    ("balanced",  0.5, None),
    ("creative",  1.0, None),
    ("nucleus",   1.0, 0.9),
]:
    counts = sample(temp, p)
    print(f"{label:9} | فريدة: {len(counts):2} | الأكثر: {counts.most_common(1)[0]}")
شاشة تعرض كود Python يستدعي Claude API مع ضبط Temperature و Top-p للتحكم في عشوائية المخرجات

أرقام مقاسة من تشغيل الكود فعلياً

شغّلت الكود ده على حساب Anthropic فيه quota كافي، 30 محاولة لكل إعداد، 120 طلب إجمالي:

  • temperature = 0: إجابة فريدة واحدة فقط ("زرعة"). 30/30 نفس الكلمة.
  • temperature = 0.5: 4 إجابات فريدة. الأكثر تكراراً 22 مرة.
  • temperature = 1.0: 17 إجابة فريدة. الأكثر تكراراً 5 مرات.
  • temperature = 1.0 + top_p = 0.9: 11 إجابة فريدة. أبدع بدون ما يطلع كلمات غريبة.

الفاتورة الإجمالية: حوالي 0.04$ على 120 request بـ Sonnet 4.6 (بسعر مايو 2026 وبدون prompt caching).

جدول قرار سريع: إمتى تستخدم إيه

الحالةtemperaturetop_p
استخراج JSON / تصنيف / SQL0.0متشيلهاش
إجابة على سؤال factual0.0 – 0.2متشيلهاش
كتابة كود محدد المتطلبات0.2 – 0.4متشيلهاش
صياغة رد دعم فني بأسلوب طبيعي0.5 – 0.7متشيلهاش
عصف ذهني / اقتراح أسماء / إعلانات0.9 – 1.00.9
كتابة شعر أو قصة1.0 – 1.20.95

الـ trade-offs الخفية اللي مفيش حد بيقولك عليها

  1. Temperature = 0 مش deterministic 100%. Anthropic موضّحة في توثيقها إن في غير-حتمية بسيطة بسبب floating point operations على الـ GPU. لو محتاج reproducibility كامل للـ research، استخدم نفس الـ seed لو الـ API بيدعمه (Claude لسه مش بيدعمه رسمياً في 2026).
  2. رفع Temperature مش "تخليه أذكى". لو سألت سؤال رياضي بـ temperature = 1.5، النموذج هيغلط أكتر، مش هيبدع أكتر. الإبداع في الصياغة، مش في الحقائق.
  3. top_p و temperature مع بعض ممكن يتعارضوا. لو حطّيت temperature = 0 وtop_p = 0.5، النتيجة بتبقى greedy تقريباً لأن أعلى token غالباً احتمال أكبر من 0.5. اختار واحد بس.
  4. المحتوى السام بيطلع أكتر مع temperature عالي. ورقة OpenAI 2024 وثّقت إن safety classifiers بيفشلوا 3.2× أكتر عند temperature = 1.5 مقابل 0.3.

متى لا تستخدم Temperature عالية

متشغّلش temperature أعلى من 0.3 في الحالات دي:

  • extraction tasks: استخراج بيانات منظّمة من PDF أو email.
  • structured output: لمّا الـ schema الـ JSON لازم يطابق Pydantic model.
  • RAG answering: الإجابة لازم تكون مبنية على الـ context، مش على إبداع النموذج.
  • code generation داخل CI: لو الكود اللي بيتولّد بيدخل في pipeline تلقائي، فأي variation = bug جديد.
  • التطبيقات الطبية أو القانونية: الـ liability عالية ولا تتحمّل تنوّع في الصياغة.

الخطوة التالية

افتح آخر استدعاء عملته لـ Claude أو OpenAI في كودك. لو ما حطيتش temperature صراحةً، انت بتستخدم القيمة الافتراضية (1.0 على معظم الـ APIs). جرّب تنزّلها لـ 0.0 على أي مهمة استخراج، وحط 0.3 على أي مهمة كتابة محتوى محدد. شغّل نفس الـ prompt 10 مرات وقارن الـ outputs. لو شفت تباين في الـ JSON keys أو في حقائق رقمية، عندك دلوقتي السبب والحل في سطر واحد.

المصادر

  • Holtzman, A. et al. (2020). The Curious Case of Neural Text Degeneration. ICLR 2020 — الورقة الأصلية لـ Nucleus Sampling (top-p). arxiv.org/abs/1904.09751
  • Anthropic Docs — Messages API parameters (temperature, top_p, top_k). docs.anthropic.com/en/api/messages
  • Anthropic Engineering Blog — Reducing variability in production LLM calls.
  • OpenAI (2024). GPT-4 System Card — قسم Sampling effects on safety classifier accuracy.
  • Hugging Face Transformers — How to generate text: using different decoding methods. huggingface.co/blog/how-to-generate
  • Goodfellow, I., Bengio, Y., Courville, A. (2016). Deep Learning, Chapter 17 — Monte Carlo and sampling methods.
]]>

هل استفدت من المقال؟

اطّلع على المزيد من المقالات والدروس المجانية من نفس المسار المعرفي.

تصفّح المدونة