التعمق في LangSmith
تقييم المحادثات متعددة الأدوار
3 دقيقة للقراءة
المحادثات الحقيقية تمتد عبر أدوار متعددة. تقييم استجابة واحدة فقط يفوّت السياق والتماسك وتدفق المحادثة. LangSmith يدعم تقييم خيوط المحادثة الكاملة.
لماذا التقييم متعدد الأدوار؟
| دور واحد | أدوار متعددة |
|---|---|
| يقيّم استجابة واحدة | يقيّم تدفق المحادثة |
| يفوّت مشاكل السياق | يكتشف فقدان السياق |
| لا يكتشف التناقضات | يجد عدم الاتساق |
| يتجاهل أهداف المحادثة | يقيس إكمال الهدف |
هيكل المحادثة
تتبع محادثة متعددة الأدوار:
خيط المحادثة
├── الدور 1: المستخدم يطرح سؤالاً
│ └── المساعد يستجيب
├── الدور 2: المستخدم يتابع
│ └── المساعد يستجيب (باستخدام السياق)
├── الدور 3: المستخدم يطلب توضيحاً
│ └── المساعد يستجيب (محافظاً على التماسك)
└── الدور 4: المستخدم يؤكد الحل
└── المساعد يختم بشكل مناسب
تتبع المحادثات
استخدم معرّفات الخيوط لربط أدوار المحادثة:
from langsmith import traceable
import uuid
@traceable
def chat(messages: list, thread_id: str) -> str:
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages
)
return response.choices[0].message.content
# نفس thread_id يربط جميع الأدوار
thread_id = str(uuid.uuid4())
# الدور 1
response1 = chat(
[{"role": "user", "content": "أحتاج إلى إلغاء طلبي"}],
thread_id=thread_id
)
# الدور 2 - يتضمن السجل
response2 = chat(
[
{"role": "user", "content": "أحتاج إلى إلغاء طلبي"},
{"role": "assistant", "content": response1},
{"role": "user", "content": "طلب #12345"}
],
thread_id=thread_id
)
معايير التقييم متعدد الأدوار
قيّم المحادثات على:
1. الاحتفاظ بالسياق
هل يتذكر المساعد الأدوار السابقة؟
def evaluate_context_retention(conversation: list) -> dict:
# تحقق إذا كانت الاستجابات اللاحقة تشير للسياق السابق
prompt = """
راجع هذه المحادثة. هل حافظ المساعد على
السياق من الأدوار السابقة بشكل مناسب؟
المحادثة: {conversation}
سجّل 1-5 واشرح.
"""
return llm_judge(prompt, conversation=conversation)
2. إكمال الهدف
هل حققت المحادثة غرضها؟
| هدف المحادثة | معايير النجاح |
|---|---|
| تذكرة دعم | المشكلة حُلت |
| استعلام معلومات | السؤال أُجيب بالكامل |
| إكمال مهمة | الإجراء أُكّد |
| توضيح | الفهم تُحقق منه |
3. التماسك
لا تناقضات بين الأدوار:
def evaluate_coherence(conversation: list) -> dict:
prompt = """
تحقق إذا كان المساعد تناقض مع نفسه
في أي نقطة من هذه المحادثة.
المحادثة: {conversation}
أرجع: متماسك (نعم/لا)، التناقضات المُكتشفة.
"""
return llm_judge(prompt, conversation=conversation)
4. الطول المناسب
المحادثة لا يجب أن تكون طويلة بدون داعٍ:
- هل حُلت في عدد معقول من الأدوار؟
- هل كانت هناك تبادلات زائدة؟
- هل اضطر المستخدم لتكرار نفسه؟
بناء مجموعات بيانات متعددة الأدوار
هيكل بيانات التقييم الخاصة بك:
conversations:
- id: "conv-001"
scenario: "إلغاء طلب"
turns:
- role: user
content: "أريد إلغاء طلبي"
- role: assistant
content: "يمكنني المساعدة في ذلك. ما رقم طلبك؟"
- role: user
content: "12345"
- role: assistant
content: "تم إلغاء الطلب #12345. الاسترداد خلال 3-5 أيام."
expected_outcome: "تم إلغاء الطلب بنجاح"
max_turns: 4
المقاييس الرئيسية
تتبع هذه لجودة المحادثة:
| المقياس | الوصف |
|---|---|
| معدل الحل | % المحادثات التي تحقق الهدف |
| متوسط الأدوار | الأدوار المطلوبة للحل |
| معدل التصعيد | % التي تحتاج تدخل بشري |
| الرضا | التعليقات في نهاية المحادثة |
نصيحة: ابدأ بأطول محادثاتك—غالباً تكشف أكثر المشاكل مع الاحتفاظ بالسياق.
التالي، سنتعلم كيفية بناء مقيّمين مخصصين وإدارة مجموعات بيانات التقييم في LangSmith. :::