开始使用prompty#

作者:  Open on GitHub Open on GitHubOpen on GitHub

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

  • 使用prompty编写LLM应用程序并可视化应用程序的跟踪。

  • 针对多行数据批量运行提示。

0. 安装依赖包#

%%capture --no-stderr
%pip install promptflow-core

1. 执行一个提示#

Prompty 是一个带有 .prompty 扩展名的文件,用于开发提示模板。 Prompty 资源是一个带有修改过的前置内容的 Markdown 文件。 前置内容采用 yaml 格式,包含多个元数据字段,这些字段定义了模型的配置和 prompty 的预期输入。

with open("basic.prompty") as fin:
    print(fin.read())

注意:在运行下面的单元格之前,请通过创建一个.env文件来配置所需的环境变量AZURE_OPENAI_API_KEYAZURE_OPENAI_ENDPOINT。请参考../.env.example作为模板。

import os
from dotenv import load_dotenv

if "AZURE_OPENAI_API_KEY" not in os.environ:
    # load environment variables from .env file
    load_dotenv()
from promptflow.core import Prompty

# load prompty as a flow
f = Prompty.load(source="basic.prompty")

# execute the flow as function
result = f(question="What is the capital of France?")
result

你可以使用AzureOpenAIModelConfigurationOpenAIModelConfiguration来覆盖配置。

from promptflow.core import AzureOpenAIModelConfiguration, OpenAIModelConfiguration

# override configuration with AzureOpenAIModelConfiguration
configuration = AzureOpenAIModelConfiguration(
    # azure_endpoint="${env:AZURE_OPENAI_ENDPOINT}",  # Use ${env:<ENV_NAME>} to surround the environment variable name.
    # api_key="${env:AZURE_OPENAI_API_KEY}",
    azure_deployment="gpt-4o",
)

# override configuration with OpenAIModelConfiguration
# configuration = OpenAIModelConfiguration(
#     base_url="${env:OPENAI_BASE_URL}",
#     api_key="${env:OPENAI_API_KEY}",
#     model="gpt-3.5-turbo"
# )

override_model = {"configuration": configuration, "parameters": {"max_tokens": 512}}

# load prompty as a flow
f = Prompty.load(source="basic.prompty", model=override_model)

# execute the flow as function
result = f(question="What is the capital of France?")
result

使用start_trace可视化跟踪#

from promptflow.tracing import start_trace

# start a trace session, and print a url for user to check trace
start_trace()

重新运行下面的单元格将在跟踪UI中收集一个跟踪。

# rerun the function, which will be recorded in the trace
question = "What is the capital of Japan?"
ground_truth = "Tokyo"
result = f(question=question)
result

评估结果#

注意:eval 流程返回一个 json_object

# load prompty as a flow
eval_flow = Prompty.load("../eval-basic/eval.prompty")
# execute the flow as function
result = eval_flow(question=question, ground_truth=ground_truth, answer=result)
result

2. 使用多行数据进行批量运行#

%%capture --no-stderr
# batch run requires promptflow-devkit package
%pip install promptflow-devkit
from promptflow.client import PFClient

pf = PFClient()
flow = "./basic.prompty"  # path to the prompty file
data = "./data.jsonl"  # path to the data file

# create run with the flow and data
base_run = pf.run(
    flow=flow,
    data=data,
    column_mapping={
        "question": "${data.question}",
    },
    stream=True,
)
details = pf.get_details(base_run)
details.head(10)

3. 评估你的流程#

然后你可以使用评估方法来评估你的流程。评估方法也是流程,通常使用LLM来断言生成的输出是否符合某些预期。

对之前的批量运行进行评估#

base_run 是我们在上述步骤2中完成的批量运行,用于以“data.jsonl”作为输入的web分类流程。

eval_prompty = "../eval-basic/eval.prompty"

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={
        "question": "${data.question}",
        "answer": "${run.outputs.output}",  # TODO refine this mapping
        "ground_truth": "${data.ground_truth}",
    },
    stream=True,
)
details = pf.get_details(eval_run)
details.head(10)
# visualize run using ui
pf.visualize([base_run, eval_run])

下一步#

到目前为止,你已经成功运行了你的第一个提示流程,并对其进行了评估。这真是太棒了!

你可以查看更多示例:

  • Basic Chat: 演示如何创建一个能够记住之前交互并使用对话历史生成下一条消息的聊天机器人。