Files
aiagent/backend/app/api/agent_monitoring.py
renjianbo f2e65a8fbb feat: virtual company module, team projects, PWA dishes app, and startup scripts overhaul
- Add company module (3-tier org, CEO planning, parallel departments)
- Add company orchestrator, knowledge extractor, presets, scheduler
- Add company API endpoints, models, and frontend views
- Add 今天吃啥 PWA app (69 dishes, real images, offline support)
- Add team_projects output directory structure
- Add unified manage.ps1 for service lifecycle
- Add Windows startup guide v1.0
- Add TTS troubleshooting doc
- Update frontend (AgentChat UX overhaul, new views)
- Update backend (voice engine fix, multi-tenant, RBAC)
- Remove deprecated startup scripts and old docs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-10 22:37:56 +08:00

75 lines
2.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
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.has_permission("monitoring:view_all") 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.has_permission("monitoring:view_all") 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.has_permission("monitoring:view_all") 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.has_permission("monitoring:view_all") 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.has_permission("monitoring:view_all") else current_user.id
return AgentMonitoringService.get_daily_trend(db, user_id, days)