التعمق في 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. :::

اختبار

الوحدة 3: التعمق في LangSmith

خذ الاختبار