قابلية المراقبة الإنتاجية
LangSmith: منصة قابلية المراقبة من LangChain
3 دقيقة للقراءة
LangSmith هي منصة قابلية المراقبة والتقييم المتكاملة من LangChain، توفر رؤية عميقة لتطبيقات LangChain مع ميزات مثل التتبع والاختبار وساحة المطالبات.
المعمارية والتكامل
┌─────────────────────────────────────────────────────────────┐
│ منصة LangSmith │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ لوحة الويب │ │
│ │ ┌──────────┐ ┌──────────┐ ┌────────────────────┐ │ │
│ │ │ التتبعات │ │ الساحة │ │ التقييمات │ │ │
│ │ └──────────┘ └──────────┘ └────────────────────┘ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌────────────────────┐ │ │
│ │ │مجموعات │ │ التعليقات│ │ Hub (المطالبات) │ │ │
│ │ └──────────┘ └──────────┘ └────────────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ ↑ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ تكامل LangChain │ │
│ │ │ │
│ │ التتبع التلقائي لـ: │ │
│ │ • السلاسل، الوكلاء، الأدوات │ │
│ │ • استدعاءات LLM (أي مزود) │ │
│ │ • عمليات الاسترجاع │ │
│ │ • المكونات المخصصة │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
البداية السريعة
الإعداد
pip install langsmith langchain langchain-openai
# تعيين متغيرات البيئة
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY="ls__..."
export LANGCHAIN_PROJECT="my-project"
التتبع التلقائي لـ LangChain
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# جميع عمليات LangChain تُتبع تلقائياً
llm = ChatOpenAI(model="gpt-4o")
prompt = ChatPromptTemplate.from_messages([
("system", "أنت مساعد مفيد."),
("user", "{question}")
])
chain = prompt | llm | StrOutputParser()
# هذه السلسلة بأكملها تُتبع في LangSmith
response = chain.invoke({"question": "ما هو التعلم الآلي؟"})
التتبع اليدوي مع @traceable
from langsmith import traceable
from openai import OpenAI
client = OpenAI()
@traceable(name="generate_response")
def generate_response(user_message: str) -> str:
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "أنت مفيد."},
{"role": "user", "content": user_message}
]
)
return response.choices[0].message.content
@traceable(name="process_query")
def process_query(query: str) -> dict:
# التتبعات المتداخلة ترتبط تلقائياً
response = generate_response(query)
return {"query": query, "response": response}
ساحة المطالبات
اختبر وكرر على المطالبات مباشرة في LangSmith:
from langsmith import Client
client = Client()
# إنشاء مطالبة في الساحة
prompt = client.create_prompt(
name="customer_support",
template="""أنت وكيل دعم عملاء لـ {{company}}.
استفسار المستخدم: {{query}}
رد بشكل مفيد ومهني.""",
input_schema={
"company": {"type": "string"},
"query": {"type": "string"}
}
)
# استخدام المطالبة في تطبيقك
from langchain import hub
prompt_template = hub.pull("customer_support")
chain = prompt_template | llm | StrOutputParser()
التقييم القائم على مجموعات البيانات
إنشاء مجموعات بيانات للتقييم وتشغيل اختبارات آلية:
from langsmith import Client
from langsmith.evaluation import evaluate
client = Client()
# إنشاء مجموعة بيانات
dataset = client.create_dataset(
name="support_qa_test",
description="حالات اختبار لدعم العملاء"
)
# إضافة أمثلة
client.create_examples(
inputs=[
{"query": "كيف أعيد تعيين كلمة المرور؟"},
{"query": "ما هي ساعات العمل؟"},
],
outputs=[
{"expected": "تعليمات إعادة تعيين كلمة المرور"},
{"expected": "ساعات العمل"},
],
dataset_id=dataset.id
)
# تحديد السلسلة/الوظيفة للتقييم
def my_chain(inputs: dict) -> dict:
response = chain.invoke(inputs)
return {"response": response}
# تشغيل التقييم
results = evaluate(
my_chain,
data=dataset.name,
evaluators=[
"correctness", # مقيم مدمج
"helpfulness",
],
experiment_prefix="support-v2"
)
المقيمات المخصصة
from langsmith.evaluation import EvaluationResult
def custom_evaluator(run, example) -> EvaluationResult:
"""تحقق إذا كان الرد يذكر المصطلحات الرئيسية."""
response = run.outputs.get("response", "")
expected_terms = example.outputs.get("expected_terms", [])
matches = sum(1 for term in expected_terms if term.lower() in response.lower())
score = matches / len(expected_terms) if expected_terms else 1.0
return EvaluationResult(
key="term_coverage",
score=score,
comment=f"تطابق {matches}/{len(expected_terms)} مصطلحات"
)
results = evaluate(
my_chain,
data=dataset.name,
evaluators=[custom_evaluator]
)
قوائم انتظار التعليق
إعداد سير عمل المراجعة البشرية:
# إنشاء قائمة انتظار تعليق
queue = client.create_annotation_queue(
name="low_confidence_reviews",
description="مراجعة الردود ذات الثقة المنخفضة"
)
# إضافة التشغيلات للقائمة برمجياً
@traceable
def generate_with_review(query: str):
response = chain.invoke({"query": query})
# تحقق من الثقة وأضف للمراجعة إذا لزم الأمر
confidence = estimate_confidence(response)
if confidence < 0.7:
# التشغيل سيظهر في قائمة التعليق
pass
return response
اختبار A/B مع التجارب
مقارنة تكوينات مختلفة:
# تشغيل التجربة مع المتغير A
results_a = evaluate(
chain_v1,
data="test_dataset",
experiment_prefix="chain-v1"
)
# تشغيل التجربة مع المتغير B
results_b = evaluate(
chain_v2,
data="test_dataset",
experiment_prefix="chain-v2"
)
# المقارنة في لوحة LangSmith
مراقبة الإنتاج
from langsmith import Client
from datetime import datetime, timedelta
client = Client()
# استعلام التشغيلات الأخيرة
runs = client.list_runs(
project_name="production",
start_time=datetime.now() - timedelta(hours=24),
filter='eq(status, "error")' # البحث عن الأخطاء
)
# تحليل المقاييس
for run in runs:
print(f"خطأ: {run.error}")
print(f"زمن الاستجابة: {run.latency_ms}ms")
print(f"الرموز: {run.total_tokens}")
أفضل الممارسات
┌─────────────────────────────────────────────────────────────┐
│ أفضل ممارسات LangSmith │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. تنظيم المشاريع │
│ ├── مشاريع منفصلة للتطوير/الاختبار/الإنتاج │
│ ├── استخدم اتفاقيات تسمية متسقة │
│ └── وسم التشغيلات بمعلومات الإصدار │
│ │
│ 2. استراتيجية التقييم │
│ ├── إنشاء مجموعات بيانات اختبار تمثيلية │
│ ├── تشغيل التقييمات قبل كل نشر │
│ ├── تتبع المقاييس عبر الوقت │
│ └── إعداد تنبيهات الانحدار │
│ │
│ 3. إدارة المطالبات │
│ ├── إصدار المطالبات في LangChain Hub │
│ ├── الاختبار في الساحة قبل الإنتاج │
│ └── ربط التوليدات بإصدارات المطالبات │
│ │
│ 4. الملاحظات البشرية │
│ ├── إعداد قوائم انتظار التعليق │
│ ├── توجيه الحالات الحدية للمراجعة │
│ └── استخدام الملاحظات لتحسين المقيمات │
│ │
└─────────────────────────────────────────────────────────────┘
LangSmith مقابل البدائل
| الميزة | LangSmith | Langfuse | Helicone |
|---|---|---|---|
| تكامل LangChain | أصلي | جيد | أساسي |
| الاستضافة الذاتية | لا | نعم | نعم |
| ساحة المطالبات | ممتاز | جيد | أساسي |
| إطار التقييم | مدمج | مدمج | محدود |
| التسعير | مستويات مدفوعة | نواة مفتوحة | طبقة مجانية |
| الأفضل لـ | تطبيقات LangChain | الاحتياجات مفتوحة المصدر | وكيل عالي النطاق |
| ::: |