Commencez à évaluer les réponses dans une application de chat en JavaScript

Cet article vous montre comment évaluer les réponses d’une application de chat par rapport à un ensemble de réponses correctes ou idéales (connues sous le nom de vérité terrain). Chaque fois que vous modifiez votre application de chat 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 dès aujourd’hui pour faciliter l’exécution des évaluations.

En suivant les instructions de cet article, vous allez :

  • Utilisez les flux d’invite fournis, adaptés au domaine du sujet. Ces flux d’invite sont déjà dans le référentiel.
  • Générez des questions d’utilisateur exemple et des réponses de vérité terrain à partir de vos propres documents.
  • Exécutez des évaluations en utilisant un flux d’invite exemple avec les questions d’utilisateur générées.
  • Passez en revue l’analyse des réponses.

Remarque

Cet article utilise un ou plusieurs modèles d’application IA comme base pour les exemples et les conseils qu’il contient. Les modèles d’application IA vous fournissent des implémentations de référence bien gérées et faciles à déployer, qui constituent un point de départ de qualité pour vos applications IA.

Vue d’ensemble de l’architecture

Les principaux composants de l’architecture sont les suivants :

  • Application de chat hébergée sur Azure : L’application de chat s’exécute dans Azure App Service.
  • Microsoft AI Chat Protocol fournit des contrats d’API standardisés pour les solutions et les langages d’IA. L’application de chat est conforme au Microsoft AI Chat Protocol, ce qui permet à l’application d’évaluation de fonctionner avec toute application de chat conforme au protocole.
  • Recherche Azure AI : L’application de chat utilise Azure AI Search pour stocker les données de vos propres documents.
  • Générateur de questions d’exemple : Peut générer de nombreuses questions pour chaque document avec la réponse basée sur la réalité terrain. Plus il y a de questions, plus l’évaluation est longue.
  • L’évaluateur exécute des questions et flux d’invite exemples contre l’application de chat et renvoie 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.

Lorsque vous déployez cette évaluation sur Azure, le point de terminaison Azure OpenAI est créé pour le modèle GPT-4 avec sa propre capacité. Lors de l’évaluation des applications de chat, il est important que l’évaluateur dispose de sa propre ressource OpenAI en utilisant GPT-4 avec sa propre capacité.

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.

  • Déployez une application de chat

  • Ces applications de chat chargent les données dans la ressource Azure AI Search. Cette ressource est requise pour que l’application d’évaluation fonctionne. Ne complétez pas la section Nettoyer les ressources de la procédure précédente.

    Vous aurez besoin des informations de ressources Azure suivantes de ce déploiement, qui est appelé application de chat dans cet article :

    • URI de l’API de chat : Le point de terminaison de backend de service affiché à la fin du processus azd up.
    • Recherche Azure AI. Les valeurs suivantes sont requises :
      • Nom de la ressource : Le nom de la ressource Azure AI Search, rapporté comme Search service pendant le processus azd up.
      • Nom de l’index : Le nom de l’index Azure AI Search où vos documents sont stockés. Cela peut être trouvé dans le portail Azure pour le service de recherche.

    L’URL de l’API de chat permet aux évaluations d’effectuer des requêtes via votre application backend. Les informations d’Azure AI Search permettent aux scripts d’évaluation d’utiliser le même modèle de déploiement que votre backend, chargé avec les documents.

    Une fois que vous avez collecté ces informations, vous ne devriez plus avoir besoin d’utiliser à nouveau l’environnement de développement de l’application de chat. Il est mentionné plus loin dans cet article à plusieurs reprises pour indiquer comment l’application de chat est utilisée par l’application d’évaluations. Ne supprimez pas les ressources de l’application de chat tant que vous n’avez pas terminé la procédure complète de 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 devriez organiser votre espace de travail de moniteur afin de pouvoir voir à la fois cette documentation et l’environnement de développement en même temps.

Cet article a été testé avec la région switzerlandnorth pour le déploiement d’évaluation.

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. Pour afficher simultanément l’environnement de développement et la documentation disponible, faites un clic droit sur le bouton suivant et sélectionnez Ouvrir le lien dans une nouvelle fenêtre.

    Ouvrir dans un GitHub Codespaces

  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 le CLI Azure Developer.

    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. Approvisionnez la ressource Azure requise, Azure OpenAI, pour l’application d’évaluations.

    azd up
    

    Ce AZD command ne déploie pas l’application d’évaluations, mais crée la ressource Azure OpenAI avec un modèle de déploiement GPT-4 requis pour exécuter les évaluations dans l’environnement de développement local.

  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. Cet indicateur visuel vous aide à distinguer l’application d’évaluations de l’application de chat. Ce référentiel ai-rag-chat-evaluator est appelé l’application d’évaluations dans cet article.

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

Mettez à jour les valeurs d’environnement et les informations de configuration avec les informations que vous avez recueillies lors des prérequis pour l’application d’évaluations.

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

    azd env get-values > .env
    
  2. Ajoutez les valeurs suivantes de l’application de chat pour son instance Azure AI Search au .env, que vous avez rassemblé dans la section prérequis :

    AZURE_SEARCH_SERVICE="<service-name>"
    AZURE_SEARCH_INDEX="<index-name>"
    

    La valeur AZURE_SEARCH_KEY est la clé de requête pour l’instance Azure AI Search.

Utilisez le Microsoft AI Chat Protocol pour obtenir des informations de configuration.

L’application de chat et l’application d’évaluations implémentent toutes deux le Microsoft AI Chat Protocol specification, un contrat d’API de point de terminaison AI open source, cloud et indépendant de la langue, utilisé pour la consommation et l’évaluation. Lorsque vos points de terminaison client et intermédiaire adhèrent à cette spécification d’API, vous pouvez consommer et exécuter des évaluations de manière cohérente sur vos backends AI.

  1. Créez un nouveau fichier nommé my_config.json et copiez-y 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"
            }
        }
    }
    

    script d’évaluation crée le dossier my_results.

    L’objet overrides contient tous les paramètres de configuration nécessaires à l’application. Chaque application définit son propre ensemble de propriétés de paramètres.

  2. Utilisez le tableau suivant pour comprendre la signification des propriétés de paramètres utilisées pour l’application d’évaluation.

    Propriété de paramètres Description
    semantic_ranker Utilisez semantic ranker, un modèle qui reclasse les résultats de recherche en fonction de la similarité sémantique avec la requête de l’utilisateur.
    prompt_template Remplace l’invite utilisée pour générer la réponse en fonction de la question et des résultats de la recherche.
  3. Changez le target_url en valeur URI de votre application de chat, que vous avez recueillie dans la section prérequis. L’application de chat doit être conforme au protocole de chat. L’URI a le format suivant https://CHAT-APP-URL/chat. Assurez-vous que le protocole et la route chat font partie de l’URI.

Générer un exemple de données

Pour évaluer de nouvelles réponses, elles doivent être comparées à une réponse « vérité terrain », 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 chat.

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

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

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

les paires question/réponse sont générées et stockées dans my_input/qa.jsonl (au format JSONL) en tant qu’entrée pour l’évaluateur utilisé à l’étape suivante. Pour une évaluation en production, vous généreriez plus de paires QA, plus de 200 pour cet ensemble de données.

Remarque

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

Exécutez la première évaluation avec un flux d’invite raffiné

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

    Propriété Nouvelle valeur
    results_dir my_results/experiment_refined
    prompt_template <READFILE>my_input/prompt_refined.txt

    Le flux d’invite raffiné est spécifique au domaine du sujet.

    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
    

    Ce script a créé un nouveau dossier d’expérimentation dans my_results/ avec l’évaluation. Le dossier contient les résultats de l’évaluation, y compris :

    Nom de fichier Description
    eval_results.jsonl Chaque question et réponse, ainsi que les métriques GPT pour chaque paire QA.
    summary.json Les résultats globaux, comme la moyenne des métriques GPT.

Exécutez la deuxième évaluation avec un flux d’invite faible.

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

    Propriété Nouvelle valeur
    results_dir my_results/experiment_weak
    prompt_template <READFILE>my_input/prompt_weak.txt

    Ce flux d’invite faible n’a aucun contexte sur le domaine du sujet :

    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écutez la troisième évaluation avec une température spécifique

Utilisez un flux d’invite qui permet plus de créativité.

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

    Existing Propriété Nouvelle valeur
    Existing results_dir my_results/experiment_ignoresources_temp09
    Existing prompt_template <READFILE>my_input/prompt_ignoresources.txt
    Nouvelle température 0.9

    La valeur par défaut de temperature est 0,7. Plus la température est élevée, plus les réponses sont créatives.

    Le flux d’invite ignore est court :

    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, sauf que remplacez results_dir par votre chemin d’accès :

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/prompt_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 différents flux d’invite et paramètres de l’application. Les résultats sont stockés dans le dossier my_results. Examinez comment les résultats diffèrent en fonction des paramètres.

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

    python3 -m review_tools summary my_results
    
  2. Les résultats ressemblent à quelque chose comme :

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

    Chaque valeur est renvoyée sous forme de nombre et de pourcentage.

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

    Valeur Description
    Fondement Cela fait référence à la qualité des réponses du modèle basée sur des informations factuelles et vérifiables. Une réponse est considérée comme fondée si elle est factuellement exacte et reflète la réalité.
    Pertinence Cela mesure dans quelle mesure les réponses du modèle s’alignent sur le contexte ou le flux d’invite. Une réponse pertinente répond directement à la requête ou à l’énoncé 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 se contredit pas.
    Citation Cela indique si la réponse a été renvoyée dans le format demandé dans le flux d’invite.
    Longueur Cela mesure la longueur de la réponse.
  4. Les résultats devraient indiquer que les trois évaluations avaient une pertinence élevée tandis que le experiment_ignoresources_temp09 avait la pertinence la plus basse.

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

  6. Entrez Ctrl + C quittez l’application et revenez au terminal.

Comparez les réponses

Comparez les réponses renvoyées 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. Vos résultats peuvent varier.

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

  3. Entrez Ctrl + C quittez l’application et revenez au terminal.

Suggestions pour d’autres évaluations

  • Modifiez les flux d’invite dans my_input pour adapter les réponses telles que le domaine du sujet, la longueur et d’autres facteurs.
  • Modifiez le fichier my_config.json pour modifier les paramètres tels que temperature, et semantic_ranker et relancez les expériences.
  • Comparez différentes réponses pour comprendre comment le flux d’invite et la question affectent la qualité de la réponse.
  • Générez un ensemble distinct de questions et de réponses de vérité terrain pour chaque document de l’index Azure AI Search. Puis relancez les évaluations pour voir comment les réponses diffèrent.
  • Modifiez les flux d’invite pour indiquer des réponses plus courtes ou plus longues en ajoutant l’exigence à la fin du flux d’invite. Par exemple : Please answer in about 3 sentences..

Nettoyez les ressources et les dépendances

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.

Pour supprimer les ressources Azure et supprimer le code source, exécutez la commande CLI Azure Developer suivante :

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 application de chat pour nettoyer ces ressources.

Étapes suivantes