使用Unify AI开始flex flow#
学习目标 - 完成本教程后,您应该能够:
在笔记本中使用Unify AI API编写LLM应用程序,并可视化应用程序的跟踪。
从Unify模型目录中选择一个模型/提供商用于您的flex flow。
将应用程序转换为流程,并针对多行数据进行批处理运行。
0. 安装依赖包#
%%capture --no-stderr
%pip install -r ./requirements.txt
1. 使用promptflow跟踪您的应用程序#
假设我们已经有一个调用Unify AI的python函数。
with open("llm.py") as fin:
print(fin.read())
注意:在运行下面的单元格之前,请通过创建一个.env文件来配置所需的环境变量UNIFY_AI_API_KEY。请参考./.env.example作为模板。
选择LLM模型和提供商#
从Unify AI定义提供者和模型。参考Unify模型目录
通过比较质量、成本和延迟之间的权衡,为您的用例选择最佳的模型/提供商组合。
# 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
使用start_trace可视化跟踪#
注意我们在my_llm_tool函数中添加了@trace,重新运行下面的单元格将在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.",
model_name=model_name,
provider_name=provider_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
使用环境变量设置模型配置#
在本地使用时,使用环境变量创建一个模型配置对象。
注意:在运行下面的单元格之前,请通过创建一个.env文件来配置所需的环境变量UNIFY_AI_API_KEY和UNIFY_AI_BASE_URL。请参考./.env.example作为模板。
这里使用OpenAI客户端来调用Unify AI API。UNIFY_AI_BASE_URL是API端点的基本URL(包括版本),在Unify API文档中。./.env.example包含Unify API版本v0的基本URL。
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}"
)
评估结果#
%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. 以流的方式批量运行函数,处理多行数据#
创建一个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中完成的批量运行,用于以“data.jsonl”作为输入的web分类流程。
# 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])
结束语#
到目前为止,您已经成功地使用Unify AI运行了简单的代码生成和评估。