Erste Schritte mit DAG-Flow#
Voraussetzung – Um das Beste aus diesem Tutorial herauszuholen, benötigen Sie
Ein lokaler Klon des Prompt Flow-Repositorys
Eine Python-Umgebung mit Jupyter Notebook-Unterstützung (z. B. Jupyter Lab oder die Python-Erweiterung für Visual Studio Code)
Programmieren Sie mit Python :)
Grundkenntnisse im Bereich maschinelles Lernen können von Vorteil sein, sind aber nicht zwingend erforderlich.
Lernziele - Nach Abschluss dieses Tutorials sollten Sie in der Lage sein:
Führen Sie Ihr erstes Prompt Flow-Beispiel aus
Führen Sie Ihre erste Evaluierung aus
Das in diesem Tutorial verwendete Beispiel ist der web-classification Flow, der URLs in mehrere vordefinierte Klassen kategorisiert. Klassifizierung ist eine traditionelle Aufgabe des maschinellen Lernens, und dieses Beispiel zeigt, wie Klassifizierung mithilfe von GPT und Prompts durchgeführt wird.
0. Abhängige Pakete installieren#
%pip install -r ../../requirements.txt
1. Notwendige Verbindungen erstellen#
Verbindungen helfen bei der sicheren Speicherung und Verwaltung von geheimen Schlüsseln oder anderen sensiblen Anmeldeinformationen, die für die Interaktion mit LLMs und anderen externen Tools wie Azure Content Safety erforderlich sind.
In diesem Notebook verwenden wir den Flow web-classification, der die Verbindung open_ai_connection intern verwendet. Wir müssen die Verbindung einrichten, falls wir sie noch nicht hinzugefügt haben. Nach der Erstellung wird sie in der lokalen Datenbank gespeichert und kann in jedem Flow verwendet werden.
Bereiten Sie Ihre Azure OpenAI-Ressource gemäß dieser Anleitung vor und besorgen Sie sich Ihren api_key, falls Sie noch keinen haben.
import json
from promptflow.client import PFClient
from promptflow.connections import AzureOpenAIConnection, OpenAIConnection
# client can help manage your runs and connections.
pf = PFClient()
try:
conn_name = "open_ai_connection"
conn = pf.connections.get(name=conn_name)
print("using existing connection")
except:
# Follow https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/create-resource?pivots=web-portal to create an Azure OpenAI resource.
connection = AzureOpenAIConnection(
name=conn_name,
api_key="<test_key>",
api_base="<test_base>",
api_type="azure",
api_version="<test_version>",
)
# use this if you have an existing OpenAI account
# connection = OpenAIConnection(
# name=conn_name,
# api_key="<user-input>",
# )
conn = pf.connections.create_or_update(connection)
print("successfully created connection")
print(conn)
2. Führen Sie den web-classification-Flow aus#
web-classification ist ein Flow, der die Mehrklassenklassifizierung mit LLM demonstriert. Gegeben eine URL, wird die URL mit nur wenigen Beispielen, einfacher Zusammenfassung und Klassifizierungs-Prompts in eine Webkategorie klassifiziert.
Setzen Sie den Flow-Pfad#
flow = "../../flows/standard/web-classification" # path to the flow directory
Schnelltest#
# Test flow
flow_inputs = {
"url": "https://play.google.com/store/apps/details?id=com.twitter.android",
}
flow_result = pf.test(flow=flow, inputs=flow_inputs)
print(f"Flow result: {flow_result}")
# Test single node in the flow
node_name = "fetch_text_content_from_url"
node_inputs = {
"url": "https://play.google.com/store/apps/details?id=com.twitter.android"
}
flow_result = pf.test(flow=flow, inputs=node_inputs, node=node_name)
print(f"Node result: {flow_result}")
Flow als Funktion#
Wir haben auch eine Syntax-Zucker implementiert, mit der Sie einen Flow wie eine Python-Funktion konsumieren können, mit der Möglichkeit, Verbindungen, Eingaben und andere Laufzeitkonfigurationen zu überschreiben. Referenz hier für weitere Details.
from promptflow.client import load_flow
flow_func = load_flow(flow)
flow_result = flow_func(**flow_inputs)
print(f"Flow function result: {flow_result}")
Batch-Lauf mit einer Datendatei (mit mehreren Zeilen Testdaten)#
data = "../../flows/standard/web-classification/data.jsonl" # path to the data file
# create run with default variant
base_run = pf.run(
flow=flow,
data=data,
stream=True,
column_mapping={
"url": "${data.url}",
},
)
details = pf.get_details(base_run)
details.head(10)
3. Bewerten Sie Ihren Flow#
Anschließend können Sie eine Auswertungsmethode verwenden, um Ihren Flow auszuwerten. Die Auswertungsmethoden sind ebenfalls Flows, die Python oder LLM usw. verwenden, um Metriken wie Genauigkeit und Relevanz zu berechnen.
In diesem Notebook verwenden wir den Flow classification-accuracy-eval zur Auswertung. Dies ist ein Flow, der zeigt, wie die Leistung eines Klassifizierungssystems ausgewertet wird. Er vergleicht jede Vorhersage mit der Grundwahrheit und weist eine Bewertung "Korrekt" oder "Falsch" zu und aggregiert die Ergebnisse, um Metriken wie die Genauigkeit zu erzeugen, die widerspiegeln, wie gut das System die Daten klassifizieren kann.
Führen Sie die Bewertung für den vorherigen Batch-Lauf durch#
Der **base_run** ist der Batch-Lauf, den wir oben in Schritt 2 abgeschlossen haben, für den Web-Klassifizierungs-Flow mit „data.jsonl“ als Eingabe.
eval_flow = "../../flows/evaluation/eval-classification-accuracy"
eval_run = pf.run(
flow=eval_flow,
data="../../flows/standard/web-classification/data.jsonl", # path to the data file
run=base_run, # specify base_run as the run you want to evaluate
column_mapping={
"groundtruth": "${data.answer}",
"prediction": "${run.outputs.category}",
}, # map the url field from the data to the url input of the flow
stream=True,
)
details = pf.get_details(eval_run)
details.head(10)
metrics = pf.get_metrics(eval_run)
print(json.dumps(metrics, indent=4))
pf.visualize([base_run, eval_run])
Bis jetzt haben Sie Ihren ersten Prompt-Flow erfolgreich ausgeführt und sogar bewertet. Das ist großartig!
Sie können den web-classification Flow und den classification-accuracy Flow für weitere Details überprüfen und mit dem Erstellen Ihres eigenen Flows beginnen.
Oder Sie können mit einem fortgeschritteneren Thema fortfahren: Experimentieren Sie mit einer Variante.
Ein weiterer Batch-Lauf mit einer Variante#
Variante in Prompt Flow ermöglicht Ihnen Experimente mit LLMs. Sie können eine Variante eines Prompt/LLM-Knotens einstellen, die auf verschiedene Prompts verweist oder verschiedene LLM-Parameter wie Temperatur verwendet.
In diesem Beispiel hat der Knoten summarize_text_content des web-classification Flows zwei Varianten: variant_0 und variant_1. Der Unterschied zwischen ihnen liegt in den Eingabeparametern.
variant_0
- inputs:
- deployment_name: gpt-35-turbo
- max_tokens: '128'
- temperature: '0.2'
- text: ${fetch_text_content_from_url.output}
variant_1
- inputs:
- deployment_name: gpt-35-turbo
- max_tokens: '256'
- temperature: '0.3'
- text: ${fetch_text_content_from_url.output}
Sie können die gesamte Flow-Definition unter flow.dag.yaml überprüfen.
# use the variant1 of the summarize_text_content node.
variant_run = pf.run(
flow=flow,
data=data,
variant="${summarize_text_content.variant_1}", # here we specify node "summarize_text_content" to use variant 1 version.
column_mapping={
"url": "${data.url}",
},
stream=True,
)
details = pf.get_details(variant_run)
details.head(10)
Evaluierung des Variant-Laufs ausführen#
Damit wir später Metriken vergleichen und sehen können, welche besser funktioniert.
eval_flow = "../../flows/evaluation/eval-classification-accuracy"
eval_run_variant = pf.run(
flow=eval_flow,
data="../../flows/standard/web-classification/data.jsonl", # path to the data file
run=variant_run, # use run as the variant
column_mapping={
"groundtruth": "${data.answer}",
"prediction": "${run.outputs.category}",
}, # map the url field from the data to the url input of the flow
stream=True,
)
details = pf.get_details(eval_run_variant)
details.head(10)
metrics = pf.get_metrics(eval_run_variant)
print(json.dumps(metrics, indent=4))
pf.visualize([eval_run, eval_run_variant])
Nächste Schritte#
Mehr erfahren über
Verbindungen verwalten: Wie Sie Endpunkte/geheime Informationen zur Anbindung an externe Dienste, einschließlich LLMs, verwalten.
Chat mit PDF: Durchlaufen Sie ein End-to-End-Tutorial, wie Sie eine Chat-Anwendung mit Prompt Flow entwickeln.
HTTP-Endpunkt bereitstellen: Wie Sie den Flow als lokalen HTTP-Endpunkt bereitstellen.
Prompt Flow in Azure AI: Führen und evaluieren Sie Flows in Azure AI, wo Sie besser mit Ihrem Team zusammenarbeiten können.
