هل تعلم أن 80% من الأخطاء في تطبيقات الذكاء الاصطناعي ليست في الكود، بل في الـ Prompts؟ اكتشف الأساليب المتقدمة التي تحول الـ Prompt من سؤال عشوائي إلى أداة هندسية دقيقة تتحكم في سلوك النموذج خلف الكواليس.
في أحد المشاريع التي عملت عليها مع فريق في شركة ناشئة سعودية، كنا نبني نظام توصيات للمحتوى التعليمي باستخدام نموذج لغة كبير. بعد أسابيع من التطوير، اكتشفنا أن النظام كان يوصي بمحتوى غير مناسب للمستخدمين في 37% من الحالات. لم يكن الخطأ في الكود أو البيانات، بل في الـ Prompt الذي كتبناه. عندما عدنا وعدّلنا الـ Prompt باستخدام تقنيات متقدمة، انخفضت نسبة الأخطاء إلى أقل من 3%. هذه ليست مصادفة - إنها هندسة حقيقية.
الـ Prompt Engineering ليس مجرد كتابة أسئلة للنموذج. إنه علم وفن يتحكم في كيفية تفكير النموذج، وكيفية تخصيص موارده المحدودة في الذاكرة والمعالج، وكيفية توليد الإجابات التي تتناسب مع السياق التقني للمشروع. في هذا المقال، سأريك كيف تحول الـ Prompt من أداة بسيطة إلى سلاح سري في يد المطورين المحترفين.
عندما ترسل Prompt إلى نموذج لغة كبير، فإنك لا ترسل مجرد نص. أنت ترسل تعليمات معقدة تؤثر على كيفية تخصيص النموذج لموارده الحسابية. النماذج مثل GPT-4 و Llama تستخدم ما يسمى بالـ Attention Mechanism، وهي تقنية تسمح للنموذج بتحديد الأجزاء المهمة من الـ Prompt وتخصيص المزيد من القوة الحسابية لها. إذا كتبت Prompt بطريقة عشوائية، فإنك تخاطر بأن يفوت النموذج الأجزاء الحرجة من طلبك، مما يؤدي إلى إجابات غير دقيقة أو غير كاملة.
خذ مثلاً هذا الـ Prompt البسيط: "اكتب كود بايثون لحساب المتوسط". النموذج قد يفهم المطلوب، لكنه قد ينتج كوداً غير محسن أو غير مناسب للسياق الذي تعمل فيه. أما إذا استخدمت Prompt مدروس مثل: "اكتب كود بايثون لحساب المتوسط الحسابي لمجموعة من الأعداد الصحيحة المخزنة في قائمة. يجب أن يكون الكود فعالاً من حيث الذاكرة والمعالج، ويجب أن يتعامل مع حالات القائمة الفارغة بإرجاع 0." هنا، أنت توجه النموذج لتخصيص المزيد من الموارد لفهم السياق والتفاصيل التقنية، مما يؤدي إلى نتيجة أفضل بكثير.
# Prompt سيء: "اكتب كود لحساب المتوسط"
# الناتج قد يكون غير محسن:
def average(numbers):
return sum(numbers) / len(numbers)
# Prompt جيد: "اكتب كود بايثون لحساب المتوسط الحسابي لمجموعة من الأعداد الصحيحة المخزنة في قائمة.
# يجب أن يكون الكود فعالاً من حيث الذاكرة والمعالج، ويجب أن يتعامل مع حالات القائمة الفارغة بإرجاع 0."
# الناتج المحسن:
def average(numbers):
if not numbers:
return 0
return sum(numbers) / len(numbers)واحدة من أقوى التقنيات في Prompt Engineering هي تقنية Chain-of-Thought (CoT). الفكرة هنا هي أنك لا تطلب من النموذج الإجابة مباشرة، بل تطلب منه شرح خطوات تفكيره قبل الوصول إلى الإجابة النهائية. هذه التقنية تحسن بشكل كبير دقة الإجابات، خاصة في المهام المعقدة التي تتطلب تفكيراً منطقياً أو رياضياً.
في دراسة أجريت على نماذج اللغة الكبيرة، تبين أن استخدام CoT يحسن دقة الإجابات في المسائل الرياضية من 17% إلى 78%. السر هنا هو أن النموذج عندما يضطر لكتابة خطوات تفكيره، فإنه يستخدم المزيد من الموارد الحسابية لفهم المشكلة وحلها بشكل منهجي، بدلاً من الاعتماد على التخمين السريع.
# Prompt بدون CoT:
"ما هو حاصل ضرب 24 × 15؟"
# الإجابة قد تكون خاطئة أو غير مفسرة:
"360"
# Prompt مع CoT:
"لحساب حاصل ضرب 24 × 15، دعنا نفكر خطوة بخطوة:
1. يمكننا تقسيم 15 إلى 10 + 5.
2. نحسب 24 × 10 = 240.
3. نحسب 24 × 5 = 120.
4. نجمع النتائج: 240 + 120 = 360.
إذاً، حاصل ضرب 24 × 15 هو:"
# الإجابة مع CoT ستكون أكثر دقة وموثوقية:
"360"هذه التقنية ليست مفيدة فقط للمسائل الرياضية، بل يمكن استخدامها في أي مهمة تتطلب تفكيراً منطقياً، مثل تحليل البيانات، كتابة الأكواد المعقدة، أو حتى توليد الأفكار الإبداعية. المفتاح هنا هو توجيه النموذج للتفكير بصوت عالٍ قبل الوصول إلى الإجابة النهائية.
الـ Few-Shot Prompting هي تقنية تسمح لك بتعليم النموذج كيفية أداء مهمة معينة من خلال تقديم أمثلة قليلة قبل طرح السؤال الفعلي. هذه التقنية مفيدة بشكل خاص عندما تريد من النموذج اتباع نمط معين أو توليد نص بأسلوب محدد.
في أحد المشاريع التي عملت عليها، كنا بحاجة لتوليد أوصاف منتجات باللغة العربية بأسلوب معين. بدلاً من كتابة Prompt طويل ومعقد، استخدمنا Few-Shot Prompting بتقديم ثلاثة أمثلة فقط للنموذج، ثم طلبنا منه توليد وصف لمنتج جديد. النتائج كانت مذهلة - النموذج اتبع الأسلوب المطلوب بدقة عالية، حتى في التفاصيل الصغيرة مثل استخدام كلمات معينة أو ترتيب الجمل.
# Prompt بدون Few-Shot:
"اكتب وصفاً لمنتج سماعات لاسلكية."
# الناتج قد يكون عام وغير دقيق:
"سماعات لاسلكية بجودة صوت عالية."
# Prompt مع Few-Shot:
"إليك ثلاثة أمثلة لأوصاف منتجات:
1. منتج: ساعة ذكية
وصف: ساعة ذكية بتصميم أنيق تدعم تتبع اللياقة البدنية ومراقبة ضربات القلب، مع بطارية تدوم حتى 7 أيام.
2. منتج: ماوس لاسلكي
وصف: ماوس لاسلكي متوافق مع جميع أنظمة التشغيل، بتصميم مريح يدعم الاستخدام لفترات طويلة، مع دقة عالية تصل إلى 1600 نقطة في البوصة.
3. منتج: لوحة مفاتيح ميكانيكية
وصف: لوحة مفاتيح ميكانيكية بتصميم كلاسيكي مع مفاتيح قابلة للتبديل، تدعم الإضاءة الخلفية RGB، ومتوافقة مع أنظمة ويندوز وماك ولينكس.
الآن، اكتب وصفاً لمنتج سماعات لاسلكية بجودة عالية."
# الناتج مع Few-Shot سيكون أكثر دقة واتساقاً:
"سماعات لاسلكية بتصميم عصري تدعم تقنية البلوتوث 5.0 لتوصيل مستقر، مع جودة صوت نقية ومكبرات صوت مزدوجة للحصول على تجربة صوتية غامرة. البطارية تدوم حتى 30 ساعة من الاستخدام المتواصل، وتدعم الشحن السريع لشحن كامل في ساعة واحدة فقط."المفتاح هنا هو اختيار الأمثلة بعناية. يجب أن تكون الأمثلة متنوعة بما يكفي لتغطي الحالات المختلفة التي قد يواجهها النموذج، لكنها في نفس الوقت يجب أن تكون متسقة مع النمط الذي تريد من النموذج اتباعه. أيضاً، يجب أن تكون الأمثلة قصيرة ومباشرة لتجنب إرباك النموذج بمعلومات غير ضرورية.
الـ Role Prompting هي تقنية تسمح لك بتحديد دور معين للنموذج، مما يجعله يولد إجابات تتناسب مع هذا الدور. مثلاً، يمكنك جعل النموذج يتصرف كخبير في الأمن السيبراني، أو كمطور برمجيات متمرس، أو حتى كمدير مشروع محترف. هذه التقنية مفيدة بشكل خاص عندما تريد إجابات متخصصة وموثوقة.
في تجربتي، استخدمت هذه التقنية عندما كنت بحاجة لتقييم تصميم قاعدة بيانات معقدة. بدلاً من كتابة Prompt عام، طلبت من النموذج أن يتصرف كخبير في قواعد البيانات وأن يقيم التصميم بناءً على معايير محددة. النتائج كانت مذهلة - النموذج قدم تحليلاً عميقاً واقتراحات تحسين دقيقة، كما لو كان خبيراً حقيقياً في المجال.
# Prompt بدون Role Prompting:
"قيم هذا التصميم لقاعدة بيانات."
# الناتج قد يكون سطحياً:
"التصميم جيد بشكل عام."
# Prompt مع Role Prompting:
"أنت خبير في تصميم قواعد البيانات ولديك خبرة تزيد عن 15 عاماً في المجال. لديك مهمة تقييم هذا التصميم لقاعدة بيانات نظام إدارة المحتوى. إليك التصميم:
- جدول Users: id (PK), name, email, password_hash
- جدول Posts: id (PK), user_id (FK), title, content, created_at
- جدول Comments: id (PK), post_id (FK), user_id (FK), content, created_at
قيم هذا التصميم بناءً على المعايير التالية:
1. تطبيع البيانات (Normalization)
2. أداء الاستعلامات (Query Performance)
3. قابلية التوسع (Scalability)
4. الأمان (Security)
قدم اقتراحات تحسين إذا لزم الأمر."
# الناتج مع Role Prompting سيكون متخصصاً ومفصلاً:
"التقييم:
1. تطبيع البيانات: التصميم جيد من حيث تطبيع البيانات، حيث تم فصل الجداول بشكل صحيح لتجنب التكرار.
2. أداء الاستعلامات: يمكن تحسين الأداء بإضافة فهارس (Indexes) على الأعمدة المستخدمة بشكل متكرر في الاستعلامات مثل user_id و post_id.
3. قابلية التوسع: التصميم قابل للتوسع بشكل جيد، لكن يمكن إضافة جدول منفصل للملفات المرفقة (Attachments) إذا كان النظام يدعم ذلك.
4. الأمان: يجب تشفير حقل email باستخدام تشفير قوي، ويجب إضافة حقل salt لكلمة المرور لتعزيز الأمان.
الاقتراحات:
- إضافة فهارس على الأعمدة user_id و post_id.
- إضافة حقل salt لكلمة المرور.
- تشفير حقل email باستخدام خوارزمية مثل AES."هذه التقنية ليست مفيدة فقط للحصول على إجابات متخصصة، بل يمكن استخدامها أيضاً لتدريب النماذج على مهام محددة. مثلاً، يمكنك استخدام Role Prompting لجعل النموذج يتصرف كمصحح لغوي، أو كمحلل بيانات، أو حتى كمطور برمجيات يقوم بمراجعة الكود. المفتاح هنا هو تحديد الدور بوضوح وتقديم السياق الكافي للنموذج ليتمكن من توليد إجابات دقيقة.
الـ Prompt Chaining هي تقنية تسمح لك بتقسيم مهمة معقدة إلى سلسلة من الـ Prompts الأصغر والأكثر تخصصاً. بدلاً من محاولة حل المشكلة كلها في Prompt واحد، يمكنك تقسيمها إلى خطوات منطقية، حيث يكون ناتج كل خطوة هو مدخل للخطوة التالية. هذه التقنية مفيدة بشكل خاص في المهام التي تتطلب معالجة متعددة المراحل، مثل تحليل البيانات، توليد المحتوى المعقد، أو حتى بناء تطبيقات كاملة باستخدام LLMs.
في مشروع شخصي، كنت أبني أداة لتحليل المشاعر في التغريدات العربية. بدلاً من كتابة Prompt واحد معقد، استخدمت Prompt Chaining بتقسيم المهمة إلى ثلاث خطوات: الأولى لتحليل النص واستخراج الكلمات المفتاحية، الثانية لتصنيف المشاعر بناءً على الكلمات المفتاحية، والثالثة لتوليد تقرير مفصل. النتائج كانت أكثر دقة بكثير من محاولة حل المشكلة في خطوة واحدة.
# مثال على Prompt Chaining لتحليل المشاعر في النصوص
# الخطوة 1: استخراج الكلمات المفتاحية
prompt_keywords = """
أنت محلل نصوص محترف. لديك مهمة استخراج الكلمات المفتاحية من النص التالي:
"هذا المنتج رائع جداً! جودة الصوت مذهلة والبطارية تدوم طويلاً."
استخرج الكلمات التي تعبر عن المشاعر أو الميزات الرئيسية للمنتج.
"""
# الناتج: ["رائع", "جودة الصوت مذهلة", "البطارية تدوم طويلاً"]
# الخطوة 2: تصنيف المشاعر
prompt_sentiment = f"""
استناداً إلى الكلمات المفتاحية التالية: {keywords_output}،
صنف المشاعر في النص إلى إيجابية أو سلبية أو محايدة.
قدم نسبة مئوية لكل فئة.
"""
# الناتج: {"إيجابية": 100%, "سلبية": 0%, "محايدة": 0%}
# الخطوة 3: توليد التقرير
prompt_report = f"""
استناداً إلى تحليل المشاعر التالي: {sentiment_output}،
اكتب تقريراً قصيراً يلخص المشاعر في النص ويعطي أمثلة على الكلمات التي أثرت في التصنيف.
"""
# الناتج: "التحليل يظهر أن المشاعر في النص إيجابية بنسبة 100%. الكلمات التي أثرت في هذا التصنيف تشمل: 'رائع'، 'جودة الصوت مذهلة'، و'البطارية تدوم طويلاً'."الميزة الرئيسية لهذه التقنية هي أنها تسمح لك بالتحكم في كل خطوة من خطوات المعالجة، مما يقلل من احتمالية الأخطاء ويحسن جودة النتائج. أيضاً، يمكنك تعديل أو تحسين كل خطوة على حدة دون الحاجة لإعادة بناء الـ Prompt بالكامل. هذه التقنية تشبه إلى حد كبير كتابة كود باستخدام دوال صغيرة ومتخصصة بدلاً من كتابة دالة واحدة كبيرة ومعقدة.
حتى مع استخدام أفضل التقنيات، هناك فخاخ شائعة يقع فيها الكثير من المطورين عند كتابة الـ Prompts. أحد هذه الفخاخ هو الاعتماد الزائد على الـ Context Window للنموذج. النماذج مثل GPT-4 لها حد أقصى لعدد الرموز التي يمكنها معالجتها في Prompt الواحد، وإذا تجاوزت هذا الحد، فإن النموذج قد يتجاهل أجزاء مهمة من الـ Prompt أو يولد إجابات غير دقيقة.
فخ آخر هو استخدام لغة غامضة أو غير دقيقة في الـ Prompt. مثلاً، كتابة "اكتب كود جيد" بدلاً من "اكتب كود بايثون فعال من حيث الذاكرة والمعالج ويعالج حالات الاستثناء بشكل صحيح". اللغة الغامضة تؤدي إلى إجابات غامضة وغير مفيدة. أيضاً، يجب تجنب استخدام مصطلحات غير محددة مثل "سريع" أو "جيد" دون تحديد معايير واضحة لما تعنيه هذه المصطلحات في سياق المشروع.
في أحد المشاريع، كنت أعمل على نظام توليد محتوى آلي للغة العربية. لاحظت أن النموذج كان يولد نصوصاً تحتوي على أخطاء نحوية في بعض الحالات. بعد مراجعة الـ Prompt، اكتشفت أنني استخدمت مصطلح "نص صحيح نحوياً" دون تحديد ما يعنيه ذلك بالضبط. عندما عدلت الـ Prompt ليشمل أمثلة على الأخطاء النحوية التي يجب تجنبها، تحسنت جودة النصوص بشكل كبير.
الـ Prompt Engineering ليس مجرد كتابة أسئلة للنموذج. إنه علم وهندسة تتطلب فهماً عميقاً لكيفية عمل النماذج خلف الكواليس، وكيفية تخصيص الموارد الحسابية، وكيفية توجيه النموذج لتوليد الإجابات التي تريدها بالضبط. إذا كنت تريد أن تكون مطوراً استثنائياً في عصر LLMs، فلا تتعامل مع الـ Prompt كشيء ثانوي. تعامل معه ككود حقيقي، واختبره، وعدله، وحسّنه باستمرار.
نصيحة عملية أخيرة: ابدأ دائماً بكتابة الـ Prompt على ورقة قبل كتابته في الكود. اكتب ما تريد بالضبط، ثم قسمه إلى خطوات منطقية، واختبر كل خطوة على حدة. وعندما تحصل على النتائج، قارن بينها وبين ما تريد بالضبط، وعدّل الـ Prompt بناءً على الفروقات. بهذه الطريقة، ستتحول الـ Prompts من أداة بسيطة إلى سلاح سري في يدك.