提示工程用户界面(实验性)

从 MLflow 2.7 开始,MLflow Tracking UI 为提示工程提供了最佳体验。无需编写代码,您可以从 MLflow AI Gateway 尝试多种大语言模型(LLM)、参数配置和提示,以构建各种用于问答、文档摘要等的模型。使用嵌入的评估 UI,您还可以在一组输入上评估多个模型,并比较响应以选择最佳模型。使用提示工程 UI 创建的每个模型都以 MLflow Model 格式存储,并且可以部署用于批处理或实时推理。所有配置(提示模板、LLM 选择、参数等)都作为 MLflow Runs 进行跟踪。

快速入门

以下指南将帮助您开始使用 MLflow 的 UI 进行提示工程。

步骤 1:创建一个 MLflow AI 网关的补全或聊天端点

要使用提示工程UI,您需要创建一个或多个 MLflow AI Gateway 完成或聊天 Endpoints。请按照 MLflow AI Gateway 快速入门指南 在不到五分钟的时间内轻松创建一个端点。如果您已经可以访问类型为 llm/v1/completionsllm/v1/chat 的 MLflow AI Gateway 端点,则可以跳过此步骤。

mlflow gateway start --config-path config.yaml --port 7000

步骤 2:将 MLflow AI 网关连接到您的 MLflow 跟踪服务器

提示工程UI还需要MLflow AI网关与MLflow跟踪服务器之间的连接。要连接MLflow AI网关与MLflow跟踪服务器,只需在服务器运行的环境中设置``MLFLOW_DEPLOYMENTS_TARGET``环境变量并重启服务器。例如,如果MLflow AI网关运行在``http://localhost:7000``,你可以在本地机器的shell中启动一个MLflow跟踪服务器,并使用:ref:`mlflow server <cli>`命令将其连接到MLflow AI网关,如下所示:

export MLFLOW_DEPLOYMENTS_TARGET="http://127.0.0.1:7000"
mlflow server --port 5000

步骤 3:创建或找到一个 MLflow 实验

接下来,在 MLflow UI 中打开一个现有的 MLflow 实验,或者创建一个新实验。

../../_images/experiment_page.png

步骤4:使用提示工程创建运行

一旦你打开了实验,点击 新建运行 按钮并选择 使用提示工程。这将打开提示工程的实验区,你可以在那里尝试不同的LLMs、参数和提示。

新运行 prompt_modal_1

步骤 5:选择您的端点并评估示例提示

接下来,点击 选择端点 下拉菜单并选择你在步骤1中创建的MLflow AI Gateway补全端点。然后,点击 评估 按钮来测试一个生成产品广告的示例提示工程用例。

MLflow 将嵌入指定的 stock_type 输入变量值 - "books" - 到指定的 prompt 模板 中,并将其发送到与 MLflow AI Gateway 端点关联的 LLM,配置的 temperature*(当前为 ``0.01``)和 *max_tokens*(当前为 1000)。LLM 的响应将出现在 *Output 部分。

../../_images/prompt_modal_2.png

步骤 6:尝试一个你选择的提示

用你选择的提示模板替换上一步的提示模板。提示可以定义多个变量。例如,你可以使用以下提示模板来指示LLM回答有关MLflow文档的问题:

Read the following article from the MLflow documentation that appears between triple
backticks. Then, answer the question about the documentation that appears between triple quotes.
Include relevant links and code examples in your answer.

```{{article}}```

"""
{{question}}
"""

然后,填写输入变量。例如,在MLflow文档用例中,可以将*article*输入变量设置为https://mlflow.org/docs/latest/tracking.html#logging-data-to-runs的内容,并将*question*输入变量设置为``”如何使用Python API创建新的MLflow运行?”``

最后,点击 评估 按钮以查看新的输出。你也可以尝试选择一个更大的 温度 值,以观察LLM输出如何变化。

../../_images/prompt_modal_3.png

步骤 7:将您选择的 LLM、提示模板和参数捕获为 MLflow 运行

一旦你对所选的提示模板和参数感到满意,点击 创建运行 按钮以存储这些信息,以及你选择的LLM,作为一个MLflow运行。这将创建一个包含提示模板、参数和LLM选择作为运行参数的新运行。它还会自动创建一个包含此信息的MLflow模型,该模型可用于批处理或实时推理。

  1. 要查看此信息,请点击运行名称以打开 运行 页面:

  2. 您还可以通过打开 表格 视图标签来查看参数并与其他配置进行比较:

  3. 在创建运行后,MLflow 将打开 评估 标签页,您可以在此查看最新的实验输入和输出,并尝试其他输入:

步骤 8:尝试新的输入

要测试您选择的LLM、提示模板和参数在新输入上的行为:

  1. 点击 添加行 按钮,并填写您的提示模板输入变量(s)的值。例如,在MLflow文档使用案例中,您可以尝试提出一个与MLflow无关的问题,看看LLM如何响应。这对于确保应用程序对无关输入具有鲁棒性非常重要。

    添加行 add_row_modal

  2. 然后,点击 Evaluate 按钮以查看输出。

  3. 最后,点击 保存 按钮来存储新的输入和输出。

步骤 9:调整您的提示模板并创建一个新的运行

当你尝试更多的输入时,你可能会发现某些情况下,你选择的LLM、提示模板和参数的表现并不如你所愿。例如,在MLflow文档的使用场景中,即使答案不在指定的文章中,LLM仍然尝试回答关于 MLflow 项目 的不相关问题。

  1. 为了提高性能,通过从上下文菜单中选择 复制运行 选项来创建一个新的运行。例如,在 MLflow 文档用例中,将以下文本添加到提示模板中可以帮助提高对不相关问题的鲁棒性:

    If the question does not relate to the article, respond exactly with the phrase
    "I do not know how to answer that question." Do not include any additional text in your
    response.
    
    ../../_images/duplicate_run.png
  2. 然后,从提示工程的游乐场中,调整提示模板(和/或选择LLM和参数),评估输入,并点击 创建运行 按钮来创建一个新的运行。

步骤 10:在之前的输入上评估新的提示模板

既然你已经调整了提示模板,确保新模板在前述输入上表现良好并将其输出与旧配置进行比较是很重要的。

  1. 评估 标签页,点击新运行旁边的 评估全部 按钮以评估所有之前的输入。

    ../../_images/evaluate_all.png
  2. 点击 保存 按钮以存储结果。

    ../../_images/evaluate_all_results.png

步骤 11:以编程方式加载评估数据

MLflow 提示工程 UI 和评估 UI 生成的所有输入和输出都作为工件存储在 MLflow 运行中。可以使用 mlflow.load_table() API 以编程方式访问它们,如下所示:

import mlflow

mlflow.set_experiment("/Path/to/your/prompt/engineering/experiment")

# Load input and output data across all Runs (configurations) as a Pandas DataFrame
inputs_outputs_pdf = mlflow.load_table(
    # All inputs and outputs created from the MLflow UI are stored in an artifact called
    # "eval_results_table.json"
    artifact_file="eval_results_table.json",
    # Include the run ID as a column in the table to distinguish inputs and outputs
    # produced by different runs
    extra_columns=["run_id"],
)
# Optionally convert the Pandas DataFrame to Spark where it can be stored as a Delta
# table or joined with existing Delta tables
inputs_outputs_sdf = spark.createDataFrame(inputs_outputs_pdf)

步骤 12:以编程方式生成预测

一旦你找到了一个配置良好的LLM、提示模板和参数,你可以在你选择的Python环境中使用相应的MLflow模型生成预测,或者你可以 部署它以进行实时服务

  1. 要在笔记本中加载MLflow模型进行批量推理,请点击运行的名称以打开**运行页面**,并在**Artifact Viewer**中选择*model*目录。然后,从*在Pandas DataFrame上预测*部分复制前几行代码,并在您选择的Python环境中运行它们,例如:

    ../../_images/load_model.png
    import mlflow
    
    logged_model = "runs:/8451075c46964f82b85fe16c3d2b7ea0/model"
    
    # Load model as a PyFuncModel.
    loaded_model = mlflow.pyfunc.load_model(logged_model)
    
  2. 然后,要生成预测,调用 predict() 方法并传入一个输入变量的字典。例如:

    article_text = """
    An MLflow Project is a format for packaging data science code in a reusable and reproducible way.
    The MLflow Projects component includes an API and command-line tools for running projects, which
    also integrate with the Tracking component to automatically record the parameters and git commit
    of your source code for reproducibility.
    
    This article describes the format of an MLflow Project and how to run an MLflow project remotely
    using the MLflow CLI, which makes it easy to vertically scale your data science code.
    """
    question = "What is an MLflow project?"
    
    loaded_model.predict({"article": article_text, "question": question})
    

    有关使用 MLflow 进行实时服务部署的更多信息,请参阅以下 说明

步骤 13:对模型的输出进行基于指标的评估

如果你想在特定指标上评估你的模型性能,MLflow 提供了 mlflow.evaluate() API。让我们在一些 预定义的文本摘要指标 上评估我们的模型:

import mlflow
import pandas as pd

logged_model = "runs:/840a5c43f3fb46f2a2059b761557c1d0/model"

article_text = """
An MLflow Project is a format for packaging data science code in a reusable and reproducible way.
The MLflow Projects component includes an API and command-line tools for running projects, which
also integrate with the Tracking component to automatically record the parameters and git commit
of your source code for reproducibility.

This article describes the format of an MLflow Project and how to run an MLflow project remotely
using the MLflow CLI, which makes it easy to vertically scale your data science code.
"""
question = "What is an MLflow project?"

data = pd.DataFrame(
    {
        "article": [article_text],
        "question": [question],
        "ground_truth": [
            article_text
        ],  # used for certain evaluation metrics, such as ROUGE score
    }
)

with mlflow.start_run():
    results = mlflow.evaluate(
        model=logged_model,
        data=data,
        targets="ground_truth",
        model_type="text-summarization",
    )

eval_table = results.tables["eval_results_table"]
print(f"See evaluation table below: \n{eval_table}")

评估结果也可以在 MLflow 评估界面中查看:

The mlflow.evaluate() API 还支持 自定义指标静态数据集评估 等。欲了解更多深入指南,请参阅 MLflow LLM 评估

实时服务的部署

一旦你找到了一个配置良好的 LLM、提示模板和参数,你可以按照以下方式部署相应的 MLflow 模型以进行实时服务:

  1. 将您的模型注册到 MLflow 模型注册表中。以下示例将通过 快速入门 创建的 MLflow 模型注册为名为 "mlflow_docs_qa_model" 的注册模型的版本 1。

    mlflow.register_model(
        model_uri="runs:/8451075c46964f82b85fe16c3d2b7ea0/model",
        name="mlflow_docs_qa_model",
    )
    
  2. 在您将运行 MLflow 模型服务器的环境中定义以下环境变量,例如本地机器上的 shell:

    • MLFLOW_DEPLOYMENTS_TARGET: MLflow AI Gateway 的 URL

  3. 使用 mlflow models serve 命令来启动 MLflow 模型服务器。例如,从本地机器的 shell 运行以下命令将在端口 8000 上提供模型:

    mlflow models serve --model-uri models:/mlflow_docs_qa_model/1 --port 8000
    
  4. 服务器启动后,可以通过REST API调用进行查询。例如:

    input='
    {
        "dataframe_records": [
            {
                "article": "An MLflow Project is a format for packaging data science code...",
                "question": "What is an MLflow Project?"
            }
        ]
    }'
    
    echo $input | curl \
      -s \
      -X POST \
      https://localhost:8000/invocations
      -H 'Content-Type: application/json' \
      -d @-
    

    其中 articlequestion 被替换为从您的提示模板中输入的变量。