Kom igång med att utvärdera svar i en chattapp i JavaScript

Den här artikeln visar hur du utvärderar en chattapps svar mot en uppsättning korrekta eller idealiska svar (kallas grundsanning). När du ändrar chattprogrammet på ett sätt som påverkar svaren kör du en utvärdering för att jämföra ändringarna. Det här demoprogrammet erbjuder verktyg som du kan använda i dag för att göra det enklare att köra utvärderingar.

Genom att följa anvisningarna i den här artikeln gör du följande:

  • Använd tillhandahållna exempelmeddelanden som är skräddarsydda för ämnesdomänen. Dessa finns redan på lagringsplatsen.
  • Generera exempel på användarfrågor och grunda sanningssvar från dina egna dokument.
  • Kör utvärderingar med hjälp av en exempelprompt med de genererade användarfrågorna.
  • Granska analys av svar.

Arkitekturöversikt

Viktiga komponenter i arkitekturen är:

  • Azure-värdbaserad chattapp: Chattappen körs i Azure App Service. Chattappen följer chattprotokollet, vilket gör att utvärderingsappen kan köras mot alla chattappar som överensstämmer med protokollet.
  • Azure AI Search: Chattappen använder Azure AI Search för att lagra data från dina egna dokument.
  • Exempel på frågegenerator: Kan generera ett antal frågor för varje dokument tillsammans med det grundläggande sanningssvaret. Ju fler frågor, desto längre utvärdering.
  • Utvärderaren kör exempelfrågor och frågor mot chattappen och returnerar resultatet.
  • Med granskningsverktyget kan du granska resultaten av utvärderingarna.
  • Med verktyget Diff kan du jämföra svaren mellan utvärderingarna.

Förutsättningar

  • En Azure-prenumeration. Skapa en kostnadsfritt

  • Åtkomst beviljad till Azure OpenAI i den önskade Azure-prenumerationen.

    För närvarande måste man ansöka om att få åtkomst till den här tjänsten. Du kan ansöka om åtkomst till Azure OpenAI genom att fylla i formuläret på https://aka.ms/oai/access.

  • Slutför föregående chattappprocedur för att distribuera chattappen till Azure. Den här proceduren läser in data i Azure AI Search-resursen. Den här resursen krävs för att utvärderingsappen ska fungera. Slutför inte avsnittet Rensa resurser i föregående procedur.

    Du behöver följande Azure-resursinformation från den distributionen, som kallas chattappen i den här artikeln:

    • Webb-API-URI: URI:n för det distribuerade chattapp-API:et.
    • Azure AI Search. Följande värden krävs:
      • Resursnamn: Namnet på resursnamnet för Azure AI Search.
      • Indexnamn: Namnet på Azure AI Search-indexet där dina dokument lagras.
      • Frågenyckel: Nyckeln för att fråga ditt sökindex.
    • Om du experimenterade med chattappens autentisering måste du inaktivera användarautentisering så att utvärderingsappen kan komma åt chattappen.

    När du har samlat in den här informationen behöver du inte använda chattappens utvecklingsmiljö igen. Det refereras till senare i den här artikeln flera gånger för att ange hur chattappen används av appen Utvärderingar. Ta inte bort chattappens resurser förrän du har slutfört hela proceduren i den här artikeln.

  • En utvecklingscontainermiljö är tillgänglig med alla beroenden som krävs för att slutföra den här artikeln. Du kan köra utvecklingscontainern i GitHub Codespaces (i en webbläsare) eller lokalt med hjälp av Visual Studio Code.

Öppna utvecklingsmiljön

Börja nu med en utvecklingsmiljö som har alla beroenden installerade för att slutföra den här artikeln. Du bör ordna din övervakningsarbetsyta så att du kan se både den här dokumentationen och utvecklingsmiljön samtidigt.

GitHub Codespaces kör en utvecklingscontainer som hanteras av GitHub med Visual Studio Code för webben som användargränssnitt. För den enklaste utvecklingsmiljön använder du GitHub Codespaces så att du har rätt utvecklarverktyg och beroenden förinstallerade för att slutföra den här artikeln.

Viktigt!

Alla GitHub-konton kan använda Codespaces i upp till 60 timmar kostnadsfritt varje månad med 2 kärninstanser. Mer information finns i GitHub Codespaces månadsvis inkluderade lagrings- och kärntimmar.

  1. Starta processen för att skapa ett nytt GitHub Codespace på grenen main av Azure-Samples/ai-rag-chat-evaluator GitHub-lagringsplatsen.

  2. Högerklicka på följande knapp och välj Öppna länk i nytt fönster för att ha både utvecklingsmiljön och dokumentationen tillgänglig samtidigt.

  3. På sidan Skapa kodområde granskar du konfigurationsinställningarna för kodområdet och väljer sedan Skapa nytt kodområde

    Skärmbild av bekräftelseskärmen innan du skapar ett nytt kodområde.

  4. Vänta tills kodområdet har startats. Den här startprocessen kan ta några minuter.

  5. Logga in på Azure med Azure Developer CLI i terminalen längst ned på skärmen.

    azd auth login --use-device-code
    
  6. Kopiera koden från terminalen och klistra sedan in den i en webbläsare. Följ anvisningarna för att autentisera med ditt Azure-konto.

  7. Etablera den Azure-resurs som krävs, Azure OpenAI, för utvärderingsappen.

    azd up
    

    Det här distribuerar inte utvärderingsappen, men den skapar Azure OpenAI-resursen med en GPT-4-distribution som krävs för att köra utvärderingarna lokalt i utvecklingsmiljön.

  8. De återstående uppgifterna i den här artikeln sker i samband med den här utvecklingscontainern.

  9. Namnet på GitHub-lagringsplatsen visas i sökfältet. På så sätt kan du skilja mellan den här utvärderingsappen och chattappen. Den här ai-rag-chat-evaluator lagringsplatsen kallas för appen Utvärderingar i den här artikeln.

Förbereda miljövärden och konfigurationsinformation

Uppdatera miljövärdena och konfigurationsinformationen med den information du samlade in under Förhandskrav för utvärderingsappen.

  1. Använd följande kommando för att hämta resursinformationen för utvärderingsappen till en .env fil:

    azd env get-values > .env
    
  2. Lägg till följande värden från chattappen för azure AI Search-instansen till , .envsom du samlade in i avsnittet förutsättningar:

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

    Värdet AZURE_SEARCH_KEY är frågenyckeln för Azure AI Search-instansen.

  3. example_config.json Kopiera filen i roten i mappen Utvärderingar till en ny fil my_config.json.

  4. Ersätt det befintliga innehållet my_config.json i med följande innehåll:

    {
        "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. target_url Ändra till URI-värdet för chattappen, som du samlade in i avsnittet krav. Chattappen måste följa chattprotokollet. URI:n har följande format https://CHAT-APP-URL/chat. Kontrollera att protokollet och chat vägen är en del av URI:n.

Generera exempeldata

För att utvärdera nya svar måste de jämföras med ett "grund sanningssvar", vilket är det idealiska svaret för en viss fråga. Generera frågor och svar från dokument som lagras i Azure AI Search för chattappen.

  1. example_input Kopiera mappen till en ny mapp med namnetmy_input.

  2. I en terminal kör du följande kommando för att generera exempeldata:

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

Fråge-/svarsparen genereras och lagras i my_input/qa.jsonl (i JSONL-format) som indata till utvärderaren som används i nästa steg. För en produktionsutvärdering skulle du generera fler QA-par, kanske fler än 200 för den här datauppsättningen.

Kommentar

Det få antalet frågor och svar per källa är tänkt att du snabbt ska kunna slutföra den här proceduren. Det är inte tänkt att vara en produktionsutvärdering som ska ha fler frågor och svar per källa.

Kör den första utvärderingen med en förfinad fråga

  1. Redigera egenskaperna för konfigurationsfilen my_config.json :

    • Ändra results_dir så att namnet på prompten inkluderas: my_results/experiment_refined.
    • Ändra prompt_template till: <READFILE>my_input/experiment_refined.txt om du vill använda mallen för förfinad fråga i utvärderingen.

    Den förfinade prompten är mycket specifik om ämnesdomänen.

    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. Kör utvärderingen genom att köra följande kommando i en terminal:

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

    Då skapades en ny experimentmapp i my_results med utvärderingen. Mappen innehåller resultatet av utvärderingen, inklusive:

    • eval_results.jsonl: Varje fråga och svar, tillsammans med GPT-måtten för varje QA-par.
    • summary.json: De övergripande resultaten, till exempel de genomsnittliga GPT-måtten.

Kör den andra utvärderingen med en svag uppmaning

  1. Redigera egenskaperna för konfigurationsfilen my_config.json :

    • Ändra results_dir till: my_results/experiment_weak
    • Ändra prompt_template till: <READFILE>my_input/prompt_weak.txt om du vill använda mallen för svag fråga i nästa utvärdering.

    Den svaga prompten har ingen kontext om ämnesdomänen:

    You are a helpful assistant.
    
  2. Kör utvärderingen genom att köra följande kommando i en terminal:

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

Kör tredje utvärderingen med en specifik temperatur

Använd en uppmaning som ger mer kreativitet.

  1. Redigera egenskaperna för konfigurationsfilen my_config.json :

    • Ändra results_dir till: my_results/experiment_ignoresources_temp09
    • Ändra prompt_template till: <READFILE>my_input/prompt_ignoresources.txt
    • Lägg till en ny åsidosättning– "temperature": 0.9 standardtemperaturen är 0,7. Ju högre temperatur, desto mer kreativa svar.

    Ignorera prompten är 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. Konfigurationsobjektet bör gilla följande förutom att använda din egen results_dir:

    {
        "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. Kör utvärderingen genom att köra följande kommando i en terminal:

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

Granska resultatet från utvärderingen

Du har utfört tre utvärderingar baserat på olika frågor och appinställningar. Resultaten lagras i my_results mappen. Granska hur resultaten skiljer sig åt baserat på inställningarna.

  1. Använd granskningsverktyget för att se resultatet av utvärderingarna:

    python3 -m review_tools summary my_results
    
  2. Resultatet ser ut så här:

    Skärmbild av utvärderingsgranskningsverktyget som visar de tre utvärderingarna.

    Varje värde returneras som ett tal och en procentandel.

  3. Använd följande tabell för att förstå innebörden av värdena.

    Värde beskrivning
    Grundstötning Detta avser hur väl modellens svar baseras på faktisk, verifierbar information. Ett svar anses grundat om det är faktamässigt korrekt och återspeglar verkligheten.
    Relevans Detta mäter hur nära modellens svar överensstämmer med kontexten eller prompten. Ett relevant svar adresserar direkt användarens fråga eller instruktion.
    Samstämmighet Detta refererar till hur logiskt konsekvent modellens svar är. Ett sammanhängande svar upprätthåller ett logiskt flöde och motsäger inte sig självt.
    Hänvisning Detta anger om svaret returnerades i det format som begärdes i prompten.
    Längd Detta mäter längden på svaret.
  4. Resultaten bör indikera att alla tre utvärderingarna hade hög relevans medan de experiment_ignoresources_temp09 hade den lägsta relevansen.

  5. Välj mappen för att se konfigurationen för utvärderingen.

  6. Ange Ctrl + C avsluta appen och gå tillbaka till terminalen.

Jämför svaren

Jämför de returnerade svaren från utvärderingarna.

  1. Välj två av utvärderingarna som ska jämföras och använd sedan samma granskningsverktyg för att jämföra svaren:

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

    Skärmbild av jämförelse av utvärderingssvar mellan utvärderingar.

  3. Ange Ctrl + C avsluta appen och gå tillbaka till terminalen.

Förslag på ytterligare utvärderingar

  • Redigera anvisningarna i my_input för att skräddarsy svaren, till exempel ämnesdomän, längd och andra faktorer.
  • my_config.json Redigera filen för att ändra parametrarna, till exempel temperature, och semantic_ranker och kör experimenten igen.
  • Jämför olika svar för att förstå hur frågan påverkar svarskvaliteten.
  • Generera en separat uppsättning frågor och grundläggande sanningssvar för varje dokument i Azure AI Search-indexet. Kör sedan utvärderingarna igen för att se hur svaren skiljer sig åt.
  • Ändra anvisningarna för att ange kortare eller längre svar genom att lägga till kravet i slutet av prompten. Till exempel: Please answer in about 3 sentences.

Rensa resurser

Rensa Azure-resurser

De Azure-resurser som skapas i den här artikeln faktureras till din Azure-prenumeration. Om du inte förväntar dig att behöva dessa resurser i framtiden tar du bort dem för att undvika att debiteras mer.

Kör följande Azure Developer CLI-kommando för att ta bort Azure-resurserna och ta bort källkoden:

azd down --purge

Rensa GitHub Codespaces

Om du tar bort GitHub Codespaces-miljön kan du maximera mängden kostnadsfria timmar per kärna som du får för ditt konto.

Viktigt!

Mer information om ditt GitHub-kontos rättigheter finns i GitHub Codespaces månadsvis inkluderade lagrings- och kärntimmar.

  1. Logga in på GitHub Codespaces-instrumentpanelen (https://github.com/codespaces).

  2. Leta upp de codespaces som körs från Azure-Samples/ai-rag-chat-evaluator GitHub-lagringsplatsen.

    Skärmbild av alla kodområden som körs, inklusive deras status och mallar.

  3. Öppna snabbmenyn för kodområdet och välj sedan Ta bort.

    Skärmbild av snabbmenyn för ett enda kodområde med borttagningsalternativet markerat.

Gå tillbaka till chattappartikeln för att rensa resurserna.

Nästa steg