Dela via


Utvärdera ditt generativa AI-program lokalt med Azure AI Evaluation SDK

Viktigt!

Objekt markerade (förhandsversion) i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Du kan noggrant utvärdera prestandan för ditt generativa AI-program genom att tillämpa det på en betydande datamängd. Utvärdera programmet i utvecklingsmiljön med Azure AI Evaluation SDK.

När du tillhandahåller antingen en testdatauppsättning eller ett mål mäts dina generativa AI-programutdata kvantitativt med både matematiska mått och AI-assisterade kvalitets- och säkerhetsutvärderingar. Inbyggda eller anpassade utvärderare kan ge dig omfattande insikter om programmets funktioner och begränsningar.

I den här artikeln får du lära dig hur du kör utvärderare på en enda rad med data och en större testdatauppsättning på ett programmål. Du använder inbyggda utvärderare som använder Azure AI Evaluation SDK lokalt. Sedan lär du dig att spåra resultat- och utvärderingsloggarna i ett Azure AI-projekt.

Kom igång

Installera först utvärderingspaketet från Azure AI Evaluation SDK:

pip install azure-ai-evaluation

Anmärkning

Mer information finns i Azure AI Evaluation-klientbiblioteket för Python.

Inbyggda utvärderare

Inbyggda kvalitets- och säkerhetsmått accepterar fråge- och svarspar, tillsammans med ytterligare information för specifika utvärderare.

Kategori Utvärderarna
Generell användning CoherenceEvaluator, FluencyEvaluatorQAEvaluator
Textlikhet SimilarityEvaluator, F1ScoreEvaluator, BleuScoreEvaluator, GleuScoreEvaluator, RougeScoreEvaluatorMeteorScoreEvaluator
Hämtningsförhöjd generation (RAG) RetrievalEvaluator, DocumentRetrievalEvaluator, GroundednessEvaluator, GroundednessProEvaluator, RelevanceEvaluatorResponseCompletenessEvaluator
Risk och säkerhet ViolenceEvaluator, SexualEvaluator, SelfHarmEvaluator, HateUnfairnessEvaluator, IndirectAttackEvaluator, ProtectedMaterialEvaluator, , UngroundedAttributesEvaluator, , CodeVulnerabilityEvaluatorContentSafetyEvaluator
Agentisk IntentResolutionEvaluator, ToolCallAccuracyEvaluatorTaskAdherenceEvaluator
Azure OpenAI AzureOpenAILabelGrader, AzureOpenAIStringCheckGrader, , AzureOpenAITextSimilarityGraderAzureOpenAIGrader

Datakrav för inbyggda utvärderare

Inbyggda utvärderare kan acceptera fråge- och svarspar, en lista över konversationer i JSON Lines-format (JSONL) eller båda.

Utvärderare Stöd för konversation och enkelsväng för text Stöd för text- och bildkonversationer och enstaka interaktioner Stöd endast för text med en enda tur Kräver ground_truth Stödjer agentindata
Kvalitetsutvärderingar
IntentResolutionEvaluator
ToolCallAccuracyEvaluator
TaskAdherenceEvaluator
GroundednessEvaluator
GroundednessProEvaluator
RetrievalEvaluator
DocumentRetrievalEvaluator
RelevanceEvaluator
CoherenceEvaluator
FluencyEvaluator
ResponseCompletenessEvaluator
QAEvaluator
NLP-utvärderare (Natural Language Processing)
SimilarityEvaluator
F1ScoreEvaluator
RougeScoreEvaluator
GleuScoreEvaluator
BleuScoreEvaluator
MeteorScoreEvaluator
Säkerhetsutvärderingar
ViolenceEvaluator
SexualEvaluator
SelfHarmEvaluator
HateUnfairnessEvaluator
ProtectedMaterialEvaluator
ContentSafetyEvaluator
UngroundedAttributesEvaluator
CodeVulnerabilityEvaluator
IndirectAttackEvaluator
Azure OpenAI Graders
AzureOpenAILabelGrader
AzureOpenAIStringCheckGrader
AzureOpenAITextSimilarityGrader
AzureOpenAIGrader

Anmärkning

AI-assisterade kvalitetsutvärderingar med undantag för SimilarityEvaluator kommer med ett orsaksfält. De använder tekniker, inklusive kedja av tankar, för att generera en förklaring till poängen.

De förbrukar mer tokenanvändning vid generering på grund av förbättrad utvärderingskvalitet. max_token Specifikt för utvärderingsgenerering är inställt på 800 för de flesta AI-assisterade utvärderare. Den har värdet 1600 för RetrievalEvaluator och 3 000 för ToolCallAccuracyEvaluator för att hantera längre indata.

Azure OpenAI-bedömare kräver en mall som beskriver hur deras indatakolumner omvandlas till de verkliga indata som bedömaren använder. Om du till exempel har två indata som kallas fråga och svar och en mall formaterad som {{item.query}}används endast frågan. På samma sätt kan du ha något som {{item.conversation}} för att acceptera en konversationsinmatning, men systemets förmåga att hantera det beror på hur du konfigurerar resten av komponenten för att förvänta sig den inmatningen.

Mer information om datakrav för agentiska utvärderare finns i Utvärdera dina AI-agenter.

Stöd för text med en enda tur

Alla inbyggda utvärderare tar indata med en enda tur som fråge- och svarspar i strängar. Till exempel:

from azure.ai.evaluation import RelevanceEvaluator

query = "What is the capital of life?"
response = "Paris."

# Initialize an evaluator:
relevance_eval = RelevanceEvaluator(model_config)
relevance_eval(query=query, response=response)

Om du vill köra batchutvärderingar med hjälp av lokal utvärdering eller ladda upp din datauppsättning för att köra en molnutvärdering, representerar du datauppsättningen i JSONL-format. De tidigare data från en enda interaktion, som är ett fråge-och-svar-par, motsvarar en rad i en datauppsättning som i följande exempel, som visar tre rader:

{"query":"What is the capital of France?","response":"Paris."}
{"query":"What atoms compose water?","response":"Hydrogen and oxygen."}
{"query":"What color is my shirt?","response":"Blue."}

Datauppsättningen för utvärderingstest kan innehålla följande element, beroende på kraven för varje inbyggd utvärderare:

  • Fråga: Frågan som skickas in i generativ AI-applikationen.
  • Svar: Svaret på frågan som genereras av generativ AI-programmet.
  • Kontext: Källan som det genererade svaret baseras på. Det vill säga: grunddokumenten.
  • Grundsanning: Svaret som genereras av en användare eller människa som det sanna svaret.

Information om vad varje utvärderare kräver finns i Utvärderare.

Konversationsstöd för text

För utvärderare som stöder konversationer för text kan du ange conversation som indata. Den här inmatningen innehåller en Python-ordlista som innehåller en lista med messages, vilken innehåller content, role, och eventuellt context.

Se följande tvåstegskonversation i Python:

conversation = {
        "messages": [
        {
            "content": "Which tent is the most waterproof?", 
            "role": "user"
        },
        {
            "content": "The Alpine Explorer Tent is the most waterproof",
            "role": "assistant", 
            "context": "From the our product list the alpine explorer tent is the most waterproof. The Adventure Dining Table has higher weight."
        },
        {
            "content": "How much does it cost?",
            "role": "user"
        },
        {
            "content": "The Alpine Explorer Tent is $120.",
            "role": "assistant",
            "context": None
        }
        ]
}

Om du vill köra batchutvärderingar med hjälp av lokal utvärdering eller ladda upp din datauppsättning för att köra molnutvärdering måste du representera datauppsättningen i JSONL-format. Föregående konversation motsvarar en rad datamängder i en JSONL-fil som i följande exempel:

{"conversation":
    {
        "messages": [
        {
            "content": "Which tent is the most waterproof?", 
            "role": "user"
        },
        {
            "content": "The Alpine Explorer Tent is the most waterproof",
            "role": "assistant", 
            "context": "From the our product list the alpine explorer tent is the most waterproof. The Adventure Dining Table has higher weight."
        },
        {
            "content": "How much does it cost?",
            "role": "user"
        },
        {
            "content": "The Alpine Explorer Tent is $120.",
            "role": "assistant",
            "context": null
        }
        ]
    }
}

Våra utvärderare förstår att konversationens första tur ger giltiga query från user, context från assistant, och response från assistant i frågesvarsformatet. Konversationer utvärderas sedan per tur och resultaten aggregeras över alla svängar för en konversationspoäng.

Anmärkning

I det andra varvet, även om context är null eller om en nyckel saknas, tolkar utvärderaren varvet som en tom sträng i stället för att returnera ett fel, vilket kan leda till missvisande resultat.

Vi rekommenderar starkt att du validerar dina utvärderingsdata för att uppfylla datakraven.

För konversationsläge, här är ett exempel på GroundednessEvaluator:

# Conversation mode:
import json
import os
from azure.ai.evaluation import GroundednessEvaluator, AzureOpenAIModelConfiguration

model_config = AzureOpenAIModelConfiguration(
    azure_endpoint=os.environ.get("AZURE_ENDPOINT"),
    api_key=os.environ.get("AZURE_API_KEY"),
    azure_deployment=os.environ.get("AZURE_DEPLOYMENT_NAME"),
    api_version=os.environ.get("AZURE_API_VERSION"),
)

# Initialize the Groundedness evaluator:
groundedness_eval = GroundednessEvaluator(model_config)

conversation = {
    "messages": [
        { "content": "Which tent is the most waterproof?", "role": "user" },
        { "content": "The Alpine Explorer Tent is the most waterproof", "role": "assistant", "context": "From the our product list the alpine explorer tent is the most waterproof. The Adventure Dining Table has higher weight." },
        { "content": "How much does it cost?", "role": "user" },
        { "content": "$120.", "role": "assistant", "context": "The Alpine Explorer Tent is $120."}
    ]
}

# Alternatively, you can load the same content from a JSONL file.
groundedness_conv_score = groundedness_eval(conversation=conversation)
print(json.dumps(groundedness_conv_score, indent=4))

För konversationsutdata lagras resultat per tur i en lista och den övergripande konversationspoängen 'groundedness': 4.0 är genomsnittlig över turerna:

{
    "groundedness": 5.0,
    "gpt_groundedness": 5.0,
    "groundedness_threshold": 3.0,
    "evaluation_per_turn": {
        "groundedness": [
            5.0,
            5.0
        ],
        "gpt_groundedness": [
            5.0,
            5.0
        ],
        "groundedness_reason": [
            "The response accurately and completely answers the query by stating that the Alpine Explorer Tent is the most waterproof, which is directly supported by the context. There are no irrelevant details or incorrect information present.",
            "The RESPONSE directly answers the QUERY with the exact information provided in the CONTEXT, making it fully correct and complete."
        ],
        "groundedness_result": [
            "pass",
            "pass"
        ],
        "groundedness_threshold": [
            3,
            3
        ]
    }
}

Anmärkning

Vi rekommenderar att du migrerar koden för att använda nyckeln utan prefix för att tillåta att koden stöder fler utvärderarmodeller. Till exempel groundedness.groundedness.

Konversationsstöd för bilder och multimodal text och bild

För utvärderare som stöder konversationer för bild och multimodal bild och text kan du skicka in bild-URL:er eller Base64-kodade bilder i conversation.

Scenarier som stöds är:

  • Flera bilder med textinmatning till bild- eller textgenerering.
  • Endast textinmatning till bildgenerering.
  • Endast bildinmatning till textgenerering.
from pathlib import Path
from azure.ai.evaluation import ContentSafetyEvaluator
import base64

# Create an instance of an evaluator with image and multi-modal support.
safety_evaluator = ContentSafetyEvaluator(credential=azure_cred, azure_ai_project=project_scope)

# Example of a conversation with an image URL:
conversation_image_url = {
    "messages": [
        {
            "role": "system",
            "content": [
                {"type": "text", "text": "You are an AI assistant that understands images."}
            ],
        },
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Can you describe this image?"},
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://cdn.britannica.com/68/178268-050-5B4E7FB6/Tom-Cruise-2013.jpg"
                    },
                },
            ],
        },
        {
            "role": "assistant",
            "content": [
                {
                    "type": "text",
                    "text": "The image shows a man with short brown hair smiling, wearing a dark-colored shirt.",
                }
            ],
        },
    ]
}

# Example of a conversation with base64 encoded images:
base64_image = ""

with Path.open("Image1.jpg", "rb") as image_file:
    base64_image = base64.b64encode(image_file.read()).decode("utf-8")

conversation_base64 = {
    "messages": [
        {"content": "create an image of a branded apple", "role": "user"},
        {
            "content": [{"type": "image_url", "image_url": {"url": f"data:image/jpg;base64,{base64_image}"}}],
            "role": "assistant",
        },
    ]
}

# Run the evaluation on the conversation to output the result.
safety_score = safety_evaluator(conversation=conversation_image_url)

För närvarande har bild- och multimodala utvärderingssystem stöd för:

  • Endast enkel tur: en konversation kan endast ha ett användarmeddelande och ett assistentmeddelande.
  • Konversationer som bara har ett systemmeddelande.
  • Nyttolaster för konversationer som är mindre än 10 MB, inklusive bilder.
  • Absoluta URL:er och Base64-kodade bilder.
  • Flera bilder i en enda tur.
  • JPG-/JPEG-, PNG- och GIF-filformat.

Ställ in

För AI-assisterade kvalitetsutvärderare, förutom för förhandsgranskning GroundednessProEvaluator, måste du ange en GPT-modell (gpt-35-turbo, gpt-4, gpt-4-turbo, gpt-4o eller gpt-4o-mini) i din model_config. GPT-modellen fungerar som domare för att bedöma utvärderingsdata. Vi stöder konfigurationsscheman för både Azure OpenAI- eller OpenAI-modeller. För bästa prestanda och parsningsbara svar med våra utvärderare rekommenderar vi att du använder GPT-modeller som inte är i förhandsversion.

Anmärkning

Vi rekommenderar starkt att du ersätter gpt-3.5-turbo med gpt-4o-mini för din utvärderingsmodell. Enligt OpenAI, gpt-4o-mini är billigare, mer kapabel, och så snabbt.

Kontrollera att du har minst rollen Cognitive Services OpenAI User för Azure OpenAI-resursen för att göra slutsatsdragningsanrop med API-nyckeln. Mer information om behörigheter finns i Behörigheter för en Azure OpenAI-resurs.

För alla risk- och säkerhetsutvärderingar och GroundednessProEvaluator (förhandsversion) i stället för en GPT-distribution i model_configmåste du ange din azure_ai_project information. På så sätt får du åtkomst till backend-utvärderingstjänsten med hjälp av ditt Azure AI-projekt.

Uppmaningar för AI-assisterade inbyggda utvärderare

Vi har öppen källkod för uppmaningarna från våra kvalitetsutvärderingar i vårt utvärderingsbibliotek och Azure AI Evaluation Python SDK-lagringsplatsen för transparens, förutom säkerhetsutvärderingarna och GroundednessProEvaluator, som drivs av Azure AI Content Safety. Dessa uppmaningar fungerar som instruktioner för en språkmodell för att utföra sin utvärderingsuppgift, vilket kräver en människovänlig definition av måttet och dess associerade bedömningskriteriet. Vi rekommenderar starkt att du anpassar definitionerna och klassificeringskriteriet efter dina scenariospecifika. Mer information finns i Anpassade utvärderare.

Sammansatta utvärderare

Sammansatta utvärderare är inbyggda utvärderare som kombinerar enskilda kvalitets- eller säkerhetsmått. De tillhandahåller ett brett utbud av mått som är omedelbart tillgängliga för både fråge-svar-par och chattmeddelanden.

Sammansatt utvärderare Innehåller Beskrivning
QAEvaluator GroundednessEvaluator, RelevanceEvaluator, CoherenceEvaluator, FluencyEvaluator, SimilarityEvaluatorF1ScoreEvaluator Kombinerar alla kvalitetsevalueringar för ett enda resultat av kombinerade mått för fråge- och svarspar.
ContentSafetyEvaluator ViolenceEvaluator, SexualEvaluator, , SelfHarmEvaluatorHateUnfairnessEvaluator Kombinerar alla säkerhetsvärderingar för ett enda resultat av kombinerade mått för fråge- och svarspar.

Lokal utvärdering av testdatauppsättningar med hjälp av evaluate()

När du har kontrollerat dina inbyggda eller anpassade utvärderare på en enda rad med data kan du kombinera flera utvärderare med API:et evaluate() på en hel testdatauppsättning.

Nödvändiga konfigurationssteg för Azure AI Foundry-projekt

Om den här sessionen är första gången du kör utvärderingar och loggar den till ditt Azure AI Foundry-projekt kan du behöva utföra följande installationssteg:

  1. Skapa och anslut ditt lagringskonto till ditt Azure AI Foundry-projekt på resursnivå. Den här bicep-mallen etablerar och ansluter ett lagringskonto till ditt Foundry-projekt med nyckelautentisering.
  2. Kontrollera att det anslutna lagringskontot har åtkomst till alla projekt.
  3. Om du har anslutit ditt lagringskonto med Microsoft Entra-ID ska du ge Microsoft Identity-behörigheter för Lagringsblobdataägare till både ditt konto och Foundry-projektresursen i Azure-portalen.

Utvärdera en datauppsättning och logga resultaten till Azure AI Foundry

För att säkerställa att API:et evaluate() kan parsa data korrekt måste du ange kolumnmappning för att mappa kolumnen från datauppsättningen till nyckelord som utvärderarna accepterar. Det här exemplet anger datamappningen för query, responseoch context.

from azure.ai.evaluation import evaluate

result = evaluate(
    data="data.jsonl", # Provide your data here:
    evaluators={
        "groundedness": groundedness_eval,
        "answer_length": answer_length
    },
    # Column mapping:
    evaluator_config={
        "groundedness": {
            "column_mapping": {
                "query": "${data.queries}",
                "context": "${data.context}",
                "response": "${data.response}"
            } 
        }
    },
    # Optionally, provide your Azure AI Foundry project information to track your evaluation results in your project portal.
    azure_ai_project = azure_ai_project,
    # Optionally, provide an output path to dump a JSON file of metric summary, row-level data, and the metric and Azure AI project URL.
    output_path="./myevalresults.json"
)

Tips/Råd

Hämta innehållet i result.studio_url egenskapen för en länk för att visa dina loggade utvärderingsresultat i ditt Azure AI-projekt.

Utvärderaren matar ut resultat i en ordlista som innehåller aggregerade metrics data och mått på radnivå. Se följande exempelutdata:

{'metrics': {'answer_length.value': 49.333333333333336,
             'groundedness.gpt_groundeness': 5.0, 'groundedness.groundeness': 5.0},
 'rows': [{'inputs.response': 'Paris is the capital of France.',
           'inputs.context': 'Paris has been the capital of France since '
                                  'the 10th century and is known for its '
                                  'cultural and historical landmarks.',
           'inputs.query': 'What is the capital of France?',
           'outputs.answer_length.value': 31,
           'outputs.groundeness.groundeness': 5,
           'outputs.groundeness.gpt_groundeness': 5,
           'outputs.groundeness.groundeness_reason': 'The response to the query is supported by the context.'},
          {'inputs.response': 'Albert Einstein developed the theory of '
                            'relativity.',
           'inputs.context': 'Albert Einstein developed the theory of '
                                  'relativity, with his special relativity '
                                  'published in 1905 and general relativity in '
                                  '1915.',
           'inputs.query': 'Who developed the theory of relativity?',
           'outputs.answer_length.value': 51,
           'outputs.groundeness.groundeness': 5,
           'outputs.groundeness.gpt_groundeness': 5,
           'outputs.groundeness.groundeness_reason': 'The response to the query is supported by the context.'},
          {'inputs.response': 'The speed of light is approximately 299,792,458 '
                            'meters per second.',
           'inputs.context': 'The exact speed of light in a vacuum is '
                                  '299,792,458 meters per second, a constant '
                                  "used in physics to represent 'c'.",
           'inputs.query': 'What is the speed of light?',
           'outputs.answer_length.value': 66,
           'outputs.groundeness.groundeness': 5,
           'outputs.groundeness.gpt_groundeness': 5,
           'outputs.groundeness.groundeness_reason': 'The response to the query is supported by the context.'}],
 'traces': {}}

Krav för evaluate()

API:et evaluate() har några krav för det dataformat som det accepterar och hur det hanterar nyckelnamn för utvärderaresparameter så att diagrammen i utvärderingsresultaten i ditt Azure AI-projekt visas korrekt.

Dataformat

API:et evaluate() accepterar endast data i JSONL-format. För alla inbyggda utvärderare evaluate() kräver data i följande format med de obligatoriska indatafälten. Se föregående avsnitt om nödvändiga dataindata för inbyggda utvärderare. Följande kodfragment är ett exempel på hur en rad kan se ut:

{
  "query":"What is the capital of France?",
  "context":"France is in Europe",
  "response":"Paris is the capital of France.",
  "ground_truth": "Paris"
}

Parameterformat för utvärderare

När du skickar in dina inbyggda utvärderare är det viktigt att ange rätt nyckelordsmappning i evaluators parameterlistan. Följande tabell är den nyckelordsmappning som krävs för att resultaten från dina inbyggda utvärderare ska visas i användargränssnittet när de loggas till ditt Azure AI-projekt.

Utvärderare Nyckelordsparameter
GroundednessEvaluator "groundedness"
GroundednessProEvaluator "groundedness_pro"
RetrievalEvaluator "retrieval"
RelevanceEvaluator "relevance"
CoherenceEvaluator "coherence"
FluencyEvaluator "fluency"
SimilarityEvaluator "similarity"
F1ScoreEvaluator "f1_score"
RougeScoreEvaluator "rouge"
GleuScoreEvaluator "gleu"
BleuScoreEvaluator "bleu"
MeteorScoreEvaluator "meteor"
ViolenceEvaluator "violence"
SexualEvaluator "sexual"
SelfHarmEvaluator "self_harm"
HateUnfairnessEvaluator "hate_unfairness"
IndirectAttackEvaluator "indirect_attack"
ProtectedMaterialEvaluator "protected_material"
CodeVulnerabilityEvaluator "code_vulnerability"
UngroundedAttributesEvaluator "ungrounded_attributes"
QAEvaluator "qa"
ContentSafetyEvaluator "content_safety"

Här är ett exempel på hur du anger parametrarna evaluators :

result = evaluate(
    data="data.jsonl",
    evaluators={
        "sexual":sexual_evaluator,
        "self_harm":self_harm_evaluator,
        "hate_unfairness":hate_unfairness_evaluator,
        "violence":violence_evaluator
    }
)

Lokal utvärdering av ett mål

Om du har en lista över frågor som du vill köra och sedan utvärdera stöder API:et evaluate() även en target parameter. Den här parametern kan skicka frågor till ett program för att samla in svar och sedan köra utvärderarna på den resulterande frågan och svaret.

Ett mål kan vara vilken anropsbar klass som helst i din katalog. I det här exemplet finns det ett Python-skript askwiki.py med en anropsbar klass askwiki() som anges som mål. Om du har en datamängd med frågor som du kan skicka till den enkla askwiki appen, kan du utvärdera förankringen av utdata. Kontrollera att du anger rätt kolumnmappning för dina data i "column_mapping". Du kan använda "default" för att ange kolumnmappning för alla utvärderare.

Här är innehållet i "data.jsonl":

{"query":"When was United States found ?", "response":"1776"}
{"query":"What is the capital of France?", "response":"Paris"}
{"query":"Who is the best tennis player of all time ?", "response":"Roger Federer"}
from askwiki import askwiki

result = evaluate(
    data="data.jsonl",
    target=askwiki,
    evaluators={
        "groundedness": groundedness_eval
    },
    evaluator_config={
        "default": {
            "column_mapping": {
                "query": "${data.queries}",
                "context": "${outputs.context}",
                "response": "${outputs.response}"
            } 
        }
    }
)