Erste Schritte mit Flex Flow mit Unify AI#
Lernziele - Nach Abschluss dieses Tutorials sollten Sie in der Lage sein:
Schreiben Sie LLM-Anwendungen mit der Unify AI API in einem Notebook und visualisieren Sie den Trace Ihrer Anwendung.
Wählen Sie ein Modell/einen Anbieter aus dem Unify-Modellkatalog für Ihren Flex Flow.
Konvertieren Sie die Anwendung in einen Flow und führen Sie einen Batch-Lauf mit mehreren Datenzeilen durch.
0. Abhängige Pakete installieren#
%%capture --no-stderr
%pip install -r ./requirements.txt
1. Verfolgen Sie Ihre Anwendung mit Prompt Flow#
Angenommen, wir haben bereits eine Python-Funktion, die Unify AI aufruft.
with open("llm.py") as fin:
print(fin.read())
Hinweis: Konfigurieren Sie vor dem Ausführen der folgenden Zelle die erforderliche Umgebungsvariable UNIFY_AI_API_KEY, indem Sie eine .env-Datei erstellen. Beziehen Sie sich auf ./.env.example als Vorlage.
LLM-Modell und Anbieter auswählen#
Definieren Sie Anbieter und Modell von Unify AI. Beziehen Sie sich auf den Unify-Modellkatalog
Wählen Sie eine optimale Modell-/Anbieterkombination für Ihren Anwendungsfall aus, indem Sie Kompromisse zwischen Qualität, Kosten und Latenz vergleichen.
# model_name and provider_name defined here are used throughout the notebook.
# This example use llama 3.1 8b params and together-ai, redefine as per your usecase.
model_name = "llama-3.1-8b-chat"
provider_name = "together-ai"
from llm import my_llm_tool
# pls configure `UNIFY_AI_API_KEY` environment variable
result = my_llm_tool(
prompt="Write a simple Hello, world! python program that displays the greeting message when executed. Output code only.",
model_name=model_name,
provider_name=provider_name,
)
result
Visualisieren Sie den Trace mit `start_trace`#
Beachten Sie, dass wir `@trace` zur Funktion `my_llm_tool` hinzugefügt haben. Wenn Sie die folgende Zelle erneut ausführen, wird ein Trace in der Trace-Benutzeroberfläche gesammelt.
from promptflow.tracing import start_trace
# start a trace session, and print a url for user to check trace
start_trace()
# rerun the function, which will be recorded in the trace
result = my_llm_tool(
prompt="Write a simple Hello, world! program that displays the greeting message when executed. Output code only.",
model_name=model_name,
provider_name=provider_name,
)
result
Fügen wir nun eine weitere Ebene des Funktionsaufrufs hinzu. In programmer.py gibt es eine Funktion namens write_simple_program, die eine neue Funktion namens load_prompt und die vorherige Funktion my_llm_tool aufruft.
# show the programmer.py content
with open("programmer.py") as fin:
print(fin.read())
# call the flow entry function
from programmer import write_simple_program
result = write_simple_program("Java Hello, world!")
result
Modellkonfiguration mit Umgebungsvariablen einrichten#
Bei lokaler Verwendung erstellen Sie ein Modellkonfigurationsobjekt mit Umgebungsvariablen.
Hinweis: Konfigurieren Sie vor dem Ausführen der folgenden Zelle die erforderlichen Umgebungsvariablen UNIFY_AI_API_KEY und UNIFY_AI_BASE_URL, indem Sie eine .env-Datei erstellen. Beziehen Sie sich auf ./.env.example als Vorlage.
Hier wird der OpenAI-Client verwendet, um die Unify AI API aufzurufen. UNIFY_AI_BASE_URL ist die Basis-URL für den API-Endpunkt (zusammen mit der Version) in der Unify API-Dokumentation. ./.env.example enthält die Basis-URL für die Unify API-Version v0.
import os
from dotenv import load_dotenv
from promptflow.core import OpenAIModelConfiguration
# pls configure `UNIFY_AI_API_KEY`, `UNIFY_AI_BASE_URL` environment variables first
if "UNIFY_AI_API_KEY" not in os.environ:
# load environment variables from .env file
load_dotenv()
if "UNIFY_AI_API_KEY" not in os.environ:
raise Exception("Please specify environment variables: UNIFY_AI_API_KEY")
model_config = OpenAIModelConfiguration(
base_url=os.environ["UNIFY_AI_BASE_URL"],
api_key=os.environ["UNIFY_AI_API_KEY"],
model=f"{model_name}@{provider_name}"
)
Bewerten Sie das Ergebnis#
%load_ext autoreload
%autoreload 2
from eval_code_flow.code_quality_unify_ai import CodeEvaluator
evaluator = CodeEvaluator(model_config=model_config)
eval_result = evaluator(result)
eval_result
2. Führen Sie die Funktion als Flow im Batch-Lauf mit mehrzeiligen Daten aus#
Erstellen Sie eine flow.flex.yaml-Datei, um einen Flow zu definieren, dessen Einstiegspunkt auf die von uns definierte Python-Funktion verweist.
# show the flow.flex.yaml content
with open("flow.flex.yaml") as fin:
print(fin.read())
Batch-Lauf mit einer Datendatei (mit mehreren Zeilen Testdaten)#
from promptflow.client import PFClient
pf = PFClient()
data = "./data.jsonl" # path to the data file
# create run with the flow function and data
base_run = pf.run(
flow=write_simple_program,
data=data,
column_mapping={
"text": "${data.text}",
},
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.
# we can also run flow pointing to code evaluator yaml file
eval_flow = "./eval_code_flow/code-eval-flow.flex.yaml"
eval_run = pf.run(
flow=eval_flow,
init={"model_config": model_config},
data="./data.jsonl", # path to the data file
run=base_run, # specify base_run as the run you want to evaluate
column_mapping={
"code": "${run.outputs.output}",
},
stream=True,
)
details = pf.get_details(eval_run)
details.head(10)
import json
metrics = pf.get_metrics(eval_run)
print(json.dumps(metrics, indent=4))
pf.visualize([base_run, eval_run])
Abschließender Hinweis#
Bis jetzt haben Sie erfolgreich Ihren einfachen Code für Generierung und Auswertung mit Unify AI ausgeführt.
