MLflow 数据模型
MLflow 的数据模型提供了一种结构化的方法来开发和管理生成式 AI (GenAI) 应用程序,通过组织您如何记录、调试和评估它们以实现质量、成本和延迟目标。这种结构化方法解决了可复现性、质量评估和迭代开发中的关键挑战。
概述
MLflow 数据模型由几个相互关联的实体组成,它们协同工作以支持您的 GenAI 应用程序开发工作流
🧪 实验 (Experiment) - 您的 GenAI 应用程序的根容器
🤖 已记录模型 (LoggedModel) - 一个包含集成跟踪功能的、表示您的 AI 模型或代理的一级实体
🔍 跟踪 (Trace) - 单个应用程序执行的输入、输出和中间步骤的日志
📊 评估 (Assessments) - 对跟踪的质量判断,分为反馈 (Feedback) 或预期 (Expectations)
🎯 评分器 (Scorers) - 产生反馈的自动化评估函数的定义
📋 评估数据集 (Evaluation Datasets) - 用于离线测试的精选输入集合(和可选的预期)
🚀 评估运行 (Evaluation Runs) - 针对评估数据集运行应用程序版本的结果,包含新的、已评分的跟踪
🏷️ 标注会话 (Labeling Sessions) - 为人工审查而组织的跟踪集合
MLflow 实验
一个 实验 (Experiment) 是每个独立应用程序或用例的顶级容器。它包含开发和生产中的所有跟踪以及数据模型中的所有其他实体。我们建议为每个应用程序创建一个单独的实验。
设置实验
import mlflow
# Create or set an experiment
mlflow.set_experiment("my-genai-app")
# Or create explicitly
experiment = mlflow.create_experiment("my-genai-app")
MLflow 已记录模型:模型管理
一个 已记录模型 (LoggedModel) 是一个一级实体,代表您在实验中的 AI 模型、代理或 GenAI 应用程序。它在整个开发生命周期中提供模型工件、执行跟踪、评估指标和元数据的统一跟踪。
已记录模型的主要功能
已记录模型作为连接以下各项的中心枢纽:
- 模型工件和配置参数
- 开发和生产中的执行跟踪
- 评估指标和性能评估
- 版本历史和部署跟踪
创建已记录模型
- 直接模型记录
- 活动模型模式
- 外部模型引用
通过直接记录您的模型来创建已记录模型
import mlflow
# Log a model with comprehensive metadata
logged_model = mlflow.langchain.log_model(
lc_model=your_chain,
name="customer_support_agent",
params={"temperature": 0.1, "max_tokens": 2000},
model_type="agent",
input_example={"messages": "How can I help you?"},
)
print(f"Model ID: {logged_model.model_id}")
使用活动模型模式实现自动跟踪链接
# Set active model for automatic trace association
mlflow.set_active_model(name="customer_support_agent")
# Enable autologging
mlflow.langchain.autolog()
# All traces will be automatically linked to the active model
response = your_model.invoke({"messages": "Hello!"})
引用存储在 MLflow 外部的模型
# Create external model reference
external_model = mlflow.create_external_model(
name="production_model_v2",
model_type="agent",
params={"version": "2.1", "endpoint": "api.example.com"},
)
已记录模型的优势
统一跟踪:所有与模型相关的工件、跟踪和指标都组织在单个实体下,提供模型行为和性能的完整可见性。
自动跟踪链接:当使用活动模型模式时,所有执行跟踪都会自动与已记录模型关联,从而消除了手动跟踪的开销。
版本管理:已记录模型支持不同模型迭代的系统化版本控制和比较,从而实现数据驱动的模型选择。
评估集成:评估指标和结果直接链接到已记录模型,提供全面的性能评估。
MLflow 跟踪:基础
核心概念是跟踪 (Trace):您的 GenAI 应用程序的单个完整执行(例如,用户请求或 API 调用)。
如何生成跟踪
跟踪通过以下方式生成:
- 自动检测
- 装饰器和上下文管理器
只需一行代码即可为 20 多个流行的 LLM SDK 启用自动跟踪
import mlflow
# Enable automatic tracing for OpenAI
mlflow.openai.autolog()
# Your existing code works unchanged
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4", messages=[{"role": "user", "content": "Hello!"}]
)
使用 MLflow 跟踪 API 进行细粒度控制
@mlflow.trace
def my_custom_function(input_data):
# Your custom logic here
result = process_data(input_data)
return result
跟踪的目的
跟踪能够实现:
- 可观测性:深入了解应用程序性能
- 调试:理解执行流程以解决问题
- 质量评估:随时间评估响应质量
- 人工审查:为专家标注提供数据
评估:质量判断
评估 (Assessments) 是附加到跟踪的定性或定量判断,用于理解和改进 GenAI 应用程序的质量。一个跟踪可以有多个评估,主要包括反馈 (Feedback) 或预期 (Expectations)。
反馈评估
反馈 (Feedback) 捕获对跟踪的评估,并包括:
- 🏷️ 名称 (Name) - 开发者定义的类别(例如,
relevance
(相关性)、correctness
(正确性)) - ⭐ 分数 (Score) - 评估(例如,点赞/踩,数值评分)
- 💭 理由 (Rationale) - 分数的可选文本解释
# Log feedback programmatically
mlflow.log_feedback(
trace_id="trace-123",
name="relevance",
value=4,
rationale="Response was highly relevant to the question",
)
预期评估
预期 (Expectations) 是跟踪的真实标签(例如,expected_facts
(预期事实)、expected_response
(预期响应))。这些主要用于离线评估,以将应用程序输出与已知正确答案进行比较。
评分器:自动化质量测量
评分器 (Scorers) 是程序化评估跟踪质量并生成反馈的函数。它们可以是:
基于代码的启发式方法
def check_response_length(trace):
"""Custom scorer to check if response is appropriate length"""
response = trace.outputs.get("response", "")
if 50 <= len(response) <= 500:
return {"score": 1, "rationale": "Response length is appropriate"}
else:
return {"score": 0, "rationale": "Response too short or too long"}
LLM 判官
from mlflow.metrics import genai
# Use built-in LLM judge
relevance_metric = genai.relevance()
# Evaluate traces with the metric
results = mlflow.genai.evaluate(
predict_fn=your_model, data=evaluation_data, scorers=[relevance_metric]
)
评估数据集和运行
MLflow 通过评估数据集和评估运行提供系统化的离线测试。
评估数据集
一个评估数据集 (Evaluation Dataset) 是一个精选的示例输入集合,用于评估和改进应用程序性能
# Create an evaluation dataset
dataset = mlflow.data.from_dict(
{
"inputs": ["What is MLflow?", "How do I log metrics?"],
"expectations": {
"expected_outputs": ["MLflow is...", "To log metrics..."],
},
}
)
# Register the dataset
mlflow.log_input(dataset, context="evaluation")
评估运行
一个评估运行 (Evaluation Run) 存储针对评估数据集运行新应用程序版本的结果
# Run evaluation
results = mlflow.genai.evaluate(
predict_fn=your_model,
data=evaluation_dataset,
scorers=[relevance_metric, accuracy_metric],
)
评估流程:
- 新应用程序版本处理来自评估数据集的输入
- MLflow 为每个输入生成一个新的跟踪
- 配置的评分器用反馈标注跟踪
- 所有标注的跟踪都存储在评估运行中
标注会话:人工审查
标注会话 (Labeling Sessions) 组织跟踪以供人工审查,通常通过 MLflow UI 进行。领域专家可以浏览这些跟踪并附加反馈作为评估。
# Create a labeling session
session = mlflow.genai.create_labeling_session(name="quality-review-session")
完整数据模型结构
所有组件都在一个实验中运行,形成一个全面的层次结构
开始使用
开始使用 MLflow 数据模型:
- 🧪 为您的 GenAI 应用程序设置实验
- 🤖 创建或设置已记录模型以组织您的模型跟踪
- 🔄 为您的 LLM 库启用自动跟踪
- 🎯 为您的质量指标定义自定义评分器
- 📋 从代表性示例创建评估数据集
- 🚀 运行评估以比较不同版本
- 👥 审查跟踪并根据需要添加人工反馈
import mlflow
# 1. Set up experiment
mlflow.set_experiment("my-genai-app")
# 2. Create LoggedModel
logged_model = mlflow.langchain.log_model(
lc_model=your_model, name="my_agent", params={"temperature": 0.1}
)
# 3. Enable tracing with active model
mlflow.set_active_model(name="my_agent")
mlflow.langchain.autolog()
# 4. Your app code runs normally
# Traces are automatically captured and linked to LoggedModel
# 5. Evaluate and iterate
results = mlflow.genai.evaluate(
predict_fn=your_model, data=evaluation_data, scorers=[your_custom_scorers]
)
后续步骤
- 🤖 已记录模型指南:学习全面的模型生命周期管理
- 🔄 自动跟踪:学习如何为您的 LLM 库启用自动跟踪
- 🛠️ 自定义跟踪:向您的应用程序添加手动检测
- 📊 评估指南:深入了解评估工作流
- 🖥️ MLflow UI:在网页界面中探索跟踪和结果
MLflow 全面的数据模型支持 GenAI 应用程序的系统化观测、调试、评估和改进,为构建高质量、可靠和可维护的 GenAI 系统奠定基础。