Bagikan melalui


Set evaluasi

Penting

Fitur ini ada di Pratinjau Publik.

Untuk mengukur kualitas aplikasi agenik, Anda harus dapat menentukan serangkaian permintaan yang representatif bersama dengan kriteria yang mencirikan respons berkualitas tinggi. Anda melakukannya dengan memberikan set evaluasi. Artikel ini membahas berbagai opsi untuk kumpulan evaluasi Anda dan beberapa praktik terbaik untuk membuat kumpulan evaluasi.

Databricks merekomendasikan pembuatan set evaluasi berlabel manusia, yang terdiri dari pertanyaan perwakilan dan jawaban kebenaran dasar. Jika aplikasi Anda menyertakan langkah pengambilan, Anda dapat secara opsional menyediakan dokumen pendukung tempat Anda mengharapkan respons didasarkan. Meskipun set evaluasi berlabel manusia direkomendasikan, Evaluasi Agen bekerja sama baiknya dengan set evaluasi yang dihasilkan secara sintetis.

Set evaluasi yang baik memiliki karakteristik berikut:

  • Representatif: Ini harus secara akurat mencerminkan rentang permintaan yang akan ditemui aplikasi dalam produksi.
  • Menantang: Ini harus mencakup kasus yang sulit dan beragam untuk menguji berbagai kemampuan aplikasi secara efektif.
  • Terus diperbarui: Ini harus diperbarui secara teratur untuk mencerminkan bagaimana aplikasi digunakan dan pola lalu lintas produksi yang berubah.

Untuk skema yang diperlukan dari kumpulan evaluasi, lihat Skema input Evaluasi Agen.

Kumpulan evaluasi sampel

Bagian ini mencakup contoh sederhana set evaluasi.

Evaluasi sampel diatur hanya dengan request

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

Evaluasi sampel diatur dengan request dan 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.",
    }
]

Evaluasi sampel diatur dengan request, expected_response, dan 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.",
    }
]

Evaluasi sampel diatur hanya request dengan dan response

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.",
    }
]

Evaluasi sampel diatur dengan request, response, dan 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",
            },
        ],
    }
]

Evaluasi sampel diatur dengan request, , retrieved_contextresponse, danexpected_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",
            },
        ],
    }
]

Evaluasi sampel diatur dengan request, , retrieved_contextresponse, expected_response, danexpected_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",
            },
        ],
    }
]

Praktik terbaik untuk mengembangkan set evaluasi

  • Pertimbangkan setiap sampel, atau grup sampel, dalam kumpulan evaluasi sebagai pengujian unit. Artinya, setiap sampel harus sesuai dengan skenario tertentu dengan hasil eksplisit yang diharapkan. Misalnya, pertimbangkan untuk menguji konteks yang lebih panjang, penalaran multi-hop, dan kemampuan untuk menyimpulkan jawaban dari bukti tidak langsung.
  • Pertimbangkan untuk menguji skenario iklan dari pengguna berbahaya.
  • Tidak ada pedoman khusus tentang jumlah pertanyaan yang harus disertakan dalam kumpulan evaluasi, tetapi sinyal yang jelas dari data berkualitas tinggi biasanya berperforma lebih baik daripada sinyal berisik dari data yang lemah.
  • Pertimbangkan untuk menyertakan contoh yang sangat menantang, bahkan bagi manusia untuk menjawab.
  • Baik Anda membangun aplikasi tujuan umum atau menargetkan domain tertentu, aplikasi Anda kemungkinan akan menemukan berbagai pertanyaan. Kumpulan evaluasi harus mencerminkan itu. Misalnya, jika Anda membuat aplikasi ke bidang pertanyaan SDM tertentu, Anda masih harus mempertimbangkan untuk menguji domain lain (misalnya, operasi), untuk memastikan bahwa aplikasi tidak berhalusinasi atau memberikan respons berbahaya.
  • Label yang dihasilkan manusia berkualitas tinggi dan konsisten adalah cara terbaik untuk memastikan bahwa nilai kebenaran dasar yang Anda berikan kepada aplikasi secara akurat mencerminkan perilaku yang diinginkan. Beberapa langkah untuk memastikan label manusia berkualitas tinggi adalah sebagai berikut:
    • Respons agregat (label) dari beberapa pelabel manusia untuk pertanyaan yang sama.
    • Pastikan instruksi pelabelan jelas dan pelabel manusia konsisten.
    • Pastikan bahwa kondisi untuk proses pelabelan manusia identik dengan format permintaan yang dikirimkan ke aplikasi RAG.
  • Pelabel manusia berdasarkan alam berisik dan tidak konsisten, misalnya karena interpretasi pertanyaan yang berbeda. Ini adalah bagian penting dari proses. Menggunakan pelabelan manusia dapat mengungkapkan interpretasi pertanyaan yang belum Anda pertimbangkan, dan yang mungkin memberikan wawasan tentang perilaku yang Anda amati dalam aplikasi Anda.