الهندسة التحفيزية

هذا الدليل يشارك استراتيجيات وتكتيكات للحصول على نتائج أفضل من النماذج اللغوية الكبيرة (المعروفة أحيانًا باسم نماذج GPT) مثل GPT-4. يمكن أحيانًا تنفيذ الأساليب الموضحة هنا بتوافر مزيج مختلف لتحقيق تأثير أكبر. نحن نشجع على التجربة لايجاد الأساليب الأفضل بالنسبة لك.

بعض الأمثلة المُعروضة هنا تعمل حالياً فقط مع نموذجنا الأكثر قدرة، "gpt-4". بشكل عام، إذا واجهت نموذجًا فاشلًا في مهمة ما وكان هناك نموذج أكثر قدرة متاح، فمن المفيد جرب مرة أخرى باستخدام النموذج الأكثر قدرة.

نصيحة: هذا البرنامج التعليمي هو ترجمة لدليل OpenAI الرسمي لهندسة التحفيز. يشرح البرنامج التعليمي استراتيجيات / تكتيكات كتابة كلمات التلميح، وكيفية توجيه النموذج اللغوي لارجاع النتيجة المرغوبة من خلال الكتابة.

ستة استراتيجيات للحصول على نتائج أفضل

كتابة تعليمات واضحة

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

تكتيكات:

  • تضمين تفاصيل في الاستعلام الخاص بك للحصول على إجابات أكثر صلة
  • طلب من النموذج اعتماد شخصية
  • استخدام محددات للإشارة بوضوح إلى أجزاء متميزة من المدخلات
  • تحديد الخطوات المطلوبة لإكمال مهمة
  • تقديم أمثلة
  • تحديد الطول المطلوب للناتج

توفير نص مرجعي

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

تكتيكات:

  • أوجد النموذج للرد باستخدام نص مرجعي
  • أتلف النموذج للرد بالاقتباسات من نص مرجعي

تقسيم المهام المعقدة إلى مهام فرعية أبسط

مثلما هو من الممارسات الجيدة في هندسة البرمجيات تجزئة النظام المعقد إلى مجموعة من المكونات المعيارية، يتم نفس الأمر مع المهام المقدمة إلى نموذج لغوي. المهام المعقدة لها معدلات خطأ أعلى من المهام البسيطة. علاوة على ذلك، يُمكن إعادة تعريف المهام المعقدة في كثير من الأحيان كسير عمل من المهام الأبسط حيث تستخدم نواتج المهام السابقة لبناء المدخلات للمهام التالية.

تكتيكات:

  • استخدام تصنيف النية لتحديد التعليمات الأكثر صلة لاستعلام مستخدم
  • لتطبيقات الحوار التي تتطلب محادثات طويلة جدًا، قم بتلخيص أو تصفية الحوار السابق
  • تلخيص الوثائق الطويلة بشكل نصفي وبناء ملخص كامل بشكل متكرر

منح النموذج وقت لـ "التفكير"

إذا طُلب منك مثلًا ضرب 17 في 28، قد لا تعرف الإجابة على الفور، ولكن يمكنك العمل عليه مع مرور الوقت. بالمثل، يقوم النماذج بجعل المزيد من أخطاء الاستدلال عند محاولة الإجابة على الفور، بدلاً من أخذ الوقت للعمل على الإجابة. طلب "سلسلة من الأفكار" قبل الإجابة يمكن أن يساعد النموذج في استدلال طريقه نحو الإجابات الصحيحة بشكل أكثر موثوقية.

تكتيكات:

  • أوجد النموذج للعمل على حل واقعه الخاص قبل الاندفاع نحو استنتاج
  • استخدام الفكر الداخلي أو سلسلة من الاستفسارات لإخفاء عملية استدلال النموذج
  • سلم النموذج إذا نسي شيئًا في المحاولات السابقة

استخدام أدوات خارجية

تعويض عن نقاط الضعف في النموذج بتغذية المخرجات الخاصة به عبر أدوات أخرى. على سبيل المثال، نظام استرجاع النص (المعروف أحيانًا باسم RAG أو إعادة الجيل المعزز) يمكنه إبلاغ النموذج عن الوثائق ذات الصلة. يمكن أن يساعد مُحرك تنفيذ الشفرة مثل OpenAI's Code Interpreter النموذج في إجراء الرياضيات وتشغيل الشفرة. إذا كان بإمكان إنجاز مهمة بشكل أكثر موثوقية أو كفاءة من خلال أداة بدلاً من نموذج لغوي، فعليك تحميلها للحصول على الأفضل من كلا العالمين.

تكتيكات:

  • استخدام البحث المعتمد على التضمين لتنفيذ الاسترجاع المعرفة بكفاءة
  • استخدام تنفيذ الشفرة لإجراء حسابات دقيقة أكثر أو استدعاء واجهات برمجة تطبيقات خارجية
  • منح النموذج وصولًا إلى وظائف محددة

اختبار التغييرات بشكل منهجي

يُسهل تحسين الأداء إذا كنت تستطيع قياسه. في بعض الحالات، قد يتحقق تحسين تعديل على محفز لعدد قليل من الأمثلة المعزولة ولكن يؤدي إلى أداء أسوأ عمومًا على مجموعة أكبر وأكثر تمثيلًا من الأمثلة. لذلك، لكي تكون متأكدًا من أن التغيير إيجابي بالنسبة إلى الأداء قد يكون من الضروري تحديد مجموعة اختبار شاملة (المعروفة أيضًا باسم "تقييم").

تكتيك:

  • تقييم مخرجات النموذج بالمقارنة مع إجابات معيارية ذهبية

تكتيكات

كل استراتيجية مدرجة أعلاه يمكن تجسيدها باستخدام تكتيكات محددة. هذه التكتيكات تهدف إلى توفير أفكار للأشياء التي يمكن تجربتها. فهي بأي حال من الأحوال ليست شاملة تمامًا، ويجب عليك أن تشعر بالحرية في تجربة أفكار إبداعية ليست ممثلة هنا.

وصف مثال كلمة الاستفارة

الجميع يعلم أن واجهة برمجة التطبيقات (API) لنموذج الدردشة التي تستدعي OpenAI لديها ثلاثة أنواع من الرسائل، SYSTEM وUSER وASSISTANT، ووظائف هذه الرسائل الثلاثة هي كما يلي:

نوع الرسالة (المتوافق مع معلمة الدور في واجهة البرمجة) الوصف
SYSTEM تساعد الرسالة النظامية في تعيين سلوك المساعد. على سبيل المثال، يمكنك تعديل شخصية المساعد أو تقديم تعليمات محددة حول كيف يجب أن يتصرف خلال المحادثة. ومع ذلك، لاحظ أن الرسالة النظامية اختيارية وسلوك النموذج بدون رسالة نظامية من المحتمل أن يكون مشابهًا لاستخدام رسالة عامة مثل "أنت مساعد مفيد".
USER رسالة المستخدم هي مسألة إدخال المستخدم.
ASSISTANT تمثل رسائل المساعد ما يعود به جي بي تي.

سيتم شرح أمثلة على كلمات الاستفزار في هذا البرنامج التعليمي بالشكل التالي:

// رسالة النظام
هذا يوضح كيفية تعيين كلمة استفارة رسالة النظام.

// رسالة المستخدم
هذا يوضح كيفية تعيين كلمة استفارة رسالة المستخدم.

// رسالة المساعد
هذا يوضح ما قد يعود به جي بي تي.

استراتيجية: كتابة تعليمات واضحة

تكتيك: تضمين تفاصيل في الاستفسار الخاص بك للحصول على إجابات أكثر صلة

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

أسوأ أفضل
كيف يمكنني إضافة الأرقام في Excel؟ كيف يمكنني جمع صف من المبالغ بالدولار في Excel؟ أريد القيام بذلك تلقائيًا لصفحة كاملة من الصفوف مع جميع الإجماليات التي تنتهي على اليمين في عمود يسمى "الإجمالي".
من هو الرئيس؟ من كان رئيس المكسيك في عام 2021، وكم مرة تُجرى الانتخابات بكثافة؟
اكتب كودًا لحساب سلسلة فيبوناتشي. اكتب وظيفة TypeScript لحساب سلسلة فيبوناتشي بكفاءة. قم بتعليق الكود بشكل كبير لشرح كل جزء ولماذا كُتب بهذه الطريقة.
تلخيص محاضر الاجتماع. قم بتلخيص محاضر الاجتماع في فقرة واحدة. ثم اكتب قائمة بتنسيق Markdown للمتحدثين ونقاطهم الرئيسية لكلًا منهم. وأخيرًا، قم بتسجيل الخطوات التالية أو العناصر المقترحة من قبل المتحدثين، إذا كانت موجودة.

تكتيك: طلب من النموذج اعتماد شخصية

يمكن استخدام رسالة النظام لتحديد الشخصية التي يستخدمها النموذج في ردوده.

// رسالة النظام
عندما أطلب المساعدة لكتابة شيء ما، ستقوم بالرد بوثيقة تحتوي على مزحة واحدة على الأقل أو تعليق مرح في كل فقرة.

// رسالة المستخدم
اكتب ملاحظة شكر إلى مورد البراغي الفولاذية الخاص بي للحصول على التسليم في الوقت المحدد وبإشعار قصير. هذا جعل من الممكن لنا تسليم طلب هام.

تكتيك: استخدام فواصل للدلالة بوضوح على أجزاء متميزة من الإدخال

الفواصل مثل علامات اقتباس مزدوجة أو ثلاثية، علامات XML، عناوين الأقسام، الخ. يمكن أن تساعد في تحديد أقسام مختلفة من النص ليتم معالجتها بشكل مختلف.

// رسالة المستخدم
قم بتلخيص النص المحدد بواسطة علامات الاقتباس الثلاثية بقصيدة هايكو.

"""أدخل النص هنا"""
// رسالة النظام
سيتم توفير زوج من المقالات (محددة بواسطة علامات XML) حول نفس الموضوع. قم أولاً بتلخيص حجج كل مقال. ثم حدد أي منهم يحتوي على حجة أفضل واشرح لماذا.

// رسالة المستخدم
<article>أدخل العنوان الأول هنا</article>
<article>أدخل العنوان الثاني هنا</article>
// رسالة النظام
سيتم توفير ملخص لفهرسة الرسائل وعنوان مقترح لها. يجب على العنوان أن يعطي للقارئ فكرة جيدة عن موضوع الرسالة ولكن يجب أن يكون ملفتًا أيضًا. إذا لم يفي العنوان بهذه المعايير، فقم بتقديم 5 بدائل.

// رسالة المستخدم
ملخص: أدخل الخلاصة هنا

العنوان: أدخل العنوان هنا

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

الإستراتيجية: قسم المهام المعقدة إلى مهام فرعية أكثر بساطة

التقسيم الصحيح للمهام المعقدة إلى خطوات أصغر يمكن أن يجعل من السهل على النموذج متابعتها وفهمها. يمكنك تقديم التعليمات بشكل مفصل لكل خطوة من الخطوات في المهمة.

الخطة: استخدام تصنيف النية لتحديد التعليمات الأكثر صلة لاستعلام المستخدم

في المهام التي يُطلب فيها العديد من مجموعات التعليمات المستقلة للتعامل مع حالات مختلفة، يمكن أن يكون من المفيد تصنيف نوع الاستعلام أولاً واستخدام هذا التصنيف لتحديد التعليمات المطلوبة. يمكن تحقيق ذلك من خلال تحديد فئات ثابتة وتضمين تعليمات تعامل مع المهام في فئة معينة. يمكن تطبيق هذه العملية أيضًا بشكل متكرر لتقسيم المهمة إلى تسلسل من المراحل. لهذا النهج ميزة كبيرة حيث يحتوي كل استعلام فقط على تلك التعليمات التي يتطلبها لأداء المرحلة التالية من المهمة مما يمكن أن يؤدي إلى معدلات أخطاء أقل بالمقارنة مع استخدام استعلام واحد لأداء المهمة بأكملها. كما يمكن أن يؤدي ذلك إلى تكاليف أقل نظرًا لأن التعليمات الأكبر حجما تتطلب تشغيلًا أعلى.

لنفترض على سبيل المثال أنه لتطبيق خدمة العملاء، يمكن تصنيف الاستعلامات كما يلي:

// رسالة النظام
سيتم تزويدك باستفسارات خدمة العملاء. صنف كل استعلام في فئة أساسية وفئة ثانوية. قدم الناتج الخاص بك في تنسيق json مع المفاتيح: الفئة الرئيسية والفئة الثانوية.

الفئات الأساسية: الفواتير، الدعم الفني، إدارة الحساب، أو الاستفسار العام.

فئات الفواتير الثانوية:
- إلغاء الاشتراك أو الترقية
- إضافة طريقة دفع
- شرح الرسوم
- الاحتجاج على رسوم

فئات الدعم الفني الثانوية:
- إصلاح الأعطال
- توافق الجهاز
- تحديثات البرنامج

فئات إدارة الحساب الثانوية:
- إعادة تعيين كلمة المرور
- تحديث المعلومات الشخصية
- إغلاق الحساب
- أمان الحساب

فئات الاستفسار العام الثانوية:
- معلومات المنتج
- التسعير
- ملاحظات
- التحدث إلى شخص حي.

// رسالة المستخدم
أحتاج إلى جعل الإنترنت يعمل مرة أخرى.

استنادًا إلى تصنيف استعلام العميل، يمكن توفير مجموعة من التعليمات الأكثر تحديدًا للنموذج للتعامل مع الخطوات التالية. على سبيل المثال، لنفترض أن العميل يحتاج إلى مساعدة في "إصلاح الأعطال".

// رسالة النظام
سيتم تزويدك باستفسارات خدمة العملاء التي تتطلب العمليات العلاجية في سياق الدعم الفني. ساعد المستخدم عن طريق:

- طلب منهم التحقق من توصيل جميع الكابلات إلى/من الموجه. لاحظ أنه من المشترك أن تنفصل الكابلات مع مرور الوقت.
- إذا كانت جميع الكابلات متصلة ولا يزال العطل مستمرًا، فاسألهم عن نموذج الموجه الذي يستخدمونه
- الآن ستنصحهم كيفية إعادة تشغيل جهازهم:
-- إذا كان رقم الطراز MTD-327J، فنصحهم بالضغط على الزر الأحمر والاحتفاظ به لمدة 5 ثوانٍ، ثم انتظار 5 دقائق قبل اختبار الاتصال.
-- إذا كان رقم الطراز MTD-327S، فنصحهم بنزع الطاقة ثم إعادة توصيلها، ثم انتظار 5 دقائق قبل اختبار الاتصال.
- إذا استمرت مشكلة العميل بعد إعادة تشغيل الجهاز والانتظار 5 دقائق، قم بربطهم بدعم تكنولوجيا المعلومات عن طريق إخراج {"تم طلب دعم تكنولوجيا المعلومات"}.
- إذا بدأ المستخدم بطرح أسئلة غير متعلقة بهذا الموضوع، فتأكد مما إذا كانوا يرغبون في إنهاء الدردشة الحالية حول إصلاح الأعطال وتصنيف طلبهم وفقًا للمخطط التصنيفي الرئيسي/الثانوي التالي:

<قم بإدراج المخطط التصنيفي الرئيسي/الثانوي أعلاه هنا>

// رسالة المستخدم
أحتاج إلى جعل الإنترنت يعمل مرة أخرى.

لاحظ أنه تم توجيه النموذج لإخراج سلاسل خاصة للإشارة إلى متى يتغير حالة المحادثة. وهذا يتيح لنا تحويل نظامنا إلى آلة حالة حيث تحدد الحالة التعليمات التي يتم حقنها. من خلال تتبع الحالة، ما هي التعليمات ذات الصلة في تلك الحالة، وأيضًا اختياريًا ما هي عمليات الانتقال بين الحالات المسموح بها من تلك الحالة، يمكننا وضع حواجز حول تجربة المستخدم التي يصعب تحقيقها باستخدام نهج أقل هيكلة.

الخطة: لتطبيقات الحوار التي تتطلب محادثات طويلة جدًا، قم بتلخيص أو تصفية المحادثة السابقة

نظرًا لأن لدى النماذج طول سياق ثابت، لا يمكن للحوار بين المستخدم والمساعد والذي يتضمن المحادثة بأكملها أن يستمر إلى مالا نهاية.

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

حلا آخر هو اختيار أجزاء سابقة من المحادثة التي تكون الأكثر صلة بالاستعلام الحالي. انظر إلى الخطة "استخدم البحث بناءً على التضمينات لتنفيذ استرجاع المعرفة بكفاءة".

تكتيك: تلخيص الوثائق الطويلة بشكل تدريجي وإنشاء ملخص كامل بشكل متكرر

بما أن لدى النماذج طول سياق ثابت، فإنها لا يمكن استخدامها لتلخيص نص أطول من طول السياق ناقصًا طول الملخص الذي تم إنشاؤه في استعلام واحد.

لتلخيص وثيقة طويلة جدًا مثل كتاب يمكننا استخدام سلسلة من الاستعلامات لتلخيص كل جزء من الوثيقة. يمكن دمج ملخصات الأقسام وتلخيصها لإنتاج ملخصات للملخصات. يمكن أن يستمر هذا العملية بشكل متكرر حتى يتم تلخيص الوثيقة بأكملها. إذا كان من الضروري استخدام معلومات حول الأقسام السابقة لكي نفهم الأقسام اللاحقة، فيمكن أن يكون الحيلة الإضافية المفيدة هي تضمين ملخص مستمر للنص الذي يسبق أي نقطة معينة في الكتاب أثناء تلخيص المحتوى في تلك النقطة. تمت دراسة فعالية هذا الإجراء لتلخيص الكتب في البحوث السابقة من OpenAI باستخدام متغيرات من GPT-3.

استراتيجية: إعطاء النماذج الوقت لـ " التفكير"

تكتيك: توجيه النموذج ليعمل على حله بنفسه قبل الوصول إلى استنتاج

أحيانًا نحصل على نتائج أفضل عندما نوجه النموذج صراحة للتفكير من الأسس قبل التوصل إلى استنتاج. لنفترض على سبيل المثال أننا نريد من النموذج تقييم حل طالب لمشكلة رياضية. أوضح الطريقة للتقرب من هذا هي ببساطة سؤال النموذج ما إذا كان حل الطالب صحيحاً أم لا.

// رسالة النظام
تحديد ما إذا كان حل الطالب صحيحًا أم لا.

// رسالة المستخدم
بيان المشكلة: أنا في صدد بناء محطة طاقة شمسية وأحتاج مساعدة في حسابات التكاليف.
- تكلفة الأرض 100 دولار للقدم المربع
- يمكنني شراء الألواح الشمسية بمبلغ 250 دولار للقدم المربع
- لقد تفاوضت على عقد للصيانة سيكلفني 100,000 دولار سنويًا، بالإضافة إلى 10 دولار للقدم المربع
ما هي التكلفة الإجمالية للسنة الأولى للعمليات كدالة لعدد قدم مربع.

حل الطالب: متغير x يمثل حجم التثبيت بالقدم المربع.
1. تكلفة الأرض: 100x
2. تكلفة الألواح الشمسية: 250x
3. تكلفة الصيانة: 100,000 + 100x
التكلفة الإجمالية: 100x + 250x + 100,000 + 100x = 450x + 100,000

// الرسالة المساعد
حل الطالب صحيح.

لكن حل الطالب في الواقع غير صحيح! يمكننا أن نجعل النموذج يلاحظ ذلك بنجاح عن طريق تحفيز النموذج لإنشاء حله الخاص أولاً.

// رسالة النظام
قم أولاً بحساب الحل الخاص بك للمشكلة. ثم قارن حلك بحل الطالب وقيم ما إذا كان حل الطالب صحيحًا أم لا. لا تقرر ما إذا كان حل الطالب صحيحًا حتى تقوم بحل المشكلة بنفسك.

// رسالة المستخدم
بيان المشكلة: أنا في صدد بناء محطة طاقة شمسية وأحتاج مساعدة في حسابات التكاليف.
- تكلفة الأرض 100 دولار للقدم المربع
- يمكنني شراء الألواح الشمسية بمبلغ 250 دولار للقدم المربع
- لقد تفاوضت على عقد للصيانة سيكلفني 100,000 دولار سنويًا، بالإضافة إلى 10 دولار للقدم المربع
ما هي التكلفة الإجمالية للسنة الأولى للعمليات كدالة لعدد قدم مربع.

حل الطالب: متغير x يمثل حجم التثبيت بالقدم المربع.
1. تكلفة الأرض: 100x
2. تكلفة الألواح الشمسية: 250x
3. تكلفة الصيانة: 100,000 + 100x
التكلفة الإجمالية: 100x + 250x + 100,000 + 100x = 450x + 100,000

// الرسالة المساعد
متغير x يمثل حجم التثبيت بالقدم المربع.
1. تكلفة الأرض: 100x
2. تكلفة الألواح الشمسية: 250x
3. تكلفة الصيانة: 100,000 + 10x
التكلفة الإجمالية: 100x + 250x + 100,000 + 10x = 360x + 100,000

حل الطالب غير صحيح. لقد أخطأ في حساب تكلفة الصيانة، إذ استخدم 100x بدلاً من 10x. التكلفة الإجمالية الصحيحة للسنة الأولى للعمليات هي 360x + 100,000.

الخطة: استخدام الحوار الداخلي أو سلسلة من الاستفسارات لإخفاء عملية استنتاج الموديل

التكتيك السابق يوضح أنه في بعض الأحيان من المهم بالنسبة للموديل أن يستنتج بتفصيل حول مشكلة ما قبل الإجابة على سؤال محدد. بالنسبة لبعض التطبيقات، العملية الاستدلالية التي يستخدمها الموديل للوصول إلى إجابة نهائية قد لا تكون مناسبة لمشاركتها مع المستخدم. على سبيل المثال، في تطبيقات التعليم يمكن أن نرغب في تشجيع الطلاب على إيجاد إجاباتهم الخاصة، لكن عملية استنتاج الموديل حول حل الطالب يمكن أن تكشف الإجابة للطالب.

الحوار الداخلي هو تكتيك يمكن استخدامه للتخفيف من هذا. فكرة الحوار الداخلي هي تعليم الموديل لوضع أجزاء من الناتج التي يجب إخفاءها عن المستخدم في شكل منظم يجعل تحليلها سهلاً. ثم قبل عرض الناتج للمستخدم، يتم تحليل الناتج وجعل جزء فقط من الناتج مرئيًا.

// SYSTEM Message
اتبع هذه الخطوات للرد على استفسارات المستخدم.

الخطوة 1 - قم بحل المشكلة بنفسك أولاً. لا تعتمد على حل الطالب لأنه قد يكون غير صحيح. قم بتضمين كل عملك لهذه الخطوة داخل علامات الاقتباس الثلاث (" "" ").

الخطوة 2 - قارن حلك بحل الطالب وقيم ما إذا كان حل الطالب صحيحًا أم لا. قم بتضمين كل عملك لهذه الخطوة داخل علامات الاقتباس الثلاث (" "" ").

الخطوة 3 - إذا ارتكب الطالب خطأً، فحدد أي تلميح يمكنك أن تقدمه للطالب دون الكشف عن الإجابة. قم بتضمين كل عملك لهذه الخطوة داخل علامات الاقتباس الثلاث (" "" ").

الخطوة 4 - إذا ارتكب الطالب خطأً، قدم التلميح من الخطوة السابقة للطالب (خارج الاقتباسات الثلاث). بدلاً من كتابة "الخطوة 4 - ..."، اكتب "تلميح:".


// USER Message
بيان المشكلة: <أدخل بيان المشكلة>

حل الطالب: <أدخل حل الطالب>

بالإضافة إلى ذلك، يمكن تحقيق هذا باستخدام سلسلة من الاستفسارات حيث يتم إخفاء الناتج عن كل منها ما عدا الأخير عن المستخدم.

أولاً، يمكننا طلب من الموديل حل المشكلة بمفرده. نظرًا لأن الاستعلام الأول هذا لا يتطلب حل الطالب، يمكن تجاهله. ويوفر ذلك الفائدة الإضافية بأنه لا يوجد فرصة لتحيز حل الموديل بسبب حل الطالب.

// USER Message
<أدخل بيان المشكلة>

بعد ذلك، يمكننا طلب من الموديل استخدام كل المعلومات المتاحة لتقييم صحة حل الطالب.

// SYSTEM Message
قارن حلك بحل الطالب وقيم ما إذا كان حل الطالب صحيحًا أم لا.

// USER Message
بيان المشكلة: """<أدخل بيان المشكلة>"""

حلك: """<أدخل الحل الذي أنشأه الموديل>"""

حل الطالب: """<أدخل حل الطالب>"""

وأخيرًا، يمكننا السماح للموديل باستخدام تحليله الخاص لبناء رد في شخصية معلم متعاون.

// SYSTEM Message

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

// USER Message

بيان المشكلة: """<أدخل بيان المشكلة>"""

حلك: """<أدخل الحل الذي أنشأه الموديل>"""

حل الطالب: """<أدخل حل الطالب>"""

التحليل: """<أدخل تحليل الموديل المنشأ من الخطوة السابقة>"""

الخطة: سأل الموديل إذا فاته أي شيء في المرورات السابقة

لنفترض أننا نستخدم موديل لتقديم مقتطفات من مصدر تكون ذات صلة بسؤال معين. بعد عرض كل مقتطف، يحتاج الموديل إلى تحديد ما إذا كان يجب أن يبدأ في كتابة مقتطف آخر أم لا. إذا كان المستند مصدرًا كبيرًا، فمن الشائع أن يتوقف الموديل مبكرًا جدًا ويفشل في سرد جميع المقتطفات ذات الصلة. في هذه الحالة، يمكن أن يتم الحصول على أداء أفضل غالبًا من خلال توجيه الموديل بطلبات متابعة للعثور على أي مقتطفات لم يلاحظها في المرورات السابقة.

// SYSTEM Message
سيتم توفير مستند يتم تقسيمه بواسطة علامات الاقتباس الثلاث. مهمتك هي اختيار المقتطفات التي تتعلق بالسؤال التالي: "ما هي التحولات البارزة التي حدثت في تاريخ الذكاء الاصطناعي."

تأكد من أن المقتطفات تحتوي على جميع السياقات اللازمة لتفسيرها - بمعنى آخر، لا تستخرج مقتطفات صغيرة تفتقر إلى سياق مهم. قدم الناتج بتنسيق JSON على النحو التالي:

[{"مقتطف": "..."},
...
{"مقتطف": "..."}]

// USER Message
"""<أدخل المستند هنا>"""

// ASSISTANT Message
[{"مقتطف": "يقوم الموديل بكتابة مقتطف هنا"},
...
{"مقتطف": "يقوم الموديل بكتابة مقتطف آخر هنا"}]

// USER Message
هل هناك مقتطفات أخرى ذات صلة؟ تأكد من عدم تكرار المقتطفات. كما تأكد من أن المقتطفات تحتوي على جميع السياقات اللازمة لتفسيرها - بمعنى آخر، لا تستخرج مقتطفات صغيرة تفتقر إلى سياق مهم.

استراتيجية: استخدام أدوات خارجية

تكتيك: استخدام البحث بناءً على التضمين لتنفيذ استرجاع المعرفة الفعال

يمكن للنموذج الاستفادة من مصادر المعلومات الخارجية إذا تم توفيرها كجزء من مدخلاته. يمكن أن يساعد ذلك النموذج في توليد ردود أكثر إيضاحًا وتحديثًا. على سبيل المثال، إذا طلب المستخدم سؤالًا حول فيلم معين، يمكن أن يكون من المفيد إضافة معلومات عالية الجودة حول الفيلم (مثل الممثلين، المخرج، إلخ...) إلى مدخلات النموذج. يمكن استخدام التضمينات لتنفيذ استرجاع المعرفة بشكل فعال، حتى يمكن إضافة المعلومات ذات الصلة إلى مدخل النموذج ديناميكيًا أثناء التشغيل.

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

تكتيك: استخدام تنفيذ الكود لإجراء حسابات دقيقة أكثر أو استدعاء واجهات برمجة تطبيقات خارجية

لا يمكن الاعتماد على نماذج اللغة لإجراء عمليات حسابية أو حسابات طويلة بدقة بمفردها. في الحالات التي يكون فيها ذلك مطلوبًا، يمكن تعليم النموذج لكتابة وتشغيل الكود بدلاً من إجراء حساباتها الخاصة. وبشكل خاص، يمكن تعليم النموذج لوضع الكود الذي من المفترض تشغيله في تنسيق محدد مثل triple backtick. بعد الحصول على الإخراج، يمكن استخراج الكود وتشغيله. وأخيرًا، إذا لزم الأمر، يمكن توفير الإخراج من محرك تشغيل الكود (مثل مفسر Python) كمدخل للنموذج للاستعلام التالي.

// MESSAGE SYSTEM

يمكنك كتابة وتشغيل الكود برمجة باستخدام Python عن طريق تضمينه بين علامات التنصيص الثلاثية، مثل: ```الكود هنا```. استخدم ذلك لإجراء الحسابات.

// MESSAGE USER

العثور على جذور قيم حقيقية للمعادلة التالية: 3*x**5 - 5*x**4 - 3*x**3 - 7*x - 10.

استخدام آخر ممتاز لتنفيذ الكود هو استدعاء واجهات برمجة تطبيقات خارجية. إذا تم تعليم النموذج بالاستخدام السليم لواجهة برمجة تطبيقات (API)، يمكنه كتابة الكود الذي يستخدمها. يمكن تعليم النموذج كيفية استخدام واجهة برمجة تطبيقات عن طريق توفير وثائق و/أو عينات الكود التي توضح كيفية استخدام واجهة برمجة تطبيقات.

// MESSAGE SYSTEM

يمكنك كتابة وتنفيذ الكود باستخدام Python عن طريق تضمينه بين علامات التنصيص الثلاثية. كما لاحظ أن لديك وصولًا إلى الوحدة التالية لمساعدة المستخدمين في إرسال رسائل إلى أصدقائهم:

\`\`\`python
import message
message.write(to="John", message="مرحبًا، هل ترغب في الالتقاء بعد العمل؟")\`\`\`

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

تكتيك: إعطاء النموذج وصولًا إلى وظائف محددة

يسمح واجهة استكمال الدردشة بتمرير قائمة وصفوص وظائف في الطلبات. يقوم ذلك بتمكين النماذج من توليد الوسائط وفقًا للمخططات المقدمة. تُرجع الوسائط التي تم توليدها بواسطة الوظائف بتنسيق JSON ويمكن استخدامها لتنفيذ استدعاءات الدوال. يمكن ثم تغذية الإخراجات المقدمة من استدعاءات الدوال إلى النموذج في الطلب التالي لإغلاق الدورة. هذه هي الطريقة الموصى بها لاستخدام نماذج OpenAI لاستدعاء وظائف خارجية.

الاستراتيجية: اختبار التغييرات بشكل منهجي

في بعض الأحيان يكون من الصعب معرفة ما إذا كان التغيير - على سبيل المثال، تعليمات جديدة أو تصميم جديد - يجعل النظام أفضل أو أسوأ. النظر إلى بثينات قد تلمح إلى أيهما أفضل، ولكن مع عينات صغيرة قد يكون من الصعب التمييز بين تحسن حقيقي والحظ العشوائي. ربما يساعد التغيير في الأداء على بعض الإدخالات، لكنه يؤثر سلبًا على الأداء في حالات أخرى.

إجراءات التقييم (أو "التقييمات") مفيدة لتحسين تصميمات النظام. التقييمات الجيدة هي:

  • ممثلة للاستخدام الفعلي (أو على الأقل متنوعة)
  • تحتوي على العديد من حالات الاختبار لزيادة القوة الإحصائية (انظر الجدول أدناه للإرشادات)
  • سهلة لتلقيمة أو تكرارها
الفارق المطلوب اكتشافه عدد العينات المطلوبة للثقة بنسبة 95%
30% ~10
10% ~100
3% ~1,000
1% ~10,000

يمكن إجراء تقييمات الإخراج بواسطة الحواسيب أو البشر أو مزيج من الاثنين. يمكن للحواسيب أتمتة التقييمات بمعايير موضوعية (على سبيل المثال، أسئلة ذات إجابة صحيحة واحدة) فضلاً عن بعض المعايير الغامضة أو الاستبانية، حيث يتم تقييم إخراج النموذج بواسطة استفسارات نموذج أخر. OpenAI Evals هو إطار برمجي مفتوح المصدر يوفر أدوات لإنشاء تقييمات متوقعة.

يمكن أن تكون التقييمات القائمة على النموذج مفيدة عندما يوجد مجموعة من المخرجات المحتملة التي ستعتبر عالية الجودة بشكل متساوٍ (على سبيل المثال، للأسئلة تتطلب إجابات طويلة). الحد الفاصل بين ما يمكن تقييمه بشكل واقعي باستخدام تقييم قائم على النموذج وما يتطلب تقييمًا بشريًا غامض ويتحول باستمرار مع تحسن قدرات النماذج. نحن نشجع على التجربة لمعرفة مدى نجاح التقييمات القائمة على النموذج في حالتك.

الخطة: تقييم نتائج النموذج مقارنة بالإجابات المعايير

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

على سبيل المثال، باستخدام الرسالة النظامية التالية:

// رسالة النظام
سيتم توفير نص محدد بعلامات تعريف ثلاثية تفترض أنه الإجابة على سؤال. قم بالتحقق مما إذا كانت الأشياء التالية مدرجة مباشرة في الإجابة:

- كان نيل أرمسترونج أول شخص يمشي على سطح القمر.
- تاريخ مشي نيل أرمسترونج على القمر كان في 21 يوليو 1969.

لكل من هذه النقاط، قم بإجراء الخطوات التالية:

1 - أعد صياغة النقطة.
2 - قدم استشهادًا من الإجابة يكون أقرب إلى هذه النقطة.
3 - انظر إذا كان شخص ما يقرأ الاستشهاد ولا يعرف الموضوع يمكن أن يستنتج النقطة مباشرة. قم بشرح سبب قبولها أو رفضها قبل أن تتخذ قرارك.
4 - اكتب "نعم" إذا كانت الإجابة على السؤال 3 بنعم، وإلا اكتب "لا".

أخيرًا، قدم عدد الإجابات "نعم". قدم هذا العدد على هيئة {"count": <أدخل العدد هنا>}.

إليك مثال للإدخال حيث يتم تحقق كلتا النقطتين:

// رسالة النظام
<أدخل رسالة النظام أعلاه>

// رسالة المستخدم
"""نيل أرمسترونج مشهور بأنه أول شخص يخطو قدمه على سطح القمر. وقد وقع هذا الحدث التاريخي في 21 يوليو 1969 خلال مهمة أبولو11."""

إليك مثال للإدخال حيث لا تُستوفى إحدى النقطتين:

// رسالة النظام

<أدخل رسالة النظام أعلاه>

// رسالة المستخدم

"""نيل أرمسترونج حقق التاريخ عندما خطو عن الوحدة القمرية، ليصبح أول شخص يمشي على سطح القمر."""

// رسالة النظام
<أدخل رسالة النظام أعلاه>

// رسالة المستخدم

السؤال: """ما هو الحدث الذي اشتهر به نيل أرمسترونغ وفي أي تاريخ وقع؟ افترض وقت عالمي متوسط (UTC)."""

الإجابة المقدمة: """في تمام الساعة 02:56 بتوقيت UTC في 21 يوليو 1969، أصبح نيل أرمسترونغ أول إنسان يخطو قدمه على سطح القمر، مما يشكل إنجازًا ضخمًا في تاريخ البشرية."""

الإجابة الخبير: """نيل أرمسترونغ اشتهر بأنه أول شخص يمشي على سطح القمر. وقع هذا الحدث التاريخي في 21 يوليو 1969."""