Integration von Prompt Flow mit DevOps für LLM-basierte Anwendungen
Der Prompt Flow von Azure Machine Learning ist eine entwicklerfreundliche und einfach zu verwendende Code-first-Methode zum Entwickeln und Durchlaufen von Flows für die Entwicklung von LLM-basierten Anwendungen (Large Language Model). Prompt Flow bietet ein SDK und eine CLI, eine Visual Studio Code-Erweiterung und eine Flowerstellungs-UI. Diese Tools erleichtern die lokale Flowentwicklung und -ausführung sowie das Auslösen von Auswertungsausführungen und die Umstellung von Flows zwischen lokalen und Cloud-Arbeitsbereichsumgebungen.
Sie können Prompt Flow-Funktionen und die Codefunktionen mit Entwicklervorgängen (Developer Operations, DevOps) kombinieren, um Ihre Entwicklungsworksflows für LLM-basierte Anwendungen zu verbessern. Dieser Artikel konzentriert sich auf die Integration von Prompt Flow und DevOps für LLM-basierte Azure Machine Learning-Anwendungen.
Das folgende Diagramm zeigt die Interaktion der lokalen und cloudbasierten Prompt Flow-Entwicklung mit DevOps.
Voraussetzungen
Ein Azure Machine Learning-Arbeitsbereich. Informationen zum Erstellen finden Sie unter Erstellen von Ressourcen, die Sie für die ersten Schritte benötigen.
Eine lokale Python-Umgebung mit dem installierten Azure Machine Learning Python SDK v2, erstellt gemäß den Anweisungen unter Erste Schritte.
Hinweis
Diese Umgebung ist von der Umgebung getrennt, die von der Computesitzung zum Ausführen des Flows verwendet wird. Diese definieren Sie als Teil des Flows. Weitere Informationen finden Sie unter Verwalten einer Promptflow-Computesitzung in Azure Machine Learning Studio.
Installation von Visual Studio Code mit den Erweiterungen für Python und Prompt Flow.
Verwenden einer „Code-first“-Erfahrung im Prompt Flow
Die Entwicklung von LLM-basierten Anwendungen folgt in der Regel einem standardisierten Anwendungsentwicklungsprozess, der Quellcoderepositorys und CI/CD-Pipelines (Continuous Integration/Continuous Deployment) umfasst. Dieser Prozess ermöglicht eine optimierte Entwicklung, Versionskontrolle und Zusammenarbeit zwischen Teammitgliedern.
Die Integration von DevOps in die Prompt Flow-Codeumgebung bietet Codeentwicklern einen effizienteren GenAIOps- oder LLMOps-Iterationsprozess mit den folgenden wichtigen Features und Vorteilen:
Flowversionsverwaltung im Coderepository. Sie können Flowdateien im YAML-Format definieren, und sie bleiben mit den Quelldateien, auf die verwiesen wird, in einer Ordnerstruktur ausgerichtet.
Integrieren der Flowausführung in die CI/CD-Pipelines. Sie können Prompt Flow nahtlos in Ihre CI/CD-Pipeline und Ihren Übermittlungsprozess integrieren, indem Sie die Prompt Flow-CLI oder das SDK verwenden, um automatisch Flowausführungen auszulösen.
Reibungsloser Übergang zwischen lokaler Umgebung und der Cloud. Sie können Ihren Flowordner für die Versionskontrolle, lokale Entwicklung und Freigabe ganz einfach in Ihr lokales oder Upstream-Cloudrepository exportieren. Sie können den Flowordner auch für weitere Erstellungs-, Test- und Bereitstellungsschritte mit Cloud-Ressourcen mühelos wieder in Azure Machine Learning importieren.
Zugriff auf Prompt Flow-Code
Jeder Prompt Flow verfügt über eine Flowordnerstruktur mit wesentlichen Codedateien, die den Flow definieren. Diese Ordnerstruktur organisiert Ihren Flow und ermöglicht reibungslosere Übergänge zwischen der lokalen Umgebung und der Cloud.
Azure Machine Learning bietet ein freigegebenes Dateisystem für alle Arbeitsbereichsbenutzer. Beim Erstellen eines Flows wird automatisch ein entsprechender Flowordner generiert und im Verzeichnis Users/<Benutzername>/Promptflow gespeichert.
Arbeiten mit Flowcodedateien
Nachdem Sie einen Flow in Azure Machine Learning Studio erstellt haben, können Sie die Flowdateien im Abschnitt Dateien der Flowerstellungsseite anzeigen, bearbeiten und verwalten. Alle an den Dateien vorgenommenen Änderungen werden direkt im Dateifreigabespeicher wiedergegeben.
Der Flowordner für einen LLM-basierten Flow enthält die folgenden Schlüsseldateien.
flow.dag.yaml ist die primäre Flowdefinitionsdatei im YAML-Format. Diese Datei ist für die Erstellung und Definition des Prompt Flows von wesentlicher Bedeutung. Die Datei enthält Informationen zu Eingaben, Ausgaben, Knoten, Tools und Varianten, die der Flow verwendet.
Vom Benutzer verwaltete Quellcodedateien im Python- (.py) oder Jinja 2-Format (.jinja2) konfigurieren die Tools und Knoten im Flow. Das Python-Tool verwendet Python-Dateien, um benutzerdefinierte Python-Logik zu definieren. Das Prompttool und das LLM-Tool verwenden Jinja 2-Dateien, um den Promptkontext zu definieren.
Nicht-Ressourcendateien wie Hilfsprogramm- und Datendateien können zusammen mit den Quelldateien in den Flowordner aufgenommen werden.
Um den unformatierten Code der Datei flow.dag.yaml und der Quelldateien im Datei-Editor anzuzeigen und zu bearbeiten, aktivieren Sie Rohdateimodus.
Alternativ können Sie auf alle Flowordner und Dateien über die Seite Notebooks in Azure Machine Learning Studio zugreifen und diese bearbeiten.
Herunterladen und Einchecken des Prompt Flow-Codes
Um den Flow in Ihr Coderepository einzuchecken, exportieren Sie den Flowordner aus Azure Machine Learning Studio auf Ihren lokalen Computer. Wählen Sie im Abschnitt Dateien der Flowerstellungsseite das Downloadsymbol aus, um ein ZIP-Paket mit allen Flowdateien herunterzuladen. Anschließend können Sie diese Datei in Ihr Coderepository einchecken oder sie entpacken, um mit den Dateien lokal zu arbeiten.
Weitere Informationen zur DevOps-Integration in Azure Machine Learning finden Sie unter Git-Integration für Azure Machine Learning.
Lokales Entwickeln und Testen
Wenn Sie während der iterativen Entwicklung Ihre Flows oder Prompts verfeinern und feinabstimmen, können Sie mehrere Iterationen lokal in Ihrem Coderepository durchführen. Die Communityversion von VS Code, die VS Code-Erweiterung für Prompt Flow und das lokale SDK und die lokale CLI für Prompt Flow erleichtern die rein lokale Entwicklung und das Testen ohne Azure-Bindung.
Durch das lokale Arbeiten können Sie Änderungen schnell vornehmen und testen, ohne jedes Mal das Hauptcoderepository aktualisieren zu müssen. Weitere Details und Anleitungen zur Verwendung der lokalen Versionen finden Sie in der GitHub-Community zu Prompt Flow.
Verwenden der VS Code-Erweiterung für Prompt Flow
Wenn Sie die VS Code-Erweiterung für Prompt Flow installiert haben, können Sie Ihren Flow ganz einfach lokal im VS Code-Editor erstellen und so eine ähnliche Benutzeroberfläche wie in der Cloud nutzen.
So bearbeiten Sie Dateien lokal in VS Code mit der Prompt Flow-Erweiterung:
Öffnen Sie in VS Code mit aktivierter Prompt Flow-Erweiterung einen Prompt Flow-Ordner.
Öffnen Sie die Datei flow.dag.yaml, und wählen Sie den Link Visueller Editor oben in der Datei aus.
Verwenden Sie den visuellen Prompt Flow-Editor, um Änderungen an Ihrem Flow vorzunehmen, z. B. Optimieren der Prompts in Varianten oder Hinzufügen weiterer Knoten.
Um Ihren Flow zu testen, wählen Sie oben im visuellen Editor das Symbol Ausführen aus. Wählen Sie zum Testen eines beliebigen Knotens das Symbol Ausführen am oberen Rand des Knotens aus.
Verwenden des SDK und der CLI für Prompt Flow
Wenn Sie es vorziehen, direkt im Code zu arbeiten, oder Jupyter, PyCharm, Visual Studio oder eine andere integrierte Entwicklungsumgebung (Integrated Development Environment, IDE) verwenden, können Sie den YAML-Code direkt in der Datei flow.dag.yaml ändern.
Anschließend können Sie eine einzelne Flowausführung zum Testen auslösen, indem Sie die CLI oder das SDK für Prompt Flow im Terminal wie folgt verwenden.
Führen Sie den folgenden Code aus, um eine Ausführung aus dem Arbeitsverzeichnis auszulösen:
pf flow test --flow <directory-name>
Die Rückgabewerte sind die Testprotokolle und -ausgaben.
Übermitteln von Ausführungen aus einem lokalen Repository an die Cloud
Sobald Sie mit den Ergebnissen Ihrer lokalen Tests zufrieden sind, können Sie die CLI oder das SDK für Prompt Flow verwenden, um Ausführungen aus dem lokalen Repository an die Cloud zu übermitteln. Das folgende Verfahren und der Code basieren auf dem Webklassifizierungs-Demoprojekt in GitHub. Sie können das Projektrepository klonen oder den Prompt Flow-Code auf Ihren lokalen Computer herunterladen.
Installieren des Prompt Flow-SDK
Installieren Sie das Azure-SDK/die CLI für Prompt Flow, indem Sie pip install promptflow[azure] promptflow-tools
ausführen.
Wenn Sie das Demoprojekt verwenden, rufen Sie das SDK und andere erforderliche Pakete ab durch Installieren von requirements.txt mitpip install -r <path>/requirements.txt
.
Herstellen einer Verbindung mit Ihrem Azure Machine Learning-Arbeitsbereich
Hochladen des Flows und Erstellen einer Ausführung
Bereiten Sie die Datei run.yml vor, um die Konfiguration für diese Flowausführung in der Cloud zu definieren.
$schema: https://azuremlschemas.azureedge.net/promptflow/latest/Run.schema.json
flow: <path-to-flow>
data: <path-to-flow>/<data-file>.jsonl
column_mapping:
url: ${data.url}
# Define cloud compute resource
resources:
instance_type: <compute-type>
# If using compute instance compute type, also specify instance name
# compute: <compute-instance-name>
# Specify connections
<node-name>:
connection: <connection-name>
deployment_name: <deployment-name>
Sie können den Verbindungs- und Bereitstellungsnamen für jedes Tool im Flow angeben, das eine Verbindung benötigt. Wenn Sie den Verbindungs- und Bereitstellungsnamen nicht angeben, verwendet das Tool die Verbindung und Bereitstellung in der Datei flow.dag.yaml. Verwenden Sie den folgenden Code zum Formatieren von Verbindungen:
...
connections:
<node-name>:
connection: <connection-name>
deployment_name: <deployment-name>
...
Erstellen Sie die Ausführung.
pfazure run create --file run.yml
Erstellen einer Flowausführung zur Auswertung
Bereiten Sie die Datei run_evaluation.yml vor, um die Konfiguration für diese Auswertungsflowausführung in der Cloud zu definieren.
$schema: https://azuremlschemas.azureedge.net/promptflow/latest/Run.schema.json
flow: <path-to-flow>
data: <path-to-flow>/<data-file>.jsonl
run: <id-of-base-flow-run>
column_mapping:
<input-name>: ${data.<column-from-test-dataset>}
<input-name>: ${run.outputs.<column-from-run-output>}
resources:
instance_type: <compute-type>
compute: <compute_instance_name>
connections:
<node-name>:
connection: <connection-name>
deployment_name: <deployment-name>
<node-name>:
connection: <connection-name>
deployment_name: <deployment-name>
Erstellen Sie die Auswertungsausführung.
pfazure run create --file run_evaluation.yml
Anzeigen von Ausführungsergebnissen
Das Übermitteln des Ablaufs an die Cloud gibt die Cloud-URL der Ausführung zurück. Sie können die URL öffnen, um die Ausführungsergebnisse in Azure Machine Learning Studio anzuzeigen. Sie können auch die folgenden CLI- oder SDK-Befehle ausführen, um die Ausführungsergebnisse anzuzeigen.
Streamen der Protokolle
pfazure run stream --name <run-name>
Anzeigen von Ausführungsausgaben
pfazure run show-details --name <run-name>
Anzeigen der Ergebnisse der Auswertungsausführung
pfazure run show-metrics --name <evaluation-run-name>
Integrieren in DevOps
Eine Kombination aus einer lokalen Entwicklungsumgebung und einem Versionssteuerungssystem wie Git ist in der Regel für die iterative Entwicklung am effektivsten. Sie können Änderungen vornehmen und Ihren Code lokal testen und dann die Änderungen an Git übernehmen. Durch diesen Prozess wird ein fortlaufender Datensatz Ihrer Änderungen erstellt, und er bietet die Möglichkeit, bei Bedarf eine frühere Version wiederherzustellen.
Wenn die Freigabe von Flows in verschiedenen Umgebungen erforderlich ist, können Sie sie per Push an ein cloudbasiertes Coderepository wie GitHub oder Azure Repos senden. Auf diese Weise können Sie von jedem Ort aus auf die neueste Version Ihres Codes zugreifen, und es stehen Tools für die Zusammenarbeit und die Codeverwaltung zur Verfügung.
Durch die Befolgung dieser Verfahren können Teams eine nahtlose, effiziente und produktive Zusammenarbeitsumgebung für die Prompt Flow-Entwicklung schaffen.
Ein Beispiel für End-to-End-MLOps-Pipelines, die Webklassifizierungs-Flows ausführen, finden Sie unter Einrichten von End-to-End-GenAIOps mit Prompt Flow und GitHub und im GitHub-Demoprojekt zur Webklassifikation.
Auslösen von Flowausführungen in CI-Pipelines
Nachdem Sie Ihren Flow erfolgreich entwickelt und getestet und als erste Version eingecheckt haben, sind Sie bereit für die Optimierungs- und Testiterationen. In dieser Phase können Sie mithilfe der Prompt Flow-CLI Flows, einschließlich Batchtests und Evaluierungsausführungen, auslösen, um Schritte in Ihrer CI-Pipeline zu automatisieren.
Während des gesamten Lebenszyklus Ihrer Flowiterationen können Sie die CLI verwenden, um die folgenden Vorgänge zu automatisieren:
- Prompt Flow nach einem Pull Request ausführen
- Ausführen einer Promptflowauswertung, um hochwertige Ergebnisse sicherzustellen
- Registrieren von Promptflowmodellen
- Bereitstellen von Promptflowmodellen
Verwenden der Studio-Benutzeroberfläche für die fortlaufende Entwicklung
An jedem Punkt der Flowentwicklung können Sie zur Benutzeroberfläche von Azure Machine Learning Studio zurückkehren und Cloudressourcen und -erfahrungen verwenden, um Änderungen an Ihrem Flow vorzunehmen.
Um weiter zu entwickeln und mit den aktuellen Versionen der Flowdateien zu arbeiten, können Sie auf ein Terminal auf der Seite Notebook zugreifen und die neuesten Flowdateien aus Ihrem Repository abrufen. Oder Sie können einen lokalen Flowordner direkt als neuen Entwurfsflow importieren, um nahtlos zwischen lokaler und Cloudentwicklung zu wechseln.
Stellen Sie den Flow als Online-Endpunkt bereit
Der letzte Schritt für die Produktion besteht darin, Ihren Flow als Onlineendpunkt in Azure Machine Learning bereitzustellen. Dadurch können Sie Ihren Flow in Ihre Anwendung integrieren und für die Verwendung zur Verfügung stellen. Weitere Informationen zum Bereitstellen Ihres Flows finden Sie unter Bereitstellen eines Flows für einen Onlineendpunkt für Rückschlüsse in Echtzeit mit der CLI.
Zusammenarbeit bei der Flowentwicklung
Die Zusammenarbeit zwischen den Teammitgliedern kann bei der Entwicklung einer LLM-basierten Anwendung mit Prompt Flow äußerst wichtig sein. Teammitglieder können an der Erstellung und dem Testen desselben Flows arbeiten, an verschiedenen Details des Flows arbeiten oder gleichzeitig iterative Änderungen und Verbesserungen vornehmen. Diese Zusammenarbeit erfordert einen effizienten und optimierten Ansatz für die Freigabe von Code, das Nachverfolgen von Änderungen, das Verwalten von Versionen und die Integration von Änderungen in das endgültige Projekt.
Das SDK/die CLI für Prompt Flow und die VS Code-Erweiterung für Prompt Flow erleichtern die Zusammenarbeit bei der codebasierten Flowentwicklung innerhalb eines Quellcoderepositorys. Sie können ein cloudbasiertes Quellcodeverwaltungssystem wie GitHub oder Azure Repos verwenden, um Änderungen nachzuverfolgen, Versionen zu verwalten und diese Änderungen in das endgültige Projekt zu integrieren.
Befolgen von bewährte Methoden für die gemeinsame Entwicklung
Richten Sie ein zentrales Coderepository ein.
Der erste Schritt dieses kollaborativen Prozesses besteht in der Einrichtung eines Coderepositorys als Basis für den Projektcode, einschließlich des Prompt Flow-Codes. Dieses zentrale Repository ermöglicht eine effiziente Organisation, die Änderungsnachverfolgung und die Zusammenarbeit zwischen Teammitgliedern.
Erstellen Sei Ihren Flow lokal in VS Code mit der Prompt Flow-Erweiterung, und führen Sie einen einzelnen Test aus.
Nachdem das Repository eingerichtet wurde, können Teammitglieder VS Code mit der Prompt Flow-Erweiterung für die lokale Erstellung und einzelne Eingabetests des Flows nutzen. Diese standardisierte integrierte Entwicklungsumgebung fördert die Zusammenarbeit zwischen mehreren Mitgliedern, die an verschiedenen Aspekten des Flows arbeiten.
Verwenden Sie die
pfazure
-CLI oder das SDK, um Batchausführungen und Auswertungsausführungen von lokalen Flows an die Cloud zu übermitteln.Nach dem lokalen Entwickeln und Testen können Teammitglieder die CLI/das SDK für Prompt Flow verwenden, um Batch- und Auswertungsausführungen an die Cloud zu übermitteln und auszuwerten. Dieser Prozess ermöglicht Cloud-Computenutzung, beständigen Ergebnisspeicher, Endpunkterstellung für Bereitstellungen und effiziente Verwaltung in der Studio-Benutzeroberfläche.
Zeigen Sie die Ausführungsergebnisse in der Benutzeroberfläche des Azure Machine Learning Studio-Arbeitsbereichs an, und verwalten Sie sie.
Nach der Übermittlung von Ausführungen an die Cloud können die Teammitglieder auf die Studio-Benutzeroberfläche zugreifen, um die Ergebnisse anzuzeigen und die Experimente effizient zu verwalten. Dieser Cloudarbeitsbereich bietet einen zentralen Ort zum Sammeln und Verwalten aller Ausführungsverlaufsprotokolle, Protokolle, Momentaufnahmen, umfassender Ergebnisse sowie der Eingaben und Ausgaben auf Instanzebene.
In der Liste Ausführungen, in der alle Ausführungsverläufe aufgezeichnet werden, können Sie die Ergebnisse verschiedener Ausführungen problemlos vergleichen, wodurch die Qualitätsanalyse und notwendige Anpassungen erleichtert werden.
Verwenden Sie weiterhin die lokale iterative Entwicklung.
Nach der Analyse der Ergebnisse von Experimenten können Teammitglieder zur weiteren Entwicklung und Feinabstimmung zur lokalen Umgebung und zum Coderepository zurückkehren und anschließende Ausführungen iterativ an die Cloud übermitteln. Dieser iterative Ansatz sorgt für eine konsistente Verbesserung, bis das Team mit der Qualität für die Produktion zufrieden ist.
Verwenden Sie die Bereitstellung für die Produktion in einem Schritt in Studio.
Sobald das Team mit der Qualität des Flows vollständig zufrieden ist, kann er nahtlos als Onlineendpunkt in einer robusten Cloudumgebung bereitgestellt werden. Diese Bereitstellung als Onlineendpunkt kann auf einer Momentaufnahme der Ausführung basieren, sodass stabile und sichere Bereitstellung, weitere Ressourcenzuweisungen und Nutzungsnachverfolgung sowie Protokollüberwachung in der Cloud möglich sind.
Der Azure Machine Learning Studio-Assistent Bereitstellen hilft Ihnen, Ihre Bereitstellung auf einfache Weise zu konfigurieren.