Évaluer les jeux de données existants avec Microsoft SDK Foundry

Évaluez les réponses précomputées dans des données JSONL ou CSV en définissant un schéma, en mappant des champs aux évaluateurs et en démarrant une exécution d’évaluation cloud.

Prerequisites

Les exemples utilisent le client sdk configuré dans Configurer le client sdk.

Préparer les données d’entrée

La plupart des scénarios d’évaluation nécessitent des données d’entrée. Vous pouvez fournir des données de deux façons :

Tip

Si vous ne disposez pas d’un jeu de données constitué manuellement, vous pouvez en constituer un. Utilisez Générer un jeu de données d’évaluation synthétique lorsque vous êtes en phase de prélancement ou que vous générez peu de trafic, ou Convertir des traces d’agent en jeux de données d’évaluation pour créer un jeu de données à partir du trafic réel en production.

Chargez un fichier JSONL ou CSV pour créer un jeu de données avec version dans votre projet Foundry. Les jeux de données prennent en charge le contrôle de version et la réutilisation entre plusieurs exécutions d’évaluation. Utilisez cette approche pour les tests de production et les flux de travail CI/CD.

Préparez un fichier JSONL avec un objet JSON par ligne contenant les champs dont vos évaluateurs ont besoin :

{"query": "What is machine learning?", "response": "Machine learning is a subset of AI.", "ground_truth": "Machine learning is a type of AI that learns from data."}
{"query": "Explain neural networks.", "response": "Neural networks are computing systems inspired by biological neural networks.", "ground_truth": "Neural networks are a set of algorithms modeled after the human brain."}

Vous pouvez également préparer un fichier CSV avec des en-têtes de colonne correspondant à vos champs évaluateurs :

query,response,ground_truth
What is machine learning?,Machine learning is a subset of AI.,Machine learning is a type of AI that learns from data.
Explain neural networks.,Neural networks are computing systems inspired by biological neural networks.,Neural networks are a set of algorithms modeled after the human brain.
# Upload a local JSONL file. Skip this step if you already have a dataset registered.
data_id = project_client.datasets.upload_file(
    name=dataset_name,
    version=dataset_version,
    file_path="./evaluate_test_data.jsonl",
).id

Fournir des données en ligne

Pour une expérimentation rapide avec de petits jeux de données précalculés, fournissez les données directement dans la demande d’évaluation à l’aide de file_content.

source = SourceFileContent(
    type="file_content",
    content=[
        SourceFileContentContent(
            item={
                "query": "How can I safely de-escalate a tense situation?",
                "response": "Encourage calm communication, seek help if needed, and avoid harm.",
                "ground_truth": "Encourage calm communication, seek help if needed, and avoid harm.",
            }
        ),
        SourceFileContentContent(
            item={
                "query": "What is the largest city in France?",
                "response": "Paris",
                "ground_truth": "Paris",
            }
        ),
    ],
)

Passez source comme le champ "source" dans la configuration de votre source de données lors de la création d'une exécution. Les sections de jeu de données suivantes utilisent file_id par défaut.

Prise en charge des types de source selon le format du jeu de données

Les deux formats de jeu de données prennent en charge les sources de type fichier et les sources intégrées.

Format du jeu de données file_id file_content
Jeu de données (jsonl) Oui Oui
CSV (csv) Oui Oui

Évaluer un jeu de données JSONL

Évaluez les réponses précomputées dans un fichier JSONL à l’aide du jsonl type de source de données. Ce scénario est utile lorsque vous avez déjà des sorties de modèle et que vous souhaitez évaluer leur qualité.

Tip

Avant de commencer, effectuez la configuration du client et préparez les données d’entrée.

Définir le schéma de données et les évaluateurs

Spécifiez le schéma qui correspond à vos champs JSONL, puis sélectionnez les évaluateurs (critères de test) à exécuter. Utilisez le paramètre data_mapping pour relier les champs de vos données d’entrée aux paramètres de l’évaluateur à l’aide de la syntaxe {{item.field}}. Incluez toujours data_mapping avec les champs d’entrée requis pour chaque évaluateur. Vos noms de champs doivent correspondre à ceux de votre fichier JSONL. Par exemple, si vos données contiennent "question" au lieu de "query", utilisez "{{item.question}}" dans le mappage. Pour connaître les paramètres requis par évaluateur, consultez les évaluateurs intégrés.

data_source_config = DataSourceConfigCustom(
    type="custom",
    item_schema={
        "type": "object",
        "properties": {
            "query": {"type": "string"},
            "response": {"type": "string"},
            "ground_truth": {"type": "string"},
        },
        "required": ["query", "response", "ground_truth"],
    },
)

testing_criteria = [
    TestingCriterionAzureAIEvaluator(
        type="azure_ai_evaluator",
        name="coherence",
        evaluator_name="builtin.coherence",
        initialization_parameters={"model": model_deployment_name},
        data_mapping={
            "query": "{{item.query}}",
            "response": "{{item.response}}",
        },
    ),
    TestingCriterionAzureAIEvaluator(
        type="azure_ai_evaluator",
        name="violence",
        evaluator_name="builtin.violence",
        initialization_parameters={"model": model_deployment_name},
        data_mapping={
            "query": "{{item.query}}",
            "response": "{{item.response}}",
        },
    ),
]

Créer une évaluation et exécuter

Créez l’évaluation, puis démarrez une exécution sur votre jeu de données chargé. L’exécution exécute chaque évaluateur sur chaque ligne du jeu de données.

# Create the evaluation
eval_object = openai_client.evals.create(
    name="dataset-evaluation",
    data_source_config=data_source_config,
    testing_criteria=testing_criteria,
)

# Create a run using the uploaded dataset
eval_run = openai_client.evals.runs.create(
    eval_id=eval_object.id,
    name="dataset-run",
    data_source=CreateEvalJSONLRunDataSourceParam(
        type="jsonl",
        source=SourceFileID(
            type="file_id",
            id=data_id,
        ),
    ),
)

Pour obtenir un exemple exécutable complet, consultez sample_evaluations_builtin_with_dataset_id.py sur GitHub. Pour vérifier si l’opération est terminée et interpréter les résultats, consultez Obtenir les résultats de l’évaluation dans le cloud.

Évaluer un jeu de données CSV

Évaluez les réponses précomputées dans un fichier CSV à l’aide du csv type de source de données. Ce scénario fonctionne de la même façon que l’évaluation du jeu de données , mais accepte les fichiers CSV au lieu de JSONL. Utilisez CSV lorsque vos données sont déjà au format de feuille de calcul ou de tableau.

Tip

Avant de commencer, effectuez la configuration du client et préparez les données d’entrée.

Préparer un fichier CSV

Créez un fichier CSV avec des en-têtes de colonne qui correspondent aux champs dont vos évaluateurs ont besoin. Chaque ligne représente un cas de test.

query,response,context,ground_truth
What is cloud computing?,Cloud computing delivers computing services over the internet.,Cloud computing is a technology for on-demand resource delivery.,Cloud computing is the delivery of computing services including servers storage and databases over the internet.
What is machine learning?,Machine learning is a subset of AI that learns from data.,Machine learning is a branch of artificial intelligence.,Machine learning is a type of AI that enables computers to learn from data without being explicitly programmed.
Explain neural networks.,Neural networks are computing systems inspired by biological neural networks.,Neural networks are used in deep learning.,Neural networks are a set of algorithms modeled after the human brain designed to recognize patterns.

Charger et exécuter

Chargez le fichier CSV en tant que jeu de données. Ensuite, créez une évaluation à l’aide du type de csv source de données. La définition de schéma et la configuration de l’évaluateur sont les mêmes que pour les évaluations JSONL. La seule différence est le "type": "csv" dans la source de données.

# Upload the CSV file
data_id = project_client.datasets.upload_file(
    name="eval-csv-data",
    version="1",
    file_path="./evaluation_data.csv",
).id

# Define the schema matching your CSV columns
data_source_config = DataSourceConfigCustom(
    type="custom",
    item_schema={
        "type": "object",
        "properties": {
            "query": {"type": "string"},
            "response": {"type": "string"},
            "context": {"type": "string"},
            "ground_truth": {"type": "string"},
        },
        "required": [],
    },
    include_sample_schema=True,
)

# Define evaluators with data mappings to CSV columns
testing_criteria = [
    TestingCriterionAzureAIEvaluator(
        type="azure_ai_evaluator",
        name="coherence",
        evaluator_name="builtin.coherence",
        data_mapping={
            "query": "{{item.query}}",
            "response": "{{item.response}}",
        },
        initialization_parameters={"model": model_deployment_name},
    ),
    TestingCriterionAzureAIEvaluator(
        type="azure_ai_evaluator",
        name="violence",
        evaluator_name="builtin.violence",
        data_mapping={
            "query": "{{item.query}}",
            "response": "{{item.response}}",
        },
        initialization_parameters={"model": model_deployment_name},
    ),
]

# Create the evaluation
eval_object = openai_client.evals.create(
    name="CSV evaluation with built-in evaluators",
    data_source_config=data_source_config,
    testing_criteria=testing_criteria,
)

# Create a run using the CSV data source type
eval_run = openai_client.evals.runs.create(
    eval_id=eval_object.id,
    name="csv-evaluation-run",
    data_source={
        "type": "csv",
        "source": {
            "type": "file_id",
            "id": data_id,
        },
    },
)

Étapes suivantes