Freigeben über


Entwickeln eines Prompt Flows

PromptFflow ist ein Entwicklungstool zur Rationalisierung des gesamten Entwicklungszyklus von KI-Anwendungen auf der Grundlage von Large Language Models (LLMs). Da die Dynamik für LLM-basierte KI-Anwendungen weltweit weiter zunimmt, bietet Prompt Flow eine umfassende Lösung, die den Prozess des Prototyping, Experimentierens, der Iteration und des Einsatzes Ihrer KI-Anwendungen vereinfacht.

Mit Prompt Flow werden Sie in der Lage zu Folgendem sein:

  • Orchestrieren Sie ausführbare Abläufe mit LLMs, Prompts und Python-Tools über einen visualisierten Graphen.
  • Testen, debuggen und iterieren Sie Ihre Abläufe mit Leichtigkeit.
  • Erstellen Sie Prompt-Varianten und vergleichen Sie deren Leistung.

In diesem Artikel erfahren Sie, wie Sie Ihren ersten Prompt Flow in Ihrem Azure Machine Learning Studio erstellen und entwickeln.

Erstellen und entwickeln Sie Ihren Prompt Flow

Wählen Sie im Studio in der linken Navigationsleiste die Registerkarte Prompt Flow. Wählen Sie Erstellen, um Ihren ersten Prompt Flow zu erstellen. Sie können einen Flow erstellen, indem Sie entweder die in der Galerie verfügbaren Beispiele klonen oder einen Flow von Grund auf neu erstellen. Wenn Sie bereits Flow-Dateien lokal oder in einer Dateifreigabe gespeichert haben, können Sie die Dateien auch importieren, um einen Flow zu erstellen.

Screenshot der Erstellung eines Prompt Flows von Grund auf oder aus einem Katalog.

Gestaltung des Flows

Auf der linken Seite finden Sie eine vereinfachte Ansicht, den Standardarbeitsbereich, in dem Sie den Flow erstellen können, indem Sie z. B. Ihrem Flow Tools hinzufügen, den Prompt bearbeiten, die Floweingabedaten festlegen, Ihren Flow ausführen, die Ausgabe anzeigen usw.

Screenshot des Hauptarbeitsbereichs des Prompt Flow.

Oben rechts befindet sich die Ansicht der Flow-Dateien. Jeder Flow kann durch einen Ordner dargestellt werden, der eine Datei "flow.dag.yaml", Quellcodedateien und Systemordner enthält. Sie können neue Dateien hinzufügen, vorhandene Dateien bearbeiten und Dateien löschen. Sie können die Dateien auch in ein lokales Verzeichnis exportieren oder aus einem lokalen Verzeichnis importieren.

Zusätzlich zur Inlinebearbeitung des Knotens in der vereinfachten Ansicht können Sie auch den Umschalter Rohdatendateimodus aktivieren und den Dateinamen auswählen, um die Datei auf angezeigten Dateiregisterkarte zu bearbeiten.

Unten rechts befindet sich die Diagrammansicht, die nur zur Visualisierung dient. Sie zeigt die Flow-Struktur, die Sie entwickeln. Sie können sie vergrößern und verkleinern, ein automatisches Layout anwenden usw.

Hinweis

Sie können die Diagrammansicht nicht direkt bearbeiten, aber Sie können den Knoten auswählen, um die entsprechende Knotenkarte in der flachen Ansicht zu finden, und dann die Inline-Bearbeitung durchführen.

Computesitzung

Bevor Sie mit der Dokumenterstellung beginnen, sollten Sie zunächst eine Computesitzung starten. Die Computesitzung dient als Computeressource, die für die Ausführung des Prompt-Flows erforderlich ist. Dazu gehört ein Docker-Image, das alle erforderlichen Abhängigkeitspakete enthält. Sie ist für die Flowausführung unbedingt erforderlich.

Screenshot des Startens einer Computesitzung im Studio.

Flow-Eingang und -Ausgang

Flow-Input sind die Daten, die in den Flow als Ganzes eingehen. Definieren Sie das Eingabeschema, indem Sie den Namen und den Typ angeben. Stellen Sie den Eingangswert der einzelnen Eingänge ein, um den Flow zu testen. Sie können den Flow-Input später in den Flow-Knoten mit der Syntax ${input.[input name]} referenzieren.

Der Flow-Output ist die vom gesamten Flow erzeugten Daten, die die Ergebnisse der Flow-Ausführung zusammenfassen. Sie können die Ausgabetabelle nach Abschluss des Ablauf- oder Batchlaufs anzeigen und exportieren. Definieren Sie den Wert der Flow-Ausgabe, indem Sie mit der Syntax ${[node name].output} oder ${[node name].output.[field name]} auf die Ausgabe des einzelnen Flow-Knotens verweisen.

 Screenshot der Eingabe und Ausgabe für den Flows.

Entwickeln des Flows mit verschiedenen Tools

In einem Flow können Sie verschiedene Arten von Tools verwenden, z. B. LLM, Python, Serp API, Content Safety usw.

Wenn Sie ein Werkzeug auswählen, fügen Sie dem Flow einen neuen Knoten hinzu. Sie sollten den Knotennamen angeben und die erforderlichen Konfigurationen für den Knoten festlegen.

Für den LLM-Knoten müssen Sie beispielsweise eine Verbindung und eine Bereitstellung auswählen, die Eingabeaufforderung festlegen usw. Connection hilft bei der sicheren Speicherung und Verwaltung von geheimen Schlüsseln oder anderen sensiblen Anmeldeinformationen, die für die Interaktion mit Azure OpenAI erforderlich sind. Wenn Sie noch keine Verbindung haben, sollten Sie diese zuerst erstellen und sicherstellen, dass Ihre Azure OpenAI-Ressource über die Chat- oder Abschlussbereitstellungen verfügt. Das LLM- und Prompt-Tool unterstützt Sie bei der Verwendung von Jinja als Schablonensprache zur dynamischen Generierung des Prompts. Sie können zum Beispiel {{}} verwenden, um Ihren Eingabenamen anstelle von festem Text einzuschließen, so dass er spontan ersetzt werden kann.

Um das Python-Tool zu verwenden, müssen Sie das Python-Skript einstellen, den Eingabewert festlegen usw. Sie sollten eine Python-Funktion mit Eingängen und Ausgängen wie folgt definieren.

 Screenshot des Schreibens eines Python-Skripts für Python-Knoten.

Nachdem Sie die Eingabeaufforderung oder das Python-Skript verfasst haben, können Sie Eingabe validieren und parsen wählen, damit das System die Knoteneingabe auf der Grundlage der Eingabeaufforderungsvorlage und der Eingabe der Python-Funktion automatisch parst. Der Knoteneingangswert kann auf folgende Weise eingestellt werden:

  • Geben Sie den Wert direkt in das Eingabefeld ein
  • Verweis auf den Flow-Input mit der Syntax ${input.[input name]}
  • Verweis auf die Knotenausgabe mit der Syntax ${[node name].output} oder ${[node name].output.[field name]}

Indem Sie die Knotenausgabe referenzieren, können Sie Knoten miteinander verknüpfen. Sie können zum Beispiel die Ausgabe des LLM-Knotens in der Eingabe des Python-Knotens referenzieren, so dass der Python-Knoten die Ausgabe des LLM-Knotens konsumieren kann, und in der Diagrammansicht sehen Sie, dass die beiden Knoten miteinander verbunden sind.

Aktivieren Sie die bedingte Kontrolle über den Flow

Prompt Flow bietet nicht nur eine optimierte Methode zur Ausführung des Flows, sondern auch eine leistungsstarke Funktion für Entwickler – die bedingte Steuerung, mit der Benutzer Bedingungen für die Ausführung jedes Knotens in einem Ablauf festlegen können.

Im Kern bietet die bedingte Steuerung die Möglichkeit, jeden Knoten in einem Flow mit einer Aktivierungskonfiguration zu verknüpfen. Diese Konfiguration ist im Wesentlichen eine „wenn“-Anweisung, die bestimmt, wann ein Knoten ausgeführt werden soll. Die Leistungsfähigkeit dieser Funktion kommt zum Tragen, wenn Sie komplexe Abläufe haben, bei denen die Ausführung bestimmter Aufgaben vom Ergebnis vorheriger Aufgaben abhängt. Mit Hilfe der bedingten Steuerung können Sie Ihre spezifischen Knoten so konfigurieren, dass sie nur ausgeführt werden, wenn die angegebenen Bedingungen erfüllt sind.

Insbesondere können Sie die Aktivierungskonfiguration für einen Knoten festlegen, indem Sie die Schaltfläche Konfiguration aktivieren in der Knotenkarte auswählen. Sie können eine „wenn“-Anweisung hinzufügen und die Bedingung festlegen. Sie können die Bedingungen festlegen, indem Sie sich auf den Flow-Input oder den Knoten-Output beziehen. Sie können zum Beispiel die Bedingung ${input.[input name]} als bestimmten Wert oder ${[node name].output} als bestimmten Wert festlegen.

Wenn die Bedingung nicht erfüllt ist, wird der Knoten übersprungen. Der Status des Knotens wird als „Umgangen“ angezeigt.

Screenshot der Einstellung „Konfiguration aktivieren“, um die bedingte Steuerung zu aktivieren.

Testen des Flows

Sie können den Flow auf zwei Arten testen:

  • Sie führen einen einzelnen Knoten aus.
    • Um einen einzelnen Knoten auszuführen, wählen Sie das Symbol Ausführen auf dem Knoten in der flachen Ansicht. Sobald die Ausführung abgeschlossen ist, können Sie das Ergebnis schnell im Abschnitt mit der Knotenausgabe überprüfen.
  • Sie führen den gesamten Flow aus.
    • Um den gesamten Ablauf auszuführen, wählen Sie die Schaltfläche Ausführen oben rechts.

Testergebnis und Ablaufverfolgung anzeigen (Preview)

Bei der Ausführung des gesamten Flows wird nach dessen Ausführung den Ausführungsstatus im Ausführungsbanner angezeigt. Anschließend können Sie Ablaufverfolgung anzeigen auswählen, um das Ergebnis in der Ablaufverfolgung zu überprüfen und die Ausführung des Flows zu beobachten. Sie können hier die Eingabe und Ausgabe des gesamten Flows und die eines jeden Knoten sowie detailliertere Informationen zum Debuggen einsehen. Diese Option während der Ausführung und nach Abschluss der Ausführung verfügbar.

 Screenshot der Schaltfläche „Ausgabe anzeigen“ an zwei Speicherorten.

Grundlegendes zur Ablaufverfolgungsansicht

Die Ablaufverfolgung eines Prompt Flow wird als Flow bezeichnet. In der Ablaufverfolgungsansicht kann die klare Abfolge der für die Floworchestrierung verwendeten Tools beobachtet werden.

Jede Spanne (engl. span) der Ebene 2 unter dem Flowstamm stellt einen Knoten im Flow dar, der in Form eines Funktionsaufrufs ausgeführt wird. Daher wird diese Art von Spanne als Function bezeichnet. Sie können die Dauer der Ausführung der einzelnen Knoten in der Struktur der Spannen sehen.

In der Spannenstruktur sind LLM-Aufrufe leicht als LLM-Spanne identifizierbar. Diese enthalten Informationen zur Dauer des LLM-Aufrufs und der zugehörigen Tokenkosten.

Wenn Sie eine Spanne auswählen, werden die detaillierten Informationen auf der rechten Seite angezeigt. Dazu gehören Eingabe und Ausgabe, „Raw Json“ und „Exception“, die alle für das Beobachten und Debugging nützlich sind.  Screenshot der Ablaufverfolgungsdetails.

Hinweis

Im Prompt Flow-SDK wurden mehrere Typen von Spannen definiert, darunter LLM, Function, Embedding, Retrieval und Flow. Und das System erstellt automatisch Spannen mit Ausführungsinformationen in bestimmten Attributen und Ereignissen.

Weitere Informationen zu Bereichstypen finden Sie in der Spezifikation zu Ablaufverfolgungsbereichen.

Nachdem die Flowausführung abgeschlossen wurde, können Sie die Schaltfläche Testergebnisse anzeigen auswählen, um die Ergebnisse und alle historischen Ausführungsaufzeichnungen in einer Liste zu überprüfen. Standardmäßig werden die Ausführungsaufzeichnungen, die in den letzten sieben Tagen erstellt wurden, angezeigt. Sie können den Filter auswählen, um die Bedingung zu ändern.

Screenshot des Flowtestergebnisses.

Sie können auch den Namen der Ausführungsaufzeichnung auswählen, um die detaillierten Informationen in der Ablaufverfolgungsansicht anzuzeigen.

Entwickeln eines Chatflows

Der Chatflow wurde für die Entwicklung von Konversationsanwendungen entwickelt. Er basiert auf den Funktionen des Standardflows und bietet erweiterte Unterstützung für Chateingaben/-ausgaben und die Verwaltung des Chatverlaufs. Mit dem Chatflow können Sie ganz einfach einen Chatbot erstellen, der die Chateingabe und -ausgabe verarbeitet.

Auf der Erstellungsseite von Chatflows wird ein Chatflow mit der Bezeichnung „Chat“ gekennzeichnet, um ihn vom Standardflow und vom Auswertungsflow zu unterscheiden. Um den Chatflow zu testen, wählen Sie die Schaltfläche „Chatten“ aus, um ein Chatfeld für eine Unterhaltung anzuzeigen.

Screenshot der Seite „Chatflowerstellung“.

Chat-Eingabe/-Ausgabe und Chat-Verlauf

Die wichtigsten Elemente, die einen Chatablauf von einem Standardablauf unterscheiden, sind Chat-Eingabe, Chat-Verlauf und Chat-Ausgabe.

  • Chat-Eingabe: Die Chat-Eingabe bezieht sich auf die Nachrichten oder Anfragen, die von den Nutzern an den Chatbot übermittelt werden. Die effektive Verarbeitung von Chateingaben ist für eine erfolgreiche Unterhaltung von entscheidender Bedeutung, da sie das Verständnis der Benutzerabsichten, das Extrahieren relevanter Informationen und das Auslösen geeigneter Antworten umfasst.
  • Chat-Verlauf: Der Chatverlauf ist die Aufzeichnung aller Interaktionen zwischen dem Benutzer und dem Chatbot, einschließlich der Benutzereingaben und der von der KI erzeugten Ausgaben. Die Aufbewahrung des Chatverlaufs ist wichtig, um den Konversationskontext nachzuverfolgen und sicherzustellen, dass die KI kontextbezogene Antworten generieren kann.
  • Chat-Ausgabe: Die Chat-Ausgabe bezieht sich auf die von der KI generierten Nachrichten, die als Reaktion auf die Eingaben des Benutzers an diesen gesendet werden. Die Generierung kontextbezogener und ansprechender Chat-Ausgaben ist für ein positives Nutzererlebnis unerlässlich.

Ein Chatverlauf kann mehrere Eingaben haben, Chatverlauf und Chateingabe sind erforderlich im Chatverlauf.

  • Im Abschnitt Chat-Flow-Inputs kann ein Flow-Input als Chat-Input markiert werden. Dann können Sie den Chat-Eingabewert durch Eingabe in das Chat-Feld ausfüllen.

  • Prompt Flow kann dem Benutzer helfen, den Chatverlauf zu verwalten. Die chat_history im Abschnitt Eingaben ist für die Darstellung des Chatverlaufs reserviert. Alle Interaktionen in der Chatbox, einschließlich der Chat-Eingaben des Benutzers, der generierten Chat-Ausgaben und anderer Flow-Eingaben und -Ausgaben, werden automatisch im Chatverlauf gespeichert. Der Benutzer kann den Wert von chat_history im Bereich Eingänge nicht manuell einstellen. Die Struktur ist eine Liste von Ein- und Ausgaben:

    [
    {
        "inputs": {
        "<flow input 1>": "xxxxxxxxxxxxxxx",
        "<flow input 2>": "xxxxxxxxxxxxxxx",
        "<flow input N>""xxxxxxxxxxxxxxx"
        },
        "outputs": {
        "<flow output 1>": "xxxxxxxxxxxx",
        "<flow output 2>": "xxxxxxxxxxxxx",
        "<flow output M>": "xxxxxxxxxxxxx"
        }
    },
    {
        "inputs": {
        "<flow input 1>": "xxxxxxxxxxxxxxx",
        "<flow input 2>": "xxxxxxxxxxxxxxx",
        "<flow input N>""xxxxxxxxxxxxxxx"
        },
        "outputs": {
        "<flow output 1>": "xxxxxxxxxxxx",
        "<flow output 2>": "xxxxxxxxxxxxx",
        "<flow output M>": "xxxxxxxxxxxxx"
        }
    }
    ]
    

Hinweis

Die Möglichkeit, den Chatverlauf automatisch zu speichern oder zu verwalten, ist eine Funktion auf der Autorenseite, wenn Tests in der Chatbox durchgeführt werden. Bei Batchläufen müssen die Benutzer den Chatverlauf in den Datensatz des Batchlaufs aufnehmen. Wenn kein Chatverlauf zum Testen zur Verfügung steht, setzen Sie chat_history einfach auf eine leere Liste [] im Datensatz des Batchlaufs.

Autorenabfrage mit Chatverlauf

Die Einbeziehung des Chatverlaufs in Ihre Eingabeaufforderungen ist für die Erstellung kontextbezogener und ansprechender Chatbot-Antworten unerlässlich. In Ihren Eingabeaufforderungen können Sie auf chat_history verweisen, um vergangene Interaktionen abzurufen. Auf diese Weise können Sie auf vorherige Ein- und Ausgaben verweisen, um relevante kontextbezogene Antworten zu erstellen.

Verwenden Sie die For-Schleifen-Grammatik der Sprache Jinja, um eine Liste der Ein- und Ausgaben von chat_history anzuzeigen.

{% for item in chat_history %}
user:
{{item.inputs.question}}
assistant:
{{item.outputs.answer}}
{% endfor %}

Testen mit dem Chatfeld

Das Chatfeld bietet eine interaktive Möglichkeit, Ihren Chatflow zu testen, indem Sie eine Unterhaltung mit Ihrem Chatbot simulieren. Führen Sie die folgenden Schritte aus, um Ihren Chatflow mithilfe des Chatfelds zu testen:

  1. Wählen Sie die Schaltfläche Chatten aus, um das Chatfeld zu öffnen.
  2. Geben Sie Ihre Testeingaben in das Chatfeld ein und wählen Sie Eingabe, um sie an den Chatbot zu senden.
  3. Überprüfen Sie die Antworten des Chatbots, um sicherzustellen, dass sie kontextbezogen, angemessen und korrekt sind.
  4. Ablaufverfolgung anzeigen ermöglicht ein schnelles Beobachten und Debuggen.

 Screenshot der Chatflow-Chatfeldoberfläche.

Nächste Schritte