跳到主要内容

跟踪用户和会话

Traces with session IDs

许多现实世界中的 AI 应用程序使用会话来维护多轮用户交互。MLflow Tracing(跟踪)提供内置支持,可将跟踪与用户关联并将其分组到会话中。在您的 GenAI 应用程序中跟踪用户和会话,为理解用户行为、分析对话流程和改进个性化提供了必要的上下文。

在元数据中存储用户和会话 ID

MLflow 3 中的新功能

用于用户和会话跟踪的标准元数据仅在 MLflow 3 及更高版本中可用。要升级,请运行 pip install --upgrade mlflow

MLflow 为会话和用户跟踪提供了两个标准元数据字段

  • mlflow.trace.user - 将跟踪与特定用户关联
  • mlflow.trace.session - 将属于多轮对话的跟踪分组

当您使用这些标准元数据字段时,MLflow 会在 UI 中自动启用筛选和分组功能。与标签不同,元数据在跟踪被记录后无法更新,这使其成为用户和会话 ID 等不可变标识符的理想选择。

基本用法

要在您的应用程序中记录用户和会话信息,请使用 mlflow.update_current_trace() API,并在元数据中传递用户和会话 ID。

以下是如何向您的应用程序添加用户和会话跟踪的方法

import mlflow


@mlflow.trace
def chat_completion(message: list[dict], user_id: str, session_id: str):
"""Process a chat message with user and session tracking."""

# Add user and session context to the current trace
mlflow.update_current_trace(
metadata={
"mlflow.trace.user": user_id, # Links trace to specific user
"mlflow.trace.session": session_id, # Groups trace with conversation
}
)

# Your chat logic here
return generate_response(message)

Web 应用程序示例

import mlflow
import os
from fastapi import FastAPI, Request
from pydantic import BaseModel
from openai import OpenAI

app = FastAPI()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

mlflow.set_tracking_uri("databricks")
mlflow.set_experiment(experiment_id="3044868363145534")
mlflow.openai.autolog()


class ChatRequest(BaseModel):
message: str


@mlflow.trace
def process_chat(message: str, user_id: str, session_id: str):
# Update trace with user and session context
mlflow.update_current_trace(
metadata={
"mlflow.trace.session": session_id,
"mlflow.trace.user": user_id,
}
)

# Process chat message using OpenAI API
response = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": message},
],
)
return response.choices[0].message.content


@app.post("/chat")
def handle_chat(request: Request, chat_request: ChatRequest):
session_id = request.headers.get("X-Session-ID", "default-session")
user_id = request.headers.get("X-User-ID", "default-user")
response_text = process_chat_with_openai(chat_request.message, user_id, session_id)
return {"response": response_text}


@app.get("/")
async def root():
return {"message": "FastAPI MLflow Tracing Example"}


if __name__ == "__main__":
import uvicorn

uvicorn.run(app, host="0.0.0.0", port=8000)

请求示例

python app.py

curl -X POST https://:8000/chat \
-H "Content-Type: application/json" \
-H "X-Session-ID: session-123" \
-H "X-User-ID: user-456" \
-d '{"message": "Hello, how are you?"}'

查询

使用这些搜索查询在 MLflow UI 中筛选跟踪

# Find all traces for a specific user
metadata.`mlflow.trace.user` = 'user-123'

# Find all traces in a session
metadata.`mlflow.trace.session` = 'session-abc-456'

# Find traces for a user within a specific session
metadata.`mlflow.trace.user` = 'user-123' AND metadata.`mlflow.trace.session` = 'session-abc-456'

后续步骤