AR ▾
احصل على مفتاح API

واجهة برمجة تطبيقات Ollama مقابل واجهة برمجة تطبيقات OpenAI: نقاط النهاية والرمز

تعود مسألة واجهة برمجة تطبيقات Ollama مقابل واجهة برمجة تطبيقات OpenAI إلى تنسيقين للطلب ومكانين لتشغيل النموذج. تمتلك Ollama واجهة برمجة تطبيقات أصلية خاصة بها وطبقة متوافقة مع OpenAI، لذا فإن الانتقال إلى نقطة نهاية على طراز OpenAI المستضافة قد يعني تغيير عنوان URL الأساسي والمفتاح.

محدّث

جهاز سطح المكتب وخادم سحابي مرتبطان بجسرين خفيفين يحملان أغلفة رسائل متطابقة
نافذة دردشة متصلة بجهاز كمبيوتر محلي وخادم سحابي عبر كابلات متوهجة

لا حاجة لبطاقة. بعد التسجيل، احصل على $0.50 من رصيد الاختبار المجاني بنقرة واحدة (مرة واحدة لكل شخص).

احصل على مفتاح API

نقاط رئيسية

  • يحتوي Ollama على مسارات أصلية تحت /api وطبقة متوافقة مع OpenAI تحت /v1؛ وعادةً ما تعمل العملاء المكتوبون باستخدام OpenAI SDK مع كليهما.
  • يقوم Ollama الأصلي ببث تنسيق JSON مفصول بأسطر، بينما يقوم تنسيق OpenAI ببث أحداث الإرسال من الخادم (SSE).
  • الانتقال من المحلي إلى المستضاف يعني تغيير عنوان URL الأساسي والمفتاح واسم النموذج، وليس الكود الخاص بك.
  • يحتفظ التشغيل المحلي بالبيانات على جهازك؛ بينما يزيل التشغيل المستضاف عمل العتاد ويضيف فاتورة حسب التوكن.

النسخة المختصرة

كلاهما يطلب منك إرسال قائمة رسائل عبر POST والحصول على نص كاستجابة. يكمن الفرق في شكل الطلب، ومكان وجود الخادم، ومن يدفع مقابل وحدة معالجة الرسومات. يعمل Ollama على تشغيل النماذج على جهازك الخاص والاستماع عبر المنفذ 11434. أما واجهة برمجة التطبيقات الخاصة بـ OpenAI فهي خدمة مستضافة بنماذج مدفوعة خاصة بها. في مقارنة Ollama API مقابل OpenAI API، غالباً ما يغيب عن الناس شيء ثالث: Ollama يعرض أيضاً مسارات متوافقة مع OpenAI، لذا يتداخل التنسيقان.

هذا التداخل هو ما يجعل عملية التحويل رخيصة. إذا كان تطبيقك يستخدم بالفعل SDK الخاص بـ OpenAI، يمكنك توجيهه إلى Ollama المحلي اليوم وإلى عنوان URL متوافق مع OpenAI مستضاف غداً. نقطة النهاية المستضافة في هذا الموقع هي واحدة منها. وهي تقدم نموذجاً واحداً، uncensored، على العنوان https://api.ollamansfw.com/v1، وهي ليست منتجاً رسمياً من OpenAI أو Meta أو أي مختبر آخر.

الاختلافات نقطة نهاية بنقطة نهاية

المهمةOllama الأصليعلى غرار OpenAI
الدردشةPOST /api/chatPOST /v1/chat/completions
موجّه واحدPOST /api/generatePOST /v1/responses أو إكمال الدردشة
قائمة النماذجGET /api/tagsGET /v1/models
المصادقةلا يوجد افتراضياًAuthorization: Bearer key
البث المتدفقJSON مقسّم بأسطرأحداث مرسلة من الخادم (SSE)، تنتهي بعلامة done
اسم النموذجأي نموذج قمت بسحبه، مثل llama3أيًا كان ما يدرجه المزوّد

يقدم Ollama أيضاً /v1/chat/completions و /v1/models على نفس المنفذ، وهو ما يسمح لعملاء OpenAI بالتواصل معه. افتراضه للمكالمات الأصلية هو البث المتدفق، لذا اضبط stream: false عندما تريد استجابة JSON واحدة.

تنفذ نقطة النهاية المستضافة POST /v1/chat/completions، و POST /v1/responses، و GET /v1/models، بالإضافة إلى فحوصات الرصيد على العنوان GET /v1/balance. انظر إلى مستندات API للحصول على القائمة الكاملة.

نفس الطلب، بثلاث طرق

Ollama المدمج من Python:

import requests

r = requests.post(
    "http://localhost:11434/api/chat",
    json={
        "model": "llama3",
        "messages": [{"role": "user", "content": "Say hello in five words."}],
        "stream": False,
    },
)
print(r.json()["message"]["content"])

SDK الخاص بـ OpenAI، مع إعدادات محلية ومستضافة جنباً إلى جنب. يتغير فقط السطر المعلق:

from openai import OpenAI

# Local Ollama through its OpenAI-compatible layer:
# client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")

# Hosted endpoint, same code from here on:
client = OpenAI(base_url="https://api.ollamansfw.com/v1", api_key="YOUR_KEY")

resp = client.chat.completions.create(
    model="uncensored",   # local would be e.g. "llama3"
    messages=[{"role": "user", "content": "Say hello in five words."}],
)
print(resp.choices[0].message.content)

و curl ضد نقطة النهاية المستضافة مع تفعيل البث المتدفق:

curl https://api.ollamansfw.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"uncensored","messages":[{"role":"user","content":"Hello"}],"stream":true}'

يختلف التحليل على الجانب الأصلي: كل سطر مُبثّث هو كائن JSON يحتوي على message.content، والسطر الأخير يحتوي على done: true. في تنسيق OpenAI، يبدأ كل حدث بـ data: ، ويحتوي على جزء choices[0].delta.content، وينتهي البث بـ [DONE]. استخدم الـ SDK ولن ترى أيًا من هذين التنسيقين.

حيث يكون لكل منهما مبرر

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

تناسب نقطة النهاية المتوافقة مع OpenAI بشكل أفضل عندما لا تتوفر لديك العتاد، أو تحتاج إلى طلبات متزامنة كثيرة، أو تشغّل بوتًا أو خدمة لآخرين، أو تريد عنوان URL ثابتًا لا يعتمد على بقاء جهاز الكمبيوتر المحمول قيد التشغيل. يسمح المفتاح الكامل بإجراء 8 طلبات متزامنة و300 طلب في الدقيقة. تبلغ نافذة السياق 100000 رمز، وهو أكثر مما يمكن للعديد من الإعدادات المحلية استيعابه في الذاكرة.

يستخدم الكثير من الأشخاص الاثنين: المحلي للتجارب، والمستضاف لأي شيء يجب أن يبقى متصلاً. إذا كنت تزن أدوات محلية أخرى، اقرأ بدائل برنامج Ollama.

الانتقال من Ollama المحلي إلى المستضاف

  1. قم بالتبديل إلى تنسيق OpenAI أولاً. إذا كان كودك يستدعي /api/chat، فحوّله إلى الـ SDK الخاص بـ OpenAI الذي يشير إلى مسار /v1 الخاص بـ Ollama. تأكد من استمرار عمله محليًا.
  2. احصل على مفتاح. سجّل حسابًا وادّعي رصيد التجربة بقيمة $0.50 من صفحة مفتاح API. لا يتطلب ذلك أي طريقة دفع ويستمر لمدة 7 أيام.
  3. غيّر ثلاث قيم. عنوان URL الأساسي إلى https://api.ollamansfw.com/v1، والمفتاح إلى مفتاحك، والنموذج إلى uncensored.
  4. تحقق من المعاملات. تُمرر درجة الحرارة (temperature)، وtop_p، وstop، وseed، والعقوبات. لا تنطبق الخيارات الخاصة بالمحلي مثل num_ctx أو keep_alive الخاصة بـ Ollama؛ حيث تكون نافذة السياق ثابتة عند 100000 رمز.
  5. أضف منطق إعادة المحاولة. تُعيد نقطة النهاية المستضافة (API) 429 مع rate_limited أو concurrency عند تجاوز حدّ، و429 مع Retry-After: 5 أثناء الحمل الزائد المؤقت. نادرًا ما تفعل الخوادم المحلية ذلك، لذا قد لا يتعامل الكود الحالي مع ذلك.

إذا فشل شيء ما بعد التبديل، فإن المقال حول أخطاء واجهة برمجة التطبيقات (API) الشائعة في Ollama يغطي الأسباب المتكررة مثل المنافذ الخاطئة وأسماء النماذج المفقودة.

تكلفة النسخة المستضافة، وما لن تفعله

الفوترة بنظام الدفع حسب الاستخدام من رصيد مسبق الدفع: $0.15 لكل مليون رمز مدخل و$0.50 لكل مليون رمز مخرج. تبلغ تكلفة جولة محادثة تحتوي على 1,000 رمز مدخل و400 رمز مخرج $0.00015 + $0.0002 = $0.00035، لذا فإن $20 تغطي حوالي 57,000 من هذه الجولات. لا تُفرض رسوم على الطلبات الفاشلة أو المرفوضة ولا ينتهي الرصيد المسبق. يتم الشحن من $20 إلى $500 مع مكافآت +5% من $50، و+10% من $100 و+15% من $200. الدفع بالعملات المشفرة فقط (USDT على TRC20 أو USDC على Base). المزيد على صفحة الأسعار.

حدود يجب معرفتها: النصوص فقط، لذا لا توجد تضمينات (embeddings)، أو توليد صور أو ضبط دقيق (fine-tuning). إذا كنت تعتمد على التضمينات المحلية، فاحتفظ بها محليًا. النموذج مُعد للإجابة دون رفض المحتوى للاستخدام القانوني للبالغين. لا يُسمح أبدًا بمحتوى جنسي يتضمن قاصرين. لا تُستخدم الموجّهات للتدريب.

أسئلة وأجوبة

هل تتوافق واجهة برمجة تطبيقات Ollama مع واجهة برمجة تطبيقات OpenAI؟

جزئيًا. تمتلك Ollama مسارات مدمجة تحت /api وتقدم أيضًا مسارات على طراز OpenAI مثل /v1/chat/completions، لذا يمكن لعملاء SDK الخاص بـ OpenAI التحدث معها.

ماذا أغير للانتقال من Ollama المحلي إلى نقطة نهاية مستضافة؟

عنوان URL الأساسي، ومفتاح API واسم النموذج. إذا كان كودك يستخدم بالفعل SDK الخاص بـ OpenAI، فلا حاجة لتغيير أي شيء آخر.

هل تدعم نقطة النهاية المستضافة التضمينات (embeddings) مثل Ollama؟

لا. إنها توليد نصوص فقط: إكمال المحادثات والاستجابات، بدون تضمينات أو صور أو ضبط دقيق.

هل Ollama مجاني؟

البرنامج مجاني للتحميل والتشغيل. لا تزال تدفع مقابل العتاد والطاقة، بينما تفرض الـ API المستضافة رسومًا لكل رمز.