hr-eval-api-v2 / services /supabase_logger_examples.py
KarenYYH
Add: Supabase 日志系统
fcc1a30
"""
Supabase 日志使用示例
演示如何在项目中使用 Supabase 日志记录器
"""
from services.supabase_logger import (
get_supabase_logger,
log_api_access,
log_model_performance,
LogPerformance,
log_debug,
log_error
)
from functools import wraps
import time
# ============================================
# 示例 1: 基本日志记录
# ============================================
def example_basic_logging():
"""基本日志记录示例"""
logger = get_supabase_logger()
# 记录 API 访问
logger.log_api_access(
endpoint="/api/v1/chat",
method="POST",
session_id="user_123",
response_time_ms=150,
status_code=200
)
# 记录调试信息
logger.log_debug(
level="INFO",
logger="intelligence_analyzer",
message="Scenario detected: policy_inquiry",
session_id="user_123",
data={
"scenario": "policy_inquiry",
"confidence": 0.95,
"keywords": ["年假", "多少"]
}
)
# 记录错误
logger.log_error(
error_type="model_load",
error_message="Failed to load sentiment model",
error_stack="Traceback...\n File ...",
endpoint="/api/v1/evaluate"
)
# ============================================
# 示例 2: 使用装饰器
# ============================================
@log_api_access("/api/v1/chat")
def process_chat_request(question: str, session_id: str):
"""
使用 API 日志装饰器
自动记录 API 调用和响应时间
"""
# 模拟处理
time.sleep(0.1)
return {"answer": "这是回复内容"}
@log_model_performance("sbert-hr-v2", "sbert")
def encode_with_sbert(text: str):
"""
使用模型性能装饰器
自动记录模型推理性能
"""
# 模拟编码
time.sleep(0.05)
return [0.1, 0.2, 0.3]
# ============================================
# 示例 3: 使用上下文管理器
# ============================================
def example_context_manager():
"""使用上下文管理器追踪性能"""
with LogPerformance("chat_processing", "deepseek-chat", "llm"):
# 执行耗时操作
result = call_llm_api("年假有多少天?")
return result
def call_llm_api(prompt: str):
"""模拟 LLM API 调用"""
time.sleep(0.2)
return "根据规定,年假天数与工龄挂钩..."
# ============================================
# 示例 4: 在 intelligence_analyzer 中集成
# ============================================
def analyze_with_logging(employee_input: str, session_id: str):
"""
在分析器中集成日志记录
"""
logger = get_supabase_logger()
# 记录输入
logger.log_debug(
level="INFO",
logger="intelligence_analyzer",
message=f"Processing input: {employee_input[:50]}...",
session_id=session_id
)
try:
# 场景识别
start_time = time.time()
scenario = detect_scenario(employee_input)
logger.log_debug(
level="INFO",
logger="intelligence_analyzer",
message="Scenario detected",
session_id=session_id,
data={"scenario": scenario, "confidence": 0.9}
)
# 记录用户行为
logger.log_user_behavior(
session_id=session_id,
action_type="chat",
action_detail="scenario_detection",
input_text=employee_input,
scenario_detected=scenario,
success=True
)
return scenario
except Exception as e:
# 记录错误
logger.log_error(
error_type="analysis_error",
error_message=str(e),
session_id=session_id,
user_input=employee_input
)
raise
def detect_scenario(text: str) -> str:
"""模拟场景检测"""
time.sleep(0.02)
return "policy_inquiry"
# ============================================
# 示例 5: 在 FastAPI 路由中集成
# ============================================
from fastapi import Request
async def log_request_middleware(request: Request, call_next):
"""
FastAPI 中间件 - 记录所有请求
"""
logger = get_supabase_logger()
start_time = time.time()
# 处理请求
response = await call_next(request)
# 计算响应时间
process_time = int((time.time() - start_time) * 1000)
# 记录日志
logger.log_api_access(
endpoint=request.url.path,
method=request.method,
client_ip=request.client.host if request.client else None,
user_agent=request.headers.get("user-agent"),
session_id=request.headers.get("x-session-id"),
response_time_ms=process_time,
status_code=response.status_code
)
# 添加响应头
response.headers["X-Process-Time"] = str(process_time)
return response
# ============================================
# 示例 6: 批量日志记录
# ============================================
def batch_log_examples():
"""批量日志记录示例"""
logger = get_supabase_logger()
# 批量记录用户行为
behaviors = [
{
"session_id": "user_1",
"action_type": "chat",
"scenario_detected": "policy_inquiry",
"success": True
},
{
"session_id": "user_1",
"action_type": "chat",
"scenario_detected": "leave_application",
"success": True
},
{
"session_id": "user_2",
"action_type": "evaluate",
"success": False,
"error_message": "Invalid dialogue format"
}
]
for behavior in behaviors:
logger.log_user_behavior(**behavior)
# ============================================
# 示例 7: 错误追踪
# ============================================
def example_with_error_tracking():
"""带错误追踪的示例"""
logger = get_supabase_logger()
try:
# 模拟错误
result = 1 / 0
except Exception as e:
import traceback
# 记录详细错误信息
logger.log_error(
error_type="calculation_error",
error_message=str(e),
error_stack=traceback.format_exc(),
session_id="debug_session",
request_data={"operation": "division", "operands": [1, 0]}
)
# ============================================
# 示例 8: 模型性能追踪
# ============================================
def track_all_models():
"""追踪所有模型的性能"""
logger = get_supabase_logger()
models = {
"sbert": "KarenYYH/sbert-hr-v2",
"sentiment": "KarenYYH/sentiment-hr",
"llm": "deepseek-chat"
}
for model_type, model_name in models.items():
with LogPerformance(f"load_{model_type}", model_name, model_type):
# 模拟模型加载
time.sleep(0.1)
# ============================================
# 简化的日志记录
# ============================================
def example_simplified_logging():
"""使用简化函数记录日志"""
# 调试日志
log_debug("intelligence_analyzer", "处理用户输入", level="INFO",
session_id="user_123", data={"input_length": 20})
# 错误日志
log_error("api_error", "请求超时", endpoint="/api/v1/chat",
session_id="user_123", response_time_ms=5000)
# ============================================
# 运行所有示例
# ============================================
if __name__ == "__main__":
print("运行 Supabase 日志示例...")
example_basic_logging()
print("✓ 基本日志记录")
process_chat_request("年假有多少天?", "user_123")
print("✓ API 日志装饰器")
encode_with_sbert("测试文本")
print("✓ 模型性能装饰器")
example_context_manager()
print("✓ 上下文管理器")
analyze_with_logging("年假有多少天?", "user_456")
print("✓ 分析器集成")
batch_log_examples()
print("✓ 批量日志")
example_with_error_tracking()
print("✓ 错误追踪")
track_all_models()
print("✓ 模型性能追踪")
example_simplified_logging()
print("✓ 简化日志")
print("\n所有示例运行完成!")