LLMOps mit Prompt Flow und GitHub

Large Language Operations oder LLMOps ist zum Eckpfeiler für effizientes Prompt Engineering und LLM-basierte Anwendungsentwicklung und -bereitstellung geworden. Da die Nachfrage nach LLM-basierten Anwendungen weiter steigt, benötigen Organisationen einen einheitlichen und optimierten Prozess für die Verwaltung ihres End-to-End-Lebenszyklus.

Azure Machine Learning ermöglicht Ihnen die Integration mit GitHub, um den Lebenszyklus der LLM-basierten Anwendungsentwicklung mit Prompt Flow zu automatisieren.

Azure Machine Learning Prompt Flow bietet einen optimierten und strukturierten Ansatz für die Entwicklung von LLM-basierte 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.

Features von LLMOps Prompt Flow

LLMOps mit prompt flow ist eine Vorlage und eine Anleitung für LLMOps, die Ihnen beim Erstellen von LLM-basierten Apps mithilfe von prompt flow helfen. Er zeichnet sich durch Folgendes aus:

  • Zentralisiertes Codehosting: Dieses Repository unterstützt das Hosten von Code für mehrere Flows basierend auf prompt flow und stellt ein einzelnes Repository für alle Ihre Flows bereit. Stellen Sie sich diese Plattform als ein einzelnes Repository vor, in dem sich Ihr gesamter prompt flow-Code befindet. Es ist wie eine Bibliothek für Ihre Flows. So können Sie einfacher verschiedene Projekte durchsuchen, auf verschiedene Projekte zugreifen und an verschiedenen Projekten zusammenarbeiten.

  • Lebenszyklusverwaltung: Jeder Flow verfügt über einen eigenen Lebenszyklus und ermöglicht dadurch einen reibungslosen Übergang von lokalen Experimenten zur Produktionsbereitstellung. Screenshot of pipeline.

  • Experimentieren mit Varianten und Hyperparametern: Experimentieren Sie mit mehreren Varianten und Hyperparametern, um Flowvarianten mit Leichtigkeit zu bewerten. Varianten und Hyperparameter sind wie Zutaten in einem Rezept. Mit dieser Plattform können Sie mit verschiedenen Kombinationen von Varianten in mehreren Knoten in einem Flow experimentieren.

  • Mehrere Bereitstellungsziele: Das Repository unterstützt die Bereitstellung von Flows in Azure App Service, Kubernetes und verwalteten Azure-Computeressourcen durch Konfiguration, um sicherzustellen, dass Flows nach Bedarf skaliert werden können. Außerdem werden Docker-Images generiert, die mit der Flow-Runtime und Ihren Flows für die Bereitstellung auf beliebigen Zielplattformen und Betriebssystemen bereitgestellt werden, die Docker unterstützen. Screenshot of endpoints.

  • A/B-Bereitstellung: Implementieren Sie nahtlos A/B-Bereitstellungen, sodass Sie unterschiedliche Flowversionen mühelos vergleichen können. Genau wie bei herkömmlichen A/B-Tests für Websites erleichtert diese Plattform die A/B-Bereitstellung für prompt flow. Das bedeutet, dass Sie verschiedene Versionen eines Flows in einer realen Umgebung ganz einfach vergleichen können, um die Version mit der besten Leistung zu bestimmen. Screenshot of deployments.

  • m:n-Beziehungen zwischen Datasets/Flows: Verwenden Sie mehrere Datasets für jeden Standard- und Auswertungsflow, um Vielseitigkeit bei Flowtests und -auswertungen zu gewährleisten. Die Plattform ist so konzipiert, dass sie für jeden Flow mehrere Datasets aufnehmen kann.

  • Bedingte Daten- und Modellregistrierung: Die Plattform erstellt eine neue Version für Datasets in Azure Machine Learning Data Asset und Flows in der Modellregistrierung, nur wenn es eine Änderung gibt, andernfalls nicht.

  • Umfassende Berichte: Erstellen Sie detaillierte Berichte für jede Variantenkonfiguration, sodass Sie fundierte Entscheidungen treffen können. Bietet eine detaillierte Metriksammlung sowie Massenausführungen von Experimenten und Varianten, wodurch datengesteuerte Entscheidungen in CSV- und HTML-Dateien ermöglicht werden. Screenshot of flow variants report.Screenshot of metrics report.

Weitere Features zur Anpassung:

  • Bietet BYOF (Bring Your Own Flows). Eine vollständige Plattform für die Entwicklung mehrerer Anwendungsfälle im Zusammenhang mit LLM-basierten -Anwendungen.

  • Bietet konfigurationsbasierte Entwicklung. Es ist nicht erforderlich, umfangreiche Codebausteine zu schreiben.

  • Ermöglicht die Ausführung von Prompt-Experimenten und -Auswertungen lokal und in der Cloud.

  • Stellt Notebooks für die lokale Auswertung der Prompts bereit. Stellt eine Bibliothek mit Funktionen für lokale Experimente bereit.

  • Endpunkttests innerhalb der Pipeline nach der Bereitstellung, um die Verfügbarkeit und Bereitschaft zu überprüfen.

  • Ermöglicht optional menschliche Beteiligung (Human-in-the-Loop), um Prompt-Metriken vor der Bereitstellung zu überprüfen.

LLMOps mit prompt flow bietet Funktionen sowohl für einfache als auch für komplexe LLM-basierte Apps. Die Lösung lässt sich vollständig an die Anforderungen der Anwendung anpassen.

LLMOps-Phasen

Der 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 ein Flow wird zur Verbesserung der Funktionalität erstellt.

  • Experimentieren: In dieser Phase wird ein Flow zum Abfragen von 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 Optimierung: In dieser Phase wird die Promptleistung 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 LLMOps Prompt Flow formalisiert diese strukturierte Vorgehensweise mithilfe eines Code-First-Ansatzes und hilft Ihnen beim Erstellen LLM-basierter Apps mithilfe von Prompt Flow sowie Tools und Prozessen, die für Prompt Flow relevant sind. Sie bietet eine Reihe von Features wie zentrales Codehosting, Lebenszyklusverwaltung, Experimentieren mit Varianten und Hyperparametern, A/B-Bereitstellung, Berichterstellung für alle Ausführungen und Experimente und mehr.

Das Repository für diesen Artikel ist unter Vorlage für LLMOps mit Prompt Flow verfügbar.

LLMOps-Prozessflow

Screenshot of LLMOps prompt flow Process.

  1. Dies ist die Initialisierungsphase. In ihr werden Abläufe entwickelt, Daten aufbereitet und kuratiert sowie LLMOps-bezogene Konfigurationsdateien aktualisiert.
  2. Nach der lokalen Entwicklung mithilfe von Visual Studio Code mit der Prompt Flow-Erweiterung wird ein Pull Request vom Feature- zum Entwicklungsbranch ausgelöst. Dadurch wird die Überprüfungspipeline für den Build ausgeführt. Außerdem werden die Experimentierflows ausgeführt.
  3. Der PR wird manuell genehmigt, und der Code wird mit dem Entwicklungsbranch gemergt.
  4. Nachdem der PR mit dem Entwicklungsbranch gemergt wurde, wird die CI-Pipeline für die Entwicklungsumgebung ausgeführt. Sie führt die Experimentier- und Auswertungsflows nacheinander aus und registriert diese in der Azure Machine Learning-Registrierung neben anderen Schritten in der Pipeline.
  5. Nach Abschluss der CI-Pipelineausführung stellt ein CD-Trigger die Ausführung der CD-Pipeline sicher, die den Standardflow der Azure Machine Learning-Registrierung als einen Azure Machine Learning-Onlineendpunkt bereitstellt und Integrations- sowie Buildüberprüfungstests für den bereitgestellten Flow ausführt.
  6. Aus dem Entwicklungsbranch wird ein Releasebranch erstellt, oder es wird ein Pull Request vom Entwicklungs- zum Releasebranch ausgelöst.
  7. 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. Sie führt die Experimentier- und Auswertungsflows nacheinander aus und registriert diese in der Azure Machine Learning-Registrierung neben anderen Schritten in der Pipeline.
  8. Nach Abschluss der CI-Pipelineausführung stellt ein CD-Trigger die Ausführung der CD-Pipeline sicher, die den Standardflow der Azure Machine Learning-Registrierung als einen Azure Machine Learning-Onlineendpunkt bereitstellt und Integrations- sowie Buildüberprüfungstests für den bereitgestellten Flow ausführt.

Ab diesem Punkt können Sie mehr über LLMOps mit Prompt Flow erfahren, indem Sie die umfangreichen Beispiele befolgen, die Ihnen beim Erstellen LLM-basierter Anwendungen mithilfe von Prompt Flow und GitHub helfen. Das Hauptziel ist es, Unterstützung bei der Entwicklung derartiger Anwendungen zu bieten und dazu die Funktionen von prompt flow und LLMOps zu nutzen.

Tipp

Wir empfehlen Ihnen, zu verstehen, wie wir LLMOps in prompt flow integrieren.

Wichtig

Prompt-Flow ist aktuell als Public Preview verfügbar. Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und nicht für Produktionsworkloads empfohlen. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.

Voraussetzungen

  • Ein Azure-Abonnement. Wenn Sie nicht über ein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen. Probieren Sie die kostenlose oder kostenpflichtige Version von Azure Machine Learning aus.
  • Ein Azure Machine Learning-Arbeitsbereich.
  • Git wird auf Ihrem lokalen Computer ausgeführt.
  • GitHub als Repository für die Quellcodeverwaltung

Hinweis

Es wird mindestens die Git-Version 2.27 benötigt. Weitere Informationen zum Installieren des Git-Befehls finden Sie unter https://git-scm.com/downloads. Wählen Sie hier Ihr Betriebssystem aus.

Wichtig

Die CLI-Befehle in diesem Artikel wurden mithilfe von Bash getestet. Wenn Sie eine andere Shell verwenden, können Fehler auftreten.

Einrichten von Prompt Flow

Prompt Flow verwendet Verbindungsressourcen, um eine Verbindung zu Endpunkten wie Azure OpenAI, OpenAI oder Azure KI-Suche herzustellen. Zudem verwendet Prompt Flow die Runtime, um die Flows auszuführen. Diese Ressourcen sollten erstellt werden, bevor die Flows in Prompt Flow ausgeführt werden.

Einrichten von Verbindungen für prompt flow

Verbindungen können über die Benutzeroberfläche für das Prompt Flow-Portal oder mithilfe der REST-API erstellt werden. Befolgen Sie die Anleitung zum Herstellen von Verbindungen für Prompt Flow.

Klicken Sie auf den Link, um mehr über Verbindungen zu erfahren.

Hinweis

Die Beispielflows verwenden eine Verbinden mit dem Namen „aoai“, die erstellt werden sollte, um die Flows auszuführen.

Einrichten von Compute und Runtime für Prompt Flow

Die Runtime kann über die Benutzeroberfläche für das Prompt Flow-Portal oder mithilfe der REST-API erstellt werden. Befolgen Sie die Anleitung zum Einrichten von Compute und Runtime für Prompt Flow.

Klicken Sie auf den Link, um mehr über die Runtime zu erfahren.

Hinweis

In der Datei „LLMOps_config.json“, die weiter unten erläuterten wird, sollte derselbe Runtimename verwendet werden.

Einrichten des GitHub-Repositorys

Für die Einrichtung des LLMOps-Prozesses mit einem GitHub-Repository sollten mehrere Schritte durchgeführt werden.

Forken und Konfigurieren des Repositorys

Befolgen Sie die Anleitung zum Erstellen eines geforkten Repositorys in Ihrer GitHub-Organisation. Dieses Repository verwendet die beiden Branches main und development für Codeaktionen und die Ausführung von Pipelines anstelle von Änderungen am enthaltenen Code.

Einrichten der Authentifizierung zwischen GitHub und Azure

Befolgen Sie die Anleitung zum Verwenden des zuvor erstellten Dienstprinzipals sowie zum Einrichten der Authentifizierung zwischen dem GitHub-Repository und Azure-Diensten.

In diesem Schritt wird ein GitHub-Geheimnis konfiguriert, das die Informationen des Dienstprinzipals speichert. Die Workflows im Repository können die Verbindungsinformationen über den Geheimnisnamen lesen. Dadurch können Sie die Schritte für den GitHub-Workflow so konfigurieren, dass automatisch eine Verbindung mit Azure hergestellt wird.

Klonen des Repositorys

Befolgen Sie die Anleitung zum Erstellen eines neuen lokalen Repositorys.

Dies ermöglicht das Erstellen eines neuen Featurebranches aus dem Entwicklungsbranch sowie das Integrieren von Änderungen.

Testen der Pipelines

Befolgen Sie die Anleitung zum Testen der Pipelines. Führen Sie die folgenden Schritte durch:

  1. Lösen Sie einen PR (Pull Request) von einem Feature- zu einem Entwicklungsbranch aus.
  2. Die PR-Pipeline sollte durch die Konfiguration für die Branchrichtlinien automatisch ausgeführt werden.
  3. Der PR wird daraufhin mit dem Entwicklungsbranch gemergt.
  4. Die zugeordnete „dev“-Pipeline wird ausgeführt. Dies führt zur vollständigen CI- und CD-Ausführung sowie zur Bereitstellung oder Aktualisierung vorhandener Azure Machine Learning-Endpunkte.

Die Testausgaben sollten diesen ähneln.

Lokale Ausführung

Führen Sie die folgenden Installationsschritte aus, um die Funktionen der lokalen Ausführung zu nutzen:

  1. Klonen des Repositorys: Klonen Sie zunächst das Repository der Vorlage aus dem GitHub-Repository.
git clone https://github.com/microsoft/llmops-promptflow-template.git
  1. Einrichten der ENV-Datei: Erstellen Sie auf oberster Ordnerebene eine ENV-Datei, und geben Sie Informationen für die erwähnten Elemente an. Fügen Sie beliebig viele Verbindungsnamen hinzu. Alle Flowbeispiele in diesem Repository verwenden die AzureOpenAI-Verbindung mit dem Namen aoai. Fügen Sie die Zeile aoai={"api_key": "","api_base": "","api_type": "azure","api_version": "2023-03-15-preview"} mit den aktualisierten Werten für api_key und api_base hinzu. Wenn in Ihren Flows zusätzliche Verbindungen mit unterschiedlichen Namen verwendet werden, sollten diese entsprechend hinzugefügt werden. Derzeit wird der Flow mit AzureOpenAI als Anbieter unterstützt.

experiment_name=
connection_name_1={ "api_key": "","api_base": "","api_type": "azure","api_version": "2023-03-15-preview"}
connection_name_2={ "api_key": "","api_base": "","api_type": "azure","api_version": "2023-03-15-preview"}
  1. 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

  1. Importieren oder schreiben Sie Ihre Flows anhand dieser Dokumentation in die Vorlage.

  2. Schreiben Sie Python-Skripts, die den Beispielen im local_execution-Ordner ähneln.

Nächste Schritte