🔁 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
- OpenAI Python SDK
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"]
}
}'
from openai import OpenAI
# Initialize the OpenAI client pointing to your LiteLLM proxy
client = OpenAI(
api_key="sk-1234", # Your LiteLLM proxy API key
base_url="http://0.0.0.0:4000" # Your LiteLLM proxy URL
)
# Make a request with tags in metadata
response = client.chat.completions.create(
model="gemini-2.5-flash",
messages=[
{
"role": "user",
"content": "what llm are you"
}
],
extra_body={
"litellm_metadata": {
"tags": ["jobID:214590dsff09fds", "taskName:run_page_classification"]
}
}
)
支持
- 有关追踪的高级用法和集成,请访问 MLflow Tracing 文档。
- 如果对此集成有任何疑问或问题,请在我们的 Github 仓库中提交 issue!