Aan de slag met het evalueren van antwoorden in een chat-app in JavaScript

In dit artikel leest u hoe u de antwoorden van een chat-app evalueert op basis van een set juiste of ideale antwoorden (ook wel grond waarheid genoemd). Wanneer u uw chattoepassing wijzigt op een manier die van invloed is op de antwoorden, voert u een evaluatie uit om de wijzigingen te vergelijken. Deze demotoepassing biedt hulpprogramma's die u vandaag kunt gebruiken om het eenvoudiger te maken om evaluaties uit te voeren.

Door de instructies in dit artikel te volgen, gaat u het volgende doen:

  • Gebruik opgegeven voorbeeldprompts die zijn afgestemd op het onderwerpdomein. Deze bevinden zich al in de opslagplaats.
  • Genereer voorbeeldgebruikersvragen en basisantwoorden op basis van uw eigen documenten.
  • Voer evaluaties uit met behulp van een voorbeeldprompt met de gegenereerde gebruikersvragen.
  • Analyse van antwoorden bekijken.

Architectuuroverzicht

Belangrijke onderdelen van de architectuur zijn:

  • Door Azure gehoste chat-app: de chat-app wordt uitgevoerd in Azure-app Service. De chat-app voldoet aan het chatprotocol, waarmee de evaluaties-app kan worden uitgevoerd op elke chat-app die voldoet aan het protocol.
  • Azure AI Search: de chat-app maakt gebruik van Azure AI Search om de gegevens uit uw eigen documenten op te slaan.
  • Generator voor voorbeeldvragen: kan een aantal vragen genereren voor elk document, samen met het antwoord op de grondwaar. Hoe meer vragen, hoe langer de evaluatie.
  • Evaluator voert voorbeeldvragen en prompts uit voor de chat-app en retourneert de resultaten.
  • Met het beoordelingsprogramma kunt u de resultaten van de evaluaties bekijken.
  • Met het hulpprogramma Diff kunt u de antwoorden tussen evaluaties vergelijken.

Vereisten

  • Azure-abonnement. Maak er gratis een

  • Toegang verleend tot Azure OpenAI in het gewenste Azure abonnement.

    Op dit moment wordt alleen toegang tot deze service verleend door een aanvraag te doen. U kunt toegang tot Azure OpenAI aanvragen door het formulier in te vullen op https://aka.ms/oai/access.

  • Voltooi de vorige procedure voor de chat-app om de chat-app in Azure te implementeren. Met deze procedure worden de gegevens in de Azure AI Search-resource geladen. Deze resource is vereist om de evaluatie-app te laten werken. Voltooi de sectie Resources opschonen van de vorige procedure niet.

    U hebt de volgende Azure-resourcegegevens uit die implementatie nodig, die in dit artikel de chat-app wordt genoemd:

    • Web-API-URI: de URI van de geïmplementeerde chat-app-API.
    • Azure AI Search. De volgende waarden zijn vereist:
      • Resourcenaam: de naam van de Azure AI Search-resource.
      • Indexnaam: de naam van de Azure AI Search-index waarin uw documenten worden opgeslagen.
      • Querysleutel: de sleutel om een query uit te voeren op uw zoekindex.
    • Als u hebt geëxperimenteerd met de verificatie van de chat-app, moet u gebruikersverificatie uitschakelen zodat de evaluatie-app toegang heeft tot de chat-app.

    Zodra u deze gegevens hebt verzameld, hoeft u de ontwikkelomgeving van de chat-app niet meer te gebruiken. Verderop in dit artikel wordt er meerdere keren naar verwezen om aan te geven hoe de chat-app wordt gebruikt door de app Evaluaties. Verwijder de resources van de chat-app pas nadat u de volledige procedure in dit artikel hebt voltooid.

  • Er is een ontwikkelcontaineromgeving beschikbaar met alle afhankelijkheden die nodig zijn om dit artikel te voltooien. U kunt de ontwikkelcontainer uitvoeren in GitHub Codespaces (in een browser) of lokaal met behulp van Visual Studio Code.

    • GitHub-account

Open ontwikkelomgeving

Begin nu met een ontwikkelomgeving waarop alle afhankelijkheden zijn geïnstalleerd om dit artikel te voltooien. U moet uw monitorwerkruimte rangschikken, zodat u deze documentatie en de ontwikkelomgeving tegelijkertijd kunt zien.

GitHub Codespaces voert een ontwikkelcontainer uit die wordt beheerd door GitHub met Visual Studio Code voor het web als de gebruikersinterface. Voor de eenvoudigste ontwikkelomgeving gebruikt u GitHub Codespaces zodat u de juiste ontwikkelhulpprogramma's en afhankelijkheden vooraf hebt geïnstalleerd om dit artikel te voltooien.

Belangrijk

Alle GitHub-accounts kunnen Codespaces elke maand maximaal 60 uur gratis gebruiken met 2 kernexemplaren. Zie GitHub Codespaces maandelijks inbegrepen opslag- en kernuren voor meer informatie.

  1. Start het proces om een nieuwe GitHub Codespace te maken op de main vertakking van de Azure-Samples/ai-rag-chat-evaluator GitHub-opslagplaats.

  2. Klik met de rechtermuisknop op de volgende knop en selecteer Koppeling openen in een nieuw venster om zowel de ontwikkelomgeving als de documentatie tegelijkertijd beschikbaar te maken.

  3. Controleer op de pagina Codespace maken de configuratie-instellingen voor codespace en selecteer vervolgens Nieuwe codespace maken

    Schermopname van het bevestigingsscherm voordat u een nieuwe coderuimte maakt.

  4. Wacht tot de coderuimte is gestart. Dit opstartproces kan enkele minuten duren.

  5. Meld u in de terminal onderaan het scherm aan bij Azure met de Azure Developer CLI.

    azd auth login --use-device-code
    
  6. Kopieer de code uit de terminal en plak deze in een browser. Volg de instructies voor verificatie met uw Azure-account.

  7. Richt de vereiste Azure-resource, Azure OpenAI, in voor de evaluatie-app.

    azd up
    

    Hiermee wordt de evaluatie-app niet geïmplementeerd, maar wordt de Azure OpenAI-resource gemaakt met een GPT-4-implementatie die nodig is om de evaluaties lokaal uit te voeren in de ontwikkelomgeving.

  8. De resterende taken in dit artikel vinden plaats in de context van deze ontwikkelingscontainer.

  9. De naam van de GitHub-opslagplaats wordt weergegeven in de zoekbalk. Hiermee kunt u onderscheid maken tussen deze evaluaties-app van de chat-app. Deze ai-rag-chat-evaluator opslagplaats wordt in dit artikel de app Evaluaties genoemd.

Omgevingswaarden en configuratiegegevens voorbereiden

Werk de omgevingswaarden en configuratiegegevens bij met de informatie die u hebt verzameld tijdens de vereisten voor de evaluatie-app.

  1. Gebruik de volgende opdracht om de resourcegegevens van de app Evaluaties op te halen in een .env bestand:

    azd env get-values > .env
    
  2. Voeg de volgende waarden uit de chat-app voor het Azure AI Search-exemplaar toe aan de .envsectie met vereisten die u hebt verzameld:

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

    De AZURE_SEARCH_KEY waarde is de querysleutel voor het Azure AI Search-exemplaar.

  3. Kopieer het example_config.json bestand in de hoofdmap van de map Evaluaties-app naar een nieuw bestand my_config.json.

  4. Vervang de bestaande inhoud door my_config.json de volgende inhoud:

    {
        "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. Wijzig de target_url URI-waarde van uw chat-app, die u hebt verzameld in de sectie Vereisten . De chat-app moet voldoen aan het chatprotocol. De URI heeft de volgende indeling https://CHAT-APP-URL/chat. Zorg ervoor dat het protocol en de chat route deel uitmaken van de URI.

Voorbeeldgegevens genereren

Om nieuwe antwoorden te evalueren, moeten ze worden vergeleken met een "grond waarheid" antwoord, wat het ideale antwoord is voor een bepaalde vraag. Genereer vragen en antwoorden van documenten die zijn opgeslagen in Azure AI Search voor de chat-app.

  1. Kopieer de example_input map naar een nieuwe map met de naammy_input.

  2. Voer in een terminal de volgende opdracht uit om de voorbeeldgegevens te genereren:

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

De vraag-/antwoordparen worden gegenereerd en opgeslagen in my_input/qa.jsonl (JSONL-indeling) als invoer voor de evaluator die in de volgende stap wordt gebruikt. Voor een productie-evaluatie zou u meer QA-paren genereren, mogelijk meer dan 200 voor deze gegevensset.

Notitie

Het aantal vragen en antwoorden per bron is bedoeld om u in staat te stellen deze procedure snel te voltooien. Het is niet bedoeld om een productie-evaluatie te zijn die meer vragen en antwoorden per bron moet hebben.

Voer de eerste evaluatie uit met een verfijnde prompt

  1. Bewerk de eigenschappen van het my_config.json configuratiebestand:

    • Wijzig results_dir deze om de naam van de prompt op te nemen: my_results/experiment_refined.
    • Wijzig prompt_template in: <READFILE>my_input/experiment_refined.txt als u de verfijnde promptsjabloon in de evaluatie wilt gebruiken.

    De verfijnde prompt is zeer specifiek over het onderwerpdomein.

    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. Voer in een terminal de volgende opdracht uit om de evaluatie uit te voeren:

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

    Hiermee hebt u een nieuwe experimentmap gemaakt in my_results combinatie met de evaluatie. De map bevat de resultaten van de evaluatie, waaronder:

    • eval_results.jsonl: Elke vraag en elk antwoord, samen met de GPT-metrische gegevens voor elk QA-paar.
    • summary.json: De algemene resultaten, zoals de gemiddelde GPT-metrische gegevens.

Tweede evaluatie uitvoeren met een zwakke prompt

  1. Bewerk de eigenschappen van het my_config.json configuratiebestand:

    • Wijzigen results_dir in: my_results/experiment_weak
    • Wijzig prompt_template in: <READFILE>my_input/prompt_weak.txt als u de zwakke promptsjabloon in de volgende evaluatie wilt gebruiken.

    Deze zwakke prompt heeft geen context over het onderwerpdomein:

    You are a helpful assistant.
    
  2. Voer in een terminal de volgende opdracht uit om de evaluatie uit te voeren:

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

Derde evaluatie uitvoeren met een specifieke temperatuur

Gebruik een prompt die meer creativiteit mogelijk maakt.

  1. Bewerk de eigenschappen van het my_config.json configuratiebestand:

    • Wijzigen results_dir in: my_results/experiment_ignoresources_temp09
    • Wijzigen prompt_template in: <READFILE>my_input/prompt_ignoresources.txt
    • Voeg een nieuwe onderdrukking toe. "temperature": 0.9 De standaardtemperatuur is 0,7. Hoe hoger de temperatuur, hoe creatiever de antwoorden.

    De negeerprompt is kort:

    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. Het configuratieobject moet er als volgt uitzien, behalve dat u uw eigen results_dirobject gebruikt:

    {
        "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. Voer in een terminal de volgende opdracht uit om de evaluatie uit te voeren:

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

De evaluatieresultaten beoordelen

U hebt drie evaluaties uitgevoerd op basis van verschillende prompts en app-instellingen. De resultaten worden opgeslagen in de my_results map. Bekijk hoe de resultaten verschillen op basis van de instellingen.

  1. Gebruik het beoordelingsprogramma om de resultaten van de evaluaties te bekijken:

    python3 -m review_tools summary my_results
    
  2. De resultaten zien er als volgt uit:

    Schermopname van het beoordelingsprogramma voor evaluaties met de drie evaluaties.

    Elke waarde wordt geretourneerd als een getal en een percentage.

  3. Gebruik de volgende tabel om inzicht te krijgen in de betekenis van de waarden.

    Weergegeven als Beschrijving
    Geaardheid Dit verwijst naar hoe goed de reacties van het model zijn gebaseerd op feitelijke, verifieerbare informatie. Een antwoord wordt beschouwd als geaard als het feitelijk nauwkeurig is en de realiteit weerspiegelt.
    Relevantie Dit meet hoe dicht de reacties van het model overeenkomen met de context of de prompt. Een relevant antwoord heeft rechtstreeks betrekking op de query of instructie van de gebruiker.
    Samenhang Dit verwijst naar hoe logisch consistent de reacties van het model zijn. Een coherent antwoord onderhoudt een logische stroom en spreekt zichzelf niet tegen.
    Gegevensvermelding Dit geeft aan of het antwoord is geretourneerd in de indeling die is aangevraagd in de prompt.
    Lengte Hiermee wordt de lengte van het antwoord berekend.
  4. De resultaten moeten aangeven dat alle 3 evaluaties een hoge relevantie hadden, terwijl de experiment_ignoresources_temp09 laagste relevantie was.

  5. Selecteer de map om de configuratie voor de evaluatie te bekijken.

  6. Voer Ctrl + C in om de app af te sluiten en terug te keren naar de terminal.

De antwoorden vergelijken

Vergelijk de geretourneerde antwoorden uit de evaluaties.

  1. Selecteer twee van de evaluaties die u wilt vergelijken en gebruik vervolgens hetzelfde beoordelingsprogramma om de antwoorden te vergelijken:

    python3 -m review_tools diff my_results/experiment_refined my_results/experiment_ignoresources_temp09
    
  2. Controleer de resultaten.

    Schermopname van de vergelijking van evaluatieantwoorden tussen evaluaties.

  3. Voer Ctrl + C in om de app af te sluiten en terug te keren naar de terminal.

Suggesties voor verdere evaluaties

  • Bewerk de aanwijzingen om my_input de antwoorden zoals onderwerpdomein, lengte en andere factoren aan te passen.
  • Bewerk het my_config.json bestand om de parameters te wijzigen, zoals temperatureen semantic_ranker voer experimenten opnieuw uit.
  • Vergelijk verschillende antwoorden om te begrijpen hoe de prompt en vraag van invloed zijn op de antwoordkwaliteit.
  • Genereer een afzonderlijke set vragen en antwoorden op basis van waarheid voor elk document in de Azure AI Search-index. Voer vervolgens de evaluaties opnieuw uit om te zien hoe de antwoorden verschillen.
  • Wijzig de aanwijzingen om kortere of langere antwoorden aan te geven door de vereiste toe te voegen aan het einde van de prompt. Bijvoorbeeld Please answer in about 3 sentences.

Resources opschonen

Azure-resources opschonen

De Azure-resources die in dit artikel zijn gemaakt, worden gefactureerd voor uw Azure-abonnement. Als u deze resources in de toekomst niet meer nodig hebt, verwijdert u deze om te voorkomen dat er meer kosten in rekening worden gebracht.

Voer de volgende Azure Developer CLI-opdracht uit om de Azure-resources te verwijderen en de broncode te verwijderen:

azd down --purge

GitHub Codespaces opschonen

Als u de GitHub Codespaces-omgeving verwijdert, zorgt u ervoor dat u de hoeveelheid gratis rechten per kernuren kunt maximaliseren die u voor uw account krijgt.

Belangrijk

Zie GitHub Codespaces maandelijks inbegrepen opslag- en kernuren voor meer informatie over de rechten van uw GitHub-account.

  1. Meld u aan bij het GitHub Codespaces-dashboard (https://github.com/codespaces).

  2. Zoek uw momenteel uitgevoerde Codespaces die afkomstig zijn uit de Azure-Samples/ai-rag-chat-evaluator GitHub-opslagplaats.

    Schermopname van alle actieve Codespaces, inclusief hun status en sjablonen.

  3. Open het contextmenu voor de coderuimte en selecteer Vervolgens Verwijderen.

    Schermopname van het contextmenu voor één coderuimte met de optie Verwijderen gemarkeerd.

Ga terug naar het artikel van de chat-app om deze resources op te schonen.

Volgende stappen