دمج أولاما مع بايثون: أمثلة على واجهة برمجة التطبيقات REST وعميل بايثون

أمثلة محددة باستخدام نماذج التفكير الكبيرة

Page content

في هذا المقال، سنستكشف طريقتين لربط تطبيقك Python مع Ollama: 1. عبر HTTP REST API; 2. عبر المكتبة الرسمية لـ Ollama لـ Python.

سنغطي كلاً من الدردشة و التوليد، ثم نناقش كيفية استخدام “نماذج التفكير” بفعالية.

ollama and python

Ollama تحوّل بسرعة إلى أحد أكثر الطرق راحة في تشغيل نماذج اللغة الكبيرة (LLMs) محلياً. مع واجهة بسيطة ودعم لنماذج مفتوحة شهيرة مثل Llama 3، Mistral، Qwen2.5، وحتى التغيرات “التفكيرية” مثل qwen3، من السهل دمج قدرات الذكاء الاصطناعي مباشرة في مشاريعك Python — دون الاعتماد على APIs السحابية الخارجية.


🧩 المتطلبات الأساسية

قبل البدء، تأكد من أن لديك:

  • Ollama مثبت ومشغل محلياً (ollama serve)
  • Python 3.9+
  • التبعيات المطلوبة:
pip install requests ollama

تأكد من تشغيل Ollama عن طريق تنفيذ:

ollama list

يجب أن ترى النماذج المتاحة مثل llama3، mistral، أو qwen3.


⚙️ الخيار 1: استخدام واجهة REST لـ Ollama

تعتبر واجهة REST مثالية عندما تريد التحكم الأقصى أو عند دمجها مع إطار عمل يدير طلبات HTTP بالفعل.

مثال 1: واجهة الدردشة

import requests
import json

url = "http://localhost:11434/api/chat"

payload = {
    "model": "llama3.1",
    "messages": [
        {"role": "system", "content": "أنت مساعد Python."},
        {"role": "user", "content": "اكتب دالة تعكس سلسلة نصية."}
    ]
}

response = requests.post(url, json=payload, stream=True)

for line in response.iter_lines():
    if line:
        data = json.loads(line)
        print(data.get("message", {}).get("content", ""), end="")

👉 تتدفق واجهة REST لـ Ollama على الاستجابات سطراً بعد سطر (مثل واجهة التدفق لـ OpenAI). يمكنك جمع المحتوى أو عرضه في الوقت الفعلي لأدوات الدردشة أو أدوات السطر الأوامر.


مثال 2: واجهة التوليد

إذا لم تحتاج إلى سياق الدردشة أو الأدوار، استخدم نهاية /api/generate البسيطة:

import requests

url = "http://localhost:11434/api/generate"
payload = {
    "model": "llama3.1",
    "prompt": "شرح التكرار في جملة واحدة."
}

response = requests.post(url, json=payload, stream=True)
for line in response.iter_lines():
    if line:
        print(line.decode("utf-8"))

هذه النهاية مثالية لمهام توليد النصوص الفردية — ملخصات، كتل من الكود، إلخ.


🐍 الخيار 2: استخدام مكتبة Ollama لـ Python

توفر مكتبة Ollama لـ Python واجهة نظيفة للمطورين الذين يفضلون البقاء بالكامل في Python.

مثال 1: واجهة الدردشة

import ollama

response = ollama.chat(
    model="llama3.1",
    messages=[
        {"role": "system", "content": "أنت مساعد كود."},
        {"role": "user", "content": "أعد كتابة نص Python يدرج جميع الملفات في دليل."}
    ]
)

print(response['message']['content'])

هذا يعيد الرسالة النهائية على شكل قاموس. إذا كنت تريد التدفق، يمكنك التكرار عبر تدفق الدردشة:

stream = ollama.chat(
    model="llama3.1",
    messages=[
        {"role": "user", "content": "اكتب هايكو عن التكرار."}
    ],
    stream=True
)

for chunk in stream:
    print(chunk['message']['content'], end='', flush=True)

مثال 2: واجهة التوليد

import ollama

output = ollama.generate(
    model="llama3.1",
    prompt="ملخص مفهوم الزخارف في Python."
)

print(output['response'])

أو تدفق النتيجة:

stream = ollama.generate(
    model="llama3.1",
    prompt="أدرج ثلاثة مزايا لاستخدام Python لمشاريع الذكاء الاصطناعي.",
    stream=True
)

for chunk in stream:
    print(chunk['response'], end='', flush=True)

🧠 العمل مع “نماذج التفكير”

يدعم Ollama “نماذج التفكير” مثل qwen3، مصممة لإظهار خطوات التفكير المتوسطة. تنتج هذه النماذج إخراجاً منظماً، غالباً في تنسيق مثل:

<think>
  خطوات التفكير هنا...
</think>
الإجابة النهائية هنا.

هذا يجعلها مفيدة لـ:

  • تصحيح أخطاء تفكير النموذج
  • البحث في التفسيرية
  • بناء أدوات تفصل التفكير عن الإخراج

مثال: استخدام نموذج التفكير

import ollama

response = ollama.chat(
    model="qwen3",
    messages=[
        {"role": "user", "content": "ما هي عاصمة أستراليا؟"}
    ]
)

content = response['message']['content']

# اختيارياً استخراج الجزء "التفكير"
import re
thinking = re.findall(r"<think>(.*?)</think>", content, re.DOTALL)
answer = re.sub(r"<think>.*?</think>", "", content, flags=re.DOTALL)

print("🧠 عملية التفكير:\n", thinking[0].strip() if thinking else "N/A")
print("\n✅ الإجابة النهائية:\n", answer.strip())

متى تستخدم نماذج التفكير

حالة الاستخدام النموذج الموصى به السبب
التفسيرية / تصحيح الأخطاء qwen3 عرض مسارات التفكير
التطبيقات الحساسة للأداء قوة qwen3 غير التفكير أسرع، أقل تفصيل
التعليمي / التفسيري qwen3 يظهر المنطق خطوة بخطوة

✅ ملخص

المهمة واجهة REST عميل Python
توليد النصوص البسيطة /api/generate ollama.generate()
الدردشة التفاعلية /api/chat ollama.chat()
دعم التدفق نعم نعم
يعمل مع نماذج التفكير نعم نعم

تصميم Ollama المحلي أولاً يجعله مثالياً للتطبيقات الآمنة، أو غير متصل بالإنترنت، أو الحساسة للخصوصية. سواء كنت تبني روبوت دردشة تفاعلي أو خدمة تحسين البيانات في الخلفية، يمكنك دمج LLMs بسلاسة في سير العمل الخاص بك Python — مع التحكم الكامل على النماذج، التأخير، والبيانات.

روابط مفيدة