انتقل إلى المحتوى الرئيسي

الوحدة 3 — بدون أمثلة، بمثال واحد، بعدّة أمثلة

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

ثلاث أوضاع لا أكثر

يُميّز أدب هندسة التعليمات ثلاث أوضاع، وهي في الحقيقة نقاط على متّصل واحد.

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

one-shot يُضيف مثالًا واحدًا: مُدخَلًا افتراضيًّا مع المُخرَج المتوقّع له. هذا الوضع يُغني عن كثير من الشرح النصّي؛ فمثال جيّد يقول ما لا تقوله عشر جمل. يستحقّ الاعتماد حين يكون الشكل غير معتاد، أو حين تكون القيود دقيقة يصعب وصفها بكلمات.

few-shot يُقدّم عدّة أمثلة، عادةً بين ثلاثة وثمانية. الفائدة قصوى حين تحوي المهمّة حالات متنوّعة: مُدخَل صريح ومُدخَل مبهم، ومُدخَل بحقل ناقص ومُدخَل بحقل شاذّ. الأمثلة تُبيِّن للنموذج كيف يتصرّف في كلّ حالة، فيتعلّم النمط لا القاعدة.

اختيار الأمثلة: التنوّع لا التقارب

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

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

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

تحيّز التقرّب: لماذا الترتيب يهمّ

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

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

الفيل الأحمر: نسخة few-shot

نُغني تعليمة النظام السابقة بأربعة أمثلة تُغطّي التنوّع: رسميّة مكتملة، وعامّية بحقل ناقص، وقصيرة استعجالية، وطويلة بحقل شاذّ.

from openai import OpenAI

client = OpenAI()

SYSTEME = """أنت مساعد استخراج بيانات لخدمة عملاء تجارة إلكترونية.
تُعيد JSON فقط بالحقول: sujet, produit, urgence, action.
Sujet ∈ {retard, defaut, facture, autre}. Urgence ∈ {faible, moyenne, haute}.
إن لم يكن الحقل مذكورًا صراحة، اكتب null.

أمثلة:

المُدخَل: «طلبت جهاز ترموستات ذكي منذ 15 يومًا ولم يصل. أحتاجه قبل الجمعة.»
المُخرَج: {"sujet":"retard","produit":"ترموستات ذكي","urgence":"haute","action":"تسريع التسليم قبل الجمعة"}

المُدخَل: «الفاتورة الأخيرة تحوي مبلغين متكرّرَين. الرجاء التحقّق.»
المُخرَج: {"sujet":"facture","produit":null,"urgence":"moyenne","action":"مراجعة الفاتورة وتصحيحها"}

المُدخَل: «الجهاز يعمل جيّدًا لكنّ الدليل غير مترجَم إلى الفرنسية.»
المُخرَج: {"sujet":"autre","produit":null,"urgence":"faible","action":"توفير دليل مترجَم"}

المُدخَل: «مصباح المطبخ الذكي ينطفئ عشوائيًا بعد ساعتين. أرغب في استبداله.»
المُخرَج: {"sujet":"defaut","produit":"مصباح المطبخ الذكي","urgence":"moyenne","action":"استبدال الجهاز"}
"""

def extraire(email: str) -> str:
r = client.chat.completions.create(
model="gpt-4o-mini",
temperature=0,
messages=[
{"role": "system", "content": SYSTEME},
{"role": "user", "content": email},
],
)
return r.choices[0].message.content

هذه الأربعة أمثلة تُغطّي المواضيع الأربعة، ومستويات الاستعجال الثلاثة، وحالة الحقل الغائب مرّتين. تصنيفنا يقفز من نحو 82% إلى نحو 96% صحّة على جملة اختبار من خمسين رسالة، بلا أيّ تعديل آخر.

الكلفة بالجَتونات: ما يجب موازنته

كلّ مثال يُضاف إلى تعليمة النظام يُدفَع في كلّ نداء. مثال من مئة جَتون × مليون طلب في الشهر = مئة مليون جَتون إضافي في الفاتورة، شهريًّا. القرار إذن ليس «هل تُحسِّن الأمثلة الجودة؟» بل «هل تستحقّ نقاط الجودة الإضافية هذا الطول؟».

قواعد عملية: ابدأ بـ zero-shot، وقِس. أضِف مثالًا واحدًا، وقِس مرّة أخرى. إن كان المكسب واضحًا، أضِف الثاني والثالث. توقّف حين يستوي المنحنى، أو حين تصير الكلفة غير مبرَّرة. الأمثلة الرابع والخامس غالبًا ما تُضيف قليلًا؛ والسادس والسابع نادرًا ما يُضيفان شيئًا مقيسًا.

طريقة أذكى للحدّ من الكلفة: استخدام التخزين المؤقّت للتعليمة (prompt caching) الذي يُقدّمه معظم المزوّدين. إذا بقيت تعليمة النظام ثابتة بين النداءات، فلا تُحاسَب على جَتوناتها كاملةً في كلّ مرّة، بل بجزء يسير جدًّا. هذا يجعل few-shot طويلًا نسبيًا مقبولًا اقتصاديًّا، بشرط ألّا نُدرج بيانات متغيّرة في تعليمة النظام.

متى نتخلّى عن الأمثلة داخل التعليمة

في مهامّ تحوي عشرات الحالات المختلفة، تصير الأمثلة داخل التعليمة قصيرةً على المهمّة وطويلةً على الكلفة. الحلّ آنذاك هو التوليد المعزَّز بالاسترجاع (retrieval-augmented generation)، حيث نُخزّن مكتبة أمثلة، ونستدعي أقربها إلى المُدخَل الحالي عبر بحث دلالي، ونحقنها في التعليمة. هذا موضوع دورة مستقلّة (دورة 18)، لكن يجب معرفة أنّه البديل الطبيعي حين يصير few-shot الثابت غير كافٍ.

اختبر ترتيب أمثلتك

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

لا تخلط الأمثلة بالبيانات

عند تحرير التعليمة يومًا بعد يوم، الإغراء قائم بأن يصير مثال «ناجح» جزءًا من أمثلة التعليمة. هذا يُلوِّث تقييمك: صرت تختبر النموذج على بيانات رآها. جدير باحترام الحدود بين الأمثلة التي تُدرِّس والبيانات التي تُقيِّم منذ البداية.

في الخلاصة

  • zero-shot للمهامّ المألوفة، one-shot لتثبيت شكل غير قياسي، few-shot لتغطية حالات متنوّعة.
  • اختَر أمثلة متباينة تُغطّي الحالات الحدّية، لا أمثلة متشابهة تُوهم بالجودة.
  • تحيّز التقرّب يجعل الترتيب يهمّ؛ رتِّب عشوائيًا ووازِن الأصناف.
  • الأمثلة تُدفَع بالجَتونات في كلّ نداء؛ قِس المكسب واستفِد من prompt caching.

الوحدة التالية: سلسلة التفكير وتفكيك الخطوات، أي كيف نُعلِّم النموذج «يُفكِّر» صراحةً حين ينفع ذلك.