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

الوحدة 8 — التشغيل المحلّي دون اتّصال

الفكرة العمليّة لهذه الدورة كلّها: نموذج يعمل على جهاز الموظّف بلا خادوم مركزيّ ولا سحابة. الوحدة السابقة أعطتنا نموذجًا مضبوطًا؛ هنا نضعه في الاستخدام اليوميّ.

Ollama: الخيار الأسرع للانطلاق

Ollama تطبيق يغلّف llama.cpp خلف واجهة سطر أوامر بسيطة وواجهة برمجيّة محلّيّة على منفذ 11434. مصمَّم لجعل تشغيل نموذج محلّي بسيطًا كتشغيل قاعدة بيانات محلّيّة.

التثبيت على أنظمة التشغيل الثلاثة:

  • macOS/Linux: curl -fsSL https://ollama.com/install.sh | sh
  • Windows: تنزيل الحزمة من ollama.com/download وتشغيلها

بعد التثبيت، تحميل نموذج وتشغيله في أمر واحد:

ollama pull qwen2.5:3b
ollama run qwen2.5:3b "صنّف هذه البطاقة: طلبي لم يصل بعد أسبوعين"

Ollama يخزّن النموذج في مجلّد النظام (نحو 1,8 غيغا لنموذج 3 مليارات مكمَّم على Q4)، ويشغّل خدمة في الخلفيّة تُصغي إلى الطلبات.

استيراد نموذج مخصَّص إلى Ollama

النموذج المضبوط الذي أخرجناه في الوحدة السابقة بصيغة GGUF يُستورَد بملفّ تعريف يُسمّى Modelfile:

FROM /chemin/vers/qwen2.5-3b-tickets-Q4_K_M.gguf

TEMPLATE """<|im_start|>system
أنت مساعد لتصنيف بطاقات دعم العملاء بالعربيّة الفصحى.
<|im_end|>
<|im_start|>user
{{ .Prompt }}
<|im_end|>
<|im_start|>assistant
"""

PARAMETER temperature 0.3
PARAMETER num_ctx 2048

ثمّ تسجيل النموذج المخصّص:

ollama create tickets-assistant -f Modelfile
ollama run tickets-assistant "بطاقة الاختبار..."

هذا النموذج المخصّص متاح الآن كأيّ نموذج آخر عبر واجهة Ollama.

متطلّبات الذاكرة

قاعدة تقريبيّة موثوقة لتقدير حجم الذاكرة اللازمة:

  • نموذج بـNN مليار مُعامِل على تكميم Q4 يشغل نحو 0,6×N0{,}6 \times N غيغابايت
  • نموذج بـNN مليار مُعامِل على تكميم Q8 يشغل نحو 1,1×N1{,}1 \times N غيغابايت
  • أضِف 500 ميغا إلى 1 غيغا لسياق العمل (KV cache)

مثال: Qwen 2.5-3B على Q4 = 1,8 غيغا + 0,5 غيغا سياق = 2,3 غيغابايت ذاكرة عاملة. جهاز بذاكرة 8 غيغا كافٍ بلا مشاكل، حتّى مع تشغيل نظام التشغيل وتطبيقات المكتب.

نموذج 7 مليارات على Q4 يتطلّب 4,5 غيغا، ما يزال ممكنًا على جهاز 8 غيغا لكن مع ضغط. الأمثل: جهاز 16 غيغا.

استخدام Ollama عبر HTTP

Ollama يعرض واجهة HTTP محلّيّة تتوافق مع طرف OpenAI (تقريبًا). هذا يعني أنّ أيّ تطبيق يستخدم SDK الخاصّ بـOpenAI يمكن توجيهه إلى Ollama بتغيير عنوان الخادوم:

from openai import OpenAI

client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")

response = client.chat.completions.create(
model="tickets-assistant",
messages=[
{"role": "system", "content": "أنت مساعد تصنيف بطاقات."},
{"role": "user", "content": "لم أستلم طلبي رقم 45123..."}
]
)

الاندماج بأداة بطاقات الدعم

معظم أنظمة إدارة بطاقات الدعم (Zendesk، Freshdesk، أنظمة داخليّة) تسمح بإضافة إضافات أو web extensions تعمل في متصفّح الموظّف. الاندماج النموذجيّ:

  1. الموظّف يفتح بطاقة جديدة في الأداة
  2. زرّ «اقتراح تصنيف وملخّص» يظهر بجانب البطاقة
  3. النقر يُرسل نصّ البطاقة إلى http://localhost:11434/v1/chat/completions
  4. الاستجابة تظهر خلال ثوانٍ داخل الأداة
  5. الموظّف يراجع، يعدّل إن لزم، ويحفظ

هذا الاندماج بسيط تقنيًّا (JavaScript خالص في الإضافة)، آمن (لا خروج للبيانات)، ولا يتطلّب أيّ تغيير في أداة إدارة البطاقات الأساسيّة.

التحديث والصيانة

Ollama يسهّل تحديث النموذج عندما تظهر نسخة أفضل:

ollama pull qwen2.5:3b

للنماذج المخصّصة (بعد ضبط دقيق جديد)، يكفي إعادة بناء GGUF وتحديث Modelfile ثمّ إعادة ollama create. لا حاجة لإعادة تشغيل خادوم مركزيّ ولا للتنسيق بين موظّفين.

سياسة التحديث التي نوصي بها: إعادة تدريب فصليّة على البطاقات الجديدة، مع مراقبة أنّ الأداء على مجموعة الاختبار المرجعيّة لا يتراجع. توزيع النسخة الجديدة عبر أداة إدارة الأجهزة (MDM) للشركات الكبرى، أو عبر سكريبت تحديث بسيط للشركات الصغيرة.

بديل: llama.cpp مباشرة

للفرق التي تريد تحكّمًا أدقّ، llama-server من مشروع llama.cpp يوفّر نفس الوظيفة بلا طبقة Ollama:

./llama-server -m qwen2.5-3b-Q4_K_M.gguf --host 0.0.0.0 --port 8080 -c 2048

مزاياه: لا تبعيّة على تطبيق ثالث، تحكّم كامل في المعلمات. عيوبه: تعامل يدويّ مع النماذج، لا نظام Modelfiles.

للفريق النموذجيّ لدعم عملاء، Ollama أنسب. للفريق المحترف الذي ينشر على مئات الأجهزة بأدوات آليّة، llama.cpp المباشر أفضل.

اختبر دون شبكة

بعد التثبيت، افصل الشبكة كليًّا وأعد الاختبار. إذا استمرّ الأداء بلا تغيير، أنت فعلًا مستقلّ عن السحابة. أيّ ثمرة قليلة (تحقّق من إصدار، جلب رمز) تعني بقاء تبعيّة خفيّة يجب إزالتها.

الخلاصة

  • Ollama يغلّف llama.cpp خلف واجهة بسيطة، مع خادوم HTTP محلّي متوافق مع OpenAI.
  • Modelfile يستورد نموذجًا GGUF مخصَّصًا مع قالب المطالبة والمعلمات.
  • الذاكرة: نموذج 3 مليارات Q4 يحتاج نحو 2,3 غيغا، ونموذج 7 مليارات Q4 نحو 4,5 غيغا.
  • الاندماج بأداة البطاقات يتمّ عبر إضافة متصفّح تنادي localhost:11434، بلا خروج بيانات.
  • التحديث الفصليّ عبر إعادة ضبط ثمّ توزيع النموذج على الأجهزة.

الوحدة التالية: خصوصيّة البيانات كحجّة استراتيجيّة لصالح النموذج المحلّي، وما لا يحميه فعلًا.