跟踪用户和会话
许多现实世界中的 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。
- Python
- Typescript
以下是如何向您的应用程序添加用户和会话跟踪的方法
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)
import * as mlflow from "mlflow-tracing";
const chatCompletion = mlflow.trace(
(message: list[dict], user_id: str, session_id: str) => {
// Add user and session context to the current trace
mlflow.updateCurrentTrace({
metadata: {
"mlflow.trace.user": user_id,
"mlflow.trace.session": session_id,
},
});
// Your chat logic here
return generate_response(message);
},
{ name: "chat_completion" }
);
Web 应用程序示例
- Python (FastAPI)
- Typescript (Node.js)
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?"}'
请求示例
curl -X POST "http://127.0.0.1:8000/chat" \
-H "Content-Type: application/json" \
-H "X-Session-ID: session-def-456" \
-H "X-User-ID: user-jane-doe-12345" \
-d '{"message": "What is my account balance?"}'
查询
- MLflow UI 搜索
- 编程分析
使用这些搜索查询在 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'
通过编程方式分析用户行为模式
import mlflow
import pandas as pd
# Search for all traces from a specific user
user_traces_df: pd.DataFrame = mlflow.search_traces(
filter_string=f"metadata.`mlflow.trace.user` = '{user_id}'",
)
# Calculate key metrics
total_interactions = len(user_traces_df)
unique_sessions = user_traces_df["metadata.mlflow.trace.session"].nunique()
avg_response_time = user_traces_df["info.execution_time_ms"].mean()
success_rate = user_traces_df["info.state"].value_counts()["OK"] / total_interactions
# Display the results
print(f"User has {total_interactions} interactions across {unique_sessions} sessions")
print(f"Average response time: {avg_response_time} ms")
print(f"Success rate: {success_rate}")