أنماط هندسة الأوامر لتطوير البرمجيات
ليست كل الأوامر تنتج كوداً جيداً. هذه الأنماط المختبرة ميدانياً ستساعدك في الحصول على نتائج أفضل من مساعدي AI في كل مرة تفتح فيها محادثة.
أصبحت هندسة الأوامر (Prompt Engineering) واحدة من أكثر المهارات قيمة في تطوير البرمجيات الحديث. الفرق بين أمر ينتج كوداً عاملاً وقابلاً للصيانة وآخر يولد فوضى معطلة غالباً ما يكون دقيقاً — بضع كلمات من السياق، قيد مذكور مبكراً، أو مثال يؤطر المشكلة بشكل صحيح. هذا المقال يجمع الأنماط التي تنتج نتائج جيدة باستمرار، منظمة حسب نوع المهمة التي تحلها.
هذه الأنماط ليست نظرية. هي مستخلصة من آلاف التفاعلات الحقيقية مع مساعدي برمجة AI عبر قواعد كود في الإنتاج. كل نمط يتضمن مثالاً ملموساً وشرحاً لسبب نجاحه، حتى تتمكن من تكييفه مع أدواتك وسير عملك الخاص.
النمط 1: شطيرة السياق (Context Sandwich)
الخطأ الأكثر شيوعاً الذي يرتكبه المطورون عند توجيه الأوامر لـ AI هو تقديم سياق قليل جداً. يطلبون دالة دون وصف النظام المحيط، أو القيود، أو الاصطلاحات المتوقعة. عندها يقوم AI بافتراضات معقولة لكنها خاطئة لقاعدة الكود الخاصة بك، وتكون النتيجة بحاجة لتعديل كبير.
شطيرة السياق تحل هذا من خلال هيكلة كل أمر إلى ثلاث طبقات: ما تبنيه، وما القيود المطبقة، وكيف يبدو النجاح.
- الطبقة العليا — الهدف: صف ما تريد في جملة واحدة واضحة. هذا هو الجزء الوحيد الذي يضمّنه معظم المطورين.
- الطبقة الوسطى — القيود: اذكر الأمور غير القابلة للتفاوض. إصدارات المكتبات، اصطلاحات الأسلوب، متطلبات الأداء، الحالات الحدية التي يجب معالجتها.
- الطبقة السفلى — التحقق: صف كيف ستعرف أن النتيجة صحيحة. حالة اختبار، تنسيق مخرجات متوقع، أو سلوك محدد للتأكيد.
// Weak prompt
const result = await ai.generate("Write a function that sorts an array of users by name");
// Context Sandwich prompt
const result = await ai.generate([
"Create a compare function for sorting an array of user objects by lastName, then firstName.",
"Constraints: case-insensitive, handles missing names, TypeScript, no external libraries.",
"Verify: users.sort(compare).map(u => u.lastName) should return ['Adams', 'adams', 'Brown'].",
].join("\n\n"));شطيرة السياق تعمل لأنها تقلل الغموض في كل مستوى. AI يعرف ما تريد، وما لن تقبله، وكيف ستقيم النتيجة. هذا النمط الواحد يلغي معظم التبادل ذهاباً وإياباً الذي يضيع الوقت في التطوير بمساعدة AI.
النمط 2: القيد السلبي (Negative Constraint)
نماذج AI جيدة بشكل عام في فهم ما تريد. لكنها تواجه صعوبة أكبر في فهم ما لا تريده. أمر مثل اكتب نموذج تسجيل دخول سينتج شيئاً معقولاً، لكنه قد يضم قواعد تعقيد كلمة مرور لا يستخدمها تصميمك، أو مربع تذكرني أزاله مدير منتجك في السباق الماضي.
نمط القيد السلبي يذكر صراحة ما يجب على AI تجنبه. إنه أكثر فعالية من الأمل في أن النموذج سيخمن الاستثناءات بشكل صحيح.
// Without negative constraints
"Build a user settings page with tabs for profile, security, and notifications."
// With negative constraints
"Build a user settings page with tabs for profile, security, and notifications.
DO NOT include: email verification flows, password strength meters, or social login buttons."القيود السلبية تعمل بشكل أفضل عندما توضع في نهاية الأمر، بعد الوصف الإيجابي. هذا يعكس كيفية معالجة البشر للتعليمات — نحتاج أن نفهم ما هو مطلوب قبل أن نفهم ما هو مستبعد. AI يتبع نفس النمط: يبني النموذج الذهني من الوصف الإيجابي، ثم يطبق الاستثناءات كمرشحات فوقه.
النمط 3: قالب المثال (Example Template)
عندما تحتاج مخرجات متناسقة عبر تفاعلات AI متعددة — توليد وثائق، كتابة حالات اختبار، أو تنسيق استجابات API — إخبار AI بما يجب فعله أقل فعالية من إظهاره له. نمط قالب المثال يقدم مثالاً كاملاً أو اثنين من المخرجات المطلوبة ثم يطلب المزيد بنفس التنسيق.
هذا هو أقرب شيء إلى التعلم ببضع عينات (few-shot learning) المتاح عبر واجهات المحادثة. مثال جيد الاختيار ينقل التنسيق، النبرة، مستوى التفصيل، والاصطلاحات الضمنية التي ستتطلب فقرات لوصفها صراحة.
// Example Template for generating error messages
const example = {
code: "ERR_AUTH_TOKEN_EXPIRED",
message: "Your session has expired. Please log in again.",
severity: "warning",
action: "redirect:/login",
};
const result = await ai.generate([
"Generate 5 more error objects in the same format as this example:",
JSON.stringify(example, null, 2),
"Cover: rate limiting, permission denied, not found, validation error, server error.",
].join("\n\n"));مفتاح هذا النمط هو اختيار المثال الصحيح. يجب أن يكون تمثيلياً ولكن ليس مثقلاً بالحالات الحدية — تريد أن يعمم AI من مثالك، لا أن يكرر خصوصياته. مثالان أفضل من واحد عندما يكون لتنسيق المخرجات تنويعات متعددة، لكن أكثر من ثلاثة أمثلة نادراً ما تضيف قيمة وتبدأ في استهلاك نافذة السياق الخاصة بك.
النمط 4: حلقة التحسين التكراري (Iterative Refinement Loop)
طلب نتيجة نهائية مثالية من AI في أمر واحد يشبه طلب مطور مبتدئ أن ينشر كود إنتاج بدون أي تكرار. أحياناً ينجح، لكنه عادةً ينتج شيئاً يحتاج إعادة عمل كبيرة. حلقة التحسين التكراري تعامل التفاعل مع AI كمحادثة، تبدأ واسعة النطاق ثم تضيق.
- الجولة 1 — توليد حل واسع أو هيكل عظمي. لا تطلب التفاصيل بعد.
- الجولة 2 — راجع المخرجات وقدم توجيهاً محدداً. هذا الجزء جيد، غير ذاك الجزء، أضف هذه الحالة.
- الجولة 3 — صقل التفاصيل. معالجة الأخطاء، الحالات الحدية، التسمية، التوثيق.
كل جولة تعطي AI سياقاً أكثر حول ما تريده فعلاً، لأن ملاحظاتك محددة للكود الذي أنتجه للتو. هذا أكثر كفاءة بكثير من محاولة توقع كل تفصيل في الأمر الأول. AI أيضاً يستفيد لأنه يمكنه التركيز على مستوى واحد من المشكلة في كل مرة — أولاً الهيكل، ثم التفاصيل، ثم الصقل.
النمط 5: بادئة الدور (Role Prefix)
نماذج AI مدربة على نصوص من مجالات عديدة، ويمكنها تبني شخصيات مختلفة عند الطلب. نمط بادئة الدور يعين صراحة دوراً ومنظوراً لـ AI قبل طلب الكود، مما يهيئه لإنتاج مخرجات مناسبة لذلك السياق.
// Generic
"Review this function for security issues."
// Role-prefixed
"You are a security engineer reviewing a pull request. Focus on:
- Injection vulnerabilities in the SQL query construction
- Missing input validation on the user ID parameter
- Hardcoded credentials or secrets
Review this function:"نمط بادئة الدور فعال بشكل خاص لمهام المراجعة وإعادة الهيكلة وتوليد التوثيق. عندما تحتاج كوداً يتبع معايير الوصول، اسبق بـ أنت مختص بإمكانية الوصول. عندما تحسّن الأداء، اسبق بـ أنت مهندس أداء. AI يضبط منطقه ومخرجاته لتتناسب مع المنظور الذي تطلبه.
النمط 6: عقد المخرجات (Output Contract)
واحدة من أكثر التجارب إحباطاً مع برمجة AI هي الحصول على استجابة تبدو صحيحة لكنها تغير تنسيق المخرجات بمهارة، أو تضيف نصاً توضيحياً لم تطلبه، أو تحذف أجزاء حاسمة. نمط عقد المخرجات يمنع هذا بتحديد ما يجب أن تحتويه الاستجابة بالضبط، والأهم من ذلك، ما لا يجب أن تحتويه.
"Generate a React component for a file upload button.
Output contract:
- Return ONLY the component code in a single code block
- No explanation text before or after
- Include TypeScript props interface
- Include CSS module import
- Do NOT include usage examples or test files
- File name: FileUpload.tsx"عقد المخرجات قيم بشكل خاص عندما تمرر مخرجات AI إلى أداة أو سير عمل آخر. إذا كانت الاستجابة تتبع دائماً نفس الهيكل، يمكنك تحليلها بشكل موثوق. هذا النمط هو الأساس لبناء خطوط أنابيب آلية بمساعدة AI تتطلب تنسيقاً متناسقاً.
النمط 7: ميزانية نافذة السياق (Context Window Budget)
كل نموذج AI لديه نافذة سياق محدودة. عندما تلصق كمية كبيرة جداً من الكود أو التوثيق أو تاريخ المحادثة، يبدأ النموذج في النسيان أو الهلوسة. نمط ميزانية نافذة السياق يعامل نافذة السياق كمورد نادر ويخصصها عن قصد.
- خصص 60% من ميزانيتك للكود الأكثر صلة ووصف المهمة.
- خصص 20% للأمثلة والقيود التي توضح المهمة.
- احتفظ بـ 20% لمساحة استجابة AI — إذا كانت النافذة ممتلئة، سيكون المخرجات مبتورة.
عندما يكون لديك سياق أكثر مما يسع النافذة، أعط الأولوية للأجزاء الأكثر تحديداً وملاءمة. أمر مركز مع ملف واحد مختار بعناية أكثر فعالية من أمر واسع مع خمسة ملفات مرتبطة بشكل فضفاض. AI يمكنه دائماً طلب سياق إضافي إذا احتاجه — أعطه الإذن بذلك مبكراً في المحادثة.
أمر مركز مع ملف واحد مختار بعناية يتفوق باستمرار على أمر مشتت مع خمسة ملفات لا يكاد AI رؤيتها.
النمط 8: تسلسل الهيكل ثم التفصيل (Scaffold-Then-Detail)
الميزات المعقدة لها أجزاء متحركة كثيرة. طلب AI بتوليدها كلها مرة واحدة ينتج نتيجة متشابكة يصعب فيها فصل إدارة الحالة واستدعاءات API وعرض UI. تسلسل الهيكل ثم التفصيل يقسم المشكلة إلى مرحلتين.
أولاً، اطلب من AI توليد هيكل: تعريفات الأنواع والواجهات والهيكل عالي المستوى للميزة بدون تفاصيل التنفيذ. راجع هذا الهيكل وأكد أنه يطابق نموذجك الذهني. عندها فقط اطلب من AI ملء التفاصيل — التنفيذ، معالجة الأخطاء، الحالات الحدية — طبقة تلو الأخرى.
// Phase 1 — Scaffold
"Design the type structure for a multi-step checkout flow. List the interfaces, enums, and state machine transitions. Do not write implementation yet."
// Phase 2 — Detail (after reviewing scaffold)
"Implement the checkout state machine from the types we agreed on. Include transition validation and error states."هذا النمط يمنع أغلى أنواع إعادة العمل: تغيير الهيكل بعد اكتمال التنفيذ. بالاتفاق على الهيكل أولاً، تضمن أن AI يبني على أساس يطابق بنيتك، لا بنية متخيلة.
دمج الأنماط معاً
هذه الأنماط الثمانية تعمل بشكل أفضل عندما تُدمج. جلسة نموذجية قد تبدأ بشطيرة السياق لتأطير الطلب، تستخدم القيود السلبية لاستبعاد النهج غير المرغوب فيها، تتبع حلقة التحسين التكراري للوصول إلى الحل الصحيح، وتختتم بعقد مخرجات للحصول على نتيجة نظيفة قابلة للتحليل.
كلما مارست هذه الأنماط أكثر، أصبحت أكثر طبيعية. خلال أيام قليلة، ستجد نفسك تنظّم الأوامر غريزياً كشطائر سياق وتضيف قيوداً سلبية دون تفكير. عندها يتحول التطوير بمساعدة AI من أداة مفيدة أحياناً إلى جزء موثوق باستمرار من سير عملك.
كل تفاعل مع مساعد AI هو استثمار. أمر جيد التنظيم يأخذ ثلاثين ثانية إضافية لكتابته لكنه يوفر ساعات من التبادل. عبر مائة تفاعل، تلك الثلاثون ثانية تتراكم إلى أيام من الوقت الموفر — والفرق بين الإحباط والتدفق.
