لماذا تحتاج تطبيقات 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 في ست خطوات
اطلب VPS Power (8 GB من ذاكرة RAM)
يحتاج Langfuse إلى 4 GB من ذاكرة RAM على الأقل: في الكتالوج، أول خطة تتجاوز هذا الحدّ هي VPS Power (4 vCPU، 8 GB) بنظام Ubuntu 24.04 — وهي تكفي أيضًا لحركة مرور إنتاجية مستمرة. اختر نطاقًا أو نطاقًا فرعيًا تتحكم فيه — ملفات تعريف الارتباط للجلسة في NextAuth تتطلب نطاق HTTPS صحيحًا.
تثبيت بنقرة واحدة من السوق
افتح لوحة تحكم ServOrbit، انتقل إلى Marketplace → الذكاء الاصطناعي → Langfuse، وانقر "نشر". أدخل نطاقك عند المطالبة. يسحب Docker Compose جميع الصور الست ويشغّلها؛ واجهة الويب جاهزة على المنفذ 3000 خلال 60-90 ثانية.
افتح واجهة الويب وأنشئ مشروعك الأول
انتقل إلى
https://your-domain.com. يعرض Langfuse شاشة التسجيل عند التشغيل الأول. أنشئ حسابك الإداري، ثم اذهب إلى Settings → Projects → Create project. انسخ المفتاح العام والمفتاح السري من إعدادات المشروع — ستحتاجهما في تطبيقك.قِس تطبيق 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 في اللوحة خلال ثوانٍ.فعّل التتبّع التلقائي إذا كنت تستخدم LiteLLM
إذا كان LiteLLM موجودًا في stack: أضف
success_callback = ["langfuse"]إلىlitellm_config.yamlواضبط متغيرات البيئة الثلاثة. كل استدعاء LLM proxied يُتتبَّع تلقائيًا بتفاصيل التكلفة والرموز.شغّل تقييمك الأول
اذهب إلى Traces، صفّ عيّنة تمثيلية، انقر 'Add to dataset'. افتح Datasets → مجموعتك → Run evaluation، اختر LLM-as-a-judge مع قالب prompt ('قيّم ملاءمة هذه الاستجابة من 1 إلى 5')، وأرسل.
أول تسجيل دخول
يفتح الرابط شاشة 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 langfuse2. رفض الاتصال بقاعدة البيانات — ECONNREFUSED postgres:5432.
هذا في الغالب مشكلة توقيت عند بدء التشغيل. تأكد من أن docker-compose.yml يُعلن depends_on مع condition: service_healthy لخدمة postgres. تفقّد سجلات postgres إذا استمرت المشكلة:
docker compose logs postgres --tail=503. لا تظهر 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، تحليلات التكاليف) على بنية تحتية تتحكم فيها.