生成式AI应用的版本追踪
MLflow 的 LoggedModel 为您的整个生成式AI应用提供了一个集中化、带版本控制的表示,包括其代码、配置以及相关的工件,如评估结果和追踪。这使您能够有效地管理复杂生成式AI系统的生命周期,确保可复现性、简化调试,并支持自信地部署性能最佳的应用版本。
本页介绍使用 LoggedModel
进行版本追踪的核心概念。本节后续页面将详细介绍创建、管理和利用这些应用版本的具体方法。
为什么要对您的生成式AI应用进行版本控制?
生成式AI应用是包含许多动态部分的复合系统:代码(代理逻辑、工具)、配置(LLM 参数、检索设置)和数据。如果不对这些组件进行系统性的版本控制,将会带来重大挑战。MLflow LoggedModel
通过解决以下问题帮助您克服这些挑战:
-
可复现性:确保您可以重新创建任何先前的应用状态。
- 挑战:如果没有版本控制,很难知道是哪种代码和配置组合产生了特定结果,这使得重现成功或失败变得困难。
- 解决方案:
LoggedModel
捕获或链接到特定版本所使用的确切代码(例如,Git 提交哈希)和配置,确保您始终可以重建它。
-
调试回归问题:简化找出导致问题的变更。
- 挑战:当应用质量下降时,识别是哪个变更(在代码、配置等方面)导致了回归,可能是一个耗时且令人沮丧的过程。
- 解决方案:通过追踪
LoggedModel
版本,您可以轻松地将问题版本与已知良好版本进行比较。这涉及到检查其链接代码(通过提交哈希)、配置、评估结果和追踪之间的差异,以隔离导致回归的变更。
-
客观比较与部署:支持数据驱动的决策来选择最佳版本。
- 挑战:如果没有清晰的方法根据一致的指标比较性能,选择要部署哪个应用版本可能带有主观性。
- 解决方案:
LoggedModel
版本可以被系统地评估(例如,使用mlflow.genai.evaluate()
)。这使您能够并排比较质量得分、成本和延迟等指标,确保您部署的是客观上最佳的版本。
-
可审计性和治理:提供清晰的部署内容和时间记录。
- 挑战:为了合规性或在调查生产事故时,您需要知道在特定时间点运行的应用的确切状态。
- 解决方案:每个
LoggedModel
版本都作为可审计记录,链接到特定的代码和配置,并且可以与其执行产生的追踪相关联。
如何使用 LoggedModel 进行版本控制
MLflow 中的 LoggedModel
不仅适用于传统的机器学习模型;它已被调整为生成式AI应用版本控制的核心。您的应用中每个您希望评估、部署或回溯的独特状态都可以被捕获为 LoggedModel
的一个新版本。
主要特点:
- 中心化版本实体:代表您的生成式AI应用的特定版本,或者一个重要的、可独立版本化的组件。
- 捕获应用状态:一个
LoggedModel
版本记录了代码、参数和其他依赖项的特定配置。 - 灵活的代码管理:
- 元数据中心(主要):最常见的情况是,
LoggedModel
链接到外部管理的代码(例如,通过 Git 提交哈希),作为该代码版本的元数据记录,以及其相关的配置和 MLflow 实体(评估、追踪)。 - 打包工件(可选):对于特定的部署需求(如 Databricks 模型服务),
LoggedModel
还可以直接捆绑应用代码和依赖项。
- 元数据中心(主要):最常见的情况是,
- 生命周期追踪:
LoggedModel
版本的历史记录使您能够追踪应用的演进、比较性能,并管理其从开发到生产的整个生命周期。
快速入门示例:代理配置的版本控制
要使用下面演示的 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
版本。
这提供了一种轻量级的方式来为您的应用进行版本控制,并将追踪链接到特定的代码提交。
后续步骤
既然您了解了对生成式AI应用进行版本控制的重要性以及 LoggedModel
如何促进这一点,您可以探索如何实现它:
- 使用 MLflow 追踪应用版本:了解当您的应用代码由外部管理时,创建和管理
LoggedModel
版本的主要方法。