Avaliar conjuntos de dados na cloud

Avalie respostas pré-computadas em dados JSONL ou CSV definindo um esquema, mapeando campos para avaliadores e iniciando uma execução de avaliação na cloud.

Pré-requisitos

Os exemplos utilizam o cliente SDK configurado em Configurar o cliente SDK.

Preparar dados de entrada

A maioria dos cenários de avaliação requer dados de entrada. Pode fornecer dados de duas formas:

Tip

Se não tiveres um conjunto de dados selecionado à mão, podes iniciar um. Utilize Gerar um conjunto de dados de avaliação sintético quando estiver em pré-lançamento ou tiver pouco tráfego, ou Converter rastreios do agente em conjuntos de dados de avaliação para construir um conjunto de dados a partir de tráfego real de produção.

Carregue um ficheiro JSONL ou CSV para criar um conjunto de dados versionado no seu projeto Foundry. Os conjuntos de dados suportam versionamento e reutilização em múltiplas execuções de avaliação. Use esta abordagem para testes de produção e fluxos de trabalho CI/CD.

Prepare um ficheiro JSONL com um objeto JSON por linha contendo os campos de que os seus avaliadores precisam:

{"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."}

Ou prepare um ficheiro CSV com cabeçalhos de coluna que correspondam aos campos do avaliador:

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

Fornecer dados em linha

Para experimentação rápida com pequenos conjuntos de teste — ou para cenários que requerem dados inline, como a avaliação de resposta do agente — forneça os dados diretamente no pedido de avaliação usando file_content. Para avaliações de resposta do agente, file_content é o único tipo de fonte suportado.

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

Passe source como campo "source" na configuração da sua fonte de dados ao iniciar uma execução. As secções de cenário seguintes utilizam file_id por predefinição.

Suporte ao tipo de fonte por cenário

Nem todos os cenários suportam ambos os tipos de fonte. A matriz seguinte mostra que tipo de fonte cada cenário suporta.

Scenario file_id file_content
Conjunto de dados (jsonl) Sim Sim
CSV (csv) Sim Sim
Modelo ou agente alvo Sim Sim
Resposta do agente (azure_ai_responses) Não Sim
Rastreio (azure_ai_traces) N/A N/A
Dados sintéticos (pré-visualização) N/A N/A

Avaliar um conjunto de dados JSONL

Avalie respostas pré-computadas num ficheiro JSONL usando o jsonl tipo de fonte de dados. Este cenário é útil quando já tem resultados do modelo e quer avaliar a sua qualidade.

Tip

Antes de começar, complete a configuração do cliente e prepare os dados de entrada.

Defina o esquema de dados e os avaliadores

Especifique o esquema que corresponde aos seus campos JSONL e selecione os avaliadores (critérios de teste) a executar. Use o data_mapping parâmetro para ligar campos dos seus dados de entrada aos parâmetros do avaliador, usando {{item.field}} sintaxe. Inclua data_mapping sempre com os campos de entrada exigidos para cada avaliador. Os nomes dos seus campos devem corresponder aos do seu ficheiro JSONL. Por exemplo, se os seus dados tiverem "question" em vez de "query", use "{{item.question}}" no mapeamento. Para os parâmetros exigidos por avaliador, consulte avaliadores incorporados.

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}}",
        },
    ),
    TestingCriterionAzureAIEvaluator(
        type="azure_ai_evaluator",
        name="f1",
        evaluator_name="builtin.f1_score",
        data_mapping={
            "response": "{{item.response}}",
            "ground_truth": "{{item.ground_truth}}",
        },
    ),
]

Criar avaliação e executar

Crie a avaliação e depois inicie uma execução com o seu conjunto de dados carregado. A execução executa cada avaliador em todas as linhas do conjunto de dados.

# 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,
        ),
    ),
)

Para um exemplo completo executável, veja sample_evaluations_builtin_with_dataset_id.py em GitHub. Para verificar periodicamente a conclusão e interpretar os resultados, consulte Obter os resultados da avaliação na nuvem.

Avaliar um conjunto de dados CSV

Avalie respostas pré-computadas num ficheiro CSV usando o tipo de csv fonte de dados. Este cenário funciona da mesma forma que a avaliação de conjuntos de dados , mas aceita ficheiros CSV em vez de JSONL. Usa CSV quando os teus dados já estiverem em formato de folha de cálculo ou tabular.

Tip

Antes de começar, complete a configuração do cliente e prepare os dados de entrada.

Preparar um ficheiro CSV

Crie um ficheiro CSV com cabeçalhos de coluna que correspondam aos campos que os seus avaliadores precisam. Cada linha representa um caso de teste.

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.

Carregar e executar

Carrega o ficheiro CSV como um conjunto de dados. Depois, crie uma avaliação usando o csv tipo de fonte de dados. A definição do esquema e a configuração do avaliador são as mesmas das avaliações JSONL. A única diferença é o "type": "csv" na fonte de dados.

# 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},
    ),
    TestingCriterionAzureAIEvaluator(
        type="azure_ai_evaluator",
        name="f1",
        evaluator_name="builtin.f1_score",
    ),
]

# 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,
        },
    },
)

Passos seguintes