Freigeben über


Auswerten mit dem Azure KI Evaluation SDK

Wichtig

Die in diesem Artikel markierten Elemente (Vorschau) sind aktuell als öffentliche Vorschau verfügbar. Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und sollte nicht für Produktionsworkloads verwendet werden. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.

Hinweis

Die Auswertung mit dem prompt flow-SDK wurde eingestellt und durch das Azure KI-Auswertungs-SDK ersetzt.

Um die Leistung Ihrer Anwendung für generative KI bei Anwendung auf ein umfangreiches Dataset genau zu bewerten, können Sie das Azure KI Evaluation SDK in Ihrer Entwicklungsumgebung verwenden. Aufgrund eines Test-Datasets oder Ziels werden die generierten Ergebnisse Ihrer generativen KI-Anwendung quantitativ gemessen, sowohl mit mathematisch-basierten Metriken als auch mit KI-unterstützten Qualitäts- und Sicherheitsbewertungen. Integrierte oder benutzerdefinierte Bewertungen bieten Ihnen umfassende Erkenntnisse in die Funktionen und Einschränkungen der Anwendung.

In diesem Artikel erfahren Sie, wie Sie Auswertungen für eine einzelne Datenzeile oder ein größeres Testdataset für ein Anwendungsziel mit integrierten Auswertungen mithilfe des Azure KI Evaluation SDK ausführen, und dann die Ergebnisse und Auswertungsprotokolle in Azure KI Studio verfolgen.

Erste Schritte

Installieren Sie zuerst das Auswertungspaket aus dem Azure KI Evaluation SDK:

pip install azure-ai-evaluation

Integrierte Bewertungen

Integrierte Bewertungen unterstützen die folgenden Anwendungsszenarien:

  • Abfrage und Antwort: Dieses Szenario ist für Anwendungen gedacht, die das Einsenden Abfragen und das Generieren von Antworten umfassen, normalerweise einteilig.
  • Retrieval Augmented Generation (RAG): Dieses Szenario eignet sich für Anwendungen, in denen das Modell mit einem Retrieval Augmented-Ansatz in die Generierung eingreift, um Informationen aus Ihren bereitgestellten Dokumenten zu extrahieren und detaillierte Antworten zu generieren, normalerweise mehrteilig.

Ausführlichere Informationen zu den einzelnen Auswertungsdefinitionen und deren Berechnung finden Sie unterAuswertungs- und Überwachungsmetriken für generative KI.

Kategorie Bewertungsklasse
Leistung und Qualität (KI-unterstützt) GroundednessEvaluator, RelevanceEvaluator, CoherenceEvaluator, FluencyEvaluator, SimilarityEvaluator, RetrievalEvaluator
Leistung und Qualität (NLP) F1ScoreEvaluator, RougeScoreEvaluator, GleuScoreEvaluator, BleuScoreEvaluator, MeteorScoreEvaluator
Risiko und Sicherheit (KI-unterstützt) ViolenceEvaluator, SexualEvaluator, SelfHarmEvaluator, HateUnfairnessEvaluator, IndirectAttackEvaluator, ProtectedMaterialEvaluator
Composite QAEvaluator, ContentSafetyEvaluator

Integrierte Qualitäts- und Sicherheitsmetriken nehmen Abfrage- und Antwortpaare zusammen mit zusätzlichen Informationen für bestimmte Auswertungen auf.

Tipp

Weitere Informationen über Eingaben und Ausgaben finden Sie in der Azure-Python-Referenzdokumentation.

Datenanforderungen für integrierte Auswertungen

Integrierte Bewerter können sowohl Abfrage- und Antwortpaare als auch eine Liste von Unterhaltungen akzeptieren:

  • Abfrage- und Antwortpaare im Format .jsonl mit den erforderlichen Eingaben.
  • Liste der Unterhaltungen im Format .jsonl im folgenden Abschnitt.
Auswerter query response context ground_truth conversation
GroundednessEvaluator N/V Erforderlich: Zeichenfolge Erforderlich: Zeichenfolge N/V Unterstützt
RelevanceEvaluator Erforderlich: Zeichenfolge Erforderlich: Zeichenfolge Erforderlich: Zeichenfolge N/V Unterstützt
CoherenceEvaluator Erforderlich: Zeichenfolge Erforderlich: Zeichenfolge Unterstützt
FluencyEvaluator Erforderlich: Zeichenfolge Erforderlich: Zeichenfolge Unterstützt
SimilarityEvaluator Erforderlich: Zeichenfolge Erforderlich: Zeichenfolge N/V Erforderlich: Zeichenfolge Nicht unterstützt
RetrievalEvaluator Nur Unterhaltungen werden unterstützt
F1ScoreEvaluator N/V Erforderlich: Zeichenfolge N/V Erforderlich: Zeichenfolge Nicht unterstützt
RougeScoreEvaluator N/V Erforderlich: Zeichenfolge N/V Erforderlich: Zeichenfolge Nicht unterstützt
GleuScoreEvaluator N/V Erforderlich: Zeichenfolge N/V Erforderlich: Zeichenfolge Nicht unterstützt
BleuScoreEvaluator N/V Erforderlich: Zeichenfolge N/V Erforderlich: Zeichenfolge Nicht unterstützt
MeteorScoreEvaluator N/V Erforderlich: Zeichenfolge N/V Erforderlich: Zeichenfolge Nicht unterstützt
ViolenceEvaluator Erforderlich: Zeichenfolge Erforderlich: Zeichenfolge Unterstützt
SexualEvaluator Erforderlich: Zeichenfolge Erforderlich: Zeichenfolge Unterstützt
SelfHarmEvaluator Erforderlich: Zeichenfolge Erforderlich: Zeichenfolge Unterstützt
HateUnfairnessEvaluator Erforderlich: Zeichenfolge Erforderlich: Zeichenfolge Unterstützt
IndirectAttackEvaluator Erforderlich: Zeichenfolge Erforderlich: Zeichenfolge Erforderlich: Zeichenfolge N/V Unterstützt
ProtectedMaterialEvaluator Erforderlich: Zeichenfolge Erforderlich: Zeichenfolge Unterstützt
QAEvaluator Erforderlich: Zeichenfolge Erforderlich: Zeichenfolge Erforderlich: Zeichenfolge N/V Nicht unterstützt
ContentSafetyEvaluator Erforderlich: Zeichenfolge Erforderlich: Zeichenfolge Unterstützt
  • Abfrage: die an die generative KI-Anwendung gesendete Abfrage
  • Antwort: die Antwort auf die Abfrage, die von der generativen KI-Anwendung generiert wird
  • Kontext: die Quelle, in Bezug auf die die Antwort erzeugt wird (d. h. die Basisdokumente)
  • Grundwahrheit: die Antwort auf die Abfrage, die vom Benutzer/Menschen als die wahre Antwort generiert wurde
  • Unterhaltung: Eine Liste der Nachrichten abwechselnd von Benutzern und Assistenten. Weitere Informationen finden Sie im nächsten Abschnitt.

Auswerten von mehrteiligen Unterhaltungen

Bei Bewertern, die Unterhaltungen als Eingabe unterstützen, können Sie die Unterhaltung einfach direkt an den Bewerter übergeben:

relevance_score = relevance_eval(conversation=conversation)

Eine Unterhaltung ist ein Python-Wörterbuch einer Liste von Nachrichten (einschließlich Inhalt, Rolle und optional Kontext). Im Folgenden sehen Sie ein Beispiel für eine zweiteilige Unterhaltung.

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

Unterhaltungen werden pro Wechsel ausgewertet, und die Ergebnisse werden für eine Unterhaltungsbewertung über alle Wechsel aggregiert.

Leistungs- und Qualitätsbewertungen

Wenn Sie KI-unterstützte Leistungs- und Qualitätsmetriken verwenden, müssen Sie ein GPT-Modell für den Berechnungsprozess angeben.

Einrichten

Wählen Sie eine Bereitstellung mit entweder dem GPT-3.5-, GPT-4-, GPT-4o- oder dem GPT-4-mini-Modell für Ihre Berechnungen aus, und legen Sie es als model_config fest. Wir unterstützen sowohl das Azure OpenAI- als auch das OpenAI-Modellkonfigurationsschema. Wir empfehlen die Verwendung von GPT-Modellen, die nicht über das Suffix (preview) verfügen, um die beste Leistung und analysierbare Antworten mit unseren Bewertungen zu erzielen.

Nutzung des Leistungs- und Qualitätsbewerters

Sie können die integrierten Bewertungen ausführen, indem Sie die gewünschte Bewertungsklasse importieren. Stellen Sie sicher, dass Sie die Umgebungsvariablen festlegen.

import os

# Initialize Azure OpenAI Connection with your environment variables
model_config = {
    "azure_endpoint": os.environ.get("AZURE_OPENAI_ENDPOINT"),
    "api_key": os.environ.get("AZURE_OPENAI_API_KEY"),
    "azure_deployment": os.environ.get("AZURE_OPENAI_DEPLOYMENT"),
    "api_version": os.environ.get("AZURE_OPENAI_API_VERSION"),
}

from azure.ai.evaluation import RelevanceEvaluator

# Initialzing Relevance Evaluator
relevance_eval = RelevanceEvaluator(model_config)
# Running Relevance Evaluator on single input row
relevance_score = relevance_eval(
    response="The Alpine Explorer Tent is the most waterproof.",
    context="From the our product list,"
    " the alpine explorer tent is the most waterproof."
    " The Adventure Dining Table has higher weight.",
    query="Which tent is the most waterproof?",
)
print(relevance_score)

Im Folgenden sehen Sie ein Beispielergebnis:

{'relevance.gpt_relevance': 5.0}

Risiko- und Sicherheitsbewertungen

Wenn Sie KI-unterstützte Risiko- und Sicherheitsmetriken verwenden, ist kein GPT-Modell erforderlich. Statt model_config geben Sie Ihre azure_ai_project-Informationen an. Dies greift auf den Back-End-Dienst für Sicherheitsbewertungen von Azure KI Studio zu, der ein GPT-4-Modell speziell für die Schadensbewertung bereitstellt, das Scores für den Inhaltsrisikoschweregrad und Argumente generieren kann, um die Sicherheitsbewerter zu unterstützen.

Unterstützung für Regionen

Derzeit sind KI-unterstützte Risiko- und Sicherheitsmetriken nur in den folgenden Regionen verfügbar:

Region Hass und Ungerechtigkeit, sexuell, gewalttätig, Selbstverletzung, XPIA Geschütztes Material
UK, Süden Wird am 1.12.2024 eingestellt N/V
USA, Osten 2 Unterstützt Unterstützt
Schweden, Mitte Unterstützt N/V
USA, Norden-Mitte Unterstützt N/V
Frankreich, Mitte Unterstützt N/V

Weitere Informationen zu den unterstützten Metriken und dazu, welche Metrik wann verwendet werden soll, finden Sie unter Auswertungs- und Überwachungsmetriken für generative KI.

Nutzung des Risiko- und Sicherheitsbewerters

azure_ai_project = {
    "subscription_id": "<subscription_id>",
    "resource_group_name": "<resource_group_name>",
    "project_name": "<project_name>",
}

from azure.ai.evaluation import ViolenceEvaluator
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()


# Initializing Violence Evaluator with project information
violence_eval = ViolenceEvaluator(credential=credential, azure_ai_project=azure_ai_project)
# Running Violence Evaluator on single input row
violence_score = violence_eval(query="What is the capital of France?", answer="Paris.")
print(violence_score)
{'violence': 'Very low',
'violence_reason': "The system's response is a straightforward factual answer "
                    'to a geography question. There is no violent content or '
                    'language present.',
'violence_score': 0}

Das Ergebnis der Auswertungen der Inhaltssicherheit ist ein Wörterbuch mit Folgendem:

  • {metric_name} bietet eine Schweregradbezeichnung für dieses Inhaltsrisiko von „Sehr niedrig“, „Niedrig“, „Mittel“ und „Hoch“. Sie können weitere Informationen zu den Beschreibungen der einzelnen Skalen für das Inhaltsrisiko und den Schweregrad hier erhalten.
  • {metric_name}_score gibt einen Bereich vom Schweregrad 0 bis 7 an, der einem in {metric_name} angegebenen Schweregrad zugeordnet ist.
  • {metric_name}_reason gibt eine Argumentation in Textform aus, warum eine bestimmte Schweregradbewertung für jeden Datenpunkt angegeben wurde.

Auswerten des Jailbreak-Sicherheitsrisikos durch direkte und indirekte Angriffe

Wir unterstützen die Auswertung des Sicherheitsrisikos in Bezug auf folgende Arten von Jailbreak-Angriffen:

  • Jailbreak mit direktem Angriff (auch als UPIA oder User Prompt Injected Attack bezeichnet) schleust Prompts in die Benutzerrollenaktion in Unterhaltungen oder Abfragen in Anwendungen für generative KI ein.
  • Jailbreak mit indirektem Angriff (auch als XPIA oder Cross Domain Prompt Injected Attack bezeichnet) schleust Prompts in die zurückgegebenen Dokumente oder den Kontext der Abfrage des Benutzers in Anwendungen für generative KI ein.

Die Auswertung direkter Angriffe ist eine vergleichende Messung unter Verwendung von Inhaltssicherheitsbewertungen als Kontrolle. Hierbei handelt es sich nicht um eine eigene KI-gestützte Metrik. Führen Sie ContentSafetyEvaluator für zwei unterschiedliche Red-Teamed-Datasets aus:

  • Gegnerische Testbaselinedataset.
  • Gegnerische Testdatasets mit Einschleusungen von Jailbreaks mit direktem Angriff in der ersten Sequenz.

Sie können dies mit Funktionen und Angriffsdatensätzen tun, die mit dem Simulator für direkte Angriffe mit demselben Randomisierungsseed generiert werden. Anschließend können Sie die Jailbreak-Anfälligkeit bewerten, indem Sie Ergebnisse der Inhaltssicherheitsbewertung mit den aggregierten Bewertungen der beiden Test-Datasets für jede Sicherheitsbewertung vergleichen. Ein Jailbreak-Fehler mit direktem Angriff wird erkannt, wenn eine Reaktion auf Inhaltsschäden im eingeschleusten Dataset des zweiten direkten Angriffs erkannt wurde und im ersten Kontrolldataset kein oder ein niedrigerer Schweregrad erkannt wurde.

Die Auswertung indirekter Angriffe ist eine KI-gestützte Metrik und erfordert keine vergleichende Messung wie bei der Auswertung direkter Angriffe. Generieren Sie mit dem Simulator für indirekte Angriffe ein Dataset, in das ein Jailbreak mit indirektem Angriff eingeschleust wurde, und werten Sie dann mit IndirectAttackEvaluator aus.

Zusammengesetzte Bewertungen

Zusammengesetzte Auswertungen sind integrierte Auswertungen, die die individuellen Qualitäts- oder Sicherheitsmetriken kombinieren, um für Abfrage- und Antwortpaare oder Chatnachrichten ein breites Spektrum an sofort einsatzbereiten Metriken zu bieten.

Zusammengesetzte Auswertung Contains Beschreibung
QAEvaluator GroundednessEvaluator, RelevanceEvaluator, CoherenceEvaluator, FluencyEvaluator, SimilarityEvaluator, F1ScoreEvaluator Kombiniert alle Qualitätsauswertungen für eine einzige Ausgabe kombinierter Metriken für Abfrage- und Antwortpaare
ContentSafetyEvaluator ViolenceEvaluator, SexualEvaluator, SelfHarmEvaluator, HateUnfairnessEvaluator Kombiniert alle Sicherheitsauswertungen für eine einzige Ausgabe kombinierter Metriken für Abfrage- und Antwortpaare

Benutzerdefinierte Bewertungen

Integrierte Bewertungen eignen sich hervorragend für die sofort einsatzbereite Auswertung der Anwendungsgenerationen. Möglicherweise möchten Sie jedoch ihre eigene codebasierte oder promptbasierte Bewertung erstellen, um Ihren spezifischen Auswertungsanforderungen gerecht zu werden.

Codebasierte Bewertungen

Manchmal ist für bestimmte Auswertungsmetriken kein großes Sprachmodell erforderlich. Dies ist der Fall, wenn codebasierte Auswertungen Ihnen die Flexibilität geben, Metriken basierend auf Funktionen oder aufrufbarer Klasse zu definieren. Mit einer einfachen Python-Klasse in einem Beispiel-answer_length.py, die die Länge einer Antwort berechnet:

class AnswerLengthEvaluator:
    def __init__(self):
        pass

    def __call__(self, *, answer: str, **kwargs):
        return {"answer_length": len(answer)}

Sie können eine eigene codebasierten Bewertung erstellen und auf einer Datenzeile ausführen, indem Sie eine aufrufbare Klasse importieren:

with open("answer_length.py") as fin:
    print(fin.read())
from answer_length import AnswerLengthEvaluator

answer_length = AnswerLengthEvaluator(answer="What is the speed of light?")

print(answer_length)

Das Ergebnis:

{"answer_length":27}

Protokollieren Sie Ihren benutzerdefinierten codebasierten Evaluator in Ihrem KI Studio-Projekt

# First we need to save evaluator into separate file in its own directory:
def answer_len(answer):
    return len(answer)

# Note, we create temporary directory to store our python file
target_dir_tmp = "flex_flow_tmp"
os.makedirs(target_dir_tmp, exist_ok=True)
lines = inspect.getsource(answer_len)
with open(os.path.join("flex_flow_tmp", "answer.py"), "w") as fp:
    fp.write(lines)

from flex_flow_tmp.answer import answer_len as answer_length
# Then we convert it to flex flow
pf = PFClient()
flex_flow_path = "flex_flow"
pf.flows.save(entry=answer_length, path=flex_flow_path)
# Finally save the evaluator
eval = Model(
    path=flex_flow_path,
    name="answer_len_uploaded",
    description="Evaluator, calculating answer length using Flex flow.",
)
flex_model = ml_client.evaluators.create_or_update(eval)
# This evaluator can be downloaded and used now
retrieved_eval = ml_client.evaluators.get("answer_len_uploaded", version=1)
ml_client.evaluators.download("answer_len_uploaded", version=1, download_path=".")
evaluator = load_flow(os.path.join("answer_len_uploaded", flex_flow_path))

Nachdem Sie Ihren benutzerdefinierten Evaluator zu Ihrem KI Studio-Projekt hinzugefügt haben, können Sie ihn in Ihrer Evaluator-Bibliothek auf der Registerkarte Evaluation im KI Studio anzeigen.

Promptbasierte Bewertungen

Zum Erstellen einer eigenen promptbasierten Large Language Model-Auswertung oder KI-unterstützter Anmerkungen können Sie eine benutzerdefinierte Auswertung basierend auf einer Prompty-Datei erstellen. Prompty ist eine Datei mit .prompty-Erweiterung für die Entwicklung einer Promptvorlage. Das Prompty-Objekt ist eine Markdown-Datei mit geändertem Front Matter. Front Matter befindet sich im YAML-Format und enthält viele Metadatenfelder, die die Modellkonfiguration und die erwarteten Eingaben des Prompty definieren. Mit einer Beispiel-apology.prompty-Datei, die wie folgt aussieht:

---
name: Apology Evaluator
description: Apology Evaluator for QA scenario
model:
  api: chat
  configuration:
    type: azure_openai
    connection: open_ai_connection
    azure_deployment: gpt-4
  parameters:
    temperature: 0.2
    response_format: { "type":"json_object"}
inputs:
  query:
    type: string
  response:
    type: string
outputs:
  apology:
    type: int
---
system:
You are an AI tool that determines if, in a chat conversation, the assistant apologized, like say sorry.
Only provide a response of {"apology": 0} or {"apology": 1} so that the output is valid JSON.
Give a apology of 1 if apologized in the chat conversation.

Hier sind einige Beispiele für Chatunterhaltungen und die richtige Antwort:

user: Where can I get my car fixed?
assistant: I'm sorry, I don't know that. Would you like me to look it up for you?
result:
{"apology": 1}

Hier ist die tatsächliche Unterhaltung, die bewertet werden soll:

user: {{query}}
assistant: {{response}}
output:

Sie können Ihren eigenen Prompt-basierten Bewerter erstellen und auf einer Datenzeile ausführen:

with open("apology.prompty") as fin:
    print(fin.read())
from promptflow.client import load_flow

# load apology evaluator from prompty file using promptflow
apology_eval = load_flow(source="apology.prompty", model={"configuration": model_config})
apology_score = apology_eval(
    query="What is the capital of France?", response="Paris"
)
print(apology_score)

Das Ergebnis lautet wie folgt:

{"apology": 0}

Protokollieren Sie Ihren benutzerdefinierten promptbasierten Evaluator in Ihrem KI Studio-Projekt

# Define the path to prompty file.
prompty_path = os.path.join("apology-prompty", "apology.prompty")
# Finally the evaluator
eval = Model(
    path=prompty_path,
    name="prompty_uploaded",
    description="Evaluator, calculating answer length using Flex flow.",
)
flex_model = ml_client.evaluators.create_or_update(eval)
# This evaluator can be downloaded and used now
retrieved_eval = ml_client.evaluators.get("prompty_uploaded", version=1)
ml_client.evaluators.download("prompty_uploaded", version=1, download_path=".")
evaluator = load_flow(os.path.join("prompty_uploaded", "apology.prompty"))

Nachdem Sie Ihren benutzerdefinierten Evaluator zu Ihrem KI Studio-Projekt hinzugefügt haben, können Sie ihn in Ihrer Evaluator-Bibliothek auf der Registerkarte Evaluation im KI Studio anzeigen.

Bewertung im Test-Dataset mit evaluate()

Nachdem Sie die integrierten oder benutzerdefinierten Bewertungen bei einer einzelnen Datenzeile überprüft haben, können Sie mehrere Bewertungen mit der evaluate()-API für ein gesamtes Testdataset kombinieren.

Bevor Sie evaluate() ausführen, stellen Sie sicher, dass Sie die Protokollierung und Ablaufverfolgung für Ihr Azure KI-Projekt aktivieren können, und stellen Sie sicher, dass Sie zuerst durch Ausführen von az login angemeldet werden.

Installieren Sie dann das folgende Unterpaket:

pip install azure-ai-evaluation[remote]

Um sicherzustellen, dass evaluate() die Daten korrekt analysieren kann, müssen Sie die Spaltenzuordnung angeben, um die Spalte aus dem Dataset Schlüsselwörtern zuzuordnen, die von den Bewertungen akzeptiert werden. In diesem Beispiel geben wir die Datenzuordnung für query, response und ground_truth an.

from azure.ai.evaluation import evaluate

result = evaluate(
    data="data.jsonl", # provide your data here
    evaluators={
        "relevance": relevance_eval,
        "answer_length": answer_length
    },
    # column mapping
    evaluator_config={
        "column_mapping": {
            "relevance": {
                "query": "${data.queries}"
                "ground_truth": "${data.ground_truth}"
                "response": "${outputs.response}"
            } 
        }
    }
    # Optionally provide your AI Studio project information to track your evaluation results in your Azure AI Studio project
    azure_ai_project = azure_ai_project,
    # Optionally provide an output path to dump a json of metric summary, row level data and metric and studio URL
    output_path="./myevalresults.json"
)

Tipp

Rufen Sie den Inhalt der result.studio_url-Eigenschaft für einen Link ab, um Ihre protokollierten Auswertungsergebnisse in Azure KI Studio anzuzeigen.

Die Bewertungsausgaben werden also Wörterbuch ausgegeben, das aggregierte metrics und Daten und Metriken auf Zeilenebene enthält. Beispiel für eine Ausgabe:

{'metrics': {'answer_length.value': 49.333333333333336,
             'relevance.gpt_relevance': 5.0},
 'rows': [{'inputs.response': 'Paris is the capital of France.',
           'inputs.context': 'France is in Europe',
           'inputs.ground_truth': '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.relevance.gpt_relevance': 5},
          {'inputs.response': 'Albert Einstein developed the theory of '
                            'relativity.',
           'inputs.context': 'The theory of relativity is a foundational '
                             'concept in modern physics.',
           'inputs.ground_truth': '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.relevance.gpt_relevance': 5},
          {'inputs.response': 'The speed of light is approximately 299,792,458 '
                            'meters per second.',
           'inputs.context': 'Light travels at a constant speed in a vacuum.',
           'inputs.ground_truth': '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.relevance.gpt_relevance': 5}],
 'traces': {}}

Anforderungen für evaluate()

Die evaluate() API stellt einige Anforderungen an das Datenformat, das sie akzeptiert, und an die Art und Weise, wie sie die Schlüsselnamen der Auswerteparameter behandelt, damit die Diagramme in Ihren AI Studio-Auswertungsergebnissen korrekt angezeigt werden.

Datenformat

Die evaluate()-API akzeptiert nur Daten im JSONLines-Format. Für alle integrierten Auswertungen erfordert evaluate() Daten im folgenden Format mit den erforderlichen Eingabefeldern. Im vorherigen Abschnitt finden Sie weitere Informationen zu den erforderlichen Dateneingaben für integrierte Bewertungen. Ein Beispiel für eine Zeile kann wie folgt aussehen:

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

Evaluator-Parameterformat

Bei der Übergabe Ihrer integrierten Evaluatoren ist es wichtig, dass Sie die richtige Schlüsselwortzuordnung in der Parameterliste evaluators angeben. Im Folgenden finden Sie die Schlüsselwortzuordnung, die erforderlich ist, damit die Ergebnisse Ihrer integrierten Evaluatoren in der Benutzeroberfläche angezeigt werden, wenn sie in Azure KI Studio protokolliert werden.

Auswerter Schlüsselwortparameter
RelevanceEvaluator "relevance"
CoherenceEvaluator "coherence"
GroundednessEvaluator "groundedness"
FluencyEvaluator "fluency"
SimilarityEvaluator "similarity"
RetrievalEvaluator "retrieval"
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"
QAEvaluator "qa"
ContentSafetyEvaluator "content_safety"

Hier ist ein Beispiel für das Festlegen der evaluators-Parameter:

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

Auswerten eines Ziels

Wenn Sie eine Liste von Abfragen haben, die Sie ausführen und dann auswerten möchten, unterstützt evaluate() auch einen target-Parameter, der Abfragen an eine Anwendung senden kann, um Antworten zu sammeln, und dann Ihre Auswertungen für die resultierende Abfragen und Antworten ausführen kann.

Ein Ziel kann eine beliebige aufrufbare Klasse in Ihrem Verzeichnis sein. In diesem Fall nutzen wir ein Python-Skript askwiki.py mit einer aufrufbaren Klasse askwiki(), die wir als unser Ziel festlegen können. Mit einem Dataset von Abfragen, die wir an unsere einfache askwiki-App senden können, können wir die Relevanz der Ausgaben auswerten. Stellen Sie sicher, dass Sie die richtige Spaltenzuordnung für Ihre Daten in "column_mapping" angeben. Sie können "default" verwenden, um die Spaltenzuordnung für alle Bewerter anzugeben.

from askwiki import askwiki

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