ما هو الضبط الدقيق (Fine-Tuning)؟ ومتى نلجأ إليه بدلاً من نظام RAG؟
ما هو Fine-Tuning؟
الضبط الدقيق Fine-Tuning هو عملية إعادة تدريب نموذج لغوي كبير LLM تم تدريبه مسبقاً، لكن على مجموعة بيانات متخصصة جداً، بحيث يتغير سلوكه الداخلي وأنماط استجابته لتناسب مهمة أو مجالاً محدداً. بخلاف نظام RAG الذي يزوّد النموذج بمعلومات خارجية وقت التنفيذ، فإن Fine-Tuning يحاول تعديل الأوزان نفسها داخل النموذج.
عملياً، هذا يعني أنك لا تعلّم النموذج “حقائق” جديدة فقط، بل تعيد تشكيل طريقة تمثيله للأنماط اللغوية، ونبرة الرد، وبنية الإخراج، وحتى أسلوب اتباع التعليمات. لذلك يُستخدم الضبط الدقيق غالباً عندما تكون المشكلة مرتبطة بالسلوك المتكرر للنموذج أكثر من ارتباطها باسترجاع معرفة متغيرة من قاعدة خارجية.
الفرق المعماري بين Fine-Tuning و RAG
1) كيف يعمل RAG؟
في بنية RAG، يتم أولاً تحويل الوثائق إلى Embeddings، ثم تخزينها داخل قاعدة بيانات متجهة Vector DB. عند وصول سؤال المستخدم، يُحوَّل السؤال إلى متجه، وتتم عملية استرجاع للأجزاء الأقرب دلالياً، ثم تُحقن هذه الأجزاء في Prompt قبل إرسالها إلى النموذج.
هذا التدفق ممتاز عندما تكون المعرفة متغيرة، أو ضخمة، أو تحتاج إلى تحديث مستمر، مثل السياسات الداخلية، الكتالوجات، ملفات PDF، أو قواعد المعرفة المؤسسية.
2) كيف يعمل Fine-Tuning؟
في المقابل، يبدأ الضبط الدقيق من نموذج أساس Base Model أو نموذج تعليمات Instruction Model. بعد ذلك يتم تجهيز أمثلة تدريبية من نوع Input → Output أو Instruction → Response، ثم تُستخدم خوارزمية تدريب إضافية لتقليل الخطأ بين مخرجات النموذج الحالية والمخرجات المرغوبة.
هنا تدفق البيانات يمر عبر مراحل: تنظيف البيانات، Tokenization، إنشاء دفعات Batches، التمرير الأمامي، حساب Loss، ثم Backpropagation لتعديل الأوزان. النتيجة أن النموذج نفسه يتعلم هذا النمط، بدلاً من قراءته في كل طلب.
متى يكون RAG هو الخيار الأفضل؟
اختيار RAG يصبح منطقياً عندما تكون المشكلة الأساسية هي “الوصول إلى المعرفة” وليس “تغيير السلوك”. لذلك نلجأ إليه إذا كانت بياناتك:
- تتغير باستمرار وتحتاج تحديثاً فورياً بدون إعادة تدريب.
- كبيرة جداً ولا يمكن ضغطها عملياً داخل أوزان النموذج.
- تحتاج إلى توثيق ومراجع يمكن عرضها للمستخدم.
- مرتبطة بتقليل الهلوسة عبر الاستناد إلى نص مسترجع فعلي.
ولهذا السبب تعتمد أغلب التطبيقات المؤسسية على RAG مع LangChain، لأن خط الأنابيب قابل للصيانة: تحديث الوثائق أسهل بكثير من إعادة تدريب النموذج كل مرة.
متى نلجأ إلى Fine-Tuning بدلاً من RAG؟
نلجأ إلى الضبط الدقيق عندما نحتاج إلى تعديل سلوك النموذج بشكل متكرر وثابت، وليس فقط تزويده بمعلومة إضافية. الأمثلة الأشهر:
- فرض أسلوب إخراج محدد جداً مثل
JSONمعقول التركيب بشكل شبه دائم. - جعل النموذج يتقن لهجة، أو نبرة علامة تجارية، أو أسلوب خدمة عملاء موحد.
- تحسين الأداء في تصنيف متخصص أو استخراج كيانات ضمن مجال دقيق.
- تقليل طول
Promptالمتكرر لتقليل التكلفة وزمن الاستجابة. - تحسين اتباع التعليمات في نطاق ضيق جداً لا ينجح فيه
Prompt Engineeringوحده.
لكن يجب الانتباه إلى نقطة هندسية مهمة: Fine-Tuning ليس قاعدة معرفة. إذا قمت بتدريب النموذج على سياسات شركتك الحالية، ثم تغيرت تلك السياسات بعد أسبوع، فإن النموذج لن يعرف التحديث تلقائياً. هنا يتفوق RAG بوضوح.
قاعدة القرار الهندسية: سلوك أم معرفة؟
أفضل سؤال لاتخاذ القرار هو: هل مشكلتي تتعلق بالسلوك أم بالمعرفة؟
- إذا كنت تحتاج من النموذج أن “يعرف” بيانات حديثة أو وثائق داخلية، فاختر
RAG. - إذا كنت تحتاج من النموذج أن “يتصرف” بطريقة ثابتة ومتخصصة، فاختر
Fine-Tuning. - إذا كنت تحتاج الاثنين معاً، فالحل العملي غالباً هو الجمع بينهما.
إذا كان التطبيق يحتاج إلى إجابات مبنية على وثائق متغيرة يومياً مع أسلوب رد احترافي موحد، فالحل ليس الاختيار بين RAG و Fine-Tuning، بل تصميم طبقة استرجاع للمعلومة مع نموذج مضبوط دقيقاً على أسلوب الكتابة المطلوب.
كيف نبني خط تدريب مبسط للضبط الدقيق؟
في المشاريع العملية، يمر بناء نظام Fine-Tuning بعدة مراحل هندسية:
- تحديد المهمة بدقة: تصنيف، استخراج، توليد، إعادة صياغة، أو محاكاة أسلوب.
- جمع أمثلة عالية الجودة تمثل الحالات الواقعية فعلاً.
- تنسيق البيانات إلى أزواج تدريب واضحة.
- تقسيمها إلى
train/validation. - اختيار نموذج مناسب وحجم معقول بالنسبة للبنية التحتية.
- تقييم المخرجات قبل وبعد التدريب وليس الاكتفاء بانخفاض
loss.
from datasets import Dataset
examples = [
{
"instruction": "استخرج اسم العميل والمبلغ وأعد النتيجة JSON فقط",
"input": "العميل: أحمد علي - إجمالي الفاتورة 250 ريال",
"output": '{"customer_name": "أحمد علي", "amount": 250, "currency": "SAR"}'
},
{
"instruction": "استخرج اسم العميل والمبلغ وأعد النتيجة JSON فقط",
"input": "العميل: سارة خالد - إجمالي الفاتورة 480 ريال",
"output": '{"customer_name": "سارة خالد", "amount": 480, "currency": "SAR"}'
}
]
dataset = Dataset.from_list(examples)
print(dataset)
هذا المثال يوضح فكرة مهمة: جودة الضبط الدقيق تأتي من جودة الأمثلة، لا من عددها فقط. عينة سيئة تعني نموذجاً يتعلم السلوك الخطأ بشكل دائم.
مثال عملي باستخدام transformers
from transformers import AutoTokenizer, AutoModelForCausalLM
model_name = "mistralai/Mistral-7B-Instruct-v0.2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
sample_prompt = """
### Instruction:
استخرج البيانات بصيغة JSON فقط
### Input:
العميل: محمد سالم - المبلغ 1250 ريال
### Response:
"""
tokens = tokenizer(sample_prompt, return_tensors="pt")
print(tokens["input_ids"].shape)
إذا كنت تعمل على نماذج مفتوحة المصدر، فغالباً ستستخدم تقنيات أخف مثل LoRA أو QLoRA بدلاً من إعادة تدريب كل الأوزان، خاصة إذا كنت تستفيد من بيئة Hugging Face أو تشغّل النماذج محلياً عبر Ollama.
هل يمكن الجمع بين Fine-Tuning و RAG؟
نعم، وهذا في الحقيقة هو النمط الأقوى في الأنظمة الإنتاجية. يمكن ضبط النموذج دقيقاً على أسلوب الاستجابة، أو على التزام بنية معينة، ثم ربطه بطبقة RAG لجلب المعرفة الحديثة. بهذه الطريقة تحصل على:
- معرفة محدثة من قاعدة خارجية.
- سلوك أكثر استقراراً واتساقاً.
- تقليل الاعتماد على
Promptsالطويلة. - تحسين تجربة المستخدم النهائية.
الخلاصة الهندسية
الضبط الدقيق Fine-Tuning ليس بديلاً سحرياً لكل شيء، بل أداة مخصصة لتغيير السلوك الداخلي للنموذج. أما RAG فهو طبقة معرفة ديناميكية تعتمد على الاسترجاع الخارجي. إذا كانت بياناتك تتغير فاختر RAG، وإذا كان المطلوب هو انضباط النموذج في الأسلوب أو المهمة فاختر Fine-Tuning. وفي المشاريع الناضجة، غالباً ستجمع بين الاثنين ضمن معمارية واحدة مدروسة مع تقييم مستمر للأداء والدقة والتكلفة.
3 comments