跳到主要内容

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:模型管理

LoggedModel 是一个一流实体,表示实验中的 AI 模型、代理或 GenAI 应用。它在整个开发生命周期中提供模型工件、执行追踪、评估指标和元数据统一追踪。

LoggedModel 的主要特性

LoggedModel 作为连接的中心枢纽

  • 模型工件和配置参数
  • 开发和生产中的执行追踪
  • 评估指标和性能评估
  • 版本历史和部署追踪

创建 LoggedModels

通过直接记录模型创建 LoggedModel

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}")

LoggedModel 的优势

统一追踪:所有与模型相关的工件、追踪和指标都组织在单个实体下,提供了模型行为和性能的完整可见性。

自动追踪链接:当使用活动模型模式时,所有执行追踪都会自动与 LoggedModel 关联,消除了手动追踪开销。

版本管理:LoggedModel 支持不同模型迭代的系统化版本控制和比较,实现数据驱动的模型选择。

评估集成:评估指标和结果直接链接到 LoggedModel,提供全面的性能评估。

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!"}]
)

追踪的目的

追踪能够实现

  • 可观测性:深入了解应用程序性能
  • 调试:了解执行流程以解决问题
  • 质量评估:评估响应质量随时间的变化
  • 人工审查:为专家标注提供数据

评估:质量判断

评估(Assessments)是附加到追踪的定性或定量判断,用于理解和提高 GenAI 应用的质量。一个追踪可以有多个评估,主要是反馈(Feedback)或预期(Expectations)。

反馈评估

反馈(Feedback)捕获对追踪的评估,包括

  • 🏷️ 名称 - 开发者定义的类别(例如,relevancecorrectness
  • 分数 - 评估(例如,竖起/向下大拇指、数值评分)
  • 💭 理由 - 分数的可选文本解释
# Log feedback programmatically
mlflow.log_feedback(
trace_id="trace-123",
name="relevance",
value=4,
rationale="Response was highly relevant to the question",
)

预期评估

预期(Expectations)是追踪的真实标签(例如,expected_factsexpected_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],
)

评估过程

  1. 新应用版本处理评估数据集中的输入
  2. MLflow 为每个输入生成一个新的追踪
  3. 配置的评分器用反馈注释追踪
  4. 所有带注释的追踪都存储在评估运行中

标注会话:人工审查

标注会话(Labeling Sessions)组织追踪以供人工审查,通常通过 MLflow UI 进行。领域专家可以浏览这些追踪并添加反馈作为评估。

# Create a labeling session
session = mlflow.genai.create_labeling_session(name="quality-review-session")

完整数据模型结构

所有组件都在一个实验中运行,形成一个全面的层次结构

开始使用

要开始使用 MLflow 数据模型

  1. 🧪 为您的 GenAI 应用设置一个实验
  2. 🤖 创建或设置 LoggedModel 以组织您的模型追踪
  3. 🔄 为您的 LLM 库启用自动追踪
  4. 🎯 为您的质量指标定义自定义评分器
  5. 📋 从代表性示例创建评估数据集
  6. 🚀 运行评估以比较不同版本
  7. 👥 审查追踪并根据需要添加人工反馈
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]
)

后续步骤

MLflow 全面的数据模型支持对 GenAI 应用进行系统化的观察、调试、评估和改进,为构建高质量、可靠和可维护的 GenAI 系统奠定了基础。