Utvärdera konversationsdatauppsättningar med Microsoft Foundry SDK (förhandsversion)

Utvärdera fullständiga konversationer från datauppsättningar på tur- eller konversationsnivå.

Förutsättningar

I exemplen används SDK-klienten som konfigurerats i Konfigurera SDK-klienten.

Utvärdera konversationsdatauppsättningar

Utvärdera fullständiga konversationer för att utvärdera agentkvaliteten i hela användarinteraktioner – inte bara enskilda svar. Använd utvärdering på samtalsnivå för att identifiera kvalitetsproblem som ofullständig uppgiftslösning, användarfrustration och regressioner i verktygsanrop som utvärdering på turnivå missar.

Tänk dig till exempel en supportagent där användaren blir frustrerad över flera svängar:

Tur 1 – Användare: "Jag måste återställa mitt lösenord." Agent: "Jag hittade ditt konto. Jag skickar en återställningslänk."

Omgång 2 — Användare: "Jag fick inte mejlet." Agent: "Jag har skickat länken igen. Kontrollera skräppost."

Tur 3 — Användare: "Fortfarande inget. Kan du bara återställa den direkt?" Agent: "Jag har skickat en annan återställningslänk."

En utvärderare på turnivå bedömer endast det sista svaret – som är artigt och agerar – så det får ett högt betyg. En utvärderare på konversationsnivå som bedömer kundnöjdhet genom hela konversationen flaggar att agenten upprepade samma misslyckade åtgärd tre gånger utan att försöka med något alternativt tillvägagångssätt, vilket lämnade användarens problem olöst.

Utvärdering på konversationsnivå skiljer sig från utvärdering på turnivå på flera sätt:

Aspect på turordningsnivå Konversationsnivå
Scope Enskilda frågesvarspar Slutför konversationer med flera utbyten
Metrics Kvalitet och säkerhet per svar Utfall på konversationsnivå och användarnöjdhet
Dataformat JSONL med query och response fält JSONL med messages matris som innehåller hela konversationen
Användningsfall Testa enskilda modellsvar Testning av agentupplevelser från början till slut

Välj det konversationsarbetsflöde som matchar din datakälla:

Workflow När det bör användas Typ av datakälla
Från datauppsättning eller infogad direkt Du har lokala konversationsspårningar eller testdata jsonl med file_id eller file_content
Distribuerade konversationer Du vill utvärdera specifika konversationer eller exempel på produktionstrafik från Application Insights azure_ai_trace_data_source_preview med trace_source
Simulerade konversationer Du vill generera syntetiska testkonversationer azure_ai_target_completions med conversation_gen_preview

Välj en utvärderingsnivå

Parametern evaluation_level för körningen avgör om utvärderarna ska bedöma enskilda turer eller hela konversationer:

Value Behavior
"turn" Utvärderare bedömer varje tur oberoende av varandra.
"conversation" Utvärderare bedömer hela konversationen som helhet.
(utelämnas) Standardinställningen är "turn".

Important

Utvärderarkompatibilitet: Varje utvärderare stöder specifika utvärderingsnivåer. Kontrollera utvärderarens fält i supported_evaluation_levels.

  • Turn-only-utvärderare (till exempel fluency, relevance) kan inte användas med evaluation_level="conversation".
  • För närvarande stöder alla utvärderare på konversationsnivå både "turn" och "conversation" nivåer.

Vanliga fel

Error Orsak Lösning
Inkompatibel utvärderingsnivå Använda evaluation_level="conversation" med en turn-only-utvärderare Ta bort turn-only-utvärderaren eller ändra till evaluation_level="turn"

Förbereda konversationsdata

Skapa en JSONL-fil där varje rad innehåller en fullständig konversation i fältet messages . Varje meddelande ska innehålla en role (användare, assistent eller system) och content. Ett fullständigt exempel finns i utvärderingsexemplen conversation i SDK.

 {"messages": [{"role": "user", "content": "What's my account balance?"}, {"role": "assistant", "content": "Your current balance is $1,234.56."}, {"role": "user", "content": "Thanks!"}, {"role": "assistant", "content": "You're welcome! Is there anything else?"}]}

Du kan också inkludera verktygsdefinitioner och verktygsanrop om din agent använder verktyg:

{"messages": [{"role": "user", "content": "What is the capital/major city of France?"}, {"role": "assistant", "content": "Paris"}]}
{"messages": [{"role": "user", "content": "How do I reverse a string in Python?"}, {"role": "assistant", "content": "You can reverse a string in Python by using slicing: string[::-1]"}]}
{"messages": [{"role": "user", "content": "What are the main causes of climate change?"}, {"role": "assistant", "content": "The main causes of climate change are the increase in greenhouse gases in the atmosphere, primarily due to human activities such as burning fossil fuels and deforestation."}]}
{"messages": [{"role": "user", "content": "What's my account balance?"}, {"role": "assistant", "content": null, "tool_calls": [{"id": "call_abc123", "type": "function", "function": {"name": "get_account_balance", "arguments": "{\"account_id\": \"ACCT-7890\"}"}}]}, {"role": "tool", "tool_call_id": "call_abc123", "content": "{ \"balance\": 1234.56, \"currency\": \"USD\" }"}, {"role": "assistant", "content": "Your current balance is 1,234.56."}, {"role": "user", "content": "Thanks!"}, {"role": "assistant", "content": "You're welcome! Is there anything else?"}], "tool_definitions": [{"name": "get_account_balance", "description": "Retrieves the current balance for a customer account", "parameters": {"type": "object", "properties": {"account_id": {"type": "string"}}, "required": ["account_id"]}}]}
{"messages": [{"role": "user", "content": "Explain the theory of relativity in simple terms."}, {"role": "assistant", "content": "Einstein's theory of relativity shows that space and time are interconnected and relative to the observer's frame of reference."}]}
{"messages": [{"role": "user", "content": "What's the weather in Seattle?"}, {"role": "assistant", "content": null, "tool_calls": [{"id": "call_002", "type": "function", "function": {"name": "get_weather", "arguments": "{\"location\": \"Seattle, WA\"}"}}]}, {"role": "tool", "tool_call_id": "call_002", "content": "{ \"temperature\": 55, \"condition\": \"Cloudy\" }"}, {"role": "assistant", "content": "It's currently 55F and cloudy in Seattle."}], "tool_definitions": [{"name": "get_weather", "description": "Get the current weather for a location", "parameters": {"type": "object", "properties": {"location": {"type": "string"}}, "required": ["location"]}}]}
{"messages": [{"role": "user", "content": "What is the tallest mountain in the world?"}, {"role": "assistant", "content": "Mount Everest is the tallest mountain in the world."}]}
{"messages": [{"role": "user", "content": "Is 4 x 2 = 16?"}, {"role": "assistant", "content": "No, 4 x 2 = 8."}]}
{"messages": [{"role": "user", "content": "What is the best Italian desert?"}, {"role": "assistant", "content": "Tiramisu is a popular Italian dessert."}]}
{"messages": [{"role": "user", "content": "What is the chemical formula for water?"}, {"role": "assistant", "content": "The chemical formula for water is H2O."}]}

Definiera dataschemat och utvärderarna

Ange schemat för konversationsdata, "meddelanden" och välj utvärderare som är utformade för utvärdering på konversationsnivå. Utvärderare på konversationsnivå utvärderar hela interaktionen snarare än enskilda svängar.

pip install "azure-ai-projects>=2.2.0"
import os
from openai.types.eval_create_params import DataSourceConfigCustom
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import TestingCriterionAzureAIEvaluator

endpoint = os.environ["AZURE_AI_PROJECT_ENDPOINT"]
model_deployment_name = os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"]

with (
    DefaultAzureCredential() as credential,
    AIProjectClient(endpoint=endpoint, credential=credential) as project_client,
    project_client.get_openai_client() as openai_client,
):
    data_source_config = DataSourceConfigCustom(
        type="custom",
        item_schema={
            "type": "object",
            "properties": {
                "messages": {"type": "array"},
                "tool_definitions": {"type": "array"},
            },
            "required": ["messages"],
        },
        include_sample_schema=False,
    )

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

Skapa utvärdering och kör

Förberedelse: ladda ned sample_data_multiturn_conversations.jsonl

from openai.types.evals.create_eval_jsonl_run_data_source_param import (
    CreateEvalJSONLRunDataSourceParam,
    SourceFileID,
)

# Upload conversation data
data_id = project_client.datasets.upload_file(
    name="multiturn-conversation-data",
    version="1",
    file_path="./sample_data_multiturn_conversations.jsonl",
).id

# Create the evaluation
eval_object = openai_client.evals.create(
    name="Multi-turn Conversation Evaluation",
    data_source_config=data_source_config,
    testing_criteria=testing_criteria,
)

# Create a run with evaluation_level set to "conversation"
eval_run = openai_client.evals.runs.create(
    eval_id=eval_object.id,
    name="multiturn-conversation-run",
    data_source=CreateEvalJSONLRunDataSourceParam(
        type="jsonl",
        source=SourceFileID(
            type="file_id",
            id=data_id,
        ),
    ),
    extra_body={"evaluation_level": "conversation"},
)

Om du vill kontrollera om processen är slutförd och tolka resultaten, se Hämta resultat för molnutvärdering.

För ett fullständigt körbart exempel, se sample_multiturn_conversation_evaluation.py på GitHub.

Nästa steg