Files
aiagent/backend/app/api/agent_monitoring.py

75 lines
2.6 KiB
Python
Raw Normal View History

"""
Agent 监控 API 提供 Agent 专属统计数据
"""
from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session
from typing import Optional
from app.core.database import get_db
from app.api.auth import get_current_user
from app.models.user import User
from app.services.agent_monitoring_service import AgentMonitoringService
router = APIRouter(
prefix="/api/v1/agent-monitoring",
tags=["agent-monitoring"],
responses={
401: {"description": "未授权"},
403: {"description": "无权访问"},
},
)
@router.get("/overview")
async def get_agent_overview(
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user),
):
"""Agent 概览统计Agent 数、对话次数、LLM 调用次数、Token 用量、工具调用次数。"""
user_id = None if current_user.role == "admin" else current_user.id
return AgentMonitoringService.get_overview(db, user_id)
@router.get("/llm-calls")
async def get_llm_calls(
days: int = Query(7, ge=1, le=30, description="统计天数"),
limit: int = Query(50, ge=1, le=200, description="返回条数"),
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user),
):
"""最近 LLM 调用记录列表。"""
user_id = None if current_user.role == "admin" else current_user.id
return AgentMonitoringService.get_llm_calls(db, user_id, days, limit)
@router.get("/agents-stats")
async def get_agent_stats(
days: int = Query(7, ge=1, le=30, description="统计天数"),
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user),
):
"""各 Agent 用量统计(按 Agent 分组)。"""
user_id = None if current_user.role == "admin" else current_user.id
return AgentMonitoringService.get_agent_stats(db, user_id, days)
@router.get("/tool-usage")
async def get_tool_usage(
days: int = Query(7, ge=1, le=30, description="统计天数"),
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user),
):
"""工具调用频次统计。"""
user_id = None if current_user.role == "admin" else current_user.id
return AgentMonitoringService.get_tool_usage(db, user_id, days)
@router.get("/daily-trend")
async def get_daily_trend(
days: int = Query(7, ge=1, le=30, description="统计天数"),
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user),
):
"""每日 LLM 调用趋势。"""
user_id = None if current_user.role == "admin" else current_user.id
return AgentMonitoringService.get_daily_trend(db, user_id, days)