Chatten mit Prompty#
Lernziele - Nach Abschluss dieses Tutorials sollten Sie in der Lage sein:
LLM-Anwendung mit Prompty schreiben und den Trace Ihrer Anwendung visualisieren.
Verstehen, wie man Chat-Konversationen mit Prompty handhabt
Batch-Ausführung von Prompty gegen mehrere Datenzeilen.
0. Abhängige Pakete installieren#
%%capture --no-stderr
%pip install promptflow-devkit
1. Prompty#
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 ist im YAML-Format und enthält eine Reihe von Metadatenfeldern, die die Modellkonfiguration und die erwarteten Eingaben des Prompty definieren.
with open("chat.prompty") as fin:
print(fin.read())
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.
Obiges Prompty verwendet die Verbindung open_ai_connection. Wir müssen die Verbindung einrichten, wenn 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.
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="<your_AOAI_key>",
api_base="<your_AOAI_endpoint>",
api_type="azure",
)
# 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)
Prompty als Funktion ausführen#
from promptflow.core import Prompty
# load prompty as a flow
f = Prompty.load("chat.prompty")
# execute the flow as function
question = "What is the capital of France?"
result = f(question=question)
result
Sie können die Verbindung mit AzureOpenAIModelConfiguration und OpenAIModelConfiguration überschreiben.
from promptflow.core import AzureOpenAIModelConfiguration, OpenAIModelConfiguration
# override configuration with created connection in AzureOpenAIModelConfiguration
configuration = AzureOpenAIModelConfiguration(
connection="open_ai_connection", azure_deployment="gpt-4o"
)
# override openai connection with OpenAIModelConfiguration
# configuration = OpenAIModelConfiguration(
# connection=connection,
# model="gpt-3.5-turbo"
# )
override_model = {
"configuration": configuration,
}
# load prompty as a flow
f = Prompty.load("chat.prompty", model=override_model)
# execute the flow as function
question = "What is the capital of France?"
result = f(question=question)
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-UI gesammelt.
# rerun the function, which will be recorded in the trace
result = f(question=question)
result
Bewerten Sie das Ergebnis#
In diesem Beispiel verwenden wir einen Prompt, der feststellt, ob eine Chat-Konversation eine Entschuldigung vom Assistenten enthält.
eval_prompty = "../eval-apology/apology.prompty"
with open(eval_prompty) as fin:
print(fin.read())
Hinweis: Der Evaluierungs-Flow gibt ein json_object zurück.
# load prompty as a flow
eval_flow = Prompty.load(eval_prompty)
# execute the flow as function
result = eval_flow(question=question, answer=result, messages=[])
result
2. Batch-Ausführung mit mehrzeiligen Daten#
from promptflow.client import PFClient
flow = "chat.prompty" # path to the prompty file
data = "./data.jsonl" # path to the data file
# create run with the flow and data
pf = PFClient()
base_run = pf.run(
flow=flow,
data=data,
column_mapping={
"question": "${data.question}",
"chat_history": "${data.chat_history}",
},
stream=True,
)
details = pf.get_details(base_run)
details.head(10)
3. Bewerten Sie Ihren Prompty#
Dann können Sie einen Bewertungs-Prompty verwenden, um Ihren Prompty zu bewerten.
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_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={
"messages": "${data.chat_history}",
"question": "${data.question}",
"answer": "${run.outputs.output}", # TODO refine this mapping
},
stream=True,
)
details = pf.get_details(eval_run)
details.head(10)
Nächste Schritte#
Bis jetzt haben Sie Ihren ersten Prompt-Flow erfolgreich ausgeführt und sogar bewertet. Das ist großartig!
Sie können weitere Prompty-Beispiele ansehen.

