使用 Unify AI 开始使用 Flex Flow#

作者:  头像在 GitHub 上打开

学习目标 - 完成本教程后,您应该能够

  • 在笔记本中使用 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,重新运行下面的单元格将在追踪 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_KEYUNIFY_AI_BASE_URL。请参考 ./.env.example 作为模板。

这里使用 OpenAI 客户端调用 Unify AI API。UNIFY_AI_BASE_URLUnify API 文档 中 API 终结点(及其版本)的基础 URL。./.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 步中完成的批量运行,用于 web-classification 流,输入为“data.jsonl”。

# 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 运行了简单的代码生成和评估。