跳至主要内容

🔁 MLflow - OSS LLM 可观测性和评估

什么是 MLflow?

MLflow 是一个端到端的开源 MLOps 平台,用于实验追踪模型管理评估可观测性(追踪)以及部署。MLflow 使团队能够高效地协同开发和优化 LLM 应用程序。

MLflow 与 LiteLLM 的集成支持与 OpenTelemetry 兼容的高级可观测性。

入门

安装 MLflow

uv add "litellm[mlflow]"

启用 LiteLLM 的 MLflow 自动追踪

import mlflow

mlflow.litellm.autolog()

# Alternative, you can set the callback manually in LiteLLM
# litellm.callbacks = ["mlflow"]

由于 MLflow 是开源且免费的,记录追踪信息无需注册或提供 API 密钥!

import litellm
import os

# Set your LLM provider's API key
os.environ["OPENAI_API_KEY"] = ""

# Call LiteLLM as usual
response = litellm.completion(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "Hi 👋 - i'm openai"}
]
)

打开 MLflow UI 并转到 Traces(追踪)选项卡以查看已记录的追踪信息

mlflow ui

工具调用追踪

MLflow 与 LiteLLM 的集成支持在消息之外追踪工具调用。

import mlflow

# Enable MLflow auto-tracing for LiteLLM
mlflow.litellm.autolog()

# Define the tool function.
def get_weather(location: str) -> str:
if location == "Tokyo":
return "sunny"
elif location == "Paris":
return "rainy"
return "unknown"

# Define function spec
get_weather_tool = {
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather in a given location",
"parameters": {
"properties": {
"location": {
"description": "The city and state, e.g., San Francisco, CA",
"type": "string",
},
},
"required": ["location"],
"type": "object",
},
},
}

# Call LiteLLM as usual
response = litellm.completion(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "What's the weather like in Paris today?"}
],
tools=[get_weather_tool]
)

评估

MLflow 与 LiteLLM 的集成允许您对 LLM 进行定性评估,以评估和/或监控您的生成式 AI 应用程序。

访问评估 LLM 教程,获取关于如何使用 LiteLLM 和 MLflow 运行评估套件的完整指南。

将追踪导出至 OpenTelemetry 收集器

MLflow 追踪与 OpenTelemetry 兼容。您可以通过在环境变量中设置端点 URL,将追踪导出到任何 OpenTelemetry 收集器(例如 Jaeger、Zipkin、Datadog、New Relic)。

# Set the endpoint of the OpenTelemetry Collector
os.environ["OTEL_EXPORTER_OTLP_TRACES_ENDPOINT"] = "https://:4317/v1/traces"
# Optionally, set the service name to group traces
os.environ["OTEL_SERVICE_NAME"] = "<your-service-name>"

有关更多详细信息,请参阅 MLflow 文档

将 LiteLLM 追踪与您的应用程序追踪相结合

LiteLLM 通常是大型 LLM 应用程序(如智能体模型)的一部分。MLflow Tracing 允许您对自定义 Python 代码进行插桩,从而将其与 LiteLLM 追踪相结合。

import litellm
import mlflow
from mlflow.entities import SpanType

# Enable MLflow auto-tracing for LiteLLM
mlflow.litellm.autolog()


class CustomAgent:
# Use @mlflow.trace to instrument Python functions.
@mlflow.trace(span_type=SpanType.AGENT)
def run(self, query: str):
# do something

while i < self.max_turns:
response = litellm.completion(
model="gpt-4o-mini",
messages=messages,
)

action = self.get_action(response)
...

@mlflow.trace
def get_action(llm_response):
...

这种方法可以生成统一的追踪信息,将您的自定义 Python 代码与 LiteLLM 调用合并在一起。

LiteLLM 代理服务器

依赖项

要在 LiteLLM 代理服务器上使用 mlflow,您需要在 Docker 容器中安装 mlflow 包。

uv add "mlflow>=3.1.4"

配置

在您的 LiteLLM 代理配置文件中配置 MLflow

model_list:
- model_name: openai/*
litellm_params:
model: openai/*

litellm_settings:
success_callback: ["mlflow"]
failure_callback: ["mlflow"]

环境变量

对于使用 Databricks 服务的 MLflow,请设置这些必需的环境变量

DATABRICKS_TOKEN="dapixxxxx"
DATABRICKS_HOST="https://dbc-xxxx.cloud.databricks.com"
MLFLOW_TRACKING_URI="databricks"
MLFLOW_REGISTRY_URI="databricks-uc"
MLFLOW_EXPERIMENT_ID="xxxx"

添加标签以实现更好的追踪

您可以向请求添加自定义标签,以改善 MLflow 中的追踪组织和过滤。标签可以帮助您按任务 ID、任务名称或任何自定义元数据对追踪进行分类和搜索。

curl --location 'http://0.0.0.0:4000/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer sk-1234' \
--data '{
"model": "gemini-2.5-flash",
"messages": [
{
"role": "user",
"content": "what llm are you"
}
],
"litellm_metadata": {
"tags": ["jobID:214590dsff09fds", "taskName:run_page_classification"]
}
}'

支持