GenAIOps mit Prompt Flow und GitHub
Da die Nachfrage nach LLM-basierten Anwendungen weiter steigt, benötigen Organisationen einen einheitlichen und optimierten Prozess für die Verwaltung des End-to-End-Lebenszyklus dieser Apps. GenAIOps oder Generative Artificial Intelligence Operations (manchmal als LLMOps bezeichnet) ist ein Eckpfeiler für effizientes Prompt Engineering und die Entwicklung und Bereitstellung von LLM-basierten Anwendungen.
In diesem Artikel wird erläutert, wie Azure Machine Learning Ihnen die Integration mit GitHub ermöglicht, um den Entwicklungslebenszyklus von LLM-basierten Anwendungen mit Prompt Flow zu automatisieren. Prompt Flow bietet einen optimierten und strukturierten Ansatz für die Entwicklung von LLM-basierten Anwendungen. Der klar definierte Prozess und Lebenszyklus führt Sie durch den Prozess des Erstellens, Testens, Optimierens und Bereitstellens von Flows, an dessen Ende die Erstellung voll funktionsfähiger LLM-basierter Lösungen steht.
Prompt Flow-Features für GenAIOps
GenAIOps mit Prompt Flow nutzt eine Vorlage und einen Leitfaden für GenAIOps, um Ihnen beim Erstellen von LLM-basierten Apps mithilfe von Prompt Flow zu helfen. GenAIOps mit Prompt Flow verfügt über Funktionen für einfache oder komplexe LLM-basierte Apps und kann an die Anforderungen der Anwendung angepasst werden.
Die Plattform für GenAIOps mit Prompt Flow bietet die folgenden Features:
Zentralisiertes Codehosting. Das Repository unterstützt das Hosten von Code für mehrere Prompt Flows und stellt ein einzelnes Repository für alle Ihre Flows bereit. Es ist wie eine Bibliothek für Ihre Flows. So können Sie einfacher verschiedene Projekte durchsuchen, auf sie zugreifen und daran zusammenarbeiten.
Lebenszyklusverwaltung. Jeder Flow hat einen eigenen Lebenszyklus, der einen reibungslosen Übergang von lokalen Experimenten zur Produktionsbereitstellung ermöglicht.
Experimentieren mit Varianten und Hyperparametern. Varianten und Hyperparameter sind wie Zutaten in einem Rezept. Mit dieser Plattform können Sie in einem Flow mit verschiedenen Kombinationen von Varianten in mehreren Knoten experimentieren. Sie können mit mehreren Varianten und Hyperparametern experimentieren, um Flowvarianten einfach auszuwerten.
Mehrere Bereitstellungsziele. Die Plattform generiert Docker-Images, die mit Ihrem Flow und der Computesitzung für die Bereitstellung auf beliebigen Zielplattformen und Betriebssystemen bereitgestellt werden, die Docker unterstützen. Sie können Flows für Azure App Services, Kubernetes und verwaltete Azure-Computeressourcen bereitstellen und sie nach Bedarf für die Skalierung konfigurieren.
A/B-Bereitstellung. GenAIOps mit Prompt Flow implementiert nahtlos A/B-Bereitstellungen, sodass Sie verschiedene Flowversionen ganz einfach vergleichen können. Diese Plattform erleichtert die A/B-Bereitstellung für Prompt Flow so wie bei herkömmlichen A/B-Tests für Websites. Sie können verschiedene Versionen eines Flows in einer realen Umgebung ganz einfach vergleichen, um die Version mit der besten Leistung zu bestimmen.
m:n-Beziehungen zwischen Datasets/Flows. GenAIOps mit Prompt Flow verwendet mehrere Datasets für jeden Standard- und Auswertungsflow, um Flexibilität bei Flowtests und -auswertungen zu gewährleisten.
Bedingte Daten und Modellregistrierung. Die Plattform registriert eine neue Datasetversion für die Azure Machine Learning-Datenressource und Flows in der Modellregistrierung nur dann, wenn sich das Dataset ändert.
Umfassende Berichte. GenAIOps mit Prompt Flow erstellt detaillierte Berichte für jede Variantenkonfiguration, sodass Sie fundierte Entscheidungen treffen können. Die Plattform bietet eine detaillierte Metriksammlung sowie Massenausführungen von Experimenten und Varianten, wodurch datengesteuerte Entscheidungen in CSV- und HTML-Dateien ermöglicht werden.
GenAIOps mit Prompt Flow bietet die folgenden weiteren Features zur Anpassung:
- Bring-your-own-flows (BYOF) bietet eine vollständige Plattform für die Entwicklung mehrerer Anwendungsfälle im Zusammenhang mit LLM-basierten -Anwendungen.
- Konfigurationsbasierte Entwicklung bedeutet, dass es nicht erforderlich ist, umfangreiche Codebausteine zu schreiben.
- Experimentieren mit und Bewerten von Prompts wird sowohl lokal als auch in der Cloud ausgeführt.
- Notebooks für die lokale Promptauswertung bieten eine Bibliothek mit Funktionen für lokale Experimente.
- Endpunkttests innerhalb der Pipeline nach der Bereitstellung überprüfen die Verfügbarkeit und Bereitschaft von Endpunkten.
- Optionale menschliche Beteiligung (Human-in-the-Loop), um Prompt-Metriken vor der Bereitstellung zu überprüfen.
GenAIOps-Phasen
Der GenAIOps-Lebenszyklus umfasst vier verschiedene Phasen:
Initialisierung. In dieser Phase wird das Geschäftsziel eindeutig definiert, relevante Datenbeispiele werden erfasst, eine grundlegende Promptstruktur wird eingerichtet, und es wird ein Flow zur Verbesserung der Funktionalität erstellt.
Experimentieren. In dieser Phase wird ein Flow zum Erfassen von Stichproben aus den Daten angewendet, die Promptleistung wird bewertet und der Prompt bei Bedarf optimiert. Diese Schritte werden so lange durchlaufen, bis zufriedenstellende Ergebnisse erreicht werden.
Auswertung und Verfeinerung. In dieser Phase wird die Flowleistung mithilfe eines größeren Datasets gemessen, die Prompteffektivität ausgewertet und der Prompt entsprechend optimiert. Die nächste Phase wird eingeleitet, sobald die Ergebnisse den gewünschten Standards entsprechen.
Bereitstellung. In dieser Phase wird der Flow hinsichtlich seiner Effizienz und Effektivität optimiert, er wird in einer Produktionsumgebung einschließlich A/B-Bereitstellung bereitgestellt, seine Leistung wird überwacht, Benutzerfeedback wird gesammelt, und diese Informationen werden zur weiteren Verbesserung des Flows verwendet.
Durch die Einhaltung dieser strukturierten Vorgehensweise ermöglicht Prompt Flow ein sicheres Entwickeln sowie ein gründliches Testen, Optimieren und Bereitstellen von Flows, was zur Erstellung stabiler und ausgereifter KI-Anwendungen führt.
Die Vorlage für GenAIOps Prompt Flow formalisiert diese strukturierte Vorgehensweise mithilfe eines Code-First-Ansatzes und hilft Ihnen beim Erstellen LLM-basierter Apps mithilfe von Prompt Flow-Tools und -Prozessen sowie GenAIOps-Prompt Flow-Funktionen. Diese Vorlage ist unter Vorlage für GenAIOps mit Prompt Flow verfügbar.
GenAIOps-Prozessflow
- In der Initialisierungsphase entwickeln Sie Flows, bereiten Daten vor und stellen sie zusammen und aktualisieren GenAIOps-bezogene Konfigurationsdateien.
- Nach der lokalen Entwicklung mithilfe von Visual Studio Code mit der Prompt Flow-Erweiterung lösen Sie einen Pull Request (PR) vom Featurebranch in den Entwicklungsbranch aus, der die Buildüberprüfungspipeline und die Experimentierflows ausführt.
- Der PR wird manuell genehmigt, und der Code wird mit dem Entwicklungsbranch gemergt.
- Nachdem der PR mit dem Entwicklungsbranch zusammengeführt wurde, wird die CI-Pipeline (Continuous Integration) für die Entwicklungsumgebung ausgeführt. Die CI-Pipeline führt die Experimentier- und Auswertungsflows nacheinander aus und registriert diese in der Azure Machine Learning-Registrierung neben anderen Schritten in der Pipeline.
- Nach Abschluss der CI-Pipelineausführung führt ein CD-Trigger (Continuous Deployment) die CD-Pipeline aus, die den Standardflow aus der Azure Machine Learning-Registrierung als Azure Machine Learning-Onlineendpunkt bereitstellt. Die Pipeline führt dann Integrationstests und Feuerproben für den bereitgestellten Flow aus.
- Aus dem Entwicklungsbranch wird ein Releasebranch erstellt, oder es wird ein Pull Request vom Entwicklungs- zum Releasebranch ausgelöst.
- Der PR wird manuell genehmigt, und der Code wird mit dem Releasebranch gemergt. Nachdem der PR mit dem Releasebranch gemergt wurde, wird die CI-Pipeline für die Produktionsumgebung ausgeführt. Die Pipeline führt die Experimentier- und Auswertungsflows nacheinander aus und registriert diese in der Azure Machine Learning-Registrierung neben anderen Schritten in der Pipeline.
- Nach Abschluss der CI-Pipelineausführung führt ein CD-Trigger die CD-Pipeline aus, die den Standardflow aus der Azure Machine Learning-Registrierung als Azure Machine Learning-Onlineendpunkt bereitstellt. Die Pipeline führt dann Integrationstests und Feuerproben für den bereitgestellten Flow aus.
Erstellen eines GenAIOps-Prompt Flows
Der Rest dieses Artikels zeigt Ihnen, wie Sie GenAIOps mit Prompt Flow verwenden können, indem Sie das End-to-End-Beispiel im Repository zur Vorlage für GenAIOps mit Prompt Flow verwenden. Hiermit können Sie LLM-basierte Anwendungen mithilfe von Prompt Flow und GitHub erstellen. Das Hauptziel ist es, Unterstützung bei der Entwicklung derartiger Anwendungen zu bieten und dazu die Funktionen von Prompt Flow und GenAIOps zu nutzen.
Voraussetzungen
- Ein Azure-Abonnement mit einer kostenlosen oder kostenpflichtigen Version von Azure Machine Learning.
- Ein Azure Machine Learning-Arbeitsbereich.
- Git Version 2.27 oder neuer, das auf Ihrem lokalen Computer ausgeführt wird, mit der Möglichkeit, ein GitHub-Quellcodeverwaltungsrepository zu erstellen.
- Kenntnisse zum Integrieren von GenAIOps mit Prompt Flow.
Einrichten einer Prompt Flow-Verbindung
Prompt Flow verwendet eine Verbindungsressource, um eine Verbindung mit Azure OpenAI-, OpenAI- oder Azure KI-Suche-Endpunkten herzustellen. Sie können eine Verbindung über die Benutzeroberfläche des Prompt Flow-Portals oder mithilfe der REST-API erstellen. Weitere Informationen finden Sie unter Verbindungen in Prompt Flow.
Um die Verbindung zu erstellen, befolgen Sie die Anweisungen zum Einrichten von Verbindungen für Prompt Flow. Bei den Beispielflows wird eine Verbindung namens aoai
verwendet, weisen Sie daher Ihrer Verbindung diesen Namen zu.
Einrichten einer Computesitzung
Prompt Flow verwendet eine Computesitzung, um den Flow auszuführen. Erstellen und starten Sie die Computesitzung, bevor Sie den Prompt Flow ausführen.
Einrichten des GitHub-Repositorys
Um ein verzweigtes Repository in Ihrer GitHub-Organisation zu erstellen, befolgen Sie die Anweisungen zum Einrichten des GitHub-Repositorys. Dieses Repository verwendet zwei Branches, main
und development
, für Codehöherstufung und Pipelineausführung.
Um ein neues lokales Repository zu erstellen, folgen Sie den Anweisungen zum Klonen des Repositorys. Dieser Klon ermöglicht das Erstellen eines neuen Featurebranches aus dem Entwicklungsbranch sowie das Integrieren von Änderungen.
Einrichten der Authentifizierung zwischen GitHub und Azure
In diesem Schritt wird ein GitHub-Geheimnis konfiguriert, das die Informationen des Dienstprinzipals speichert. Um automatisch eine Verbindung mit Azure herzustellen, können die Workflows im Repository die Verbindungsinformationen über den Geheimnisnamen lesen. Weitere Informationen finden Sie unter Verwenden von GitHub Actions zum Herstellen einer Verbindung mit Azure.
- Erstellen Sie anhand der Anweisungen zum Erstellen eines Azure-Dienstprinzipals einen Dienstprinzipal.
- Verwenden Sie den Dienstprinzipal, um die Authentifizierung zwischen dem GitHub-Repository und Azure-Diensten einzurichten, indem Sie die Anweisungen zum Einrichten der Authentifizierung mit Azure und GitHub befolgen.
Testen der Pipeline
Um die Pipelines zu testen, befolgen Sie die Anweisungen zum Aktualisieren der Testdaten. Der vollständige Prozess beinhaltet die folgenden Schritte:
- Sie lösen einen PR (Pull Request) von einem Feature- zu einem Entwicklungsbranch aus.
- Die PR-Pipeline wird aufgrund der Branchrichtlinienkonfiguration automatisch ausgeführt.
- Der PR wird mit dem Entwicklungsbranch gemergt.
- Die zugeordnete
dev
-Pipeline wird ausgeführt. Dies führt zur vollständigen CI- und CD-Ausführung sowie zur Bereitstellung oder Aktualisierung der Azure Machine Learning-Endpunkte.
Die Ausgaben sollten ungefähr den Beispielen im Szenario zu Promptausführung, Auswertung und Bereitstellung entsprechen.
Verwenden der lokalen Ausführung
Führen Sie die folgenden Schritte aus, um lokale Ausführungsfunktionen zu verwenden.
Klonen Sie das Repository wie folgt:
git clone https://github.com/microsoft/genaiops-promptflow-template.git
Erstellen Sie eine .env-Datei auf oberster Ordnerebene. Fügen Sie Zeilen für jede Verbindung hinzu, und aktualisieren Sie die Werte für die Platzhalter. Die Beispiele im Beispiel-Repository verwenden die AzureOpenAI-Verbindung namens
aoai
und API-Version2024-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>"}
Bereiten Sie die lokale Conda-Umgebung oder die virtuelle Umgebung vor, um die Abhängigkeiten zu installieren.
python -m pip install promptflow promptflow-tools promptflow-sdk jinja2 promptflow[azure] openai promptflow-sdk[builtins] python-dotenv
Übernehmen oder schreiben Sie Ihre Flows in die Vorlage, basierend auf Anweisungen zum Onboarden von neuen Flows.
Schreiben Sie Python-Skripts im Ordner local_execution, die den bereitgestellten Beispielen ähneln.