DAG-Flow in Azure ausführen#

Erstellt von:  AvatarOpen on GitHub

Voraussetzungen - Um von diesem Tutorial zu profitieren, benötigen Sie

Lernziele - Am Ende dieses Tutorials sollten Sie in der Lage sein

  • Stellen Sie eine Verbindung zu Ihrem Azure KI-Arbeitsbereich über das Python SDK her

  • Erstellen und entwickeln Sie einen neuen Promptflow-Lauf

  • Bewerten Sie den Lauf mit einem Bewertungs-Flow

Motivationen — Diese Anleitung führt Sie durch den wichtigsten Benutzerpfad der Code-First-Erfahrung von Prompt Flow. Sie lernen, wie Sie Ihren ersten Prompt Flow erstellen und entwickeln sowie ihn testen und bewerten.

0. Abhängige Pakete installieren#

%pip install -r ../../requirements.txt

1. Verbindung zum Azure Machine Learning-Arbeitsbereich herstellen#

Der Arbeitsbereich ist die übergeordnete Ressource für Azure Machine Learning und bietet einen zentralen Ort, um mit allen Artefakten zu arbeiten, die Sie bei der Verwendung von Azure Machine Learning erstellen. In diesem Abschnitt stellen wir eine Verbindung zu dem Arbeitsbereich her, in dem der Auftrag ausgeführt wird.

1.1 Die erforderlichen Bibliotheken importieren#

import json

# Import required libraries
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential

# azure version promptflow apis
from promptflow.azure import PFClient

1.2 Anmeldeinformationen konfigurieren#

Wir verwenden DefaultAzureCredential, um Zugriff auf den Arbeitsbereich zu erhalten. DefaultAzureCredential sollte in der Lage sein, die meisten Szenarien zur Authentifizierung mit dem Azure SDK zu bewältigen.

Referenz für weitere verfügbare Anmeldeinformationen, falls dies nicht für Sie funktioniert: Beispiel für die Anmeldeinformationskonfiguration, Referenzdokumentation zu azure-identity.

try:
    credential = DefaultAzureCredential()
    # Check if given credential can get token successfully.
    credential.get_token("https://management.azure.com/.default")
except Exception as ex:
    # Fall back to InteractiveBrowserCredential in case DefaultAzureCredential not work
    credential = InteractiveBrowserCredential()

1.3 Ein Handle für den Arbeitsbereich erhalten#

Wir verwenden eine Konfigurationsdatei, um eine Verbindung zu einem Arbeitsbereich herzustellen. Der Azure ML-Arbeitsbereich sollte mit einem Computercluster konfiguriert werden. Sehen Sie sich dieses Notebook an, um einen Arbeitsbereich zu konfigurieren

# Get a handle to workspace
pf = PFClient.from_config(credential=credential)

1.4 Erstellen Sie notwendige Verbindungen#

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 azure_open_ai_connection verwendet. Wir müssen die Verbindung einrichten, wenn wir sie noch nicht hinzugefügt haben.

Bereiten Sie Ihre Azure OpenAI-Ressource gemäß dieser Anleitung vor und besorgen Sie sich Ihren api_key, falls Sie noch keinen haben.

Bitte gehen Sie zum Arbeitsbereich-Portal, klicken Sie auf Prompt Flow -> Verbindungen -> Erstellen und folgen Sie dann der Anleitung, um Ihre eigenen Verbindungen zu erstellen. Mehr erfahren Sie unter Verbindungen.

2. Erstellen Sie einen neuen Lauf#

web-classification ist ein Flow, der die Multi-Klassen-Klassifizierung mit LLM demonstriert. Gegeben einer URL klassifiziert er die URL mit nur wenigen Beispielen, einfacher Zusammenfassung und Klassifizierungs-Prompts in eine Webkategorie.

Flow-Pfad und Eingabedaten festlegen#

# load flow
flow = "../../flows/standard/web-classification"
data = "../../flows/standard/web-classification/data.jsonl"

Lauf übermitteln#

# create run
base_run = pf.run(
    flow=flow,
    data=data,
    column_mapping={
        "url": "${data.url}",
    },
)
print(base_run)
pf.stream(base_run)
details = pf.get_details(base_run)
details.head(10)
pf.visualize(base_run)

3. Bewerten Sie das Ergebnis Ihres Flow-Laufs#

Anschließend können Sie eine Bewertungsmethode verwenden, um Ihren Flow zu bewerten. Die Bewertungsmethoden sind ebenfalls Flows, die Python oder LLM usw. verwenden, um Metriken wie Genauigkeit und Relevanzbewertung zu berechnen.

In diesem Notebook verwenden wir den Flow eval-classification-accuracy zur Bewertung. Dies ist ein Flow, der veranschaulicht, wie die Leistung eines Klassifizierungssystems bewertet wird. Er vergleicht jede Vorhersage mit der Grundwahrheit und weist eine "Korrekt"- oder "Falsch"-Bewertung zu. Anschließend werden die Ergebnisse aggregiert, um Metriken wie die Genauigkeit zu erstellen, die angibt, wie gut das System die Daten klassifiziert.

eval_run = pf.run(
    flow="../../flows/evaluation/eval-classification-accuracy",
    data=data,
    run=base_run,
    column_mapping={
        "groundtruth": "${data.answer}",
        "prediction": "${run.outputs.category}",
    },
)
pf.stream(eval_run)
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])

Erstellen Sie einen weiteren Lauf mit einem anderen Variant-Knoten#

In diesem Beispiel hat der Knoten summarize_text_content des Flows web-classification 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 vollständige Flow-Definition unter flow.dag.yaml einsehen.

# use the variant1 of the summarize_text_content node.
variant_run = pf.run(
    flow=flow,
    data=data,
    column_mapping={
        "url": "${data.url}",
    },
    variant="${summarize_text_content.variant_1}",  # here we specify node "summarize_text_content" to use variant 1 version.
)
pf.stream(variant_run)
details = pf.get_details(variant_run)
details.head(10)

Führen Sie die Bewertung gegen einen Variant-Lauf durch#

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={
        # reference data
        "groundtruth": "${data.answer}",
        # reference the run's output
        "prediction": "${run.outputs.category}",
    },
)
pf.stream(eval_run_variant)
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#

Erfahren Sie mehr darüber, wie Sie

  • Führen Sie den Flow als Komponente in einer AzureML-Pipeline aus: Flow in Pipeline.