قابلية المراقبة الإنتاجية

Langfuse: قابلية مراقبة LLM مفتوحة المصدر

4 دقيقة للقراءة

Langfuse هي المنصة الرائدة مفتوحة المصدر لقابلية مراقبة LLM، تقدم التتبع والتقييم وإدارة المطالبات. في يونيو 2025، أصبحت ميزات Langfuse التجارية السابقة مفتوحة المصدر بما في ذلك تقييمات LLM كحكم، وقوائم انتظار التعليق، وساحة المطالبات تحت ترخيص MIT.

نظرة عامة على المعمارية

┌─────────────────────────────────────────────────────────────┐
│                     منصة Langfuse                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                   لوحة الويب                         │   │
│  │  ┌──────────┐ ┌──────────┐ ┌────────────────────┐   │   │
│  │  │ التتبعات │ │ الجلسات  │ │ إدارة المطالبات   │   │   │
│  │  └──────────┘ └──────────┘ └────────────────────┘   │   │
│  │  ┌──────────┐ ┌──────────┐ ┌────────────────────┐   │   │
│  │  │ الدرجات │ │مجموعات   │ │ قوائم التعليق     │   │   │
│  │  └──────────┘ └──────────┘ └────────────────────┘   │   │
│  └─────────────────────────────────────────────────────┘   │
│                          ↑ REST API                         │
│  ┌─────────────────────────────────────────────────────┐   │
│  │          الخلفية (TypeScript/Node.js)                │   │
│  │      PostgreSQL + ClickHouse (التحليلات)             │   │
│  └─────────────────────────────────────────────────────┘   │
│                          ↑ SDKs                             │
│  ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌──────────┐   │
│  │  Python   │ │TypeScript │ │ LangChain │ │ LlamaIdx │   │
│  └───────────┘ └───────────┘ └───────────┘ └──────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

البداية السريعة مع Python SDK

التثبيت والإعداد

pip install langfuse

# تعيين متغيرات البيئة
export LANGFUSE_SECRET_KEY="sk-lf-..."
export LANGFUSE_PUBLIC_KEY="pk-lf-..."
export LANGFUSE_HOST="https://cloud.langfuse.com"  # أو مستضاف ذاتياً

التتبع الأساسي

from langfuse import Langfuse
from langfuse.decorators import observe, langfuse_context
from openai import OpenAI

langfuse = Langfuse()
client = OpenAI()

@observe()
def process_query(user_question: str) -> str:
    # تتبع توليد التضمين
    with langfuse_context.span(name="embedding") as span:
        embedding_response = client.embeddings.create(
            model="text-embedding-3-small",
            input=user_question
        )
        span.update(
            input=user_question,
            output={"dimensions": len(embedding_response.data[0].embedding)}
        )

    # تتبع إكمال LLM
    with langfuse_context.generation(name="completion") as gen:
        response = client.chat.completions.create(
            model="gpt-4o",
            messages=[
                {"role": "system", "content": "أنت مساعد مفيد."},
                {"role": "user", "content": user_question}
            ]
        )
        gen.update(
            model="gpt-4o",
            input=user_question,
            output=response.choices[0].message.content,
            usage={
                "prompt_tokens": response.usage.prompt_tokens,
                "completion_tokens": response.usage.completion_tokens
            }
        )

    return response.choices[0].message.content

# يتم التقاط التتبع تلقائياً
result = process_query("ما هي عاصمة فرنسا؟")

تتبع الجلسات للمحادثات

@observe()
def chat(messages: list, session_id: str, user_id: str):
    # الربط بالجلسة والمستخدم
    langfuse_context.update_current_trace(
        session_id=session_id,
        user_id=user_id,
        metadata={"source": "web_chat"}
    )

    response = client.chat.completions.create(
        model="gpt-4o",
        messages=messages
    )

    return response.choices[0].message.content

تقييمات LLM كحكم (مفتوح المصدر يونيو 2025)

يتضمن Langfuse الآن مقيمات LLM مدمجة:

from langfuse import Langfuse

langfuse = Langfuse()

# إنشاء قالب تقييم
langfuse.create_prompt(
    name="helpfulness-evaluator",
    prompt="""قيّم فائدة رد الذكاء الاصطناعي هذا على مقياس من 1-5.

سؤال المستخدم: {{question}}
رد الذكاء الاصطناعي: {{response}}

المعايير:
- 1: غير مفيد على الإطلاق، غير صحيح أو غير ذي صلة
- 2: مفيد بشكل ضئيل، يعالج السؤال جزئياً
- 3: مفيد بشكل معتدل، يعالج السؤال بشكل كافٍ
- 4: مفيد جداً، يعالج السؤال جيداً مع تفاصيل جيدة
- 5: مفيد للغاية، شامل وعميق

قدم تقييمك كرقم واحد.""",
    config={
        "model": "gpt-4o-mini",
        "temperature": 0
    }
)

# تشغيل التقييم الآلي على التتبعات
evaluation_results = langfuse.evaluate(
    evaluator_name="helpfulness-evaluator",
    trace_filter={
        "created_at": {"gte": "2026-01-01"},
        "tags": ["production"]
    },
    sample_size=100
)

وظائف المقيم المخصصة

from langfuse.decorators import observe

@observe(as_type="generation")
def evaluate_response(trace_id: str, response: str) -> dict:
    # منطق التقييم المخصص الخاص بك
    evaluation = client.chat.completions.create(
        model="gpt-4o",
        messages=[
            {"role": "system", "content": "قيّم الرد التالي..."},
            {"role": "user", "content": response}
        ]
    )

    score = extract_score(evaluation.choices[0].message.content)

    # تسجيل الدرجة إلى التتبع
    langfuse.score(
        trace_id=trace_id,
        name="custom-quality",
        value=score,
        comment="تقييم آلي"
    )

    return {"score": score}

قوائم انتظار التعليق (مفتوح المصدر يونيو 2025)

إنشاء سير عمل المراجعة البشرية:

# إنشاء قائمة انتظار التعليق
queue = langfuse.create_annotation_queue(
    name="low-confidence-reviews",
    description="مراجعة التتبعات حيث كانت ثقة النموذج منخفضة",
    filter={
        "metadata.confidence": {"lt": 0.7}
    }
)

# المراجعون يراجعون في لوحة التحكم ويضيفون درجات
# الدرجات ترتبط تلقائياً بالتتبعات

إدارة المطالبات

مطالبات متحكم بالإصدارات

# جلب مطالبة الإنتاج
prompt = langfuse.get_prompt("customer-support-v2")

# الاستخدام في تطبيقك
response = client.chat.completions.create(
    model=prompt.config["model"],
    messages=[
        {"role": "system", "content": prompt.compile()},
        {"role": "user", "content": user_message}
    ]
)

# ربط التوليد بإصدار المطالبة لاختبار A/B
with langfuse_context.generation(name="completion") as gen:
    gen.update(prompt=prompt)

الاستضافة الذاتية لـ Langfuse

# docker-compose.yml للاستضافة الذاتية لـ Langfuse
version: "3.8"
services:
  langfuse:
    image: langfuse/langfuse:latest
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://postgres:password@db:5432/langfuse
      - CLICKHOUSE_URL=http://clickhouse:8123
      - NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
      - SALT=${SALT}
    depends_on:
      - db
      - clickhouse

  db:
    image: postgres:16
    environment:
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=langfuse
    volumes:
      - postgres_data:/var/lib/postgresql/data

  clickhouse:
    image: clickhouse/clickhouse-server:latest
    volumes:
      - clickhouse_data:/var/lib/clickhouse

volumes:
  postgres_data:
  clickhouse_data:

التكامل مع LangChain

from langchain_openai import ChatOpenAI
from langchain.callbacks import LangfuseCallbackHandler

# التتبع التلقائي لـ LangChain
handler = LangfuseCallbackHandler(
    public_key="pk-lf-...",
    secret_key="sk-lf-..."
)

llm = ChatOpenAI(
    model="gpt-4o",
    callbacks=[handler]
)

# جميع عمليات LangChain يتم تتبعها
response = llm.invoke("ما هو التعلم الآلي؟")

:::

اختبار

الوحدة 4: قابلية المراقبة الإنتاجية

خذ الاختبار
نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.