GenAIOps met promptstroom en Azure DevOps
Naarmate de vraag naar LLM-toepassingen toestroomt, hebben organisaties een samenhangend en gestroomlijnd proces nodig om de end-to-end levenscyclus van deze apps te beheren. Ative Artificial Intelligence Operations (GenAIOps), ook wel LLMOps genoemd, is een hoeksteen van efficiënte prompt engineering en LLM-geïnfuseerde toepassingsontwikkeling en -implementatie.
In dit artikel wordt beschreven hoe u met Azure Machine Learning kunt integreren met Azure DevOps om de ontwikkelingslevenscyclus van llM-toepassingen te automatiseren met een promptstroom. Promptstroom biedt een gestroomlijnde en gestructureerde benadering voor het ontwikkelen van door LLM geïnfuseerde toepassingen. Het goed gedefinieerde proces en de levenscyclus begeleiden u bij het bouwen, testen, optimaliseren en implementeren van stromen, met als hoogtepunt het maken van volledig functionele LLM-oplossingen.
GenAIOps-promptstroomfuncties
GenAIOps met promptstroom maakt gebruik van een GenAIOps-sjabloon en richtlijnen om llm-apps te bouwen met behulp van promptstroom. GenAIOps met promptstroom heeft mogelijkheden voor eenvoudige of complexe LLM-apps en kan worden aangepast aan de behoeften van de toepassing.
Het GenAIOps met promptstroomplatform biedt de volgende functies:
Gecentraliseerde codehosting. De opslagplaats ondersteunt het hosten van code voor meerdere promptstromen, waardoor één opslagplaats voor al uw stromen wordt geboden. Deze opslagplaats is vergelijkbaar met een bibliotheek voor uw stromen, waardoor u eenvoudig verschillende projecten kunt vinden, openen en eraan kunt samenwerken.
Levenscyclusbeheer. Elke stroom heeft een eigen levenscyclus en biedt een soepele overgang van lokale experimenten naar productie-implementatie.
Variant- en hyperparameterexperimentatie. Varianten en hyperparameters zijn als ingrediënten in een recept. Met het platform kunt u experimenteren met verschillende combinaties van varianten op meerdere knooppunten in een stroom. U kunt experimenteren met meerdere varianten en hyperparameters om eenvoudig stroomvarianten te evalueren.
Meerdere implementatiedoelen. Het platform genereert Docker-installatiekopieën die zijn opgenomen in uw stroom en rekensessie voor implementatie naar elk doelplatform en besturingssysteem dat Docker ondersteunt. U kunt stromen implementeren in Azure-app Services, Kubernetes en Azure Managed Computes en deze zo configureren dat ze naar behoefte worden geschaald.
A/B-implementatie. GenAIOps met promptstroom implementeert naadloos A/B-implementaties, zodat u eenvoudig verschillende stroomversies kunt vergelijken. Dit platform faciliteert A/B-implementatie voor promptstroom op dezelfde manier als bij traditionele website A/B-tests. U kunt eenvoudig verschillende versies van een stroom vergelijken in een echte instelling om te bepalen welke versie het beste presteert.
Veel-op-veel-gegevensset voor stroomrelaties. GenAIOps met promptstroom is geschikt voor meerdere gegevenssets voor elke standaard- en evaluatiestroom, waardoor veelzijdigheid in stroomtests en -evaluatie mogelijk is.
Voorwaardelijke gegevens en modelregistratie. Het platform registreert alleen een nieuwe gegevenssetversie voor de Azure Machine Learning-gegevensasset en stromen in het modelregister wanneer er een wijziging in de gegevensset is.
Uitgebreide rapportage. GenAIOps met promptstroom genereert gedetailleerde rapporten voor elke variantconfiguratie, zodat u weloverwogen beslissingen kunt nemen. Het platform biedt gedetailleerde verzameling, experimenten en variant bulkuitvoeringen voor alle uitvoeringen en experimenten, waardoor gegevensgestuurde beslissingen mogelijk zijn voor zowel CSV- als HTML-bestanden.
GenAIOps met promptstroom biedt de volgende andere functies voor aanpassing:
- Bring-Your-Own-Flows (BYOF) biedt een volledig platform voor het ontwikkelen van meerdere gebruiksvoorbeelden met betrekking tot LLM-toepassingen.
- Ontwikkeling op basis van configuratie betekent dat u geen uitgebreide standaardcode hoeft te schrijven.
- Promptexperimentatie en evaluatie worden zowel lokaal als in de cloud uitgevoerd.
- Notebooks voor evaluatie van lokale prompts bieden een bibliotheek met functies voor lokale experimenten.
- Eindpunttests in de pijplijn na implementatie controleert de beschikbaarheid en gereedheid van eindpunten.
- Optionele human-in-loop valideert promptgegevens vóór de implementatie.
GenAIOps-fasen
De Levenscyclus van GenAIOps bestaat uit vier verschillende fasen:
Initialisatie. Definieer duidelijk het bedrijfsdoel, verzamel relevante gegevensvoorbeelden, stel een eenvoudige promptstructuur in en maak een stroom die de mogelijkheden verbetert.
Experimenten. Pas de stroom toe op voorbeeldgegevens, evalueer de prestaties van de prompt en verfijn de stroom indien nodig. Continu herhalen totdat u tevreden bent met de resultaten.
Evaluatie en verfijning. Benchmark de prestaties van de stroom met behulp van een grotere gegevensset, evalueer de effectiviteit van de prompt en verfijningen dienovereenkomstig. Ga verder met de volgende fase als de resultaten voldoen aan de gewenste standaarden.
Installatie. Optimaliseer de stroom voor efficiëntie en effectiviteit, implementeer deze in een productieomgeving, inclusief A/B-implementatie, bewaak de prestaties, verzamel feedback van gebruikers en gebruik deze informatie om de stroom verder te verbeteren.
Door aan deze gestructureerde methodologie te voldoen, kunt u met promptflow vol vertrouwen stromen ontwikkelen, grondig testen, verfijnen en implementeren, wat leidt tot het maken van robuuste en geavanceerde AI-toepassingen.
De GenAIOps Prompt Flow-sjabloon formaliseert deze gestructureerde methodologie met behulp van een code-first benadering en helpt u bij het bouwen van LLM-apps met behulp van promptstroomhulpprogramma's en proces- en GenAIOps-promptstroomfuncties. Deze sjabloon is beschikbaar bij GenAIOps met promptstroomsjabloon.
GenAIOps-processtroom
- In de initialisatiefase ontwikkelt u stromen, bereidt en cureert u gegevens en werkt u genAIOps-gerelateerde configuratiebestanden bij.
- Na de lokale ontwikkeling met behulp van Visual Studio Code met de promptstroomextensie genereert u een pull-aanvraag (PR) van de functievertakking naar de ontwikkelingsvertakking, waarmee de buildvalidatiepijplijn en de experimentenstromen worden uitgevoerd.
- De pull-aanvraag wordt handmatig goedgekeurd en code wordt samengevoegd met de ontwikkelingsbranch.
- Nadat de pull-aanvraag is samengevoegd met de ontwikkelingsbranch, wordt de CI-pijplijn (continue integratie) voor de ontwikkelomgeving uitgevoerd. De CI-pijplijn voert zowel de experimenten- als evaluatiestromen in volgorde uit en registreert de stromen in het Azure Machine Learning-register, afgezien van andere stappen in de pijplijn.
- Nadat de uitvoering van de CI-pijplijn is voltooid, voert een continue implementatietrigger (CD) de CD-pijplijn uit, waarmee de standaardstroom van Azure Machine Learning Registry wordt geïmplementeerd als een online-eindpunt van Azure Machine Learning. De pijplijn voert vervolgens integratie- en betrouwbaarheidstests uit op de geïmplementeerde stroom.
- Er wordt een releasebranch gemaakt op basis van de ontwikkelingsbranch of er wordt een pull-aanvraag van de ontwikkelingsbranch naar de releasebranch gegenereerd.
- De pull-aanvraag wordt handmatig goedgekeurd en code wordt samengevoegd met de releasebranch. Nadat de pull-aanvraag is samengevoegd met de releasebranch, wordt de CI-pijplijn voor de productieomgeving uitgevoerd. De pijplijn voert zowel de experimenten- als evaluatiestromen in volgorde uit en registreert de stromen in Azure Machine Learning Registry, afgezien van andere stappen in de pijplijn.
- Nadat de uitvoering van de CI-pijplijn is voltooid, voert een CD-trigger de CD-pijplijn uit, waarmee de standaardstroom van Azure Machine Learning Registry wordt geïmplementeerd als een online-eindpunt van Azure Machine Learning. De pijplijn voert vervolgens integratie- en betrouwbaarheidstests uit op de geïmplementeerde stroom.
Een GenAIOps-promptstroom maken
In de rest van dit artikel wordt beschreven hoe u GenAIOps gebruikt met een promptstroom door het end-to-end-voorbeeld in de GenAIOps te volgen met opslagplaats voor promptstroomsjablonen, waarmee u LLM-geïnfuseerde toepassingen kunt bouwen met behulp van promptstroom en Azure DevOps. Het belangrijkste doel is om hulp te bieden bij de ontwikkeling van deze toepassingen met behulp van de mogelijkheden van promptstroom en GenAIOps.
Vereisten
- Een Azure-abonnement met de gratis of betaalde versie van Azure Machine Learning.
- Een Azure Machine Learning-werkruimte.
- Git-versie 2.27 of hoger die wordt uitgevoerd op uw lokale computer.
- Een Azure DevOps-organisatie waar u een project, een opslagplaats voor broncodebeheer van Azure-opslagplaatsen en Azure Pipelines-pijplijnen kunt maken. Een Azure DevOps-organisatie helpt u samen te werken, uw werk, code en problemen bij te houden en CI en CD in te stellen.
- Een goed begrip van het integreren van GenAIOps met promptstroom.
Notitie
Als u Azure DevOps en Terraform gebruikt om een infrastructuur in te stellen, moet de Terraform-extensie voor Azure DevOps zijn geïnstalleerd.
Een promptstroomverbinding instellen
Promptstroom maakt gebruik van een verbindingsresource om verbinding te maken met Azure OpenAI-, OpenAI- of Azure AI Search-eindpunten. U kunt een verbinding maken via de gebruikersinterface van de promptstroomportal of met behulp van de REST API. Zie Verbindingen in promptstroom voor meer informatie.
Als u de verbinding wilt maken, volgt u de instructies bij Het instellen van verbindingen voor promptstroom. De voorbeeldstromen maken gebruik van een verbinding met de naam aoai
, dus geef uw verbinding die naam.
Een rekensessie instellen
Promptstroom maakt gebruik van een rekensessie om de stroom uit te voeren. Maak de rekensessie en start deze voordat u de promptstroom uitvoert.
De Opslagplaats voor Azure-opslagplaatsen instellen
Als u een vervalste opslagplaats wilt maken in uw Azure DevOps-organisatie, volgt u de instructies in De GitHub-opslagplaats instellen. Deze opslagplaats maakt gebruik van twee vertakkingen main
en development
voor codepromoties en uitvoering van pijplijnen.
Als u een nieuwe lokale opslagplaats wilt maken, volgt u de instructies in De opslagplaats klonen. Deze kloon helpt u bij het maken van een nieuwe functiebranch van de ontwikkelingsbranch en het opnemen van wijzigingen.
Een Azure-service-principal instellen
Een Azure-service-principal is een beveiligingsidentiteit die toepassingen, services en automatiseringshulpprogramma's gebruiken voor toegang tot Azure-resources. De toepassing of service verifieert zich met Azure om namens u toegang te krijgen tot resources.
Maak een service-principal door de instructies te volgen bij Een Azure-service-principal maken. U gebruikt deze service-principal om de Azure DevOps Services-verbinding te configureren en Azure DevOps Services toe te staan om Azure DevOps Services te verifiëren en verbinding te maken met Azure-services. Het promptstroomexperiment en de evaluatietaken worden beide uitgevoerd onder de identiteit van de service-principal.
De installatie biedt de service-principal eigenaarsmachtigingen, zodat de CD-pijplijn automatisch het zojuist ingerichte Azure Machine Learning-eindpunt toegang kan bieden tot de Azure Machine Learning-werkruimte voor het lezen van verbindingsgegevens. De pijplijn voegt ook het eindpunt toe aan het sleutelkluisbeleid dat is gekoppeld aan de Azure Machine Learning-werkruimte met get
en list
geheime machtigingen. U kunt de machtigingen van de eigenaar wijzigen in machtigingen op inzenderniveau door de YAML-code van de pijplijn te wijzigen om de stap met betrekking tot machtigingen te verwijderen.
Een nieuw Azure DevOps-project maken
Als u een nieuw project wilt maken in de Gebruikersinterface van Azure DevOps, volgt u de instructies in Een nieuw Azure DevOps-project maken.
Verificatie instellen tussen Azure DevOps en Azure
Met deze stap configureert u een nieuwe Azure DevOps-serviceverbinding waarin de gegevens van de service-principal worden opgeslagen. De projectpijplijnen kunnen de verbindingsgegevens lezen met behulp van de verbindingsnaam om automatisch verbinding te maken met Azure. Als u de service-principal wilt gebruiken die u hebt gemaakt voor het instellen van verificatie tussen Azure DevOps en Azure-services, volgt u de instructies bij Verificatie instellen met Azure en Azure DevOps.
Een Azure DevOps-variabelegroep maken
Als u een nieuwe variabelegroep wilt maken en een variabele wilt toevoegen die is gerelateerd aan de Azure DevOps-serviceverbinding, volgt u de instructies in Een Azure DevOps-variabelegroep maken. De naam van de service-principal is vervolgens automatisch beschikbaar voor de pijplijnen als een omgevingsvariabele.
Azure-opslagplaatsen en Azure-pijplijnen configureren
De voorbeeldopslagplaats maakt gebruik van twee vertakkingen main
en development
voor codepromoties en pijplijnuitvoering. Als u uw eigen lokale en externe opslagplaatsen wilt instellen voor het gebruik van code uit de voorbeeldopslagplaats, volgt u de instructies in Lokale en externe Azure DevOps-opslagplaatsen configureren.
U kloont zowel de main
als development
de vertakkingen uit de voorbeeldopslagplaats en koppelt de code om te verwijzen naar de nieuwe Opslagplaats voor Azure-opslagplaatsen. Zowel de pull-aanvragen als de ontwikkelingspijplijnen zijn geconfigureerd om automatisch uit te voeren op basis van pr-aanmaak- en samenvoegtriggers.
Het vertakkingsbeleid voor de development
vertakking is geconfigureerd om de PULL-pijplijn uit te voeren voor elke pull-aanvraag die wordt gegenereerd op de ontwikkelingsbranch vanuit een functiebranch. De dev
pijplijn wordt uitgevoerd wanneer de pull-aanvraag wordt samengevoegd met de ontwikkelingsbranch en bestaat uit zowel CI- als CD-fasen.
Human in the loop wordt ook geïmplementeerd in de pijplijnen. Nadat de CI-fase in de dev
pijplijn is uitgevoerd, volgt de CD-fase nadat handmatige goedkeuring is opgegeven in de gebruikersinterface voor builduitvoering van Azure Pipelines.
De standaardtijd voor goedkeuring is 60 minuten, waarna de pijplijn wordt geweigerd en de CD-fase niet wordt uitgevoerd. Handmatig goedkeuren van de uitvoering voert de CD-stappen van de pijplijn uit.
De handmatige goedkeuring in de voorbeeldpijplijn is geconfigureerd voor het verzenden van meldingen naar replace@youremail.com
. Vervang de tijdelijke aanduiding door een geschikt e-mailadres.
De pijplijn testen
Volg de instructies bij De pijplijnen testen om de pijplijnen te testen. Het volledige proces omvat de volgende stappen:
- U verhoogt een pull-aanvraag van een functiebranch naar de ontwikkelingsbranch.
- De PULL-pijplijn wordt automatisch uitgevoerd vanwege de configuratie van het vertakkingsbeleid.
- De pull-aanvraag wordt samengevoegd met de ontwikkelingsbranch.
- De bijbehorende
dev
pijplijn wordt uitgevoerd, wat resulteert in volledige CI- en CD-uitvoering en het inrichten of bijwerken van de Azure Machine Learning-eindpunten.
De uitvoer moet er ongeveer uitzien als in de voorbeelden van een voorbeeldpromptuitvoering, evaluatie- en implementatiescenario.
Lokale uitvoering gebruiken
Volg deze stappen om lokale uitvoeringsmogelijkheden te gebruiken.
Kloon de opslagplaats als volgt:
git clone https://github.com/microsoft/genaiops-promptflow-template.git
Maak een .env-bestand op het hoogste mapniveau. Voeg regels toe voor elke verbinding en werk de waarden voor de tijdelijke aanduidingen bij. In de voorbeelden in de voorbeeldopslagplaats wordt de AzureOpenAI-verbinding met de naam
aoai
en api-versie2024-02-01
gebruikt.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>"}
Bereid de lokale conda of virtuele omgeving voor om de afhankelijkheden te installeren.
python -m pip install promptflow promptflow-tools promptflow-sdk jinja2 promptflow[azure] openai promptflow-sdk[builtins] python-dotenv
Breng uw stromen naar de sjabloon of schrijf deze op basis van instructies voor het onboarden van nieuwe stromen.
Schrijf Python-scripts in de map local_execution vergelijkbaar met de opgegeven voorbeelden.