Dela via


GenAIOps med promptflöde och Azure DevOps

När efterfrågan på LLM-infunderade program ökar behöver organisationer en sammanhängande och strömlinjeformad process för att hantera livscykeln från slutpunkt till slutpunkt för dessa appar. Generative Artificial Intelligence Operations (GenAIOps), som ibland kallas LLMOps, är en hörnsten i effektiv snabb teknik och LLM-infunderad programutveckling och distribution.

Den här artikeln visar hur du med Azure Machine Learning kan integrera med Azure DevOps för att automatisera livscykeln för LLM-infunderad programutveckling med promptflöde. Prompt flow ger en effektiv och strukturerad metod för att utveckla LLM-infunderade program. Den väldefinierade processen och livscykeln vägleder dig genom processen att skapa, testa, optimera och distribuera flöden, vilket kulminerar i skapandet av fullt fungerande LLM-infunderade lösningar.

GenAIOps promptflödesfunktioner

GenAIOps med promptflöde använder en GenAIOps-mall och vägledning som hjälper dig att skapa LLM-infunderade appar med hjälp av promptflöde. GenAIOps med promptflöde har funktioner för enkla eller komplexa LLM-infunderade appar och kan anpassas efter programmets behov.

GenAIOps med promptflödesplattformen innehåller följande funktioner:

  • Centraliserad kodvärd. Lagringsplatsen stöder värdkod för flera promptflöden, vilket ger en enda lagringsplats för alla dina flöden. Den här lagringsplatsen är som ett bibliotek för dina flöden, vilket gör det enkelt att hitta, komma åt och samarbeta i olika projekt.

  • Livscykelhantering. Varje flöde har sin egen livscykel, vilket ger en smidig övergång från lokala experiment till produktionsdistribution.

  • Variant- och hyperparameterexperiment. Varianter och hyperparametrar är som ingredienser i ett recept. Med plattformen kan du experimentera med olika kombinationer av varianter över flera noder i ett flöde. Du kan experimentera med flera varianter och hyperparametrar för att enkelt utvärdera flödesvarianter.

  • Flera distributionsmål. Plattformen genererar Docker-avbildningar som är infunderade med flödet och beräkningssessionen för distribution till valfri målplattform och operativsystem som stöder Docker. Du kan distribuera flöden till Azure App Services, Kubernetes och Azure Managed Computes och konfigurera dem för skalning efter behov.

  • A/B-distribution. GenAIOps med promptflöde implementerar sömlöst A/B-distributioner så att du enkelt kan jämföra olika flödesversioner. Den här plattformen underlättar A/B-distribution för snabbflöde på samma sätt som i traditionell A/B-testning på webbplatsen. Du kan enkelt jämföra olika versioner av ett flöde i en verklig inställning för att avgöra vilken version som presterar bäst.

  • Många-till-många-datauppsättning för flödesrelationer. GenAIOps med promptflöde rymmer flera datauppsättningar för varje standard- och utvärderingsflöde, vilket möjliggör mångsidighet i flödestest och utvärdering.

  • Villkorsstyrda data och modellregistrering. Plattformen registrerar en ny datamängdsversion för Azure Machine Learning-datatillgången och flöden i modellregistret endast när datamängden ändras.

  • Omfattande rapportering. GenAIOps med promptflöde genererar detaljerade rapporter för varje variantkonfiguration, så att du kan fatta välgrundade beslut. Plattformen innehåller detaljerade måttinsamling, experiment och varianter av masskörningar för alla körningar och experiment, vilket möjliggör datadrivna beslut för både CSV- och HTML-filer.

GenAIOps med promptflöde innehåller följande andra funktioner för anpassning:

  • Byof (Bring-your-own-flows) är en komplett plattform för att utveckla flera användningsfall relaterade till LLM-infunderade program.
  • Konfigurationsbaserad utveckling innebär att du inte behöver skriva omfattande pannplåtskod.
  • Snabbexperimentering och utvärdering körs både lokalt och i molnet.
  • Notebook-filer för utvärdering av lokal fråga tillhandahåller ett bibliotek med funktioner för lokala experiment.
  • Slutpunktstestning i pipelinen efter distributionen kontrollerar slutpunktens tillgänglighet och beredskap.
  • Valfritt human-in-loop validerar prompt-mått före distributionen.

GenAIOps-faser

GenAIOps-livscykeln består av fyra olika steg:

  • Initiering. Definiera affärsmålet tydligt, samla in relevanta dataexempel, upprätta en grundläggande snabbstruktur och skapa ett flöde som förbättrar dess funktioner.

  • Experimentering. Tillämpa flödet på exempeldata, utvärdera promptens prestanda och förfina flödet efter behov. Iterera kontinuerligt tills resultatet är uppfyllt.

  • Utvärdering och förfining. Prestandatesta flödets prestanda med hjälp av en större datamängd, utvärdera promptens effektivitet och gör förbättringar i enlighet med detta. Gå vidare till nästa steg om resultatet uppfyller de önskade standarderna.

  • Distribution. Optimera flödet för effektivitet och effektivitet, distribuera det i en produktionsmiljö, inklusive A/B-distribution, övervaka dess prestanda, samla in användarfeedback och använd den här informationen för att ytterligare förbättra flödet.

Genom att följa den här strukturerade metoden ger prompt flow dig möjlighet att utveckla, noggrant testa, finjustera och distribuera flöden, vilket leder till att robusta och sofistikerade AI-program skapas.

Mallen GenAIOps Prompt Flow formaliserar den här strukturerade metoden med hjälp av en kod-första metod och hjälper dig att skapa LLM-infunderade appar med hjälp av snabbflödesverktyg och process- och GenAIOps-flödesfunktioner. Den här mallen är tillgänglig på GenAIOps med mallen promptflöde.

GenAIOps-processflöde

Skärmbild av processen för GenAIOps-promptflöde.

  1. I initieringsfasen utvecklar du flöden, förbereder och kurerar data och uppdaterar GenAIOps-relaterade konfigurationsfiler.
  2. Efter lokal utveckling med hjälp av Visual Studio Code med tillägget Prompt Flow skapar du en pull-begäran (PR) från funktionsgrenen till utvecklingsgrenen, som kör byggvalideringspipelinen och experimenteringsflödena.
  3. PR godkänns manuellt och koden slås samman med utvecklingsgrenen.
  4. När PR har sammanfogats med utvecklingsgrenen körs pipelinen för kontinuerlig integrering (CI) för utvecklingsmiljön. CI-pipelinen kör både experimenterings- och utvärderingsflödena i följd och registrerar flödena i Azure Machine Learning Registry förutom andra steg i pipelinen.
  5. När CI-pipelinekörningen är klar kör en cd-utlösare (kontinuerlig distribution) CD-pipelinen, som distribuerar standardflödet från Azure Machine Learning Registry som en Azure Machine Learning-slutpunkt online. Pipelinen kör sedan integrerings- och röktester i det distribuerade flödet.
  6. En versionsgren skapas från utvecklingsgrenen, eller så höjs en PR från utvecklingsgrenen till versionsgrenen.
  7. PR godkänns manuellt och koden sammanfogas till versionsgrenen. När PR har sammanfogats till versionsgrenen körs CI-pipelinen för produktionsmiljön. Pipelinen kör både experimenterings- och utvärderingsflödena i följd och registrerar flödena i Azure Machine Learning Registry förutom andra steg i pipelinen.
  8. När CI-pipelinekörningen är klar kör en CD-utlösare CD-pipelinen som distribuerar standardflödet från Azure Machine Learning Registry som en Azure Machine Learning-slutpunkt online. Pipelinen kör sedan integrerings- och röktester i det distribuerade flödet.

Skapa ett GenAIOps-promptflöde

Resten av den här artikeln visar hur du använder GenAIOps med promptflöde genom att följa exemplet från slutpunkt till slutpunkt på lagringsplatsen GenAIOps med mallen Prompt Flow, som hjälper dig att skapa LLM-infunderade program med prompt flow och Azure DevOps. Det primära målet är att hjälpa till med utvecklingen av dessa program med hjälp av funktionerna i promptflöde och GenAIOps.

Förutsättningar

Kommentar

Om du använder Azure DevOps och Terraform för att starta infrastrukturen behöver du Terraform-tillägget för Azure DevOps installerat.

Konfigurera en promptflödesanslutning

Prompt Flow använder en anslutningsresurs för att ansluta till Azure OpenAI-, OpenAI- eller Azure AI Search-slutpunkter. Du kan skapa en anslutning via användargränssnittet för promptflödesportalen eller med hjälp av REST-API:et. Mer information finns i Anslutningar i promptflödet.

Om du vill skapa anslutningen följer du anvisningarna i Konfigurera anslutningar för prompt-flöde. Exempelflödena använder en anslutning med namnet aoai, så ge anslutningen det namnet.

Konfigurera en beräkningssession

Prompt flow använder en beräkningssession för att köra flödet. Skapa och starta beräkningssessionen innan du kör kommandotolken.

Konfigurera Lagringsplatsen för Azure Repos

Om du vill skapa en förgrenad lagringsplats i din Azure DevOps-organisation följer du anvisningarna i Konfigurera GitHub-lagringsplatsen. Den här lagringsplatsen använder två grenar och main development, för kodkampanjer och pipelinekörning.

Om du vill skapa en ny lokal lagringsplats följer du anvisningarna i Klona lagringsplatsen. Den här klonen hjälper dig att skapa en ny funktionsgren från utvecklingsgrenen och införliva ändringar.

Konfigurera ett Huvudnamn för Azure-tjänsten

Ett huvudnamn för Azure-tjänsten är en säkerhetsidentitet som program, tjänster och automatiseringsverktyg använder för att få åtkomst till Azure-resurser. Programmet eller tjänsten autentiserar med Azure för att få åtkomst till resurser åt dig.

Skapa ett huvudnamn för tjänsten genom att följa anvisningarna i Skapa ett Huvudnamn för Azure-tjänsten. Du använder tjänstens huvudnamn för att konfigurera Azure DevOps Services-anslutningen och för att tillåta att Azure DevOps Services autentiserar och ansluter till Azure-tjänster. Både kommandotolksexperimentet och utvärderingsjobben körs under identiteten för tjänstens huvudnamn.

Konfigurationen ger tjänstens huvudnamn ägarbehörighet så att CD-pipelinen automatiskt kan ge den nyligen etablerade Azure Machine Learning-slutpunkten åtkomst till Azure Machine Learning-arbetsytan för att läsa anslutningsinformation. Pipelinen lägger också till slutpunkten i nyckelvalvsprincipen som är associerad med Azure Machine Learning-arbetsytan med get och list hemliga behörigheter. Du kan ändra behörigheter för ägare till behörigheter på deltagarnivå genom att ändra YAML-koden för pipelinen för att ta bort steget som rör behörigheter.

Skapa ett nytt Azure DevOps-projekt

Om du vill skapa ett nytt projekt i Azure DevOps-användargränssnittet följer du anvisningarna i Skapa ett nytt Azure DevOps-projekt.

Konfigurera autentisering mellan Azure DevOps och Azure

Det här steget konfigurerar en ny Azure DevOps-tjänstanslutning som lagrar informationen om tjänstens huvudnamn. Projektpipelines kan läsa anslutningsinformationen med hjälp av anslutningsnamnet för att ansluta till Azure automatiskt. Om du vill använda tjänstens huvudnamn som du skapade för att konfigurera autentisering mellan Azure DevOps och Azure-tjänster följer du anvisningarna i Konfigurera autentisering med Azure och Azure DevOps.

Skapa en Azure DevOps-variabelgrupp

Om du vill skapa en ny variabelgrupp och lägga till en variabel som är relaterad till Azure DevOps-tjänstanslutningen följer du anvisningarna i Skapa en Azure DevOps-variabelgrupp. Tjänstens huvudnamn är sedan tillgängligt för pipelines automatiskt som en miljövariabel.

Konfigurera Azure Repos och Azure Pipelines

Exempellagringsplatsen använder två grenar, main och development, för kodkampanjer och pipelinekörning. Om du vill konfigurera egna lokala och fjärranslutna lagringsplatser för att använda kod från exempellagringsplatsen följer du anvisningarna i Konfigurera lokala lagringsplatser och fjärrlagringsplatser i Azure DevOps.

Du klonar både grenarna main och development från exempellagringsplatsen och associerar koden för att referera till den nya Azure Repos-lagringsplatsen. Både PR- och utvecklingspipelines konfigureras för att köras automatiskt baserat på utlösare för skapande och sammanslagning av PR.

Grenprincipen för grenen development har konfigurerats för att köra PR-pipelinen för alla PR som genereras på utvecklingsgrenen från en funktionsgren. Pipelinen dev körs när PR slås samman med utvecklingsgrenen och består av både CI- och CD-faser.

Människan i loopen implementeras också i pipelines. När CI-fasen i pipelinen dev har körts följer CD-fasen efter att manuellt godkännande har angetts i azure pipelines build-körningsgränssnittet.

Standardtiden för att vänta på godkännande är 60 minuter, varefter pipelinen avvisas och CD-fasen inte körs. Om du godkänner körningen manuellt körs CD-stegen i pipelinen.

Det manuella godkännandet i exempelpipelinen är konfigurerat för att skicka meddelanden till replace@youremail.com. Ersätt platshållaren med en lämplig e-postadress.

Testa pipelinen

Testa pipelines genom att följa anvisningarna i Testa pipelines. Den fullständiga processen omfattar följande steg:

  1. Du höjer en PR från en funktionsgren till utvecklingsgrenen.
  2. PR-pipelinen körs automatiskt på grund av konfigurationen av grenprincipen.
  3. PR slås samman med utvecklingsgrenen.
  4. Den associerade dev pipelinen körs, vilket resulterar i fullständig CI- och CD-körning och etablering eller uppdatering av Azure Machine Learning-slutpunkterna.

Utdata bör se ut ungefär som exemplen i Exempel på körning, utvärdering och distribution.

Använda lokal körning

Följ dessa steg om du vill använda lokala körningsfunktioner .

  1. Klona lagringsplatsen på följande sätt:

    git clone https://github.com/microsoft/genaiops-promptflow-template.git
    
  2. Skapa en .env-fil på den översta mappnivån. Lägg till rader för varje anslutning och uppdatera värdena för platshållarna. Exemplen i exempelrepo använder AzureOpenAI-anslutningen med namnet aoai och API-versionen 2024-02-01.

    aoai={ "api_key": "<api key>","api_base": "<api base or endpoint>","api_type": "azure","api_version": "2024-02-01"}
    <connection2>={ "api_key": "<api key>","api_base": "<api base or endpoint>","api_type": "<api type>","api_version": "<api_version>"}
    
  3. Förbered den lokala conda-miljön eller den virtuella miljön för att installera beroendena.

    python -m pip install promptflow promptflow-tools promptflow-sdk jinja2 promptflow[azure] openai promptflow-sdk[builtins] python-dotenv
    
  4. Ta med eller skriv dina flöden i mallen baserat på instruktioner i Så här registrerar du nya flöden.

  5. Skriv Python-skript i mappen local_execution som liknar de angivna exemplen.