Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Beoordeel volledige gesprekken uit datasets op beurt- of gespreksniveau.
Prerequisites
- Voltooi de vereisten voor cloudevaluatie en clientinstallatie.
- Gespreksgegevens met een
messagesarray. - Evaluators die het geselecteerde evaluatieniveau ondersteunen, zoals samenhang en grondheid.
In de voorbeelden wordt de SDK-client gebruikt die is geconfigureerd in de SDK-client instellen.
Gespreksgegevenssets evalueren
Evalueer volledige gesprekken om de kwaliteit van de agent te beoordelen voor volledige gebruikersinteracties, niet alleen afzonderlijke antwoorden. Gebruik evaluatie op gespreksniveau om kwaliteitsproblemen te identificeren, zoals onvolledige taakafhandeling, gebruikersfrustratie en regressies in toolaanroepen die evaluatie per beurt niet opmerkt.
Denk bijvoorbeeld aan een ondersteuningsagent waarbij de gebruiker gefrustreerd raakt over meerdere bochten:
Draai 1 — Gebruiker: "Ik moet mijn wachtwoord opnieuw instellen." Agent: "Ik heb uw account gevonden. Ik stuur een resetkoppeling.
Beurt 2 — Gebruiker: "Ik heb de e-mail niet ontvangen." Medewerker: "Ik heb de link opnieuw verzonden." Controleer de spam.
Beurt 3 — Gebruiker: "Nog steeds niets. Kunt u het gewoon rechtstreeks opnieuw instellen?" Agent: "Ik heb een andere koppeling voor opnieuw instellen verzonden."
Een evaluator op turn-niveau beoordeelt alleen de laatste reactie - die beleefd is en actie onderneemt - waardoor die goed scoort. Een evaluator op gespreksniveau die klanttevredenheid over het hele gesprek beoordeelt, signaleert dat de agent dezelfde mislukte handeling drie keer heeft herhaald zonder een alternatieve aanpak te proberen, waardoor het probleem van de gebruiker onopgelost blijft.
Evaluatie op gespreksniveau verschilt van evaluatie op turn-level op verschillende manieren:
| Aspect | Op beurt-niveau | Gespreksniveau |
|---|---|---|
| Scope | Afzonderlijke query-antwoordparen | Gesprekken met meerdere uitwisselingen voltooien |
| Metrics | Kwaliteit en veiligheid per antwoord | Resultaten op gespreksniveau en tevredenheid van gebruikers |
| Gegevensindeling | JSONL met query en response velden |
JSONL met messages matrix met het volledige gesprek |
| Gebruiksscenario | Afzonderlijke modelreacties testen | End-to-end-agentervaringen testen |
Kies de gesprekswerkstroom die overeenkomt met uw gegevensbron:
| Workflow | Wanneer gebruiken | Gegevensbrontype |
|---|---|---|
| Uit gegevensverzameling of inline | U hebt lokale gesprekssporen of testgegevens |
jsonl met file_id of file_content |
| Geïmplementeerde gesprekken | U wilt specifieke gesprekken of voorbeeldproductieverkeer van Application Insights evalueren |
azure_ai_trace_data_source_preview met trace_source |
| Gesimuleerde gesprekken | U wilt synthetische testgesprekken genereren |
azure_ai_target_completions met conversation_gen_preview |
Een evaluatieniveau kiezen
De parameter evaluation_level van de run bepaalt of beoordelaars afzonderlijke interacties of volledige gesprekken beoordelen:
| Value | Gedrag |
|---|---|
"turn" |
Beoordelaars beoordelen elke beurt afzonderlijk. |
"conversation" |
Evaluators scoren het hele gesprek als geheel. |
| (weggelaten) | Wordt standaard ingesteld op "turn". |
Important
Compatibiliteit met evaluator: elke evaluator ondersteunt specifieke evaluatieniveaus. Controleer het veld van de evaluator supported_evaluation_levels in de catalogus met evaluators.
-
Evaluatoren alleen voor beurten (bijvoorbeeld
fluency,relevance) kunnen niet worden gebruikt in combinatie metevaluation_level="conversation". - Momenteel ondersteunen alle evaluatoren op gespreksniveau zowel het niveau
"turn"als"conversation".
Veelvoorkomende fouten
| Error | Oorzaak | Solution |
|---|---|---|
| Incompatibel evaluatieniveau | Gebruik van evaluation_level="conversation" met een evaluator die alleen turns ondersteunt |
Verwijder de evaluator voor alleen beurten of wijzig deze in evaluation_level="turn" |
Gespreksgegevens voorbereiden
Maak een JSONL-bestand waarin elke regel een volledig gesprek in het messages veld bevat. Elk bericht moet een role (gebruiker, assistent of systeem) en content bevatten. Zie de conversation evaluation samples in de SDK voor een volledig voorbeeld.
{"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?"}]}
U kunt ook hulpprogrammadefinities en hulpprogramma-aanroepen opnemen als uw agent hulpprogramma's gebruikt:
{"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."}]}
Het gegevensschema en de evaluators definiëren
Geef het schema op voor uw gespreksgegevens, 'berichten' en selecteer evaluators die zijn ontworpen voor evaluatie op gespreksniveau. Evaluators op gespreksniveau beoordelen de volledige interactie in plaats van afzonderlijke beurten.
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}}"},
),
]
Evaluatie maken en uitvoeren
Voorbereiding: download 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"},
)
Als u wilt controleren of het proces is voltooid en de resultaten wilt interpreteren, raadpleegt u Resultaten van cloudevaluatie ophalen.
Zie sample_multiturn_conversation_evaluation.py op GitHub voor een volledig voorbeeld dat kan worden uitgevoerd.
Volgende stappen
- Als u wilt controleren of het proces is voltooid en de resultaten wilt interpreteren, raadpleegt u Resultaten van cloudevaluatie ophalen.
- Zie Geïmplementeerde model- en agentgesprekken evalueren om productietraces te evalueren.
- Zie Gesprekken met agenten simuleren om synthetische gesprekken te genereren.