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

الوحدة 3 — الجلسة التفاعليّة ومعاملات التوليد

النماذج نُصبّت (الوحدة 1)، والوسم مختار (الوحدة 2). الآن نتعلّم كيف نتكلّم معها من الطرفيّة، وكيف نضبط معلمات التوليد كي تلائم كلّ نوع من المهامّ. المفتاح ليس حفظ المعلمات، بل قياس أثر كلّ واحدة على جواب حقيقيّ.

الجلسة التفاعليّة

ollama run qwen2.5:7b-instruct-q4_K_M
>>> اقترح ثلاثة عناوين لعقد إيجار تجاريّ

يستدعي الأمر النموذج، يحمّله في الذاكرة عند أوّل استعمال (ثوانٍ لنموذج 7B على SSD)، ثمّ يبدأ حلقة قراءة-تنفيذ-عرض. النموذج يبقى في الذاكرة طوال مدّة OLLAMA_KEEP_ALIVE (خمس دقائق افتراضيًّا)، فتكون النداءات التالية فوريّة.

الأوامر داخل الجلسة

الأمرالفائدة
/set parameter temperature 0.2تغيير معلمة توليد للجلسة الحالية
/set system "..."تعديل الرسالة النظاميّة مؤقّتًا
/show infoعرض النموذج المحمَّل ومعلماته الحاليّة
/show modelfileطباعة الـ Modelfile الذي بُني منه النموذج (مفيد للوحدة 5)
/save my-modelحفظ الجلسة الحاليّة كنموذج جديد باسم مخصّص
/clearمسح المحادثة والإبقاء على النموذج محمَّلًا
/byeإنهاء الجلسة (يبقى النموذج في الذاكرة حتّى انقضاء keep_alive)

هذه الأوامر تُنجز داخل الطرفيّة تجربة كاملة قبل كتابة سطر برمجيّ واحد. تغيير درجة الحرارة عبر /set أسرع بكثير من تعديل سكربت وإعادة تشغيله.

معاملات التوليد الأساسيّة

درجة الحرارة (temperature)

  • 0.0: النموذج شبه حتميّ، يختار دائمًا الرمز الأرجح. مفيد للمهامّ المحدّدة (تصنيف، استخراج JSON).
  • 0.7: افتراضيّ. تنويع معقول، جودة ثابتة.
  • 1.2 وما فوق: إبداع مرتفع، تناقضات ممكنة، أخطاء واقعيّة أكثر.

لتلخيص عقد قانونيّ، temperature=0.1 أنسب: نريد ثباتًا لا شعرًا. لصياغة رسائل تسويقيّة، 0.9 مقبول.

نافذة السياق (num_ctx)

عدد الرموز التي يقرأها النموذج من التاريخ والمُدخل معًا. القيمة الافتراضيّة في Ollama غالبًا 2048 وهي قصيرة جدًّا لملفّات قانونيّة. num_ctx=8192 أو 16384 أفضل، لكنّ الذاكرة المطلوبة ترتفع خطّيًّا. النموذج نفسه يعلن سقفًا (context length في ollama show): تجاوزه يقصّ الأقدم بصمت.

سقف التوليد (num_predict)

عدد الرموز القصوى التي يُوَلّدها النموذج في جواب واحد. -1 يعني «حتّى نهاية الجواب أو حتّى الحدّ الأقصى». وضع 256 مثلًا يحدّ الجواب ويوقف التوليد الطويل غير المرغوب، ويوفّر الوقت والطاقة.

البذرة (seed)

تحكّم في العشوائيّة. البذرة الثابتة مع درجة حرارة 0 تعطي جوابًا مطابقًا في كلّ تشغيل. مفيدة جدًّا لإعادة إنتاج خطأ أبلغ عنه زميل، أو لاختبار وحدة.

التوقّف المبكّر (stop)

قائمة من السلاسل النصّيّة التي إن ظهرت أوقفت التوليد. مفيدة حين نحدّد صيغة إخراج ثابتة:

stop: ["\n\n### النهاية"]

قياس الأثر بدل الفرضيّات

القاعدة الذهبيّة: لا تُعدّل معلمة إلّا وأمامك سؤالان أو ثلاثة أسئلة قياسيّة تُشغّلها بعد كلّ تعديل. مثال ملموس:

$ ollama run qwen2.5:7b-instruct-q4_K_M
>>> /set parameter temperature 0.0
>>> /set parameter seed 42
>>> صنّف هذه الرسالة: طلب موعد | شكوى | فاتورة | آخر
>>> "أودّ تحديد موعد لمناقشة عقد إيجار متجري"

طلب موعد

نُكرّر ثلاث مرّات: نفس الجواب في كلّ مرّة. نغيّر البذرة إلى 7، فيتغيّر الجواب أحيانًا إلى آخر مع تفسير. هذا هو نوع القياس الذي يجب أن يسبق أيّ نشر.

معدّل النداء وأداء الأجهزة

في نهاية الجلسة، إعلان أداء يظهر:

total duration:       2.145s
load duration: 1.203s (لأنّ النموذج كان محمَّلًا مسبقًا)
prompt eval count: 128 tokens
prompt eval rate: 820 tokens/s
eval count: 94 tokens
eval rate: 48 tokens/s
  • prompt eval rate سرعة قراءة التعليمة (سريعة، لأنّها موازية).
  • eval rate سرعة توليد الجواب (أبطأ، تسلسليّة).

على شريحة Apple M3 Pro، ننتظر ≈ 50–70 رمزًا/ثانية لنموذج 7B مكمَّم Q4. على معالج خالص بلا GPU، ≈ 5–12 رمزًا/ثانية: تجربة قابلة للاستعمال لطلبات قصيرة، مؤلمة للتلخيص الطويل.

الخيط الأحمر

للمكتب، نُعدّ ثلاثة تشكيلات:

  • تصنيف بريد وارد: temperature=0.0، num_ctx=2048، num_predict=32. ثبات كامل، وأجوبة قصيرة جدًّا.
  • تلخيص عقد: temperature=0.2، num_ctx=8192، num_predict=512. سياق واسع كي يسع العقد، وجواب مضبوط.
  • صياغة ردّ: temperature=0.6، num_ctx=4096، num_predict=400. تنوّع أسلوبيّ مقبول مع بقاء الحقائق.

هذه التشكيلات ليست وحيًا: نصلنا إليها بعشرين تجربة على عشرة أسئلة حقيقيّة، وسنُثبّتها في Modelfile في الوحدة 5.

num_ctx افتراضيّ خفيّ

النموذج الذي يعلن سياقًا بـ 32 K رمزًا سيعمل افتراضيًّا بـ 2048 داخل Ollama، فيقصّ العقد بصمت. تحقّق من القيمة بـ/show info قبل التلخيص، وارفعها صراحة إن احتجت.

الخلاصة

  • الجلسة التفاعليّة أرخص أداة تجريب: /set parameter يستبدل نصف يوم من إعادة تشغيل السكربتات.
  • temperature=0 مع seed ثابتة يجعل السلوك حتميًّا، وهو ما يلزم للاختبار وإعادة الإنتاج.
  • num_ctx القصير يقصّ المستندات بصمت؛ يُرفَع صراحة إلى ما يسعه النموذج والذاكرة.
  • الأرقام في نهاية الجلسة (eval rate) هي ما يُخبرك بجودة العتاد قبل أيّ استثمار جديد.