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

كيفية استخدام Ollama مع واجهة رسومية (ومُقدّم احتياطي مُستضاف)

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

محدّث

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

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

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

نقاط رئيسية

  • لا يمتلك Ollama نافذة دردشة مدمجة؛ يمكنك إضافة واجهة أمامية مثل Open WebUI.
  • تتحدث الواجهات الأمامية مع Ollama أو أي عنوان URL متوافق مع OpenAI، لذا يمكن لواجهة رسومية واحدة دعم الاتصالين.
  • لاتصال الاستضافة استخدم عنوان URL الأساسي https://api.ollamansfw.com/v1 ومعرف النموذج uncensored.
  • يعمل البث المتدفق، واستدعاء الدوال، ووضع JSON جميعها عبر نقطة النهاية المستضافة بإعدادات العميل القياسية.

لماذا يحتاج Ollama إلى واجهة مستخدم رسومية منفصلة

إذا كنت تريد معرفة كيفية استخدام ollama مع واجهة المستخدم الرسومية، فإن الحقيقة الأولى التي يجب قبولها هي أن مشروع Ollama هو خادم وأداة سطر أوامر. يقوم بسحب النماذج والرد على الطلبات عبر منفذ محلي. نافذة الدردشة هي مسؤولية طرف آخر، وهناك عدة خيارات جيدة.

هذا الانقسام مفيد. لأن Ollama يعرض واجهة برمجة تطبيقات على طراز OpenAI على جهازك الخاص (افتراضيًا على المنفذ 11434 تحت /v1)، يمكن لأي واجهة أمامية تتيح لك تعيين عنوان URL أساسي لـ OpenAI استخدامه. نفس الخاصية تعني أنه يمكنك توجيه تلك الواجهة الأمامية إلى مكان آخر لاحقًا. يشرح هذا المقال الإعداد المحلي أولاً، ثم يضيف نقطة نهاية مُستضافة كاتصال ثانٍ.

اختر واجهة أمامية

تغطي ثلاث فئات من الأدوات معظم المستخدمين. تحقق من وثائق كل مشروع للحصول على خطوات التثبيت الحالية، لأنها تتغير غالباً.

  • Open WebUI. واجهة متصفح مُستضافة ذاتيًا. تدعم Ollama مباشرة وتقبل أي اتصال متوافق مع OpenAI. تُركّب عادةً باستخدام Docker أو pip.
  • عملاء سطح المكتب. التطبيقات الأصلية مثل Chatbox أو Msty تتيح لك إضافة خادم Ollama أو مزود متوافق مع OpenAI من خلال شاشة الإعدادات. لا يوجد خادم لتشغيله.
  • واجهات لعب الأدوار والكتابة. يسمح لك SillyTavern بإضافة نقطة نهاية متوافقة مع OpenAI، وتوجد أدوات مماثلة للروايات الطويلة والشخصيات المرافقة للبالغين.

إذا لم ترد حاوية Docker، فإن عميل سطح المكتب هو أقصر مسار. إذا كنت تريد واجهة مشتركة لعدة أشخاص على شبكة واحدة، فإن Open WebUI هو الخيار المعتاد.

خطوة بخطوة مع Open WebUI

  1. قم بتثبيت وتشغيل Ollama، ثم اسحب نموذجاً باستخدام الأمر ollama pull. تأكد من استجابته من خلال طرفية الأوامر قبل المضي قدماً.
  2. ابدأ Open WebUI. مع Docker، النمط المعتاد هو نشر منفذ ولصق حجم لتخزين بياناته.
  3. افتح صفحة الويب، أنشئ الحساب المحلي الأول (ليصبح المسؤول)، وابحث عن منطقة الاتصالات في إعدادات المسؤول.
  4. تحقق من أن عنوان URL الخاص بـ Ollama يشير إلى الجهاز الذي يعمل عليه Ollama. عندما يكون الاثنان على المضيف نفسه، يكون هذا عادةً هو العنوان المحلي على المنفذ 11434. عندما يعمل Open WebUI داخل حاوية، يعني localhost الحاوية نفسها، وهو السبب الأكثر شيوعاً لبقاء قائمة النماذج فارغة.
  5. أعد التحميل، اختر نموذجاً من القائمة المنسدلة، وأرسل رسالة.

هذه واجهة مستخدم رسومية محلية كاملة. لا يغادر شيء جهازك، ويعتمد السرعة على وحدة معالجة الرسومات أو وحدة المعالجة المركزية لديك.

إضافة اتصال متوافق مع OpenAI مُدار

الآن، الحل البديل. نفترض أن النموذج الذي يمكنك تشغيله محلياً صغير جداً لمشهد طويل، أو أن وحدة معالجة الرسومات (GPU) مشغولة بالتصيير. يمكنك إضافة اتصال ثانٍ إلى نفس الواجهة الرسومية. لهذا تحتاج إلى مفتاح API، يمكنك الحصول عليه من صفحة مفتاح API بعد التسجيل عبر Google أو باستخدام البريد الإلكتروني وكلمة المرور. يتوفر رصيد تجريبي لمرة واحدة بقيمة $0.50 بنقرة واحدة، لا يتطلب دفعاً، ويستمر لمدة 7 أيام.

في Open WebUI، أضف اتصال OpenAI بهذه القيم:

  • عنوان URL الأساسي: https://api.ollamansfw.com/v1
  • مفتاح API: مفتاحك، يُرسل كـ Authorization: Bearer
  • النموذج: uncensored

إذا كنت تفضل متغيرات البيئة عند تشغيل الحاوية، فإن Open WebUI يوثق OPENAI_API_BASE_URL و OPENAI_API_KEY لهذا الغرض:

docker run -d -p 3000:8080 \
  -e OPENAI_API_BASE_URL=https://api.ollamansfw.com/v1 \
  -e OPENAI_API_KEY=YOUR_KEY \
  -v open-webui:/app/backend/data \
  --name open-webui ghcr.io/open-webui/open-webui:main
# model to pick in the UI: uncensored

بعد إعادة التحميل، سيظهر uncensored في القائمة المنسدلة للنماذج بجانب نماذجك المحلية. يكتشف الواجهة الأمامية هذا النموذج عبر طلب GET /v1/models. يمكنك الآن التبديل بين نموذج محلي والنموذج المستضاف داخل قائمة المحادثات نفسها.

اختبر نقطة النهاية خارج واجهة المستخدم الرسومية أولاً

عندما تظهر واجهة المستخدم الرسومية خطأً غامضاً، فإن أسرع طريقة لمعرفة ما إذا كانت المشكلة في المفتاح أو في الواجهة هي إجراء طلب مباشر. إليك طلب بث متدفق باستخدام curl:

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

يجب أن ترى سلسلة من الأسطر data: تنتهي بمعلومات الاستخدام. إذا نجح ذلك، فإن المفتاح وعنوان URL صحيحان، والمشكلة تكمن في الواجهة الأمامية. تغطي صفحة استكشاف الأخطاء الانزلاقات الشائعة مثل وجود /v1 ناقص أو مسافة زائدة في المفتاح.

إعدادات العميل نفسها التي تستخدمها للنماذج المحلية تنقل في الغالب. يتم تمرير درجة الحرارة وtop_p وتسلسلات التوقف والبذرة والعقوبات إلى النموذج.

استخدام نقطة النهاية المستضافة من خلال الكود الخاص بك

واجهة المستخدم الرسومية هي مجرد عميل واحد. السكربتات والتطبيقات الصغيرة هي أخرى، ونقطة النهاية المستضافة تعمل مع حزم تطوير البرمجيات (SDKs) القياسية الخاصة بـ OpenAI. يتم دعم استدعاء الدوال ووضع JSON، وهو أمر مهم إذا كانت واجهة المستخدم الرسومية أو الوكيل الخاص بك يستخدمانهما.

from openai import OpenAI

client = OpenAI(base_url="https://api.ollamansfw.com/v1", api_key="YOUR_KEY")

resp = client.chat.completions.create(
    model="uncensored",
    response_format={"type": "json_object"},
    messages=[
        {"role": "system", "content": "Reply with a JSON object with keys title and summary."},
        {"role": "user", "content": "A short story about a lighthouse keeper."},
    ],
)
print(resp.choices[0].message.content)

في Node، النمط مطابق:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.ollamansfw.com/v1",
  apiKey: process.env.API_KEY,
});

const stream = await client.chat.completions.create({
  model: "uncensored",
  stream: true,
  messages: [{ role: "user", content: "Name three sailing knots." }],
});
for await (const part of stream) {
  process.stdout.write(part.choices[0]?.delta?.content ?? "");
}

يحتوي دليل البدء السريع على المزيد من الأمثلة، بما في ذلك استدعاءات الأدوات باستخدام tool_choice.

المشاكل الشائعة وحلولها

تأتي معظم الأعطال في إعداد واجهة المستخدم الرسومية من قائمة قصيرة من الأسباب.

  • قائمة نماذج فارغة للاتصال المحلي. الواجهة الأمامية لا تستطيع الوصول إلى Ollama. تحقق من العنوان، وتذكر أن الواجهة الرسومية المُحاوية لا ترى جهازك الرئيسي باسم localhost.
  • خطأ 401 من نقطة النهاية المستضافة. المفتاح مفقود أو غير صحيح. الصقه مرة أخرى بدون مسافات، وتأكد من أن واجهة المستخدم الرسومية ترسله كرمز حامل.
  • خطأ 404 في كل الطلبات. على الأرجح يفتقر عنوان URL الأساسي إلى /v1، أو يحتوي عليه مرتين.
  • توقف الردود أو تجمد الواجهة. تقوم بعض الواجهات الأمامية بتخزين مخرجات البث عبر وسيط. جرب اختبار curl المباشر أعلاه، وإذا نجح البث، ففحص إعدادات الوسيط أمام واجهة المستخدم الرسومية.
  • ردود محلية بطيئة. النموذج كبير جداً بالنسبة لوحدة الذاكرة العشوائية للرسوميات (VRAM) ويتم تصريفه إلى ذاكرة النظام. اختر تكميم (quantization) أصغر، أو قم بتحويل ذلك الدردشة إلى الاتصال المستضاف.

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

الحدود والتكاليف التي يجب معرفتها في واجهة المستخدم الرسومية

يمكن للواجهات الأمامية إرسال عدة طلبات في وقت واحد، على سبيل المثال عند توليد عنوان محادثة في الخلفية بينما يتدفق الرد الرئيسي. يسمح المفتاح الكامل بـ 8 طلبات متزامنة و300 طلب في الدقيقة. يسمح المفتاح التجريبي بـ 2 طلب متزامن و60 طلب في الدقيقة. يحتفظ الطلب المتدفق بمكانه حتى ينتهي البث. إذا تجاوزت حدًا، تحصل على HTTP 429 مع الرمز rate_limited أو concurrency، وعلى التحميل الزائد المؤقت 429 مع Retry-After: 5. إيقاف توليد العنوان في الخلفية في الواجهة الرسومية هو حل بسيط لمفتاح تجريبي.

التكلفة لكل رمز: $0.15 لكل مليون رمز مدخل و$0.50 لكل مليون رمز مخرج. تكلفة دورة محادثة تحتوي على 2000 رمز من السجل و500 رمز رد هي $0.0003 بالإضافة إلى $0.00025، أي ما مجموعه $0.00055. تتضمن رؤوس الاستجابة X-Balance-USD، لذا يمكنك مراقبة انخفاض رصيدك. تفاصيل شحن الرصيد موجودة في صفحة الأسعار. هذا الموقع يقبل العملات المشفرة فقط: USDT على TRC20 أو USDC على Base، أي مبلغ صحيح من $20 إلى $500.

نافذة السياق هي 100,000 رمز، لذا فإن الدردشات الطويلة جداً ستكلف أكثر لكل دورة مع نمو السجل، لأن السجل الكامل يُرسل في كل مرة. تحتوي معظم واجهات المستخدم الرسومية على إعداد لتقليص أو تلخيص الرسائل القديمة.

أسئلة وأجوبة

هل يمتلك Ollama واجهة رسومية خاصة به؟

Ollama هو في الأساس خادم وأداة سطر أوامر. تأتي نوافذ الدردشة من مشاريع منفصلة مثل Open WebUI أو عملاء سطح المكتب الذين تتصل بهم.

هل يمكن لواجهة مستخدم رسومية واحدة استخدام نموذج محلي ونموذج مستضاف؟

نعم، إذا كانت الواجهة الأمامية تدعم اتصالات متعددة. أضف Ollama كواحد وعنوان URL متوافق مع OpenAI كآخر، ثم اختر النموذج لكل محادثة.

لماذا لا تظهر واجهة المستخدم الرسومية أي نماذج لنقطة النهاية المستضافة؟

تحقّق من أن عنوان URL الأساسي ينتهي بـ /v1، وأن المفتاح لا يحتوي على مسافات زائدة، وأن واجهة المستخدم الرسومية مسموح لها باستدعاء GET /v1/models. إذا استمر الفشل، اكتب معرف النموذج uncensored يدويًا.

ماذا أفعل إذا حصلت على خطأ HTTP 429؟

لقد تجاوزت حدّ المعدل أو حدّ الطلبات المتزامنة. قلّل الطلبات المتزامنة، وانتظر عدد الثواني المحدّد في Retry-After، ثم أعد المحاولة.