Erste Schritte mit prompty#

Verfasst von:  Avatar AvatarAuf GitHub öffnen

Lernziele - Nach Abschluss dieses Tutorials sollten Sie in der Lage sein:

  • Erstellen Sie LLM-Anwendungen mit prompty und visualisieren Sie den Ablauf Ihrer Anwendung.

  • Führen Sie prompty im Stapelbetrieb für mehrzeilige Daten aus.

0. Abhängige Pakete installieren#

%%capture --no-stderr
%pip install promptflow-core

1. Einen Prompty ausführen#

Prompty ist eine Datei mit der Erweiterung .prompty zur Entwicklung von Prompt-Vorlagen. Das Prompty-Asset ist eine Markdown-Datei mit einem modifizierten Front Matter. Das Front Matter liegt im YAML-Format vor und enthält eine Reihe von Metadatenfeldern, die die Modellkonfiguration und die erwarteten Eingaben des Prompty definieren.

with open("basic.prompty") as fin:
    print(fin.read())

Hinweis: Konfigurieren Sie vor dem Ausführen der folgenden Zelle die erforderliche Umgebungsvariable AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT durch Erstellen einer .env-Datei. Weitere Informationen finden Sie unter ../.env.example als Vorlage.

import os
from dotenv import load_dotenv

if "AZURE_OPENAI_API_KEY" not in os.environ:
    # load environment variables from .env file
    load_dotenv()
from promptflow.core import Prompty

# load prompty as a flow
f = Prompty.load(source="basic.prompty")

# execute the flow as function
result = f(question="What is the capital of France?")
result

Sie können die Konfiguration mit AzureOpenAIModelConfiguration und OpenAIModelConfiguration überschreiben.

from promptflow.core import AzureOpenAIModelConfiguration, OpenAIModelConfiguration

# override configuration with AzureOpenAIModelConfiguration
configuration = AzureOpenAIModelConfiguration(
    # azure_endpoint="${env:AZURE_OPENAI_ENDPOINT}",  # Use ${env:<ENV_NAME>} to surround the environment variable name.
    # api_key="${env:AZURE_OPENAI_API_KEY}",
    azure_deployment="gpt-4o",
)

# override configuration with OpenAIModelConfiguration
# configuration = OpenAIModelConfiguration(
#     base_url="${env:OPENAI_BASE_URL}",
#     api_key="${env:OPENAI_API_KEY}",
#     model="gpt-3.5-turbo"
# )

override_model = {"configuration": configuration, "parameters": {"max_tokens": 512}}

# load prompty as a flow
f = Prompty.load(source="basic.prompty", model=override_model)

# execute the flow as function
result = f(question="What is the capital of France?")
result

Visualisieren Sie den Trace mit `start_trace`#

from promptflow.tracing import start_trace

# start a trace session, and print a url for user to check trace
start_trace()

Wenn Sie die folgende Zelle erneut ausführen, wird ein Trace in der Trace-Benutzeroberfläche gesammelt.

# rerun the function, which will be recorded in the trace
question = "What is the capital of Japan?"
ground_truth = "Tokyo"
result = f(question=question)
result

Bewerten Sie das Ergebnis#

Hinweis: Der Eval-Flow gibt ein json_object zurück.

# load prompty as a flow
eval_flow = Prompty.load("../eval-basic/eval.prompty")
# execute the flow as function
result = eval_flow(question=question, ground_truth=ground_truth, answer=result)
result

2. Stapelverarbeitung mit mehrzeiligen Daten#

%%capture --no-stderr
# batch run requires promptflow-devkit package
%pip install promptflow-devkit
from promptflow.client import PFClient

pf = PFClient()
flow = "./basic.prompty"  # path to the prompty file
data = "./data.jsonl"  # path to the data file

# create run with the flow and data
base_run = pf.run(
    flow=flow,
    data=data,
    column_mapping={
        "question": "${data.question}",
    },
    stream=True,
)
details = pf.get_details(base_run)
details.head(10)

3. Bewerten Sie Ihren Flow#

Anschließend können Sie eine Bewertungsmethode verwenden, um Ihren Flow zu bewerten. Die Bewertungsmethoden sind ebenfalls Flows, die in der Regel LLMs verwenden, um zu überprüfen, ob die erzeugte Ausgabe bestimmten Erwartungen entspricht.

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_prompty = "../eval-basic/eval.prompty"

eval_run = pf.run(
    flow=eval_prompty,
    data="./data.jsonl",  # path to the data file
    run=base_run,  # specify base_run as the run you want to evaluate
    column_mapping={
        "question": "${data.question}",
        "answer": "${run.outputs.output}",  # TODO refine this mapping
        "ground_truth": "${data.ground_truth}",
    },
    stream=True,
)
details = pf.get_details(eval_run)
details.head(10)
# visualize run using ui
pf.visualize([base_run, eval_run])

Nächste Schritte#

Bis jetzt haben Sie Ihren ersten Prompt-Flow erfolgreich ausgeführt und sogar bewertet. Das ist großartig!

Sie können sich weitere Beispiele ansehen

  • Basic Chat: demonstriert, wie ein Chatbot erstellt wird, der sich an frühere Interaktionen erinnern und den Gesprächsverlauf zur Generierung der nächsten Nachricht nutzen kann.