Dela via


Kom igång: Chatta med dina egna data (Python-exempel)

Den här artikeln visar hur du distribuerar och kör chatten med ditt eget dataexempelmed hjälp av exempelkod för Python. Det här exempelchattprogrammet har skapats med Python, Azure OpenAI Service och Rag (Retrieval Augmented Generation) via Azure AI Search.

Appen ger svar på användarfrågor om medarbetarförmåner på ett fiktivt företag. Den använder Retrieval-Augmented Generation (RAG) för att referera till innehåll från angivna PDF-filer, som kan innehålla:

  • En handbok för anställda
  • Ett översiktsdokument för förmåner
  • En lista över företagsroller och förväntningar

Genom att analysera dessa dokument kan appen svara på frågor på naturligt språk med korrekta, kontextuellt relevanta svar. Den här metoden visar hur du kan använda dina egna data för att driva intelligenta, domänspecifika chattupplevelser med Azure OpenAI och Azure AI Search.

Du får också lära dig hur du konfigurerar appens inställningar för att ändra dess svarsbeteende.

När du har slutfört stegen i den här artikeln kan du börja anpassa projektet med din egen kod. Den här artikeln är en del av en serie som vägleder dig genom att skapa en chattapp med Azure OpenAI Service och Azure AI Search. Andra artiklar i serien är:

Kommentar

Den här artikeln baseras på en eller flera AI-appmallar som fungerar som väl underhållna referensimplementeringar. Dessa mallar är utformade för att vara enkla att distribuera och tillhandahålla en tillförlitlig startpunkt av hög kvalitet för att skapa egna AI-program.

Exempel på apparkitektur

Följande diagram visar en enkel arkitektur för chattappen.

Diagram som visar arkitekturen för exempel från klienten till chatappen på servern, med datakällor.

Viktiga komponenter i arkitekturen är:

  • Ett webbprogram som är värd för det interaktiva chattgränssnittet (vanligtvis skapat med Python Flask eller JavaScript/React) och skickar användarfrågor till serverdelen för bearbetning.
  • En Azure AI Search-resurs som utför intelligent sökning över indexerade dokument (PDF-filer, Word-filer osv.) och returnerar relevanta dokumentutdrag (segment) för användning i svar.
  • En Azure OpenAI Service-instans som:
    • Konverterar dokument och användarfrågor till vektorrepresentationer för semantisk likhetssökning.
    • Extraherar viktiga nyckelord för att förfina Azure AI Search-frågor.
    • Syntetiserar slutliga svar med hjälp av hämtade data och användarfrågan.

Det typiska flödet i chattappen är följande:

  • Användaren skickar en fråga: En användare anger en fråga för naturligt språk via webbappens gränssnitt.
  • Azure OpenAI bearbetar frågan: Serverdelen använder Azure OpenAI för att:
    • Generera en inbäddning av frågan med hjälp av modellen text-embedding-ada-002.
    • Du kan också extrahera nyckelord för att förfina sökrelevansen
  • Azure AI Search hämtar relevanta data: Inbäddning eller nyckelord används för att utföra en semantisk sökning över indexerat innehåll (till exempel PDF-filer) i Azure AI Search.
  • Kombinera resultat med frågan: De mest relevanta dokumentutdragen (segment) kombineras med användarens ursprungliga fråga.
  • Azure OpenAI genererar ett svar: De kombinerade indata skickas till en GPT-modell (till exempel gpt-35-turbo eller gpt-4), vilket genererar ett sammanhangsmedvetent svar.
  • Svaret returneras till användaren: Det genererade svaret visas i chattgränssnittet.

Förutsättningar

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.

Om du vill använda den här artikeln behöver du följande krav:

  • Ett Azure-abonnemang. Skapa ett kostnadsfritt konto innan du börjar.

  • Azure-kontobehörigheter. Ditt Azure-konto måste ha behörigheten Microsoft.Authorization/roleAssignments/write. Roller som Administratör för användaråtkomst eller Ägare uppfyller detta krav.

  • Åtkomst till Azure OpenAI i din Azure-prenumeration. I de flesta fall kan du skapa anpassade innehållsfilter och hantera allvarlighetsnivåer med allmän åtkomst till Azure OpenAI-modeller. Registrering för godkännandebaserad åtkomst krävs inte för allmän åtkomst. Mer information finns i Funktioner för begränsad åtkomst för Azure AI-tjänster.

  • Ändringar av innehållsfilter eller missbruk (valfritt). För att skapa anpassade innehållsfilter, ändra allvarlighetsgradsnivåer eller stödja övervakning av missbruk behöver du formellt åtkomstgodkännande. Du kan ansöka om åtkomst genom att fylla i de nödvändiga registreringsformulären. Mer information finns i Registrering för ändrade innehållsfilter och/eller övervakning av missbruk.

  • Stöd och felsökning av åtkomst. För åtkomst till felsökning öppnar du ett supportproblem på GitHub-lagringsplatsen.

  • Ett GitHub-konto. Krävs för att förgrena lagringsplatsen och använda GitHub Codespaces eller klona den lokalt.

Användningskostnad för exempelresurser

De flesta resurser som används i den här arkitekturen ligger under grundläggande eller förbrukningsbaserade prisnivåer. Det innebär att du bara betalar för det du använder, och avgifterna är vanligtvis minimala under utveckling eller testning.

För att slutföra det här exemplet kan det uppstå en liten kostnad för att använda tjänster som Azure OpenAI, AI Search och lagring. När du har utvärderat eller distribuerat appen kan du ta bort alla etablerade resurser för att undvika löpande avgifter.

En detaljerad uppdelning av förväntade kostnader finns i Kostnadsuppskattningen på GitHub-lagringsplatsen för exemplet.

Öppna utvecklingsmiljön

Börja med att konfigurera en utvecklingsmiljö som har alla beroenden installerade för att slutföra den här artikeln.

  • Ett Azure-abonnemang. Skapa en kostnadsfritt.
  • Azure-kontobehörigheter. Ditt Azure-konto måste ha behörigheten Microsoft.Authorization/roleAssignments/write. Roller som Administratör för användaråtkomst eller Ägare uppfyller detta krav.
  • Ett GitHub-konto. Krävs för att förgrena lagringsplatsen och använda GitHub Codespaces eller klona den lokalt.

Öppna en utvecklingsmiljö

Använd följande instruktioner för att distribuera en förkonfigurerad utvecklingsmiljö som innehåller alla nödvändiga beroenden för att slutföra den här artikeln.

För den enklaste och mest strömlinjeformade installationen använder du GitHub Codespaces. GitHub Codespaces kör en utvecklingscontainer som hanteras av GitHub och tillhandahåller Visual Studio Code för webben som användargränssnitt (UI). Den här miljön innehåller alla nödvändiga verktyg, SDK:er, tillägg och beroenden förinstallerade, så att du kan börja utveckla direkt utan manuell konfiguration.

Om du använder Codespaces ser du till att:

  • Rätt utvecklarverktyg och versioner är redan installerade.
  • Du behöver inte installera Docker, VS Code eller tillägg lokalt.
  • Snabb registrering och reproducerbar miljökonfiguration.

Viktigt!

Alla GitHub-konton kan använda GitHub Codespaces i upp till 60 timmar kostnadsfritt varje månad med 2 kärninstanser. Om du överskrider den kostnadsfria kvoten eller använder större beräkningsalternativ gäller standardfaktureringstaxorna för GitHub Codespaces. Mer information finns i GitHub Codespaces – Månatlig lagring och kärntimmar.

  1. Om du vill börja arbeta med exempelprojektet skapar du ett nytt GitHub-kodområde på grenen main av Azure-Samples/azure-search-openai-demo GitHub-lagringsplatsen.

    Högerklicka på alternativet GitHub Codespaces – Öppna överst på lagringsplatsens sida och välj Öppna länk i nytt fönster. Detta säkerställer att utvecklingscontainern startas på en helskärmsflik med dedikerade webbläsare, vilket ger dig åtkomst till både källkoden och den inbyggda dokumentationen.

    Bild av alternativet Öppna i GitHub Codespaces.

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

    Skärmbild av bekräftelseskärmen för att skapa ett nytt GitHub-kodområde för exemplet.

    Vänta tills GitHub-kodområdet har startats. Startprocessen kan ta några minuter.

  3. När GitHub-kodområdet har öppnats loggar du in på Azure med Azure Developer CLI genom att ange följande kommando i terminalfönstret i kodområdet:

    azd auth login
    

    GitHub visar en säkerhetskod i terminalfönstret.

    1. Kopiera säkerhetskoden i terminalfönstret och välj Retur. Ett webbläsarfönster öppnas.

    2. Klistra in säkerhetskoden i webbläsarfältet i kommandotolken.

    3. Följ anvisningarna för att autentisera med ditt Azure-konto.

Du slutför återstående GitHub Codespaces-uppgifter i den här artikeln i kontexten för den här utvecklingscontainern.

Distribuera chattapp till Azure

Exempellagringsplatsen innehåller allt du behöver för att distribuera en chatt med ditt eget dataprogram till Azure, inklusive:

  • Programkällans kod (Python)
  • Filer för infrastruktur som kod (Bicep)
  • Konfiguration för GitHub-integrering och CI/CD (valfritt)

Använd följande steg för att distribuera appen med Azure Developer CLI (azd).

Viktigt!

Azure-resurser som skapats i det här avsnittet , särskilt Azure AI Search, kan börja ackumulera avgifter omedelbart efter etableringen, även om distributionen avbryts innan den är klar. Undvik oväntade avgifter genom att övervaka din Azure-användning och ta bort oanvända resurser omedelbart efter testningen.

  1. I fönstret Terminal för Visual Studio Code skapar du Azure-resurserna och distribuerar källkoden genom att köra följande azd kommando:

    azd up
    
  2. Processen uppmanar dig att ange en eller flera av följande inställningar baserat på din konfiguration:

    • Miljönamn: Det här värdet används som en del av resursgruppens namn. Ange ett kort namn med gemener och bindestreck (-), till exempel myenv. Versaler, siffror och specialtecken stöds inte.

    • Prenumeration: Välj en prenumeration för att skapa resurserna. Om du inte ser din önskade prenumeration använder du piltangenterna för att rulla den fullständiga listan över tillgängliga prenumerationer.

    • Plats: Den här regionplatsen används för de flesta resurser, inklusive värdtjänster. Välj en regionplats nära dig geografiskt.

    • Plats för OpenAI-modell eller dokumentinformationsresurs: Välj den plats som är närmast dig geografiskt. Om den region som du har valt för din Plats är tillgänglig för den här inställningen väljer du samma region.

    Det kan ta lite tid innan appen distribueras. Vänta tills distributionen har slutförts innan du fortsätter.

  3. När appen har distribuerats visar terminalfönstret en slutpunkts-URL:

    Skärmbild som visar slutpunkts-URL:en för den distribuerade appen enligt rapporten efter att azd up-processen har slutförts.

  4. Välj slutpunkts-URL:en för att öppna chattprogrammet i en webbläsare:

    Skärmbild av chattappen som visar flera förslag på chattinmatning och textrutan chatt för att ange en fråga.

Använda chattappen för att få svar från PDF-filer

Chattappen är förinstallerad med information om anställdas förmåner från PDF-filer. Du kan använda chattappen för att ställa frågor om fördelarna. Följande steg beskriver hur du använder chattappen. Dina svar kan variera när de underliggande modellerna uppdateras.

  1. I chattappen väljer du alternativet Vad händer i en prestandagranskning? eller anger samma text i chatttextrutan. Appen returnerar det första svaret:

    Skärmbild av det första svaret från chattappen för frågan, Vad händer i en prestandagranskning?

  2. I svarsrutan väljer du en källhänvisning:

    Skärmbild som visar en källhänvisning markerad i svarsrutan för chattappen.

  3. GitHub Codespaces öppnar det högra källhänvisningsfönstret med tre flikar och fokus ligger på fliken Källhänvisning :

    Skärmbild av det högra fönstret som öppnas i GitHub Codespaces med information som visas på fliken Källhänvisning.

    GitHub Codespaces innehåller tre flikar med information som hjälper dig att förstå hur chattappen genererade svaret:

    Tabb beskrivning
    Tankegång Visar ett skript för interaktionen mellan frågor och svar i chatten. Du kan visa innehållet som tillhandahålls av chattappen system, frågor som angetts av useroch förtydliganden som gjorts av systemet assistant.
    Stöd för innehåll Visar en lista över den information som används för att besvara din fråga och källmaterialet. Antalet källmaterialciteringar anges i inställningarna för utvecklare. Standardantalet citat är 3.
    Hänvisning Visar den ursprungliga källan som innehåller den valda källhänvisning.
  4. När du är klar väljer du den markerade fliken i den högra rutan. Den högra rutan stängs.

Använda inställningar för att ändra svarsbeteende

Den specifika OpenAI-modellen avgör chattens intelligens och de inställningar som används för att interagera med modellen. Alternativet Inställningar för utvecklare öppnar fönstret Konfigurera svarsgenerering där du kan ändra inställningarna för chattappen:

Skärmbild av utvecklarinställningarna som är tillgängliga i det högra fönstret i chattappen.

Inställning beskrivning
Åsidosätt mall för ledtext Åsidosätter uppmaningen som används för att generera svaret baserat på frågan och sökresultaten.
Temperatur Anger temperaturen för begäran till den stora språkmodell (LLM) som genererar svaret. Högre temperaturer resulterar i mer kreativa svar, men de kan vara mindre jordade.
Frö Anger ett frö för att förbättra reproducerbarheten för modellens svar. Fröet kan vara vilket heltal som helst.
Minsta sökpoäng Anger en lägsta poäng för sökresultat som returneras från Azure AI Search. Poängintervallet beror på om du använder Hybrid (standard), endast Vektorer eller Endast text för inställningen Hämtningsläge .
Minsta rerankerpoäng Anger en minsta poäng för sökresultat som returneras från den semantiska rerankern. Poängen ligger alltid mellan 0-4. Ju högre poäng desto mer semantiskt relevant är resultatet för frågan.
Hämta så många sökresultat Anger antalet sökresultat som ska hämtas från Azure AI Search. Fler resultat kan öka sannolikheten för att hitta rätt svar, men kan leda till att modellen "går vilse i mitten". Du kan se de returnerade källorna på flikarna Tankeprocess och Stödinnehåll i fönstret Källhänvisning .
Inkludera kategori Anger vilka kategorier som ska inkluderas när sökresultaten genereras. Använd listrutan för att göra ditt val. Standardåtgärden är att inkludera Alla kategorier.
Exkludera kategori Anger alla kategorier som ska undantas från sökresultaten. Det finns inga kategorier som används i standarddatauppsättningen.
Använd semantisk ranker för hämtning Aktiverar semantisk rankning i Azure AI Search, en modell som rangordnar sökresultaten på nytt baserat på semantisk likhet med användarens fråga.
Använda semantiska bildtexter Skickar semantiska bildtexter till LLM i stället för det fullständiga sökresultatet. En semantisk bildtext extraheras från ett sökresultat under processen för semantisk rangordning.
Föreslå uppföljningsfrågor Ber LLM att föreslå uppföljningsfrågor baserat på användarens fråga.
Hämtningsläge Anger hämtningsläget för Azure AI Search-frågan. Standardåtgärden är Vectors + Text (Hybrid), som använder en kombination av vektorsökning och fulltextsökning. Alternativet Vektorer använder endast vektorsökning. Alternativet Text använder endast fulltextsökning. Hybridmetoden är optimal.
Svar om att streamchatten har slutförts Strömmar kontinuerligt svaret till chattgränssnittet när innehållet genereras.

Följande steg beskriver hur du ändrar inställningarna.

  1. I webbläsaren väljer du alternativet Inställningar för utvecklare .

  2. Markera kryssrutan Föreslå uppföljningsfrågor för att aktivera alternativet och välj Stäng för att tillämpa inställningsändringen.

  3. I chattappen löser du frågan igen, den här gången genom att ange texten i frågerutan:

    What happens in a performance review?
    

    Chattappens svar innehåller nu föreslagna uppföljningsfrågor:

    Skärmbild som visar hur chattappen innehåller föreslagna uppföljningsfrågor efter svaret.

  4. Välj alternativet Inställningar för utvecklare igen och avmarkera Använd semantisk ranker för hämtningsalternativet . Stäng inställningarna.

  5. Ställ samma fråga igen och lägg märke till skillnaden i svaret från chattappen.

    Med Semantic Ranker: "Under en prestandagranskning på Contoso Electronics kommer din handledare att diskutera dina prestanda under det senaste året och ge feedback om förbättringsområden. Du kommer också att ha möjlighet att diskutera dina mål och mål för det kommande året. Granskningen är en dubbelriktad dialog mellan chefer och anställda, och det uppmuntras att anställda är ärliga och öppna under processen (1). Den feedback som ges under granskningen bör vara positiv och konstruktiv och syftar till att hjälpa anställda att utvecklas och växa i sina roller. Anställda kommer att få en skriftlig sammanfattning av sin prestationsgranskning, som kommer att innehålla en klassificering av deras prestanda, feedback och mål och mål för det kommande året (1)."

    Utan den semantiska rankaren: "Under en prestandagranskning på Contoso Electronics kommer din handledare att diskutera dina prestanda under det senaste året och ge feedback om förbättringsområden. Det är en dubbelriktad dialog där du uppmuntras att vara ärlig och öppen (1). Den feedback som ges under granskningen bör vara positiv och konstruktiv och syftar till att hjälpa dig att utveckla och växa i din roll. Du får en skriftlig sammanfattning av recensionen, inklusive ett omdöme om dina prestationer, feedback och mål för det kommande året (1)."

Rensa resurser

När du har slutfört övningen är det bästa praxis att ta bort alla resurser som inte längre krävs.

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.

Ta bort Azure-resurserna och ta bort källkoden genom att köra följande azd kommando:

azd down --purge --force

Kommandoväxlarna omfattar:

  • purge: Borttagna resurser rensas omedelbart. Med det här alternativet kan du återanvända måttet Azure OpenAI-token per minut (TPM).
  • force: Borttagningen sker tyst, utan att användarens medgivande krävs.

Städa upp GitHub Codespaces

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ånatlig lagring och kärntimmar.

  1. Logga in på GitHub Codespaces-instrumentpanelen .

  2. På instrumentpanelen letar du upp dina kodområden som körs från Azure-Samples/azure-search-openai-demo GitHub-lagringsplatsen:

    Skärmbild av alla GitHub Codespaces som körs, inklusive deras status och mallar.

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

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

Få hjälp

Den här exempelarkivet ger felsökningsinformation.

Om ditt problem inte åtgärdas, lägg till det på arkivets Problemsida.