بناء سير عمل شامل لنماذج اللغات الكبيرة ذاتية الاستضافة باستخدام Ollama وواجهة برمجة تطبيقات REST وواجهة دردشة Gradio
في هذا البرنامج التعليمي، سنقوم بتطبيق بيئة Ollama عاملة بالكامل داخل Google Colab لإنشاء سير عمل لنماذج اللغات الكبيرة ذاتية الاستضافة. سنبدأ بتثبيت Ollama مباشرةً على آلة Colab الافتراضية باستخدام برنامج التثبيت الرسمي لنظام Linux، ثم تشغيل خادم Ollama في الخلفية لعرض واجهة برمجة التطبيقات HTTP على localhost:11434. بعد التحقق من الخدمة، سنقوم بسحب نماذج خفيفة الوزن مثل qwen2.5:0.5b-instruct أو llama3.2:1b، والتي توازن بين قيود الموارد وقابلية الاستخدام في بيئة تعتمد فقط على وحدة المعالجة المركزية (CPU). للتفاعل مع هذه النماذج برمجياً، سنستخدم نقطة نهاية /api/chat عبر وحدة requests في Python مع تمكين البث، مما يسمح بالتقاط الإخراج على مستوى الرمز تدريجياً. أخيراً، سنضيف واجهة مستخدم تعتمد على Gradio فوق هذا العميل، بحيث يمكننا إصدار مطالبات، والحفاظ على سجل متعدد الأدوار، وتكوين معلمات مثل درجة الحرارة وحجم السياق، وعرض النتائج في الوقت الفعلي.
تثبيت Ollama و Gradio
سنبدأ بالتحقق مما إذا كان Ollama مثبتاً بالفعل على النظام، وإذا لم يكن كذلك، فسنقوم بتثبيته باستخدام البرنامج النصي الرسمي. في الوقت نفسه، سنتأكد من توفر Gradio عن طريق استيراده أو تثبيت الإصدار المطلوب عند عدم وجوده. بهذه الطريقة، نقوم بإعداد بيئة Colab لتشغيل واجهة الدردشة بسلاسة.
if not Path("/usr/local/bin/ollama").exists() and not Path("/usr/bin/ollama").exists():
print(" Installing Ollama ...")
sh("curl -fsSL https://ollama.com/install.sh | sh")
else:
print(" Ollama already installed.")
try:
import gradio
except Exception:
print(" Installing Gradio ...")
sh("pip -q install gradio==4.44.0")
تشغيل خادم Ollama
نقوم بتشغيل خادم Ollama في الخلفية، ونستمر في التحقق من نقطة نهاية صحته حتى يستجيب بنجاح. من خلال القيام بذلك، نتأكد من أن الخادم قيد التشغيل وجاهز قبل إرسال أي طلبات واجهة برمجة التطبيقات.
def start_ollama():
try:
requests.get("http://127.0.0.1:11434/api/tags", timeout=1)
print(" Ollama server already running.")
return None
except Exception:
pass
print(" Starting Ollama server ...")
proc = subprocess.Popen(["ollama", "serve"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
for _ in range(60):
time.sleep(1)
try:
r = requests.get("http://127.0.0.1:11434/api/tags", timeout=1)
if r.ok:
print(" Ollama server is up.")
break
except Exception:
pass
else:
raise RuntimeError("Ollama did not start in time.")
return proc
server_proc = start_ollama()
سحب نموذج اللغة الكبير
نحدد النموذج الافتراضي لاستخدامه، ونفحص ما إذا كان متوفراً بالفعل على خادم Ollama، وإذا لم يكن كذلك، فسنسحبه تلقائياً. هذا يضمن أن النموذج المختار جاهز قبل أن نبدأ تشغيل أي جلسات دردشة.
MODEL = os.environ.get("OLLAMA_MODEL", "qwen2.5:0.5b-instruct")
print(f" Using model: {MODEL}")
try:
tags = requests.get("http://127.0.0.1:11434/api/tags", timeout=5).json()
have = any(m.get("name")==MODEL for m in tags.get("models", []))
except Exception:
have = False
if not have:
print(f" Pulling model {MODEL} (first time only) ...")
sh(f"ollama pull {MODEL}")
إنشاء عميل دردشة متدفق
نقوم بإنشاء عميل متدفق لنقطة نهاية /api/chat في Ollama، حيث نرسل الرسائل كحمولات JSON وننتج الرموز أثناء وصولها. هذا يسمح لنا بمعالجة الردود تدريجياً، لذلك نرى إخراج النموذج في الوقت الفعلي بدلاً من انتظار الإكمال الكامل.
OLLAMA_URL = "http://127.0.0.1:11434/api/chat"
def ollama_chat_stream(messages, model=MODEL, temperature=0.2, num_ctx=None):
# ... (كود الدالة كما هو في النص الأصلي) ...
اختبار بسيط للتشغيل
نقوم بتشغيل اختبار بسيط عن طريق إرسال مطالبة بسيطة من خلال عميلنا المتدفق للتأكد من أن النموذج يستجيب بشكل صحيح. هذا يساعدنا على التحقق من تثبيت Ollama، وتشغيل الخادم، وعمل النموذج المختار قبل إنشاء واجهة المستخدم الكاملة للدردشة.
def smoke_test():
# ... (كود الدالة كما هو في النص الأصلي) ...
إنشاء واجهة مستخدم دردشة باستخدام Gradio
ندمج Gradio لإنشاء واجهة مستخدم تفاعلية للدردشة فوق خادم Ollama، حيث يتم تحويل إدخال المستخدم وسجل المحادثة إلى تنسيق الرسائل الصحيح، ويتم بثه كاستجابات للنموذج. تسمح لنا الشرائح بضبط معلمات مثل درجة الحرارة وطول السياق، بينما يوفر مربع الدردشة وزر المسح واجهة بسيطة في الوقت الفعلي لاختبار مطالبات مختلفة.
# ... (كود واجهة Gradio كما هو في النص الأصلي) ...
الخلاصة
لقد أنشأنا خط أنابيب قابلاً للتكرار لتشغيل Ollama في Colab: التثبيت، وبدء تشغيل الخادم، وإدارة النماذج، والوصول إلى واجهة برمجة التطبيقات، وتكامل واجهة المستخدم. يستخدم النظام واجهة برمجة تطبيقات REST الخاصة بـ Ollama كطبقة تفاعل أساسية، مما يوفر وصولاً من سطر الأوامر وبث Python، بينما يعالج Gradio استمرار الجلسة وعرض الدردشة. هذا النهج يحافظ على تصميم “الاستضافة الذاتية” الموصوف في الدليل الأصلي، ولكنه يكيّفه مع قيود Colab، حيث لا تكون صور Ollama المدعومة بـ Docker و GPU عملية. والنتيجة هي إطار عمل مضغوط ولكنه كامل من الناحية التقنية يسمح لنا بتجربة نماذج LLMs متعددة، وضبط معلمات التوليد ديناميكيًا، واختبار الذكاء الاصطناعي المحادثة محليًا داخل بيئة دفتر ملاحظات.






اترك تعليقاً