Dela via


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 idag för att göra det enklare att köra utvärderingar.

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

  • Använd tillhandahållna exempelmeddelanden som är skräddarsydda för ämnesdomänen. De här anvisningarna 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.

Kommentar

Den här artikeln använder en eller flera AI-appmallar som grund för exemplen och vägledningen i artikeln. MED AI-appmallar får du väl underhållna referensimplementeringar som är enkla att distribuera. De bidrar till att säkerställa en högkvalitativ startpunkt för dina AI-appar.

Arkitekturöversikt

Viktiga komponenter i arkitekturen är:

  • Azure-värdbaserad chattapp: Chattappen körs i Azure App Service.
  • Microsoft AI Chat Protocol: Protokollet tillhandahåller standardiserade API-kontrakt för AI-lösningar och -språk. Chattappen överensstämmer med Microsoft AI Chat Protocol, som 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: Verktyget kan generera många frågor för varje dokument tillsammans med det grundläggande sanningssvaret. Ju fler frågor det finns, desto längre utvärderingar.
  • Utvärderare: Verktyget kör exempelfrågor och frågar mot chattappen och returnerar resultatet.
  • Granskningsverktyg: Verktyget granskar resultaten av utvärderingarna.
  • Diff-verktyget: Verktyget jämför svaren mellan utvärderingarna.

När du distribuerar den här utvärderingen till Azure skapas Azure OpenAI-tjänstslutpunkten för GPT-4 modellen med egen kapacitet. När du utvärderar chattprogram är det viktigt att utvärderaren har en egen Azure OpenAI-resurs med hjälp GPT-4 av sin egen kapacitet.

Förutsättningar

  • En Azure-prenumeration. Skapa en kostnadsfritt

  • Distribuera en chattapp.

  • Dessa chattappar 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 distributionen, som kallas chattappen i den här artikeln:

    • URI för chatt-API: Tjänstens serverdelsslutpunkt som visas i slutet av azd up processen.
    • Azure AI Search. Följande värden krävs:
      • Resursnamn: Namnet på resursnamnet för Azure AI Search, som rapporterats som Search service under azd up processen.
      • Indexnamn: Namnet på Azure AI Search-indexet där dina dokument lagras. Du hittar indexnamnet i Azure-portalen för söktjänsten.

    Med URL:en för chatt-API:et kan utvärderingarna göra begäranden via ditt serverdelsprogram. Med Azure AI Search-informationen kan utvärderingsskripten använda samma distribution som serverdelen, som läses in med dokumenten.

    När du har samlat in den här informationen behöver du inte använda chattappens utvecklingsmiljö igen. Den här artikeln refererar till chattappen flera gånger för att visa hur appen Utvärderingar använder den. Ta inte bort chattappens resurser förrän du har slutfört alla steg 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.

    • GitHub-konto

Öppna en utvecklingsmiljö

Följ de här anvisningarna för att konfigurera en förkonfigurerad utvecklingsmiljö med alla nödvändiga beroenden för att slutföra den här artikeln. Ordna din bildskärmsarbetsyta så att du kan se den här dokumentationen och utvecklingsmiljön samtidigt.

Den här artikeln har testats med switzerlandnorth regionen för utvärderingsdistributionen.

GitHub Codespaces kör en utvecklingscontainer som hanteras av GitHub med Visual Studio Code för webben som användargränssnitt. Använd GitHub Codespaces för den enklaste utvecklingsmiljön. Den levereras med rätt utvecklarverktyg och beroenden förinstallerade för att färdigställa denna artikel.

Viktigt!

Alla GitHub-konton kan använda GitHub Codespaces i upp till 60 timmar kostnadsfritt varje månad med två 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-kodområde på grenen main av GitHub-lagringsplatsen Azure-Samples/ai-rag-chat-evaluator .

  2. Om du vill visa utvecklingsmiljön och dokumentationen som är tillgänglig samtidigt högerklickar du på följande knapp och väljer Öppna länk i nytt fönster.

    Öppna i GitHub Codespaces.

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

    Skärmbild som visar 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 Nödvändiga Azure-resursen, Azure OpenAI Service, för utvärderingsappen:

    azd up
    

    Det här AZD kommandot distribuerar inte utvärderingsappen, men den skapar Azure OpenAI-resursen med en nödvändig GPT-4 distribution för att köra utvärderingarna i den lokala utvecklingsmiljön.

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

Namnet på GitHub-lagringsplatsen visas i sökfältet. Den här visuella indikatorn hjälper dig att skilja utvärderingsappen från chattappen. Den här ai-rag-chat-evaluator lagringsplatsen kallas utvärderingsappen 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. Skapa en .env fil baserat på .env.sample.

    cp .env.sample .env
    
  2. Kör det här kommandot för att hämta nödvändiga värden för AZURE_OPENAI_EVAL_DEPLOYMENT och AZURE_OPENAI_SERVICE från din distribuerade resursgrupp. Klistra in dessa värden i .env filen.

    azd env get-value AZURE_OPENAI_EVAL_DEPLOYMENT
    azd env get-value AZURE_OPENAI_SERVICE
    
  3. Lägg till följande värden från chattappen för azure AI Search-instansen .env i filen som du samlade in i avsnittet Förutsättningar .

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

Använd Microsoft AI Chat Protocol för konfigurationsinformation

Chattappen och utvärderingsappen implementerar båda Microsoft AI Chat Protocol-specifikationen, ett API-kontrakt med öppen källkod, moln och språkagnostisk AI-slutpunkt som används för förbrukning och utvärdering. När klient- och mellannivåslutpunkterna följer den här API-specifikationen kan du konsekvent använda och köra utvärderingar på dina AI-serverdelar.

  1. Skapa en ny fil med namnet my_config.json och kopiera följande innehåll till den:

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/experiment<TIMESTAMP>",
        "target_url": "http://localhost:50505/chat",
        "target_parameters": {
            "overrides": {
                "top": 3,
                "temperature": 0.3,
                "retrieval_mode": "hybrid",
                "semantic_ranker": false,
                "prompt_template": "<READFILE>my_input/prompt_refined.txt",
                "seed": 1
            }
        }
    }
    

    Utvärderingsskriptet skapar my_results mappen.

    Objektet overrides innehåller alla konfigurationsinställningar som behövs för programmet. Varje program definierar sin egen uppsättning inställningsegenskaper.

  2. Använd följande tabell för att förstå innebörden av de inställningsegenskaper som skickas till chattappen.

    Inställningsegenskap beskrivning
    semantic_ranker Om du vill använda semantisk ranker, en modell som rangordnar sökresultaten på nytt baserat på semantisk likhet med användarens fråga. Vi inaktiverar det för den här självstudien för att minska kostnaderna.
    retrieval_mode Det hämtningsläge som ska användas. Standardvärdet är hybrid.
    temperature Temperaturinställningen för modellen. Standardvärdet är 0.3.
    top Antalet sökresultat som ska returneras. Standardvärdet är 3.
    prompt_template En åsidosättning av uppmaningen som används för att generera svaret baserat på frågan och sökresultaten.
    seed Startvärdet för alla anrop till GPT-modeller. Om du ställer in ett frö resulterar det i mer konsekventa resultat i utvärderingar.
  3. Ändra värdet target_url till URI-värdet för chattappen, som du samlade in i avsnittet Förutsättningar . 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 grundläggande 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 namnet my_input.

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

    python -m evaltools generate --output=my_input/qa.jsonl --persource=2 --numquestions=14
    

Fråge- och 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 genererar du fler par med frågor och svar. Mer än 200 genereras för den här datamängden.

Kommentar

Endast några få frågor och svar genereras per källa så att du snabbt kan slutföra den här proceduren. Det är inte tänkt att vara en produktionsutvärdering, som bör 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 .

    Fastighet Nytt värde
    results_dir my_results/experiment_refined
    prompt_template <READFILE>my_input/prompt_refined.txt

    Den förfinade prompten är 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 a 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:

    python -m evaltools evaluate --config=my_config.json --numquestions=14
    

    Det här skriptet skapade en ny experimentmapp i my_results/ med utvärderingen. Mappen innehåller resultatet av utvärderingen.

    Filnamn beskrivning
    config.json En kopia av konfigurationsfilen som används för utvärderingen.
    evaluate_parameters.json Parametrarna som används för utvärderingen. config.json Liknar men innehåller andra metadata som tidsstämpel.
    eval_results.jsonl Varje fråga och svar, tillsammans med GPT-måtten för varje par med frågor och svar.
    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 .

    Fastighet Nytt värde
    results_dir my_results/experiment_weak
    prompt_template <READFILE>my_input/prompt_weak.txt

    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:

    python -m evaltools evaluate --config=my_config.json --numquestions=14
    

Kör den tredje utvärderingen med en specifik temperatur

Använd en uppmaning som ger mer kreativitet.

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

    Befintlig Fastighet Nytt värde
    Befintlig results_dir my_results/experiment_ignoresources_temp09
    Befintlig prompt_template <READFILE>my_input/prompt_ignoresources.txt
    Nytt temperature 0.9

    Standardvärdet temperature är 0,7. Ju högre temperatur, desto mer kreativa svar.

    Uppmaningen ignore ä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 se ut som i följande exempel, förutom att du ersatte results_dir med din sökväg:

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

    python -m evaltools 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.

    python -m evaltools summary my_results
    
  2. Resultatet ser ut ungefär så här:

    Skärmbild som visar 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 Kontrollerar hur väl modellens svar baseras på faktisk, verifierbar information. Ett svar anses grundat om det är faktamässigt korrekt och återspeglar verkligheten.
    Relevans Mäter hur nära modellens svar överensstämmer med kontexten eller prompten. Ett relevant svar adresserar direkt användarens fråga eller instruktion.
    Koherens Kontrollerar hur logiskt konsekventa modellens svar är. Ett sammanhängande svar upprätthåller ett logiskt flöde och motsäger inte sig självt.
    Hänvisning Anger om svaret returnerades i det format som begärdes i prompten.
    Längd Mäter svarets längd.
  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 för att 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.

    python -m evaltools diff my_results/experiment_refined my_results/experiment_ignoresources_temp09
    
  2. Granska resultaten. Dina resultat kan variera.

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

  3. Ange Ctrl + C för att 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. Ett exempel är Please answer in about 3 sentences.

Rensa resurser och beroenden

Följande steg beskriver hur du rensar de resurser du använde.

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.

Om du vill ta bort Azure-resurserna och ta bort källkoden kör du följande Azure Developer CLI-kommando:

azd down --purge

Rensa GitHub Codespaces och Visual Studio Code

Att ta bort GitHub Codespaces-miljön säkerställer att du kan maximera antalet 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 .

  2. Leta upp dina kodområden som för närvarande körs och som är hämtade från GitHub-lagringsplatsen Azure-Samples/ai-rag-chat-evaluator.

    Skärmbild som visar 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 som visar snabbmenyn för ett enda kodområde med alternativet Ta bort markerat.

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