跳到主要内容

生成式AI应用的版本追踪

MLflow 的 LoggedModel 为您的整个生成式AI应用提供了一个集中化、带版本控制的表示,包括其代码、配置以及相关的工件,如评估结果和追踪。这使您能够有效地管理复杂生成式AI系统的生命周期,确保可复现性、简化调试,并支持自信地部署性能最佳的应用版本。

本页介绍使用 LoggedModel 进行版本追踪的核心概念。本节后续页面将详细介绍创建、管理和利用这些应用版本的具体方法。

为什么要对您的生成式AI应用进行版本控制?

生成式AI应用是包含许多动态部分的复合系统:代码(代理逻辑、工具)、配置(LLM 参数、检索设置)和数据。如果不对这些组件进行系统性的版本控制,将会带来重大挑战。MLflow LoggedModel 通过解决以下问题帮助您克服这些挑战:

  1. 可复现性:确保您可以重新创建任何先前的应用状态。

    • 挑战:如果没有版本控制,很难知道是哪种代码和配置组合产生了特定结果,这使得重现成功或失败变得困难。
    • 解决方案LoggedModel 捕获或链接到特定版本所使用的确切代码(例如,Git 提交哈希)和配置,确保您始终可以重建它。
  2. 调试回归问题:简化找出导致问题的变更。

    • 挑战:当应用质量下降时,识别是哪个变更(在代码、配置等方面)导致了回归,可能是一个耗时且令人沮丧的过程。
    • 解决方案:通过追踪 LoggedModel 版本,您可以轻松地将问题版本与已知良好版本进行比较。这涉及到检查其链接代码(通过提交哈希)、配置、评估结果和追踪之间的差异,以隔离导致回归的变更。
  3. 客观比较与部署:支持数据驱动的决策来选择最佳版本。

    • 挑战:如果没有清晰的方法根据一致的指标比较性能,选择要部署哪个应用版本可能带有主观性。
    • 解决方案LoggedModel 版本可以被系统地评估(例如,使用 mlflow.genai.evaluate())。这使您能够并排比较质量得分、成本和延迟等指标,确保您部署的是客观上最佳的版本。
  4. 可审计性和治理:提供清晰的部署内容和时间记录。

    • 挑战:为了合规性或在调查生产事故时,您需要知道在特定时间点运行的应用的确切状态。
    • 解决方案:每个 LoggedModel 版本都作为可审计记录,链接到特定的代码和配置,并且可以与其执行产生的追踪相关联。

如何使用 LoggedModel 进行版本控制

MLflow 中的 LoggedModel 不仅适用于传统的机器学习模型;它已被调整为生成式AI应用版本控制的核心。您的应用中每个您希望评估、部署或回溯的独特状态都可以被捕获为 LoggedModel 的一个新版本。

主要特点:

  • 中心化版本实体:代表您的生成式AI应用的特定版本,或者一个重要的、可独立版本化的组件。
  • 捕获应用状态:一个 LoggedModel 版本记录了代码、参数和其他依赖项的特定配置。
  • 灵活的代码管理:
    • 元数据中心(主要):最常见的情况是,LoggedModel 链接到外部管理的代码(例如,通过 Git 提交哈希),作为该代码版本的元数据记录,以及其相关的配置和 MLflow 实体(评估、追踪)。
    • 打包工件(可选):对于特定的部署需求(如 Databricks 模型服务),LoggedModel 还可以直接捆绑应用代码和依赖项。
  • 生命周期追踪LoggedModel 版本的历史记录使您能够追踪应用的演进、比较性能,并管理其从开发到生产的整个生命周期。

快速入门示例:代理配置的版本控制

MLflow 版本要求

要使用下面演示的 mlflow.set_active_model() 版本追踪功能,需要 MLflow 3。 您可以使用以下方式安装:

pip install --upgrade "mlflow>=3.1"

要连接到 Databricks 托管的 MLflow Tracking 进行日志记录,请改用 pip install --upgrade "mlflow[databricks]>=3.1"

以下是如何快速为您的生成式AI代理进行版本控制并链接其追踪,这些追踪可能在交互式开发或评估期间生成。本示例使用 mlflow.set_active_model() 和当前的 git 提交哈希来建立一个独特的版本上下文,确保任何生成的追踪都会自动与这个特定的代码版本关联。

import mlflow
import openai
import subprocess

# Configure OpenAI API Key (replace with your actual key)
os.environ["OPENAI_API_KEY"] = "your-api-key-here"

# Configure MLflow Tracking
mlflow.set_experiment("my-genai-app")

# Get current git commit hash
git_commit = (
subprocess.check_output(["git", "rev-parse", "HEAD"]).decode("ascii").strip()[:8]
)

# Define your application version using the git commit
app_name = "customer_support_agent"
logged_model_name = f"{app_name}-{git_commit}"

# Set the active model context - traces will be linked to this
mlflow.set_active_model(name=logged_model_name)

# Enable autologging for OpenAI, which automatically logs traces
mlflow.openai.autolog()

# Define and test your agent code - traces are automatically linked
client = openai.OpenAI()
questions = [
"How do I reset my password?",
"What are your business hours?",
"Can I get a refund for my last order?",
"Where can I find the user manual for product model number 15869?",
"I'm having trouble with the payment page, can you help?",
]
for question in questions:
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": question}],
temperature=0.7,
max_tokens=1000,
)

在本示例中

  • mlflow.openai.autolog() 捕获来自 OpenAI 调用的追踪,并自动将其与当前活动模型上下文关联。
  • Git 提交哈希被用作模型名称的一部分,以唯一标识此应用版本。
  • mlflow.set_active_model() 确定后续追踪应链接到此特定版本。
  • 在设置活动模型后进行的任何 OpenAI 调用,其追踪将自动链接到此 LoggedModel 版本。

这提供了一种轻量级的方式来为您的应用进行版本控制,并将追踪链接到特定的代码提交。

The MLflow UI showing the logged model autolog traces
lineage

后续步骤

既然您了解了对生成式AI应用进行版本控制的重要性以及 LoggedModel 如何促进这一点,您可以探索如何实现它: