الدرس 6 من 9

هندسة الـ Prompts

نفس الموديل، نتايج مختلفة تماماً حسب انت كاتب إيه.

الموديل موظف ذكي جديد

تخيل إنك جبت موظف شاطر جداً بس أول يوم له في الشركة. مش عارف الشغل ماشي إزاي، ولا مين الزبون، ولا انت عايز النتيجة شكلها إيه. كل ما تديله سياق وتفاصيل أكتر، الشغل هيطلع أحسن. ده بالظبط الـ Prompt Engineering.

كن واضح ومحدد

prompt كويس«اكتب وصف لمنتج سماعة بلوتوث، لصفحة متجر أونلاين موجه لطلبة الجامعة. ٣ جمل بالمصري، ركز على البطارية اللي بتقعد ٣٠ ساعة والسعر ٨٥٠ جنيه.»
prompt ضعيف«اكتب وصف لسماعة.»

اديله أمثلة (Few-shot)

بدل ما توصف الشكل اللي عايزه، وريه. مثالين أو تلاتة بيوفروا فقرة شرح:

few_shot.py
from dotenv import load_dotenv
import anthropic

load_dotenv()
client = anthropic.Anthropic()

prompt = """Classify each customer message into: shipping, refund, product_question, complaint.

Examples:
Message: "الأوردر بتاعي لسه موصلش من أسبوع"
Category: shipping

Message: "السماعة دي بتشتغل مع الايفون؟"
Category: product_question

Now classify:
Message: "عايز أرجع الجزمة المقاس طلع صغير"
Category:"""

reply = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=10,
    messages=[{"role": "user", "content": prompt}],
)
print(reply.content[0].text.strip())

رتّب الـ prompt بـ XML tags

لما الـ prompt فيه تعليمات ومستند وأمثلة، افصل بينهم بـ tags زي <document> و <instructions>. الموديل بيفهم فين كل حاجة ومبيلخبطش بين النص اللي بيحلله والتعليمات بتاعتك.

إجابة بشكل ثابت (JSON)

عشان كودك يقدر يستخدم الرد، اطلب شكل محدد وقوله يرد بيه بس، وبعدين حوّله لـ dict:

json_output.py
import json
from dotenv import load_dotenv
import anthropic

load_dotenv()
client = anthropic.Anthropic()

review = "الموبايل حلو والكاميرا ممتازة بس البطارية بتخلص بسرعة والشحن اتأخر ٣ أيام"

prompt = f"""Analyze this customer review.

<review>
{review}
</review>

Respond with ONLY a JSON object, no other text:
{{"sentiment": "positive" | "negative" | "mixed",
  "pros": [list of strings],
  "cons": [list of strings]}}"""

reply = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=300,
    messages=[{"role": "user", "content": prompt}],
)
data = json.loads(reply.content[0].text)    # text -> Python dict
print(data["sentiment"])
print("cons:", data["cons"])
⚠ اتوقع إن الـ JSON يبوظفي الإنتاج الموديل ممكن مرة يرجع نص زيادة أو JSON ناقص. حط json.loads جوه try / except (من المرحلة الأولى!) واعمل إعادة محاولة. والـ APIs الحديثة فيها خيارات تضمن شكل الرد، دوّر عليها في التوثيق.

خليه يفكر قبل ما يجاوب

في المسائل المعقدة (حسابات، تحليل، قرارات) اطلب منه يفكر خطوة خطوة قبل الإجابة النهائية. زي ما انت بتحل مسألة أحسن لما تكتب خطواتك بدل ما تقول الناتج من دماغك.

💡 ملخص سريعدور واضح في الـ system ← سياق كافي ← مهمة محددة ← أمثلة ← شكل الإجابة المطلوب ← «لو مش متأكد قول مش عارف». وجرّب وعدّل: الـ prompt الكويس بييجي بالتجربة مش من أول مرة.
الدرس اللي فات