Flex 工作流快速入门#
学习目标 - 完成本教程后,您应该能够
使用 Notebook 编写 LLM 应用程序并可视化应用程序的跟踪。
将应用程序转换为流,并对多行数据进行批量运行。
0. 安装依赖包#
%%capture --no-stderr
%pip install -r ./requirements.txt
1. 使用 promptflow 追踪您的应用程序#
假设我们已经有一个调用 OpenAI API 的 Python 函数。
with open("llm.py") as fin:
print(fin.read())
注意:在运行以下单元格之前,请通过创建 .env
文件来配置所需的环境变量 AZURE_OPENAI_API_KEY
、AZURE_OPENAI_ENDPOINT
。请参考 ../.env.example
作为模板。
# control the AOAI deployment (model) used in this example
deployment_name = "gpt-4o"
from llm import my_llm_tool
# pls configure `AZURE_OPENAI_API_KEY`, `AZURE_OPENAI_ENDPOINT` environment variables first
result = my_llm_tool(
prompt="Write a simple Hello, world! program that displays the greeting message when executed. Output code only.",
deployment_name=deployment_name,
)
result
使用 start_trace 可视化追踪#
请注意,我们在 my_llm_tool
函数中添加了 @trace
,重新运行下面的单元格将在追踪 UI 中收集追踪。
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.",
deployment_name=deployment_name,
)
result
现在,让我们添加另一层函数调用。在 programmer.py
中有一个名为 write_simple_program
的函数,它调用一个名为 load_prompt
的新函数和之前的 my_llm_tool
函数。
# 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
使用环境变量设置模型配置#
在本地使用时,使用环境变量创建模型配置对象。
import os
from dotenv import load_dotenv
from promptflow.core import AzureOpenAIModelConfiguration
if "AZURE_OPENAI_API_KEY" not in os.environ:
# load environment variables from .env file
load_dotenv()
if "AZURE_OPENAI_API_KEY" not in os.environ:
raise Exception("Please specify environment variables: AZURE_OPENAI_API_KEY")
model_config = AzureOpenAIModelConfiguration(
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
api_key=os.environ["AZURE_OPENAI_API_KEY"],
azure_deployment=deployment_name,
api_version="2023-07-01-preview",
)
评估结果#
%load_ext autoreload
%autoreload 2
import paths # add the code_quality module to the path
from code_quality import CodeEvaluator
evaluator = CodeEvaluator(model_config=model_config)
eval_result = evaluator(result)
eval_result
2. 将函数作为流与多行数据批量运行#
创建一个 flow.flex.yaml 文件来定义一个流,其入口指向我们定义的 Python 函数。
# show the flow.flex.yaml content
with open("flow.flex.yaml") as fin:
print(fin.read())
使用数据文件(包含多行测试数据)进行批量运行#
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. 评估您的流#
然后您可以使用评估方法来评估您的流。评估方法也是流,通常使用 LLM 断言生成的输出符合某些预期。
对之前的批量运行进行评估#
base_run 是我们在上面第 2 步中完成的批量运行,用于 web-classification 流,输入为“data.jsonl”。
# we can also run flow pointing to yaml file
eval_flow = "../eval-code-quality/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])
后续步骤#
现在您已经成功运行了您的第一个提示流并对其进行了评估。太棒了!
您可以查看更多示例
基本聊天:演示如何创建一个聊天机器人,它可以记住之前的交互并使用对话历史来生成下一条消息。