دليل النشر

استضافة ‫Langfuse‬ على ‫VPS‬: مراقبة ‫LLM‬ بلا فاتورة ‫SaaS‬

انشر على VPS Cloud ←

دليل عملي

استضافة ‫Langfuse‬ على ‫VPS‬: مراقبة ‫LLM‬ بلا فاتورة ‫SaaS‬

الذكاء الاصطناعي11 دقيقةً للقراءةعدد الخطوات: 7

كل تطبيق مدعوم بنموذج لغوي يُفرز في نهاية المطاف سؤالاً لا يستطيع مطوّروه الإجابة عنه من السجلات وحدها: لماذا تدهورت هذه الاستجابة، وأيّ نسخة ‫prompt‬ كانت أفضل، وأين تذهب الأموال؟ ‫Langfuse‬ (رخصة ‫MIT‬، نحو 30 ألف نجمة على ‫GitHub‬، ‫v3.212.0‬) هو الجواب مفتوح المصدر: منصة مراقبة متكاملة لتطبيقات ‫LLM‬ تنشرها على خادم ‫VPS‬ الخاص بك وتربطها بأي مزوّد نماذج في دقائق.

المحتويات· لماذا تحتاج تطبيقات ‫LLM‬ إلى مراقبة مخصّصة1/10
  1. 01لماذا تحتاج تطبيقات ‫LLM‬ إلى مراقبة مخصّصة
  2. 02ما يمنحك إياه ‫Langfuse‬ جاهزًا فور التثبيت
  3. 03ما يعمل عليه ‫Langfuse‬ (ولماذا يحتاج 4 GB من الذاكرة)
  4. 04نشر ‫Langfuse‬ على خادم ‫VPS‬ في ست خطوات
  5. 05الإعداد بعد التثبيت: ‫reverse proxy nginx‬ و‫TLS‬ ومتغيرات البيئة الأساسية
  6. 06اقرنه مع ‫LiteLLM‬ للرؤية الكاملة لتكاليف الذكاء الاصطناعي
  7. 07تكامل ‫SDK‬: تتبّع وكلاء ‫LLM‬ بـ ‫Python‬ و‫TypeScript‬
  8. 08تكاليف ‫LLM‬ تظهر $0.00 في واجهة ‫Tracing v4‬ — السبب والحل المؤقت
  9. 09استكشاف الأخطاء: خمس أخطاء شائعة بعد التثبيت
  10. 10‫Langfuse‬ مقابل ‫Langsmith‬ و‫Helicone‬

لماذا تحتاج تطبيقات ‫LLM‬ إلى مراقبة مخصّصة

أدوات ‫APM‬ التقليدية (‫Datadog‬ و‫New Relic‬) تلتقط كمون ‫HTTP‬ ومعدلات الأخطاء — لكنها عمياء أمام ما يحدث داخل استدعاء ‫LLM‬. استجابة تصل في 800 ميلي ثانية قد تكون لا تزال خاطئة واقعيًا، أو مبهمة بلا فائدة، أو ثلاثة أضعاف تكلفة استجابة الأمس لأن انتكاسة ‫prompt‬ تسللت دون أن يلاحظها أحد في مراجعة الكود. يحلّ ‫Langfuse‬ هذه المشكلة بمعاملة كل تفاعل مع ‫LLM‬ باعتباره ‫trace‬ منظّمًا: يسجّل الـ ‫prompt‬ الكامل (بما في ذلك رسالة النظام وتاريخ المحادثة) والاستجابة والنموذج المستخدم وعدد الرموز وتفصيل الكمون لكل نطاق وأي درجات تقييم يرفقها فريقك. يمكنك بعد ذلك تصفية أي ‫trace‬ ومقارنته واستنساخه — بشكل فردي أو مجمّع.

ما يمنحك إياه ‫Langfuse‬ جاهزًا فور التثبيت

  • تتبّع ‫LLM‬ كامل: الـ ‫prompt‬ والاستجابة والكمون والتكلفة وعدد الرموز — بما في ذلك النطاقات المتداخلة لسلاسل الوكلاء (‫LangChain‬ و‫LlamaIndex‬ و‫Dify‬).
  • مركز إدارة الـ ‫prompts‬: إدارة نسخها، وتدريج المتغيرات، واختبار ‫A/B‬ في الإنتاج، وترويج الفائز دون نشر كود.
  • إطار تقييم: تشغيل ‫LLM-as-a-judge‬، وطوابير تعليق بشرية، أو دوال تسجيل مخصّصة على أي ‫trace‬ أو مجموعة بيانات.
  • تحليلات التكلفة: تتبّع إنفاق الرموز حسب النموذج والنقطة الطرفية والمستخدم والجلسة — التبديل بين المزوّدين بناءً على بيانات.
  • إدارة مجموعات البيانات: التقاط ‫traces‬ الإنتاج كمجموعات اختبار ذهبية للتقييم غير المتصل واكتشاف الانتكاسات.
  • ‫SDK‬ أصلي لـ ‫Python‬ و‫TypeScript‬، مع تكامل تلقائي مع ‫LiteLLM‬ و‫LangChain‬ و‫LlamaIndex‬ و‫Dify‬ و‫Haystack‬ و‫VercelAI‬.

ما يعمل عليه ‫Langfuse‬ (ولماذا يحتاج 4 GB من الذاكرة)

يأتي ‫Langfuse v3‬ كـ ‫stack Docker Compose‬ من ستة خدمات: langfuse (واجهة ‫Next.js‬ الأمامية + ‫API‬) وlangfuse-worker (وظائف الخلفية والتقييمات) وpostgres (حالة التطبيق) وclickhouse (تحليلات ‫traces‬ — تخزين عمودي محسّن للسلاسل الزمنية عالية الكثافة) وredis (قائمة انتظار وذاكرة تخزين مؤقت) وminio (تخزين كائنات متوافق مع ‫S3‬ للمرفقات الوسائطية). ‫ClickHouse‬ هو سبب الحدّ الأدنى البالغ 4 GB: يحتاج مترجمه ‫JIT‬ ومحرك التنفيذ المتجّه إلى مساحة كافية. في الخادم الهادئ تستهلك المجموعة الكاملة نحو 1.5-2 GB في وضع الخمول؛ لحركة مرور إنتاجية معتدلة خطّط لـ 4 GB، ومع 8 GB للتتبّع المستمر عالي الإنتاجية.

نشر ‫Langfuse‬ على خادم ‫VPS‬ في ست خطوات

  1. اطلب ‫VPS Power‬ (8 GB من ذاكرة ‫RAM‬)

    يحتاج ‫Langfuse‬ إلى 4 GB من ذاكرة ‫RAM‬ على الأقل: في الكتالوج، أول خطة تتجاوز هذا الحدّ هي ‫VPS Power‬ (4 vCPU، 8 GB) بنظام ‫Ubuntu 24.04‬ — وهي تكفي أيضًا لحركة مرور إنتاجية مستمرة. اختر نطاقًا أو نطاقًا فرعيًا تتحكم فيه — ملفات تعريف الارتباط للجلسة في ‫NextAuth‬ تتطلب نطاق ‫HTTPS‬ صحيحًا.

  2. تثبيت بنقرة واحدة من السوق

    افتح لوحة تحكم ‫ServOrbit‬، انتقل إلى ‫Marketplace‬ → الذكاء الاصطناعي → ‫Langfuse‬، وانقر "نشر". أدخل نطاقك عند المطالبة. يسحب ‫Docker Compose‬ جميع الصور الست ويشغّلها؛ واجهة الويب جاهزة على المنفذ 3000 خلال 60-90 ثانية.

  3. افتح واجهة الويب وأنشئ مشروعك الأول

    انتقل إلى https://your-domain.com. يعرض ‫Langfuse‬ شاشة التسجيل عند التشغيل الأول. أنشئ حسابك الإداري، ثم اذهب إلى ‫Settings‬ → ‫Projects‬ → ‫Create project‬. انسخ المفتاح العام والمفتاح السري من إعدادات المشروع — ستحتاجهما في تطبيقك.

  4. قِس تطبيق ‫Python‬ أو ‫TypeScript‬ الخاص بك

    في ‫Python‬: pip install langfuse، اضبط LANGFUSE_HOST=https://your-domain.com وLANGFUSE_PUBLIC_KEY وLANGFUSE_SECRET_KEY، ثم زيّن استدعاءات ‫LLM‬ بـ @observe(). في ‫TypeScript‬: npm install langfuse، هيّئه بمضيفك ومفاتيحك. تظهر ‫traces‬ في اللوحة خلال ثوانٍ.

  5. فعّل التتبّع التلقائي إذا كنت تستخدم ‫LiteLLM‬

    إذا كان ‫LiteLLM‬ موجودًا في stack: أضف success_callback = ["langfuse"] إلى litellm_config.yaml واضبط متغيرات البيئة الثلاثة. كل استدعاء ‫LLM‬ proxied يُتتبَّع تلقائيًا بتفاصيل التكلفة والرموز.

  6. شغّل تقييمك الأول

    اذهب إلى ‫Traces‬، صفّ عيّنة تمثيلية، انقر 'Add to dataset'. افتح ‫Datasets‬ → مجموعتك → ‫Run evaluation‬، اختر ‫LLM-as-a-judge‬ مع قالب ‫prompt‬ ('قيّم ملاءمة هذه الاستجابة من 1 إلى 5')، وأرسل.

  7. أول تسجيل دخول

    يفتح الرابط شاشة ‫Langfuse‬ مع رابط «Sign up»: أنشئوا حسابكم، ثم أنشئوا مؤسستكم ومشروعكم الأول عبر المعالج.

الإعداد بعد التثبيت: ‫reverse proxy nginx‬ و‫TLS‬ ومتغيرات البيئة الأساسية

يقوم تثبيت ‫ServOrbit Marketplace‬ بتهيئة ‫nginx‬ وشهادة ‫TLS‬ تلقائيًا. إذا كنت تُعدّ يدويًا، إليك النقاط الحرجة.

‫Reverse proxy nginx‬. يستمع ‫Langfuse‬ على المنفذ 3000. يجب أن يعيد ‫vhost nginx‬ توجيه هذا المنفذ ويُرسل الترويسات الضرورية لـ ‫NextAuth‬:

server {
    listen 443 ssl;
    server_name your-domain.com;
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

إذا لم يُرسَل X-Forwarded-Proto، يولّد ‫NextAuth‬ روابط ‫callback‬ عبر http:// ولا تُرفق ملفات تعريف ارتباط الجلسة على استجابة ‫HTTPS‬ — العَرَض: حلقة إعادة توجيه بعد تسجيل الدخول.

متغيرات البيئة الأساسية. يحتوي ملف .env للـ ‫stack‬ على ثلاثة متغيرات يجب تخصيصها قبل التشغيل الأول:

- NEXTAUTH_SECRET: سلسلة عشوائية طويلة (32 حرفًا كحدٍّ أدنى). بدونها لا تستمر الجلسات عبر إعادة التشغيل.
- NEXTAUTH_URL: عنوان ‫URL‬ العلني الكامل لمثيلك (https://your-domain.com). يجب أن يطابق نطاق ‫nginx‬ تمامًا.
- LANGFUSE_INIT_ORG_ID وLANGFUSE_INIT_PROJECT_ID وLANGFUSE_INIT_PROJECT_PUBLIC_KEY وLANGFUSE_INIT_PROJECT_SECRET_KEY: اختيارية، لكنها مفيدة لتوفير المؤسسة والمشروع عند التشغيل الأول دون واجهة المستخدم.

‫TLS‬. تستخدم عمليات نشر ‫ServOrbit‬ ‫Let's Encrypt‬ عبر ‫certbot‬ في وضع ‫DNS-01‬ — لا حاجة لفتح المنفذ 80. إذا هيّأت الشهادة يدويًا، أشر توجيهات ssl_certificate وssl_certificate_key إلى الملفات الصادرة عن ‫certbot‬ وفعّل التجديد التلقائي.

اقرنه مع ‫LiteLLM‬ للرؤية الكاملة لتكاليف الذكاء الاصطناعي

يتضمّن ‫stack ServOrbit AI‬ بالفعل ‫LiteLLM‬ كبوابة متوافقة مع ‫OpenAI‬. ربط ‫Langfuse‬ بـ ‫LiteLLM‬ بثلاثة متغيرات بيئة يمنحك صورة كاملة: ‫LiteLLM‬ يفرض حدود المعدل ويوجّه بين المزوّدين؛ ‫Langfuse‬ يسجّل كل ‫trace‬ بالـ ‫prompt‬ الكامل والاستجابة والنموذج والرموز والتكلفة. معًا يمنحانك طبقة عمليات ذكاء اصطناعي خاصة وقابلة للتدقيق.

تكامل ‫SDK‬: تتبّع وكلاء ‫LLM‬ بـ ‫Python‬ و‫TypeScript‬

يوفّر ‫Langfuse‬ اثنين من ‫SDK‬ الرسميين يغطيان أبرز أطر عمل الوكلاء.

‫Python‬ — مزخرف @observe().
أبسط طريقة لتتبّع وكيل:

from langfuse.decorators import observe, langfuse_context

@observe()
def run_agent(user_message: str) -> str:
    response = openai_client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": user_message}]
    )
    return response.choices[0].message.content

كل دالة متداخلة مزخرفة بـ @observe() تظهر كـ ‫span‬ فرعي في نفس الـ ‫trace‬. لإرفاق بيانات وصفية:

langfuse_context.update_current_trace(
    user_id="user-42",
    session_id="session-abc",
    tags=["production", "agent-v2"]
)

‫LangChain‬. التكامل الأصلي يُفعَّل بسطر واحد:

from langfuse.callback import CallbackHandler
handler = CallbackHandler()
chain.invoke({"input": query}, config={"callbacks": [handler]})

‫TypeScript / JavaScript‬.
تهيئة العميل:

import Langfuse from "langfuse";
const lf = new Langfuse({
  publicKey: process.env.LANGFUSE_PUBLIC_KEY!,
  secretKey: process.env.LANGFUSE_SECRET_KEY!,
  baseUrl: process.env.LANGFUSE_HOST,
});

إنشاء ‫trace‬ وجيل:

const trace = lf.trace({ name: "agent-run", userId: "user-42" });
const generation = trace.generation({ name: "llm-call", model: "gpt-4o", input: messages });
// … استدعاء LLM …
generation.end({ output: result, usage: { input: 120, output: 45 } });
await lf.shutdownAsync();

تكاليف ‫LLM‬ تظهر $0.00 في واجهة ‫Tracing v4‬ — السبب والحل المؤقت

يؤثّر خلل نشط على واجهة ‫Tracing v4‬ في ‫Langfuse‬ (مُتابَع في ‫issue #16077‬، 17 تعليقًا في أغسطس 2026): يعرض عمود Cost ($) دائمًا $0.00 لجميع الـ ‫traces‬.

السبب بنيوي. تقرأ الواجهة ‫v4‬ التكلفة على الملاحظة الجذرية (‫SPAN‬) — لا يحمل ‫SPAN‬ تكلفة ذاتية. التكلفة الفعلية موزّعة على ‫GENERATION‬ الأبناء، لكن الواجهة لا تجمعها.

بياناتك سليمة. ثلاثة حلول مؤقتة:

1. تبويب ‫Analytics / Metrics‬ — يحسب التكاليف على جميع عمليات التوليد.

2. التصفية حسب ‫GENERATION‬ في ‫Traces‬ — أضف observation_type = GENERATION. كل صف يعرض تكلفته الحقيقية.

3. فتح لوحة تفاصيل الـ ‫trace‬ — تعرض التوزيع الكامل بالتكاليف الصحيحة.

الـ ‫issue‬ مفتوحة ومتابَعة من فريق ‫Langfuse‬.

استكشاف الأخطاء: خمس أخطاء شائعة بعد التثبيت

1. حاوية langfuse لا تبدأ — Error: NEXTAUTH_SECRET مفقود.
تحقق من ملف .env:

docker compose config | grep NEXTAUTH_SECRET

إذا كان السطر غائبًا أو فارغًا، أنشئ قيمة وأعد التشغيل:

openssl rand -base64 32
# الصق النتيجة في .env: NEXTAUTH_SECRET=<value>
docker compose up -d langfuse

2. رفض الاتصال بقاعدة البيانات — ECONNREFUSED postgres:5432.
هذا في الغالب مشكلة توقيت عند بدء التشغيل. تأكد من أن docker-compose.yml يُعلن depends_on مع condition: service_healthy لخدمة postgres. تفقّد سجلات ‫postgres‬ إذا استمرت المشكلة:

docker compose logs postgres --tail=50

3. لا تظهر ‫traces‬ في لوحة التحكم.
تحقق: (أ) هل متغيرات البيئة LANGFUSE_HOST وLANGFUSE_PUBLIC_KEY وLANGFUSE_SECRET_KEY مضبوطة في تطبيقك؟ (ب) هل يشير ‫host‬ إلى عنوان ‫URL‬ ‫HTTPS‬ العلني لا إلى localhost:3000؟ (ج) هل ‫Python SDK‬ يُفرغ مخزنه المؤقت قبل انتهاء العملية (langfuse.flush())؟

اختبار سريع:

from langfuse import Langfuse
lf = Langfuse()
lf.trace(name="test-connection")
lf.flush()
print("تم إرسال الـ trace — تحقق من لوحة التحكم.")

4. حلقة إعادة توجيه بعد تسجيل الدخول.
السبب الأكثر شيوعًا: NEXTAUTH_URL لا يطابق النطاق المستخدم، أو لم يُرسَل X-Forwarded-Proto من ‫nginx‬. تحقق من أن NEXTAUTH_URL=https://your-domain.com وأن إعداد ‫nginx‬ يتضمن proxy_set_header X-Forwarded-Proto $scheme;.

5. ‫ClickHouse‬ يستهلك كل ذاكرة ‫RAM‬ المتاحة.
حدّ استهلاك الذاكرة بإضافة إلى .env:

CLICKHOUSE_MAX_MEMORY_USAGE=2000000000

هذه القيمة (2 GB) نقطة بداية معقولة لـ ‫VPS‬ بـ 8 GB يُشغّل ‫Langfuse‬ وحده.

‫Langfuse‬ مقابل ‫Langsmith‬ و‫Helicone‬

‫Langsmith‬ (منتج ‫LangChain‬ المستضاف) و‫Helicone‬ هما البديلان السحابيان الرئيسيان. كلاهما ممتاز — وكلاهما يتطلب توجيه ‫traces‬ الخاصة بك عبر خوادمهم. للفرق التي تتعامل مع ‫prompts‬ حساسة (قانونية، مالية، طبية)، أو لبيئات الامتثال التي تحظر تسرّب البيانات إلى طرف ثالث، الاستضافة الذاتية ليست خيارًا. يمنحك ‫Langfuse‬ نفس مجموعة الميزات (التتبّع، التقييمات، إدارة الـ ‫prompts‬، تحليلات التكاليف) على بنية تحتية تتحكم فيها.

انشر Langfuse على خادم VPS الخاص بك

احصل على مراقبة كاملة لنماذج LLM بنقرة واحدة — تتبّع كل طلب ذكاء اصطناعي، وأدر المطالبات (prompts)، وراقب التكاليف، على بنية تحتية تحت سيطرتك الكاملة.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة