الوحدة 10 — مكتبة تعليمات قابلة لإعادة الاستخدام
انتهت الوحدة السابقة إلى تعليمة مقيسة على جملة اختبار. الآن لدينا أصل يجب حمايته وتوثيقه ومشاركته. تُقدّم هذه الوحدة الممارسات التي تُحوِّل التعليمة الجيّدة من قطعة نصّ في ملف عشوائي إلى مكوّن مؤسّسي قابل للاعتماد.
القالب والمتغيّرات: أوّل خطوة نحو المكتبة
التعليمة في شيفرة الفيل الأحمر مكتوبة كسلسلة نصّيّة داخل ملف Python. هذا يخلط بين ثلاثة أشياء: بنية التعليمة، والمحتوى القابل للتغيير، ومنطق الاستدعاء. الحلّ هو الفصل عبر قالب:
# templates/extraction_email.txt
أنت مساعد استخراج بيانات لخدمة عملاء {entreprise}.
تُعيد JSON بالحقول: sujet, produit, urgence, action.
sujet ∈ {sujets_valides}
urgence ∈ {niveaux_urgence}
قواعد اللغة:
- أعِد الجواب بالعربية الفصحى الحديثة.
- الحقول الغائبة كـ null، لا كسلاسل فارغة.
{% for exemple in exemples %}
المُدخَل: «{{ exemple.entree }}»
المُخرَج: {{ exemple.sortie | tojson }}
{% endfor %}
نُحمِّل القالب في الشيفرة عبر مكتبة مثل jinja2:
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader("templates"))
template = env.get_template("extraction_email.txt")
systeme = template.render(
entreprise="أثاث الشرق",
sujets_valides="{retard, defaut, facture, autre}",
niveaux_urgence="{faible, moyenne, haute}",
exemples=EXEMPLES_STANDARD,
)
الفصل يُتيح تحديث القالب دون لمس الشيفرة، ويُتيح إعادة استعمال نفس القالب لعدّة عملاء بتغيير المتغيّرات، ويُظهر بنية التعليمة بوضوح لمن يقرؤها.
نظام النُسَخ: كلّ تعديل يُوثَّق
التعليمة كود. الكود يعيش في git. القاعدة قصيرة وحاسمة: تعليماتك في مستودع مصادر، لا في ملفّات متناثرة.
كلّ تعليمة تحمل رقم نسخة صريح:
templates/
extraction_email/
v1.txt # الأولى، بلا أمثلة
v2.txt # + few-shot
v3.txt # + قواعد اللغة
v4.txt # + مقاومة الحقن
current -> v4.txt
الاختيار بين النُسَخ يمرّ عبر متغيّر بيئة أو ملفّ إعداد:
NOM_PROMPT = os.environ.get("PROMPT_EXTRACTION_VERSION", "v4")
template = env.get_template(f"extraction_email/{NOM_PROMPT}.txt")
الفائدة الحاسمة: يمكن تشغيل نسختين في الإنتاج (A/B test) على شرائح من المستخدمين، ومقارنة نتائجهما الحقيقيّة. الوحدة 9 أعطتنا التقييم قبل النشر؛ نظام النُسَخ يُعطينا التقييم في الإنتاج.
توثيق سياق الاستعمال: README لكلّ تعليمة
تعليمة بلا وثيقة تشرحها ستُساء استخدامها بعد أسبوعين. اجعل كلّ تعليمة تصحبها بطاقة قصيرة تجيب على الأسئلة:
# templates/extraction_email/README.md
## الهدف
استخراج الحقول المنظَّمة من رسالة شكوى عميل باللغة العربية.
## المُدخَل المتوقَّع
نصّ رسالة بريد إلكتروني، بين 20 و2000 حرف، فصحى أو دارجة.
## المُخرَج
JSON مطابق للمُخطَّط `ExtractionEmail` في `models/extraction.py`.
## غير مناسبة لـ
- رسائل بلغة غير العربية (استخدم templates/extraction_email_en/).
- محادثات متعدّدة الأدوار (استخدم templates/extraction_conversation/).
- استخراج معلومات دفع أو بطاقات ائتمان (سبب أمني).
## المقاييس على `jeu_test_v3.jsonl`
- sujet: 96%
- urgence: 89%
- produit: 87%
- action (حكم LLM): 91%
## آخر تحديث: 2026-09-05 بواسطة a.hassan.
هذه البطاقة أنقذت مئات ساعات فرق تصل جديدة أو تُعيد تقييم استخدام قائم. بطاقة غائبة تعني تعليمة يتيمة، ستُنسخ ثم تُنسى ثم تُعاد كتابتها بعد سنة.