Kom igång med att utvärdera svar i en chattapp i Python
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. 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 och enkla att distribuera referensimplementeringar som hjälper dig 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 tillhandahåller standardiserade API-kontrakt mellan 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: Kan generera många frågor för varje dokument tillsammans med grund 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.
När du distribuerar den här utvärderingen till Azure skapas Azure OpenAI-slutpunkten för GPT-4
modellen med egen kapacitet. När du utvärderar chattprogram är det viktigt att utvärderaren har en egen OpenAI-resurs med GPT-4
sin egen kapacitet.
Förutsättningar
En Azure-prenumeration. Skapa en kostnadsfritt
Åtkomst beviljad till Azure OpenAI i den önskade Azure-prenumerationen. Läs mer på https://aka.ms/oai/access.
Slutför föregående chattappprocedur för att distribuera chattappen till Azure. 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:
- 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
underazd up
processen. - Indexnamn: Namnet på Azure AI Search-indexet där dina dokument lagras. Detta finns i Azure-portalen för tjänsten Search.
- Resursnamn: Namnet på resursnamnet för Azure AI Search, som rapporterats som
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. 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.
- URI för chatt-API: Tjänstens serverdelsslutpunkt som visas i slutet av
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 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.
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. 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.
Starta processen för att skapa ett nytt GitHub Codespace på grenen
main
avAzure-Samples/ai-rag-chat-evaluator
GitHub-lagringsplatsen.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.
På sidan Skapa kodområde granskar du konfigurationsinställningarna för kodområdet och väljer sedan Skapa nytt kodområde
Vänta tills kodområdet har startats. Den här startprocessen kan ta några minuter.
Logga in på Azure med Azure Developer CLI i terminalen längst ned på skärmen.
azd auth login --use-device-code
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.
Etablera den Azure-resurs som krävs, Azure OpenAI, för utvärderingsappen.
azd up
Det här
AZD command
distribuerar inte utvärderingsappen, men den skapar Azure OpenAI-resursen med en nödvändigGPT-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 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.
Skapa en
.env
fil baserat på.env.sample
:cp .env.sample .env
Kör de här kommandona för att hämta de värden som krävs för
AZURE_OPENAI_EVAL_DEPLOYMENT
ochAZURE_OPENAI_SERVICE
från din distribuerade resursgrupp och klistra in dessa värden i.env
filen:azd env get-value AZURE_OPENAI_EVAL_DEPLOYMENT azd env get-value AZURE_OPENAI_SERVICE
Lägg till följande värden från chattappen för azure AI Search-instansen till ,
.env
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 Microsoft AI Chat Protocol specification
både , 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.
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 krävs för programmet. Varje program definierar sin egen uppsättning inställningsegenskaper.Använd följande tabell för att förstå innebörden av de inställningsegenskaper som skickas till chattappen:
Egenskap för inställningar 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
.temperatur 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. frö 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. 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 formathttps://CHAT-APP-URL/chat
. Kontrollera att protokollet ochchat
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.
example_input
Kopiera mappen till en ny mapp med namnetmy_input
.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-/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, mer än 200 för den här datamängden.
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
Redigera egenskaperna för konfigurationsfilen
my_config.json
:Property 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 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].
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, inklusive: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. Mycket likt config.json
men innehåller ytterligare metadata som tidsstämpel.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
Redigera egenskaperna för konfigurationsfilen
my_config.json
:Property 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.
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 tredje utvärderingen med en specifik temperatur
Använd en uppmaning som ger mer kreativitet.
Redigera egenskaperna för konfigurationsfilen
my_config.json
:Befintlig Property Nytt värde Befintlig results_dir my_results/experiment_ignoresources_temp09
Befintlig prompt_template <READFILE>my_input/prompt_ignoresources.txt
Nytt temperatur 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!
Konfigurationsobjektet bör se ut så här förutom ersätt
results_dir
med sökvägen:{ "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" } } }
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.
Använd granskningsverktyget för att se resultatet av utvärderingarna:
python -m evaltools summary my_results
Resultatet ser ut ungefär så här:
Varje värde returneras som ett tal och en procentandel.
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. Koherens 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. Resultaten bör indikera att alla tre utvärderingarna hade hög relevans medan de
experiment_ignoresources_temp09
hade den lägsta relevansen.Välj mappen för att se konfigurationen för utvärderingen.
Ange Ctrl + C avsluta appen och gå tillbaka till terminalen.
Jämför svaren
Jämför de returnerade svaren från utvärderingarna.
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
Granska resultaten. Dina resultat kan variera.
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 exempeltemperature
, ochsemantic_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. Exempel:
Please answer in about 3 sentences.
Rensa resurser och beroenden
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
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.
Logga in på GitHub Codespaces-instrumentpanelen (https://github.com/codespaces).
Leta upp de codespaces som körs från
Azure-Samples/ai-rag-chat-evaluator
GitHub-lagringsplatsen.Öppna snabbmenyn för kodområdet och välj sedan Ta bort.
Gå tillbaka till chattappartikeln för att rensa resurserna.
Nästa steg
- Lagringsplats för utvärderingar
- GitHub-lagringsplats för företagschattapp
- Skapa en chattapp med azure OpenAI-metodlösningsarkitektur
- Åtkomstkontroll i Generativa AI-appar med Azure AI Search
- Skapa en Enterprise-redo OpenAI-lösning med Azure API Management
- Utklassning av vektorsökning med hybridhämtnings- och rangordningsfunktioner