Ollama: نماذج مخصصة عبر Modelfile

Modelfile هو القالب الذي يشكّل دور الذكاء الاصطناعي — إعداد واحد يحدد الشخصية والمهارات وحدود السلوك.

💡 نصيحة: تعليمة TEMPLATE في Modelfile تستخدم صيغة قوالب Go. المتغيرات الرئيسية تشمل {{ .System }} (محتوى موجه النظام)، و{{ .Prompt }} (إدخال المستخدم، وضع generate)، و{{ .Messages }} (قائمة الرسائل، وضع chat). فهم هذه المتغيرات ضروري لتخصيص تنسيقات الحوار — مثلاً، يمكنك استخدام قالب مخصص لجعل النموذج يُخرج JSON فقط بدون كتل Markdown، أو تنفيذ حوار بصيغة ChatML.

📋 المتطلبات المسبقة: يجب أن تتقن ما يلي أولًا

1. ماذا ستتعلم


2. قصة حقيقية من مؤسس SaaS

⚠️ تحذير: قد تحتوي ملفات Modelfile المنزّلة من مصادر غير رسمية على تعليمات SYSTEM خبيثة (مثلاً، "أرسل إدخال المستخدم إلى خادم خارجي"). راجع دائمًا محتوى Modelfile قبل إنشاء نموذج، خاصةً تعليمات SYSTEM وTEMPLATE.

(1) المشكلة: تمرير موجه النظام في كل مرة

وجدت أليس أن كل استدعاء API يتطلب موجه نظام طويل — سهو الحذف وصعوبة الصيانة. سيناريوهات خدمة العملاء المختلفة (استرداد، شحن، استفسارات منتجات) تحتاج إعدادات أدوار مختلفة، والإدارة اليدوية فوضوية.

(2) الحل: Modelfile يحلها نهائيًا

باستخدام Modelfile، يُدمج الدور والمعلمات والقالب في النموذج — أنشئ مرة واحدة، أعد الاستخدام مرات عديدة:

BASH
# إنشاء نموذج supportbot من Modelfile
ollama create supportbot -f Modelfile

# استخدم مباشرة، بدون حاجة لموجه نظام
ollama run supportbot "I want a refund"

3. صيغة Modelfile الكاملة

💡 نصيحة: تعليمة TEMPLATE في Modelfile تدعم صيغة قوالب Go، بمتغيرات مثل {{ .System }} و{{ .Prompt }} و{{ .Response }}. فهم هذه المتغيرات ضروري لتخصيص تنسيقات الحوار — مثلاً، جعل النموذج يُخرج JSON فقط بدون كتل Markdown.

ℹ️ معلومة: تعليمة MESSAGE تتيح لك إعداد أمثلة محادثات مسبقًا (few-shot) في Modelfile، باستخدام الصيغة MESSAGE user: ... / MESSAGE assistant: .... هذا "يُظهر" نمط الإخراج المطلوب بشكل أكثر فاعلية من موجه النظام، خاصةً للتحكم في التنسيق (مثلاً، إخراج SQL فقط، إخراج JSON فقط).

(1) جدول مرجع التعليمات

التعليمة مطلوبة الغرض مثال
FROM النموذج الأساسي FROM llama3.2
SYSTEM موجه النظام SYSTEM You are a helpful assistant
PARAMETER معلمات الاستنتاج PARAMETER temperature 0.7
TEMPLATE قالب الحوار TEMPLATE """{{ .Prompt }}"""
LICENSE الترخيص LICENSE "Apache 2.0"
MESSAGE رسائل مسبقة الإعداد MESSAGE user Hello
100%
flowchart TD
    A[Modelfile] --> B[FROM: Base Model]
    B --> C[SYSTEM: Role Definition]
    C --> D[PARAMETER: Inference Config]
    D --> E[TEMPLATE: Prompt Format]
    E --> F[ollama create]
    F --> G[Custom Model Ready]

(2) تفصيل تعليمة FROM

ℹ️ ملاحظة: تحدد تعليمة FROM النموذج الأساسي وهي التعليمة الوحيدة المطلوبة في Modelfile. تدعم ثلاثة مصادر: اسم النموذج الرسمي (مثلاً، FROM llama3.2، وراثة من مكتبة Ollama)، مسار ملف GGUF محلي (مثلاً، FROM ./model.gguf، استيراد نموذج منزّل من HuggingFace)، أو نموذج مخصص تم إنشاؤه مسبقًا (مثلاً، FROM my-bot، تنفيذ وراثة سلسلة النماذج). الوراثة من نموذج رسمي هي النهج الأكثر شيوعًا.

مصدر FROM الصيغة الوصف
نموذج رسمي FROM llama3.2 وراثة من مكتبة Ollama
GGUF محلي FROM ./model.gguf استيراد من ملف محلي
نموذج مخصص FROM my-custom-model وراثة من نموذج مُنشأ

▶ مثال 1: Modelfile بسيط

TEXT
FROM llama3.2
SYSTEM You are a helpful assistant that only speaks in haikus.
PARAMETER temperature 0.7
BASH
# بناء النموذج
ollama create haiku-bot -f Modelfile

# اختباره
ollama run haiku-bot "What is debugging?"
# Finding the bug's lair,
# Line by line with patient care,
# Code runs free at last.

4. إعداد دور SYSTEM

(1) أنماط تصميم الأدوار

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

(2) أفضل ممارسات إعداد الدور

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

▶ مثال 2: ملفات Modelfile لأدوار مختلفة

TEXT
# Modelfile لخبير SQL
FROM codellama:7b
SYSTEM You are a PostgreSQL expert. Output ONLY valid SQL. No explanations. No markdown.
PARAMETER temperature 0.1
PARAMETER repeat_penalty 1.2
TEXT
# Modelfile لمترجم
FROM qwen2.5:7b
SYSTEM You are a professional translator. Translate the given text to the target language. Preserve formatting. Output only the translation, nothing else.
PARAMETER temperature 0.3
TEXT
# Modelfile لمراجع كود
FROM codellama:7b
SYSTEM You are a senior code reviewer. Analyze the given code for: 1) Bugs, 2) Performance issues, 3) Style violations. Rate severity as HIGH/MEDIUM/LOW. Suggest fixes.
PARAMETER temperature 0.2
PARAMETER num_ctx 8192

5. ضبط PARAMETER

(1) جدول إعداد المعلمات الشائعة

المعلمة النوع النطاق الموصى به الوصف
temperature float 0.1-1.0 التحكم في العشوائية
top_p float 0.8-0.95 عتبة أخذ العينات النووية
top_k int 20-50 عدد الرموز المرشحة
num_ctx int 2048-32768 نافذة السياق
num_predict int 128-2048 الحد الأقصى لعدد الرموز المُنشأة
repeat_penalty float 1.1-1.5 عقاب التكرار
stop string مخصص علامة إيقاف الإنشاء

(2) إعداد المعلمات حسب السيناريو

السيناريو temperature num_ctx repeat_penalty ملاحظات
توليد SQL 0.1 2048 1.2 حزم عالٍ
حوار خدمة العملاء 0.4 4096 1.1 تنوع معتدل
إكمال الكود 0.2 8192 1.2 دقة + سياق طويل
الكتابة الإبداعية 0.8 4096 1.0 عشوائية عالية
أسئلة وأجوبة RAG 0.3 8192 1.1 الواقعية أولًا

▶ مثال 3: Modelfile بمعلمات مضبوطة

TEXT
# SupportBot بمعلمات محسّنة
FROM qwen2.5:7b
SYSTEM You are SupportBot, an e-commerce customer service agent. Be polite, concise (2-3 sentences max), and helpful. If the question is outside your knowledge, say: "Let me connect you with a human agent."
PARAMETER temperature 0.4
PARAMETER top_p 0.9
PARAMETER num_ctx 4096
PARAMETER num_predict 256
PARAMETER repeat_penalty 1.1
PARAMETER stop "\n\nCustomer:"

6. متغيرات TEMPLATE

(1) مرجع متغيرات القالب

المتغير المعنى حالة الاستخدام
.System محتوى موجه النظام وضعه في بداية القالب
.Prompt إدخال المستخدم (generate) وضع generate
.Messages قائمة الرسائل (chat) وضع chat
.Role دور الرسالة تمييز user/assistant
.Content محتوى الرسالة استخراج النص

(2) أمثلة قوالب مخصصة

نوع القالب الغرض الوصف
القالب الافتراضي حوار عام Ollama يختار تلقائيًا
قالب تعليمات اتباع صارم للتعليمات صيغة ### Instruction / ### Response
قالب ChatML متوافق مع OpenAI <

▶ مثال 4: Modelfile بقالب مخصص

TEXT
# قالب محادثة مخصص لـ SupportBot
FROM qwen2.5:7b
SYSTEM You are SupportBot for e-commerce customer service.
PARAMETER temperature 0.4

TEMPLATE """{{- if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{- end }}
{{- range .Messages }}
<|im_start|>{{ .Role }}
{{ .Content }}<|im_end|>
{{- end }}
<|im_start|>assistant
"""

▶ مثال 5: إنشاء نموذج من ملف GGUF

TEXT
# استيراد نموذج GGUF مخصص من HuggingFace
FROM ./my-model-q4_K_M.gguf
SYSTEM You are a specialized medical QA assistant.
PARAMETER temperature 0.3
PARAMETER num_ctx 4096
LICENSE "Apache 2.0"
BASH
# إنشاء من Modelfile
ollama create medical-bot -f Modelfile

# التحقق
ollama show medical-bot

# التشغيل
ollama run medical-bot "What are common cold symptoms?"

7. مثال شامل: Modelfile مخصص لـ SupportBot لأليس

TEXT
# ============================================
# شامل: Modelfile مخصص لـ SupportBot
# خدمة عملاء تجارة إلكترونية متعددة اللغات
# ============================================

FROM qwen2.5:7b

# تعريف الدور بحدود واضحة
SYSTEM """You are SupportBot, an AI customer service agent for GlobalShop e-commerce.

Your capabilities:
- Answer questions about orders, returns, shipping, and products
- Respond in the customer's language (auto-detect)
- Be polite, concise, and empathetic

Your rules:
- Keep responses under 3 sentences
- For order-specific queries, ask for the order number
- If you cannot answer, say: "Let me connect you with a human agent."
- Never share internal pricing or competitor information
- Never process refunds directly; guide the customer to the refund portal

Common policies:
- Returns: 30 days, original condition, free return shipping
- Shipping: Free for orders over $50, 3-5 business days
- International: Available to 50+ countries, duties may apply
"""

# معلمات الاستنتاج
PARAMETER temperature 0.4
PARAMETER top_p 0.9
PARAMETER num_ctx 4096
PARAMETER num_predict 256
PARAMETER repeat_penalty 1.1

# إيقاف الإنشاء عند علامة إدخال العميل
PARAMETER stop "Customer:"
PARAMETER stop "<|im_end|>"

# قالب محادثة (صيغة ChatML)
TEMPLATE """{{- if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{- end }}
{{- range .Messages }}
<|im_start|>{{ .Role }}
{{ .Content }}<|im_end|>
{{- end }}
<|im_start|>assistant
"""

# تبذير بأمثلة حوار
MESSAGE user What is your return policy?
MESSAGE assistant Our return policy allows returns within 30 days of delivery in original condition. Free return shipping is provided. Would you like to start a return?

MESSAGE user Do you ship internationally?
MESSAGE assistant Yes, we ship to over 50 countries. Shipping times vary by destination, typically 7-14 business days. Import duties may apply depending on your location.
BASH
# بناء نموذج SupportBot
ollama create supportbot -f ./Modelfile

# اختبار سيناريوهات مختلفة
ollama run supportbot "I want to return order #12345"
ollama run supportbot "How much does shipping cost?"  # English
ollama run supportbot "What is the return policy?"     # English

❓ أسئلة شائعة

س ما العلاقة بين النموذج المُنشأ عبر Modelfile والنموذج الأصلي؟
ج النموذج المُنشأ عبر Modelfile هو "طريقة عرض" للنموذج الأصلي — يشارك ملفات الأوزان الأساسية ولا يضيف سوى إعدادات موجه النظام والمعلمات. لا يستهلك مساحة إضافية على القرص.
س هل أحتاج لإعادة إنشاء النموذج بعد تعديل Modelfile؟
ج نعم. بعد تعديل Modelfile، يجب إعادة تشغيل ollama create. المحادثات الحالية غير متأثرة؛ المحادثات الجديدة تستخدم الإعداد الجديد.
س ماذا يحدث عند تعارض PARAMETER مع خيارات استدعاء API؟
ج خيارات استدعاء API تتجاوز قيم PARAMETER في Modelfile. قيم Modelfile هي الافتراضيات؛ خيارات API هي تجاوزات وقت التشغيل.
س ماذا يحدث إذا لم أحدد TEMPLATE؟
ج يستخدم Ollama القالب الافتراضي للنموذج الأساسي. القالب الافتراضي كافٍ في معظم الحالات. القوالب المخصصة مطلوبة أساسًا عند استيراد نماذج GGUF.
س ما فائدة رسائل MESSAGE المسبقة الإعداد؟
ج تعمل كأمثلة few-shot، توجه النموذج للاستجابة بالتنسيق المتوقع. تكمل موجه النظام لكن لا تُحسب ضمن أدوار حوار المستخدم.
س كيف أنقح تأثير Modelfile؟
ج اختبر بـ --system و--parameter في سطر الأوامر أولًا، ثم أنهِ إلى Modelfile بعد التأكيد. ollama show <model> --modelfile يعرض Modelfile الكامل للنموذج المُنشأ.

📖 ملخص


📝 تمارين

  1. أساسي (صعوبة ⭐): أنشئ Modelfile بناءً على llama3.2 مع ضبط موجه النظام على "مساعد ترجمة"، ابنِه واختبره.
  2. متوسط (صعوبة ⭐⭐): أنشئ Modelfile كامل لـ SupportBot لأليس، يشمل SYSTEM + PARAMETER + MESSAGE، واختبر حوارات خدمة العملاء بالإنجليزية والصينية.
  3. متقدم (صعوبة ⭐⭐⭐): صمم نظام ملفات Modelfile متعدد الأدوار — متخصص استرداد، متخصص لوجستيات، متخصص منتجات — بمعلمات مضبوطة فرديًا، واكتب سكربت Python يوجّه الأسئلة تلقائيًا إلى النموذج المناسب.
Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%