Évaluateurs Retrieval-Augmented Generation (RAG) (classique)

Affichage actuel :Version du portail - Foundry (classique)Passer à la version du nouveau portail Foundry

Note

Le sdk Microsoft Foundry pour l’évaluation et le portail Foundry sont en préversion publique, mais les API sont généralement disponibles pour l’évaluation du modèle et du jeu de données (l’évaluation de l’agent reste en préversion publique). Les Azure SDK d’évaluation IA et les évaluateurs marqués (préversion) dans cet article sont actuellement en préversion publique partout.

Un système de génération Retrieval-Augmented (RAG) tente de générer la réponse la plus pertinente compatible avec la mise à la terre des documents en réponse à la requête de l’utilisateur. La requête d’un utilisateur déclenche une récupération de recherche dans le corpus de documents de base pour fournir un contexte de base pour le modèle IA afin de générer une réponse.

Il est important d’évaluer :

Ces évaluateurs se concentrent sur trois aspects :

  • La pertinence des résultats de la recherche pour la requête de l’utilisateur : utilisez Document Retrieval si vous avez des étiquettes pour la pertinence spécifique à la requête, ou le jugement de pertinence de la requête (qrels) pour des mesures plus précises. Utilisez Retrieval si vous n’avez que le contexte récupéré, mais que vous n’avez pas de telles étiquettes et que vous avez une tolérance plus élevée pour une mesure moins fine.
  • La cohérence de la réponse générée par rapport aux documents de mise à la terre : utilisez Groundedness si vous souhaitez personnaliser la définition de groundedness dans notre prompt open source de grand juge de modèle de langage (LLM-judge). Utilisez Groundedness Pro (aperçu) si vous voulez une définition claire.
  • La pertinence de la réponse finale à la question : utilisez la pertinence si vous n’avez pas de vérité fondée. Utilisez la complétude de la réponse si vous avez une vérité fondée et que vous ne voulez pas que votre réponse manque des informations cruciales.

Réfléchissez à l’exhaustivité et à la réponse comme suit :

  • La précision de la réponse se concentre sur l’aspect précis de la réponse. Il ne contient pas de contenu en dehors du contexte de base.
  • L’exhaustivité de la réponse se concentre sur l’aspect rappel de la réponse. Il ne manque pas d’informations critiques par rapport à la réponse attendue ou à la vérité de base.

Configuration du modèle pour les évaluateurs assistés par IA

Pour référence dans les extraits suivants, les évaluateurs de qualité assistés par IA, à l’exception de Groundedness Pro, utilisent une configuration de modèle pour le juge LLM :

import os
from azure.ai.evaluation import AzureOpenAIModelConfiguration
from dotenv import load_dotenv
load_dotenv()

model_config = AzureOpenAIModelConfiguration(
    azure_endpoint=os.environ["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"),
)

Prise en charge des modèles évaluateurs

Les évaluateurs prennent en charge les modèles de raisonnement AzureOpenAI ou OpenAI ainsi que les modèles non-raisonnants pour le juge LLM selon les évaluateurs :

Evaluators Modèles de raisonnement en tant que juge (exemple : modèles de la série o d’Azure OpenAI / OpenAI) Modèles non-raisonnants sous Judge (exemple : gpt-4.1, gpt-4o) To enable
IntentResolution, , TaskAdherence, ResponseCompletenessToolCallAccuracy, , FluencyRetrievalSimilarityGroundednessCoherenceRelevance Supported Supported Définir un paramètre is_reasoning_model=True supplémentaire lors de l’initialisation des évaluateurs
Other evaluators Not Supported Supported --

Pour une évaluation complexe nécessitant un raisonnement affiné, utilisez un modèle de raisonnement solide, comme 4.1-mini avec un équilibre entre performance de raisonnement et efficacité des coûts.

Retrieval

En raison de son rôle en amont dans le RAG, la qualité de récupération est cruciale. Si la qualité de la récupération est faible et que la réponse nécessite une connaissance spécifique au corpus, le modèle de langage est moins susceptible de fournir une réponse satisfaisante. RetrievalEvaluator mesure la qualité textuelle des résultats de récupération avec un modèle de langage sans nécessiter de vérité fondamentale, également appelé jugement de pertinence de requête.

Cette approche ajoute de la valeur par rapport à DocumentRetrievalEvaluator, qui mesure ndcg, xdcg, fidelity, et d’autres métriques classiques de récupération d’information nécessitant une vérité fondamentale. Cette métrique se concentre sur la pertinence des chunks de contexte pour traiter une requête et sur la manière dont les chunks les plus pertinents sont mis en avant en tête de liste. Les chunks de contexte sont codés sous forme de chaînes.

Retrieval example

from azure.ai.evaluation import RetrievalEvaluator

retrieval = RetrievalEvaluator(model_config=model_config, threshold=3)
retrieval(
    query="Where was Marie Curie born?", 
    context="Background: 1. Marie Curie was born in Warsaw. 2. Marie Curie was born on November 7, 1867. 3. Marie Curie is a French scientist. ",
)

Retrieval output

Le score numérique est basé sur une échelle de Likert (entier de 1 à 5), où un score plus élevé indique une meilleure performance. Étant donné un seuil numérique (un défaut est fixé), l’évaluateur indique également « réussite » si le score >= seuil, ou échoue sinon. Le champ de la raison explique pourquoi le score est élevé ou bas.

{
    "retrieval": 5.0,
    "gpt_retrieval": 5.0,
    "retrieval_reason": "The context contains relevant information that directly answers the query about Marie Curie's birthplace, with the most pertinent information placed at the top. Therefore, it fits the criteria for a high relevance score.",
    "retrieval_result": "pass",
    "retrieval_threshold": 3
}

Document retrieval

En raison de son rôle en amont dans le RAG, la qualité de récupération est cruciale. Une mauvaise qualité de récupération réduit la probabilité que votre modèle de langage fournisse une réponse satisfaisante, surtout lorsque la réponse nécessite une connaissance spécifique au corpus. À utiliser DocumentRetrievalEvaluator pour évaluer la qualité de la récupération et optimiser vos paramètres de recherche pour RAG.

  • L’évaluateur de récupération de documents mesure la façon dont le RAG récupère les documents appropriés à partir du magasin de documents. En tant qu’évaluateur composite utile pour le scénario RAG avec la vérité au sol, il calcule une liste de métriques de qualité de recherche utiles pour le débogage de vos pipelines RAG :

    Metric Category Description
    Fidelity Search Fidelity La façon dont les n premiers blocs récupérés reflètent le contenu d’une requête donnée : nombre de bons documents retournés en dehors du nombre total de documents corrects connus dans un jeu de données
    NDCG Search NDCG Quelle est la qualité des classements dans un ordre idéal où tous les éléments pertinents se trouvent en haut de la liste
    XDCG Search XDCG Quelle que soit la qualité des résultats dans les documents principaux k, quel que soit le scoring d’autres documents d’index
    Pertinence maximale N Pertinence maximale de la recherche Pertinence maximale dans les blocs top-k
    Holes Rechercher la sanité de l’étiquette Nombre de documents avec des jugements de pertinence de requête manquants ou la vérité de base
  • Pour optimiser votre RAG dans un scénario appelé balayage de paramètres, vous pouvez utiliser ces métriques pour étalonner les paramètres de recherche pour obtenir les résultats RAG optimaux. Générez des résultats de récupération pour différents paramètres de recherche, tels que les algorithmes de recherche (vecteur, sémantique), top_k et tailles de morceaux. Ensuite, utilisez DocumentRetrievalEvaluator pour identifier les paramètres qui donnent la meilleure qualité de récupération.

Exemple de récupération de document

from azure.ai.evaluation import DocumentRetrievalEvaluator

# These query_relevance_labels are given by your human- or LLM-judges.
retrieval_ground_truth = [
    {
        "document_id": "1",
        "query_relevance_label": 4
    },
    {
        "document_id": "2",
        "query_relevance_label": 2
    },
    {
        "document_id": "3",
        "query_relevance_label": 3
    },
    {
        "document_id": "4",
        "query_relevance_label": 1
    },
    {
        "document_id": "5",
        "query_relevance_label": 0
    },
]
# The min and max of the label scores are inputs to document retrieval evaluator
ground_truth_label_min = 0
ground_truth_label_max = 4

# These relevance scores come from your search retrieval system
retrieved_documents = [
    {
        "document_id": "2",
        "relevance_score": 45.1
    },
    {
        "document_id": "6",
        "relevance_score": 35.8
    },
    {
        "document_id": "3",
        "relevance_score": 29.2
    },
    {
        "document_id": "5",
        "relevance_score": 25.4
    },
    {
        "document_id": "7",
        "relevance_score": 18.8
    },
]

document_retrieval_evaluator = DocumentRetrievalEvaluator(
    # Specify the ground truth label range
    ground_truth_label_min=ground_truth_label_min, 
    ground_truth_label_max=ground_truth_label_max,
    # Optionally override the binarization threshold for pass/fail output
    ndcg_threshold = 0.5,
    xdcg_threshold = 50.0,
    fidelity_threshold = 0.5,
    top1_relevance_threshold = 50.0,
    top3_max_relevance_threshold = 50.0,
    total_retrieved_documents_threshold = 50,
    total_ground_truth_documents_threshold = 50
)
document_retrieval_evaluator(retrieval_ground_truth=retrieval_ground_truth, retrieved_documents=retrieved_documents)   

Sortie de récupération de document

Tous les scores numériques ont high_is_better=True, sauf et holesholes_ratio, qui ont high_is_better=False. Avec un seuil numérique (par défaut de 3), l’évaluateur réussit si le score est supérieur ou égal au seuil, ou échoue autrement.

{
    "ndcg@3": 0.6461858173,
    "xdcg@3": 37.7551020408,
    "fidelity": 0.0188438199,
    "top1_relevance": 2,
    "top3_max_relevance": 2,
    "holes": 30,
    "holes_ratio": 0.6000000000000001,
    "holes_higher_is_better": False,
    "holes_ratio_higher_is_better": False,
    "total_retrieved_documents": 50,
    "total_groundtruth_documents": 1565,
    "ndcg@3_result": "pass",
    "xdcg@3_result": "pass",
    "fidelity_result": "fail",
    "top1_relevance_result": "fail",
    "top3_max_relevance_result": "fail",
    # Omitting more fields ...
}

Groundedness

Il est important d’évaluer à quel point la réponse est ancrée par rapport au contexte. Les modèles d’IA peuvent fabriquer du contenu ou générer des réponses non pertinentes. GroundednessEvaluator Mesure à quel point la réponse générée s’aligne avec le contexte donné, la source de mise à la terre, et ne fabrique pas de contenu en dehors de celui-ci.

Cette métrique capture l’aspect précis de l’alignement de la réponse avec la source de mise à la terre. Un score plus bas signifie que la réponse est sans rapport avec la requête ou fabrique un contenu inexact en dehors du contexte. Cette métrique est complémentaire à ResponseCompletenessEvaluator, qui capture l’aspect rappel de l’alignement de la réponse avec la réponse attendue.

Groundedness example

from azure.ai.evaluation import GroundednessEvaluator

groundedness = GroundednessEvaluator(model_config=model_config, threshold=3)
groundedness(
    query="Is Marie Curie is born in Paris?", 
    context="Background: 1. Marie Curie is born on November 7, 1867. 2. Marie Curie is born in Warsaw.",
    response="No, Marie Curie is born in Warsaw."
)

Groundedness output

Le score numérique est sur une échelle de Likert (entier de 1 à 5). Un score plus élevé est mieux. Étant donné un seuil numérique (par défaut est 3), l’évaluateur réussit si le score est supérieur ou égal au seuil, ou échoue autrement. Utilisez le champ raison pour comprendre pourquoi le score est élevé ou bas.

{
    "groundedness": 5.0,  
    "gpt_groundedness": 5.0,
    "groundedness_reason": "The RESPONSE accurately answers the QUERY by confirming that Marie Curie was born in Warsaw, which is supported by the CONTEXT. It does not include any irrelevant or incorrect information, making it a complete and relevant answer. Thus, it deserves a high score for groundedness.",
    "groundedness_result": "pass", 
    "groundedness_threshold": 3
}

Groundedness Pro

Les systèmes d’IA peuvent générer des réponses non pertinentes ou fabriquer du contenu en dehors du contexte donné. Propulsé par Azure AI Sécurité du Contenu, GroundednessProEvaluator vérifie si la réponse textuelle générée est exacte et cohérente avec le contexte donné dans un scénario de questions-réponses à génération augmentée par la récupération. Cela garantit que la réponse respecte étroitement le contexte de la question, évitant ainsi toute spéculation ou invention. Il produit une étiquette binaire.

Exemple de Groundedness Pro

from azure.ai.evaluation import GroundednessProEvaluator
from azure.identity import DefaultAzureCredential
import os
from dotenv import load_dotenv
load_dotenv()

# Using Microsoft Foundry Hub
azure_ai_project = {
    "subscription_id": os.environ.get("AZURE_SUBSCRIPTION_ID"),
    "resource_group_name": os.environ.get("AZURE_RESOURCE_GROUP"),
    "project_name": os.environ.get("AZURE_PROJECT_NAME"),
}

groundedness_pro = GroundednessProEvaluator(azure_ai_project=azure_ai_project), 
groundedness_pro(
    query="Is Marie Curie is born in Paris?", 
    context="Background: 1. Marie Curie is born on November 7, 1867. 2. Marie Curie is born in Warsaw.",
    response="No, Marie Curie is born in Warsaw."
)

Sortie Groundedness Pro

Le champ label retourne True si tout le contenu de la réponse est entièrement ancré dans le contexte, et False sinon. Utilisez le champ raison pour en savoir plus sur le jugement derrière le score.

{
    "groundedness_pro_reason": "All Contents are grounded",
    "groundedness_pro_label": True
}

Relevance

Les modèles d’IA peuvent générer des réponses non pertinentes à une requête d’utilisateur. Il est important d’évaluer la réponse finale. Pour résoudre ce problème, utilisez RelevanceEvaluator, qui mesure l’efficacité d’une réponse à une requête. Il évalue l’exactitude, l’exhaustivité et la pertinence directe de la réponse en fonction de la requête. Des scores plus élevés signifient une meilleure pertinence.

Relevance example

from azure.ai.evaluation import RelevanceEvaluator

relevance = RelevanceEvaluator(model_config=model_config, threshold=3)
relevance(
    query="Is Marie Curie is born in Paris?", 
    response="No, Marie Curie is born in Warsaw."
)

Relevance output

Le score numérique est sur une échelle de Likert (entier de 1 à 5). Un score plus élevé est mieux. Étant donné un seuil numérique (par défaut est 3), l’évaluateur réussit si le score est supérieur ou égal au seuil, ou échoue autrement. Le champ de la raison vous aide à comprendre pourquoi le score est élevé ou bas.

{
    "relevance": 4.0,
    "gpt_relevance": 4.0, 
    "relevance_reason": "The RESPONSE accurately answers the QUERY by stating that Marie Curie was born in Warsaw, which is correct and directly relevant to the question asked.",
    "relevance_result": "pass", 
    "relevance_threshold": 3
}

Response completeness

Les systèmes d’IA peuvent fabriquer du contenu ou générer des réponses non pertinentes en dehors du contexte donné. Donnée une réponse de vérité fondamentale, ResponseCompletenessEvaluator cela capture l’aspect rappel de l’alignement de la réponse avec la réponse attendue. Cet évaluateur complète GroundednessEvaluator, qui capture l’aspect précis de l’alignement de la réponse avec la source de mise à la terre.

Exemple de complétude de réponse

from azure.ai.evaluation import ResponseCompletenessEvaluator

response_completeness = ResponseCompletenessEvaluator(model_config=model_config, threshold=3)
response_completeness(
    response="Based on the retrieved documents, the shareholder meeting discussed the operational efficiency of the company and financing options.",
    ground_truth="The shareholder meeting discussed the compensation package of the company's CEO."
)

Sortie de complétude de réponse

Le score numérique sur une échelle de Likert (entier de 1 à 5). Un score plus élevé est mieux. Étant donné un seuil numérique (par défaut à 3), l’évaluateur indique également réussite si le score >= seuil, ou échoue sinon. Utilisez le champ raison pour comprendre pourquoi le score est élevé ou bas.

{
    "response_completeness": 1,
    "response_completeness_result": "fail",
    "response_completeness_threshold": 3,
    "response_completeness_reason": "The response does not contain any relevant information from the ground truth, which specifically discusses the CEO's compensation package. Therefore, it is considered fully incomplete."
}