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

الوحدة 5 — ملفّات Modelfile والنماذج المشتقّة

بعد أن ضبطنا معلمات الجلسة في الوحدة 3، نتساءل: كيف نُثبّت هذه الإعدادات كي لا يعيد كلّ زميل ضبطها؟ الجواب Modelfile: صيغة نصّيّة بسيطة، مستوحاة من Dockerfile، تصنع نموذجًا مشتقًّا من نموذج أساس مع رسالة نظام ومعلمات وقالب تعليمة ثابتة.

بنية Modelfile

ملفّ نصّيّ عاديّ باسم Modelfile (أو أيّ اسم آخر يُمرَّر إلى الأمر):

FROM qwen2.5:7b-instruct-q4_K_M

SYSTEM """
أنت المساعد الرسميّ لمكتب المحاماة "الأمانة".
تجيب بالعربيّة الفصحى بأسلوب رسميّ ومهنيّ.
ترفض دائمًا إفشاء معلومات موكّلين، وتُذكّر بسرّيّة المهنة.
حين تشكّ في مسألة قانونيّة، تُشير إلى وجوب التحقّق من محامٍ لا التوكّل على جوابك.
"""

PARAMETER temperature 0.2
PARAMETER num_ctx 8192
PARAMETER num_predict 512
PARAMETER stop "### النهاية"

هذا يعرّف نموذجًا جديدًا يعتمد qwen2.5:7b-instruct كأساس، مع سلوك افتراضيّ يخصّ المكتب. البناء:

ollama create amana-assistant -f Modelfile

الاستعمال بعدها كأيّ نموذج آخر:

ollama run amana-assistant

أو من Python:

ollama.chat(model="amana-assistant", messages=[{"role":"user","content":"..."}])

التعليمات المفتاحيّة

FROM

النموذج الأساس. يمكن أن يكون:

  • نموذج من المكتبة (FROM llama3.1:8b-instruct-q4_K_M).
  • نموذج مبنيّ محلّيًّا (FROM amana-assistant) للاشتقاق فوق اشتقاق.
  • ملفّ GGUF على القرص (FROM ./modele-affine.gguf) لاستيراد نموذج مُصقَل.

SYSTEM

الرسالة النظاميّة الافتراضيّة. تُدمَج قبل كلّ محادثة إلّا إذا تجاوزها المستخدم صراحة برسالة system في نداء /api/chat. مفيدة لتثبيت النغمة، والصلاحيّات، والرفض.

PARAMETER

يضبط قيمة معلمة توليد افتراضيّة: temperature، top_p، top_k، num_ctx، num_predict، repeat_penalty، stop. يمكن كتابة stop عدّة مرّات لعدّة سلاسل توقّف.

TEMPLATE

قالب صياغة الرسائل قبل تسليمها للنموذج. لكلّ عائلة نماذج قالب متوقَّع (Llama-3، Qwen، Mistral…). عادةً لا تُلمس، لأنّ النموذج الأساس يحمل قالبه الصحيح.

MESSAGE

أزواج محادثة مسبقة (فيو-شوت). مفيدة لتعليم النموذج نمطًا محدّدًا:

MESSAGE user "لخّص: عقد إيجار تجاريّ بين ..."
MESSAGE assistant "الأطراف: ... | المدّة: ... | المقابل: ..."

ADAPTER

يضيف مُهيّئ LoRA (من الدورة 19) فوق نموذج أساس. يتيح استعمال تدريب دقيق دون الحاجة إلى دمج الأوزان كاملة.

استيراد GGUF مُصقَل من الدورة 19

بعد صقل نموذج LoRA على مذكّرات المكتب في الدورة 19، حصلنا على ملفّ avocat-fr-ar.gguf. لدمجه في Ollama:

FROM ./avocat-fr-ar.gguf

SYSTEM """
أنت مساعد يجيب بالعربيّة والفرنسيّة على أسئلة قانون الإيجار التجاريّ.
"""

PARAMETER temperature 0.1
ollama create avocat-loyer -f Modelfile.avocat

الملفّ يُنسَخ داخل مسار OLLAMA_MODELS، ويُصبح النموذج متاحًا لكلّ عمليّات Ollama. قاعدة: احتفظ بـ.gguf الأصليّ خارج مجلّد Ollama أيضًا، فالحذف بـollama rm يزيل النسخة الداخليّة.

المشاركة داخل الفريق

Ollama يدعم دفع نماذج إلى مسجّل، خاصّ أو عامّ (ollama.com):

ollama cp amana-assistant username/amana-assistant:1.0
ollama push username/amana-assistant:1.0

الأعضاء يجلبون النموذج بالأمر:

ollama pull username/amana-assistant:1.0

للمكاتب التي لا تريد نشرًا عامًّا، يُقام مسجّل داخليّ عبر مخزن S3 متوافق مع Ollama Registry API. في الحالة الأبسط، مشاركة Modelfile عبر Git يكفي، ويعيد كلّ جهاز بناء النموذج محلّيًّا. الأخفّ في المساحة، والأسهل في المراجعة.

الوسم كإدارة إصدارات

عند البناء، أضف وسم إصدار:

ollama create amana-assistant:2026-09-06 -f Modelfile

فيبقى الإصدار السابق قائمًا للمقارنة والعودة. لا شيء أسوأ من «حدَّثنا Modelfile واختفى السلوك السابق». الوسم بتاريخ أو بعلامة معنويّة (amana-assistant:strict) هو أرخص إدارة نُسخ ممكنة.

الفخّ: تعارض الرسالة النظاميّة

حين ينادي التطبيق /api/chat مع رسالة system من عنده، فهذه تحلّ محلّ SYSTEM الافتراضيّة في Modelfile. لتوسيع الافتراضيّة بدل استبدالها، يجب في التطبيق نفسه قراءة الرسالة الأصليّة (ollama show --system amana-assistant) وضمّها. من دون ذلك، تنشأ فجوة صامتة بين ما يقوله المكتب رسميًّا وما يقوله المساعد لأنّ التطبيق نسي إعادة إعلانها.

الخيط الأحمر

للمكتب، خمسة نماذج مشتقّة تكفي:

النموذجالأساسالوظيفة
amana-classifierqwen2.5:7bتصنيف بريد وارد بأربع فئات، temperature 0
amana-resume-contratqwen2.5:7bتلخيص عقد قانونيّ، num_ctx 16 K، نغمة رسميّة
amana-redactionqwen2.5:7bصياغة ردود ومسوّدات، temperature 0.5
amana-embeddingsnomic-embed-textتضمينات فرنسيّة/عربيّة، غير قابلة للتغيير
avocat-loyerملفّ GGUF مُصقَل من الدورة 19إجابة على قانون الإيجار خاصّة

كلّ زميل يشتغل بالنماذج المسمّاة بلا معرفة تفاصيل المعلمات. هذا هو دور Modelfile: تحويل معرفة التجربة إلى واجهة استعمال واضحة.

Git للـ Modelfile

احفظ ملفّات Modelfile في مستودع Git للمكتب. مراجعة الأقران على الرسالة النظاميّة أهمّ من مراجعتها على شيفرة عاديّة، لأنّها تحدّد سلوك النموذج أمام الموكّلين.

الخلاصة

  • FROM يختار الأساس (مكتبة أو GGUF محلّيّ)، وSYSTEM يثبّت النغمة والقواعد، وPARAMETER يحفظ معلمات جلسة كاملة.
  • ADAPTER يدمج مُهيّئ LoRA من الدورة 19، فيصير النموذج المُصقَل جزءًا من واجهة Ollama.
  • الوسم بتاريخ أو حالة (amana-assistant:2026-09-06) هو أرخص إدارة نُسخ، ويسمح بالعودة الفوريّة.
  • الرسالة النظاميّة في التطبيق تحلّ محلّ Modelfile ما لم يُدمجا صراحة؛ الغفلة عن هذا تسبّب انحرافًا صامتًا في السلوك.