مجموعات التقييم

هام

هذه الميزة في المعاينة العامة.

لقياس جودة التطبيق العاملي، تحتاج إلى أن تكون قادرا على تحديد مجموعة تمثيلية من الطلبات جنبا إلى جنب مع المعايير التي تميز الاستجابات عالية الجودة. يمكنك القيام بذلك من خلال توفير مجموعة تقييم. تتناول هذه المقالة الخيارات المختلفة لمجموعة التقييم وبعض أفضل الممارسات لإنشاء مجموعة تقييم.

توصي Databricks بإنشاء مجموعة تقييم مسماة من قبل الإنسان، والتي تتكون من أسئلة تمثيلية وإجابات عن الحقيقة الأساسية. إذا كان التطبيق الخاص بك يتضمن خطوة استرداد، يمكنك اختياريا توفير المستندات الداعمة التي تتوقع أن تستند إليها الاستجابة. بينما يوصى بمجموعة تقييم ذات تسمية بشرية، يعمل تقييم العامل بشكل جيد بنفس القدر مع مجموعات التقييم التي تم إنشاؤها اصطناعيا.

مجموعة تقييم جيدة لها الخصائص التالية:

  • ممثل: يجب أن يعكس بدقة نطاق الطلبات التي سيواجهها التطبيق في الإنتاج.
  • التحدي: يجب أن يتضمن الحالات الصعبة والمتنوعة لاختبار النطاق الكامل لقدرات التطبيق بشكل فعال.
  • تحديث مستمر: يجب تحديثه بانتظام ليعكس كيفية استخدام التطبيق والأنماط المتغيرة لحركة مرور الإنتاج.

للحصول على المخطط المطلوب لمجموعة تقييم، راجع مخطط إدخال تقييم العامل.

نماذج مجموعات التقييمات

يتضمن هذا القسم أمثلة بسيطة لمجموعات التقييم.

عينة التقييم التي تم تعيينها مع فقط request

eval_set = [
    {
        "request": "What is the difference between reduceByKey and groupByKey in Spark?",
    }
]

عينة التقييم التي تم تعيينها مع request و expected_response

eval_set  = [
    {
        "request_id": "request-id",
        "request": "What is the difference between reduceByKey and groupByKey in Spark?",
        "expected_response": "There's no significant difference.",
    }
]

عينة التقييم التي تم تعيينها مع requestو expected_responseو expected_retrieved_content

eval_set  = [
    {
        "request_id": "request-id",
        "request": "What is the difference between reduceByKey and groupByKey in Spark?",
        "expected_retrieved_context": [
            {
                "doc_uri": "doc_uri_1",
            },
            {
                "doc_uri": "doc_uri_2",
            },
        ],
        "expected_response": "There's no significant difference.",
    }
]

عينة التقييم التي تم تعيينها مع و requestresponse

eval_set = [
    {
        "request": "What is the difference between reduceByKey and groupByKey in Spark?",
        "response": "reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
    }
]

عينة التقييم التي تم تعيينها مع requestو responseو retrieved_context

eval_set = [
    {
        "request_id": "request-id", # optional, but useful for tracking
        "request": "What is the difference between reduceByKey and groupByKey in Spark?",
        "response": "reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
        "retrieved_context": [
            {
                # In `retrieved_context`, `content` is optional, but delivers additional functionality if provided (the Databricks Context Relevance LLM judge runs to check the relevance of the provided content to the request).
                "content": "reduceByKey reduces the amount of data shuffled by merging values before shuffling.",
                "doc_uri": "doc_uri_2_1",
            },
            {
                "content": "groupByKey may lead to inefficient data shuffling due to sending all values across the network.",
                "doc_uri": "doc_uri_6_extra",
            },
        ],
    }
]

عينة التقييم التي تم تعيينها مع requestو responseretrieved_contextو وexpected_response

eval_set  = [
    {
        "request_id": "request-id",
        "request": "What is the difference between reduceByKey and groupByKey in Spark?",
        "expected_response": "There's no significant difference.",
        "response": "reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
        "retrieved_context": [
            {
                # In `retrieved_context`, `content` is optional, but delivers additional functionality if provided (the Databricks Context Relevance LLM judge runs to check the relevance of the provided content to the request).
                "content": "reduceByKey reduces the amount of data shuffled by merging values before shuffling.",
                "doc_uri": "doc_uri_2_1",
            },
            {
                "content": "groupByKey may lead to inefficient data shuffling due to sending all values across the network.",
                "doc_uri": "doc_uri_6_extra",
            },
        ],
    }
]

عينة التقييم التي تم تعيينها مع requestو responseretrieved_contextexpected_responseexpected_retrieved_context

level_4_data  = [
    {
        "request_id": "request-id",
        "request": "What is the difference between reduceByKey and groupByKey in Spark?",
        "expected_retrieved_context": [
            {
                "doc_uri": "doc_uri_2_1",
            },
            {
                "doc_uri": "doc_uri_2_2",
            },
        ],
        "expected_response": "There's no significant difference.",
        "response": "reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
        "retrieved_context": [
            {
                # In `retrieved_context`, `content` is optional, but delivers additional functionality if provided (the Databricks Context Relevance LLM judge runs to check the relevance of the provided content to the request).
                "content": "reduceByKey reduces the amount of data shuffled by merging values before shuffling.",
                "doc_uri": "doc_uri_2_1",
            },
            {
                "content": "groupByKey may lead to inefficient data shuffling due to sending all values across the network.",
                "doc_uri": "doc_uri_6_extra",
            },
        ],
    }
]

أفضل الممارسات لتطوير مجموعة تقييم

  • ضع في اعتبارك كل عينة، أو مجموعة من العينات، في مجموعة التقييم كاختبار وحدة. أي أن كل عينة يجب أن تتوافق مع سيناريو محدد مع نتيجة متوقعة صريحة. على سبيل المثال، ضع في اعتبارك اختبار سياقات أطول، وتفكير متعدد الوثب، والقدرة على استنتاج الإجابات من الأدلة غير المباشرة.
  • ضع في اعتبارك اختبار السيناريوهات المتطفلة من المستخدمين الضارين.
  • لا توجد إرشادات محددة حول عدد الأسئلة التي يجب تضمينها في مجموعة التقييم، ولكن الإشارات الواضحة من البيانات عالية الجودة عادة ما تؤدي أداء أفضل من الإشارات الزاخبة من البيانات الضعيفة.
  • ضع في اعتبارك تضمين أمثلة صعبة للغاية، حتى بالنسبة للبشر للإجابة عليها.
  • سواء كنت تقوم بإنشاء تطبيق للأغراض العامة أو تستهدف مجالا معينا، من المحتمل أن يواجه تطبيقك مجموعة متنوعة من الأسئلة. وينبغي أن تعكس مجموعة التقييم ذلك. على سبيل المثال، إذا كنت تقوم بإنشاء تطبيق لطرح أسئلة الموارد البشرية المحددة، فلا يزال يتعين عليك التفكير في اختبار المجالات الأخرى (على سبيل المثال، العمليات)، للتأكد من أن التطبيق لا يهلوس أو يقدم استجابات ضارة.
  • التسميات عالية الجودة والمتناسقة التي ينشئها الإنسان هي أفضل طريقة لضمان أن قيم الحقيقة الأساسية التي تقدمها للتطبيق تعكس بدقة السلوك المطلوب. فيما يلي بعض الخطوات لضمان تسميات بشرية عالية الجودة:
    • تجميع الردود (التسميات) من تسميات بشرية متعددة لنفس السؤال.
    • تأكد من أن تعليمات التسمية واضحة وأن التسميات البشرية متسقة.
    • تأكد من أن شروط عملية وضع العلامات البشرية مطابقة لتنسيق الطلبات المقدمة إلى تطبيق RAG.
  • إن التسميات البشرية صاخبة وغير متسقة بطبيعتها، على سبيل المثال بسبب تفسيرات مختلفة للسؤال. وهذا جزء هام من العملية. يمكن أن يكشف استخدام التسمية البشرية عن تفسيرات الأسئلة التي لم تفكر فيها، والتي قد توفر نظرة ثاقبة على السلوك الذي تلاحظه في تطبيقك.