Prise en main de l’évaluation des réponses dans une application de conversation

Cet article vous montre comment évaluer les réponses d’une application de conversation par rapport à un ensemble de réponses correctes ou idéales (appelées vérité terrestre). Chaque fois que vous modifiez votre application de conversation d’une manière qui affecte les réponses, exécutez une évaluation pour comparer les modifications. Cette application de démonstration offre des outils que vous pouvez utiliser aujourd’hui pour faciliter l’exécution des évaluations.

En suivant les instructions de cet article, vous allez :

  • Utilisez des exemples d’invites fournis adaptés au domaine de l’objet. Ceux-ci se trouvent déjà dans le référentiel.
  • Générez des exemples de questions utilisateur et des réponses de vérité de base à partir de vos propres documents.
  • Exécutez des évaluations à l’aide d’un exemple d’invite avec les questions utilisateur générées.
  • Passez en revue l’analyse des réponses.

Vue d’ensemble de l’architecture

Les principaux composants de l’architecture sont les suivants :

  • Application de conversation hébergée par Azure : l’application de conversation s’exécute dans Azure App Service. L’application de conversation est conforme au protocole de conversation, ce qui permet à l’application d’évaluation de s’exécuter sur n’importe quelle application de conversation conforme au protocole.
  • Recherche Azure AI : l’application de conversation utilise Recherche IA Azure pour stocker les données à partir de vos propres documents.
  • Générateur d’exemples de questions : peut générer un certain nombre de questions pour chaque document, ainsi que la réponse de vérité au sol. Plus il y a de questions, plus l’évaluation est longue.
  • L’évaluateur exécute des exemples de questions et invite l’application de conversation et retourne les résultats.
  • L’outil de révision vous permet de passer en revue les résultats des évaluations.
  • L’outil Diff vous permet de comparer les réponses entre les évaluations.

Prérequis

  • Abonnement Azure. Créez-en un gratuitement

  • Accès accordé à Azure OpenAI dans l’abonnement Azure souhaité.

    L’accès à ce service n’est accordé qu’à l’application. Vous pouvez demander l’accès à Azure OpenAI en complétant le formulaire à l’adresse https://aka.ms/oai/access.

  • Suivez la procédure précédente de l’application de conversation pour déployer l’application de conversation sur Azure. Cette procédure charge les données dans la ressource Recherche d’IA Azure. Cette ressource est requise pour que l’application d’évaluation fonctionne. Ne terminez pas la section Nettoyer les ressources de la procédure précédente.

    Vous aurez besoin des informations de ressources Azure suivantes à partir de ce déploiement, appelée application de conversation dans cet article :

    • URI de l’API web : URI de l’API d’application de conversation déployée.
    • Recherche Azure AI. Les valeurs suivantes sont requises :
      • Nom de la ressource : nom de la ressource Recherche d’IA Azure.
      • Nom de l’index : nom de l’index Recherche d’IA Azure dans lequel vos documents sont stockés.
      • Clé de requête : clé permettant d’interroger votre index de recherche.
    • Si vous avez testé l’authentification de l’application de conversation, vous devez désactiver l’authentification utilisateur afin que l’application d’évaluation puisse accéder à l’application de conversation.

    Une fois ces informations collectées, vous n’avez pas besoin d’utiliser à nouveau l’environnement de développement d’application de conversation. Il est mentionné plus loin dans cet article plusieurs fois pour indiquer comment l’application de conversation est utilisée par l’application Évaluations. Ne supprimez pas les ressources de l’application de conversation tant que vous n’avez pas terminé toute la procédure décrite dans cet article.

  • Un environnement de conteneur de développement est disponible avec toutes les dépendances requises pour terminer cet article. Vous pouvez exécuter le conteneur de développement dans GitHub Codespaces (dans un navigateur) ou localement à l’aide de Visual Studio Code.

    • Compte GitHub

Environnement de développement ouvert

Commencez maintenant par un environnement de développement sur lequel toutes les dépendances sont installées pour terminer cet article. Vous devez organiser votre espace de travail monitor afin de pouvoir consulter cette documentation et l’environnement de développement en même temps.

GitHub Codespaces exécute un conteneur de développement géré par GitHub avec Visual Studio Code pour le web comme interface utilisateur. Pour un environnement de développement le plus simple, utilisez GitHub Codespaces pour disposer des outils de développement et des dépendances appropriés préinstallés pour terminer cet article.

Important

Tous les comptes GitHub peuvent utiliser codespaces pendant jusqu’à 60 heures gratuites chaque mois avec 2 instances principales. Pour plus d’informations, consultez Le stockage mensuel inclus et les heures de cœur GitHub Codespaces.

  1. Démarrez le processus pour créez un environnement GitHub Codespace sur la branche main du référentiel GitHub Azure-Samples/ai-rag-chat-evaluator.

  2. Cliquez avec le bouton droit sur le bouton suivant, puis sélectionnez Ouvrir le lien dans la nouvelle fenêtre pour que l’environnement de développement et la documentation soient disponibles en même temps.

  3. Dans la page Créer un codespace , passez en revue les paramètres de configuration du codespace, puis sélectionnez Créer un codespace

    Capture d’écran de l’écran de confirmation avant de créer un nouveau codespace.

  4. Attendez que le codespace démarre. Ce processus de démarrage peut prendre quelques minutes.

  5. Dans le terminal en bas de l’écran, connectez-vous à Azure avec Azure Developer CLI.

    azd auth login --use-device-code
    
  6. Copiez le code à partir du terminal, puis collez-le dans un navigateur. Suivez les instructions pour vous authentifier avec votre compte Azure.

  7. Provisionnez la ressource Azure requise, Azure OpenAI, pour l’application d’évaluation.

    azd up
    

    Cela ne déploie pas l’application d’évaluation, mais crée la ressource Azure OpenAI avec un déploiement GPT-4 requis pour exécuter les évaluations localement dans l’environnement de développement.

  8. Les tâches restantes de cet article s’effectuent dans ce conteneur de développement.

  9. Le nom du référentiel GitHub est affiché dans la barre de recherche. Cela vous permet de distinguer cette application d’évaluation de l’application de conversation. Ce ai-rag-chat-evaluator dépôt est appelé application Évaluations dans cet article.

Préparer les valeurs d’environnement et les informations de configuration

Mettez à jour les valeurs de l’environnement et les informations de configuration avec les informations que vous avez collectées pendant les conditions préalables pour l’application d’évaluation.

  1. Utilisez la commande suivante pour obtenir les informations de ressource de l’application Évaluations dans un .env fichier :

    azd env get-values > .env
    
  2. Ajoutez les valeurs suivantes de l’application de conversation pour son instance Azure AI Search à la .envsection prérequise :

    AZURE_SEARCH_SERVICE="<service-name>"
    AZURE_SEARCH_INDEX="<index-name>"
    AZURE_SEARCH_KEY="<query-key>"
    

    La AZURE_SEARCH_KEY valeur est la clé de requête pour l’instance Recherche d’IA Azure.

  3. Copiez le example_config.json fichier à la racine du dossier de l’application Évaluations dans un nouveau fichiermy_config.json.

  4. Remplacez le contenu existant par my_config.json le contenu suivant :

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/experiment<TIMESTAMP>",
        "target_url": "http://localhost:50505/chat",
        "target_parameters": {
            "overrides": {
                "semantic_ranker": false,
                "prompt_template": "<READFILE>my_input/prompt_refined.txt"
            }
        }
    }
    
  5. Remplacez la target_url valeur d’URI de votre application de conversation, que vous avez collectée dans la section conditions préalables . L’application de conversation doit être conforme au protocole de conversation. L’URI a le format https://CHAT-APP-URL/chatsuivant . Vérifiez que le protocole et l’itinéraire chat font partie de l’URI.

Générer un exemple de données

Afin d’évaluer de nouvelles réponses, elles doivent être comparées à une réponse de base, qui est la réponse idéale pour une question particulière. Générez des questions et des réponses à partir de documents stockés dans Azure AI Search pour l’application de conversation.

  1. Copiez le example_input dossier dans un nouveau dossier nommémy_input.

  2. Dans un terminal, exécutez la commande suivante pour générer les exemples de données :

    python3 -m scripts generate --output=my_input/qa.jsonl --numquestions=14 --persource=2
    

Les paires questions/réponses sont générées et stockées au my_input/qa.jsonlformat JSONL comme entrée à l’évaluateur utilisé à l’étape suivante. Pour une évaluation de production, vous généreriez plus de paires AQ, peut-être plus de 200 pour ce jeu de données.

Remarque

Le nombre de questions et réponses par source est destiné à vous permettre d’effectuer rapidement cette procédure. Il n’est pas destiné à être une évaluation de production qui devrait avoir plus de questions et réponses par source.

Exécuter la première évaluation avec une invite affinée

  1. Modifiez les propriétés du my_config.json fichier de configuration :

    • Changez results_dir pour inclure le nom de l’invite : my_results/experiment_refined.
    • Passez prompt_template à : <READFILE>my_input/experiment_refined.txt pour utiliser le modèle d’invite affiné dans l’évaluation.

    L’invite affinée est très spécifique sur le domaine de l’objet.

    If there isn't enough information below, say you don't know. Do not generate answers that don't use the sources below. If asking a clarifying question to the user would help, ask the question.
    
    Use clear and concise language and write in a confident yet friendly tone. In your answers ensure the employee understands how your response connects to the information in the sources and include all citations necessary to help the employee validate the answer provided.
    
    For tabular information return it as an html table. Do not return markdown format. If the question is not in English, answer in the language used in the question.
    
    Each source has a name followed by colon and the actual information, always include the source name for each fact you use in the response. Use square brackets to reference the source, e.g. [info1.txt]. Don't combine sources, list each source separately, e.g. [info1.txt][info2.pdf].
    
  2. Dans un terminal, exécutez la commande suivante pour exécuter l’évaluation :

    python3 -m scripts evaluate --config=my_config.json --numquestions=14
    

    Cela a créé un dossier d’expérience avec my_results l’évaluation. Le dossier contient les résultats de l’évaluation, notamment :

    • eval_results.jsonl: chaque question et réponse, ainsi que les métriques GPT pour chaque paire AQ.
    • summary.json: résultats globaux, comme les métriques GPT moyennes.

Exécuter la deuxième évaluation avec une invite faible

  1. Modifiez les propriétés du my_config.json fichier de configuration :

    • Passez results_dir à : my_results/experiment_weak
    • Passez prompt_template à : <READFILE>my_input/prompt_weak.txt pour utiliser le modèle d’invite faible dans l’évaluation suivante.

    Cette invite faible n’a aucun contexte sur le domaine de l’objet :

    You are a helpful assistant.
    
  2. Dans un terminal, exécutez la commande suivante pour exécuter l’évaluation :

    python3 -m scripts evaluate --config=my_config.json --numquestions=14
    

Exécuter la troisième évaluation avec une température spécifique

Utilisez une invite qui permet davantage de créativité.

  1. Modifiez les propriétés du my_config.json fichier de configuration :

    • Passez results_dir à : my_results/experiment_ignoresources_temp09
    • Passez prompt_template à : <READFILE>my_input/prompt_ignoresources.txt
    • Ajoutez un nouveau remplacement : "temperature": 0.9 la température par défaut est 0,7. Plus la température est élevée, plus les réponses sont créatives.

    L’invite ignore est courte :

    Your job is to answer questions to the best of your ability. You will be given sources but you should IGNORE them. Be creative!
    
  2. L’objet config doit ressembler à ce qui suit, à l’exception de l’utilisation de vos propres results_diréléments :

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/experiment_ignoresources_temp09",
        "target_url": "https://YOUR-CHAT-APP/chat",
        "target_parameters": {
            "overrides": {
                "temperature": 0.9,
                "semantic_ranker": false,
                "prompt_template": "<READFILE>my_input/prompt_ignoresources.txt"
            }
        }
    }
    
  3. Dans un terminal, exécutez la commande suivante pour exécuter l’évaluation :

    python3 -m scripts evaluate --config=my_config.json --numquestions=14
    

Examiner les résultats de l’évaluation

Vous avez effectué trois évaluations basées sur des invites et des paramètres d’application différents. Les résultats sont stockés dans le my_results dossier. Passez en revue la façon dont les résultats diffèrent en fonction des paramètres.

  1. Utilisez l’outil de révision pour afficher les résultats des évaluations :

    python3 -m review_tools summary my_results
    
  2. Les résultats ressemblent à ceci :

    Capture d’écran de l’outil de révision des évaluations montrant les trois évaluations.

    Chaque valeur est retournée sous la forme d’un nombre et d’un pourcentage.

  3. Utilisez le tableau suivant pour comprendre la signification des valeurs.

    Valeur Description
    Fondement Cela fait référence à la façon dont les réponses du modèle sont basées sur des informations factuelles vérifiables. Une réponse est considérée comme fondée s’il est factuelment précis et reflète la réalité.
    Pertinence Cela mesure la manière dont les réponses du modèle s’alignent sur le contexte ou l’invite. Une réponse pertinente traite directement la requête ou l’instruction de l’utilisateur.
    Cohérence Cela fait référence à la cohérence logique des réponses du modèle. Une réponse cohérente maintient un flux logique et ne contredit pas elle-même.
    Citation Cela indique si la réponse a été retournée dans le format demandé dans l’invite.
    Longueur Cela mesure la longueur de la réponse.
  4. Les résultats devraient indiquer que les 3 évaluations avaient une pertinence élevée alors que la experiment_ignoresources_temp09 pertinence était la plus faible.

  5. Sélectionnez le dossier pour afficher la configuration de l’évaluation.

  6. Entrez Ctrl + C quitter l’application et revenir au terminal.

Comparer les réponses

Comparez les réponses retournées à partir des évaluations.

  1. Sélectionnez deux des évaluations à comparer, puis utilisez le même outil de révision pour comparer les réponses :

    python3 -m review_tools diff my_results/experiment_refined my_results/experiment_ignoresources_temp09
    
  2. Passez en revue les résultats.

    Capture d’écran de la comparaison des réponses d’évaluation entre les évaluations.

  3. Entrez Ctrl + C quitter l’application et revenir au terminal.

Suggestions pour d’autres évaluations

  • Modifiez les invites pour my_input personnaliser les réponses telles que le domaine de l’objet, la longueur et d’autres facteurs.
  • Modifiez le my_config.json fichier pour modifier les paramètres tels que temperature, et semantic_ranker réexécuter des expériences.
  • Comparez différentes réponses pour comprendre comment l’invite et la question ont un impact sur la qualité de la réponse.
  • Générez un ensemble distinct de questions et de réponses de vérité de base pour chaque document dans l’index Recherche d’IA Azure. Réexécutez ensuite les évaluations pour voir comment les réponses diffèrent.
  • Modifiez les invites pour indiquer des réponses plus courtes ou plus longues en ajoutant la condition requise à la fin de l’invite. Par exemple, Please answer in about 3 sentences.

Nettoyer les ressources

Nettoyage des ressources Azure

Les ressources Azure créées dans cet article sont facturées dans votre abonnement Azure. Si vous pensez ne plus avoir besoin de ces ressources, supprimez-les pour éviter des frais supplémentaires.

Exécutez la commande Azure Developer CLI suivante pour supprimer les ressources Azure et le code source :

azd down --purge

Nettoyer GitHub Codespaces

La suppression de l’environnement GitHub Codespaces vous permet d’optimiser le nombre d’heures gratuites par cœur que vous obtenez pour votre compte.

Important

Pour plus d’informations sur les droits de votre compte GitHub, consultez GitHub Codespaces mensuel inclus stockage et heures principales.

  1. Connectez-vous au tableau de bord GitHub Codespaces (https://github.com/codespaces).

  2. Localisez vos codespaces en cours d’exécution provenant du référentiel GitHub Azure-Samples/ai-rag-chat-evaluator.

    Capture d’écran de tous les Codespaces en cours d’exécution, avec leur statut et leurs modèles.

  3. Ouvrez le menu contextuel du codespace, puis sélectionnez Supprimer.

    Capture d’écran du menu contextuel pour un codespace unique avec l’option supprimer mis en surbrillance.

Revenez à l’article de l’application de conversation pour nettoyer ces ressources.

Étapes suivantes