Files

87 lines
2.9 KiB
Python
Raw Permalink Normal View History

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
AI 指标报告脚本
聚合最近一段时间的 AI 使用与成本指标 ai-metrics-report Skill 调用
当前版本主要复用 TokenMonitor 的系统统计能力
"""
import argparse
import sys
from pathlib import Path
def add_project_root_to_path():
# 假定脚本位于 .claude/skills/ai-metrics-report/scripts/ 下
script_path = Path(__file__).resolve()
project_root = script_path.parents[4]
if str(project_root) not in sys.path:
sys.path.insert(0, str(project_root))
def main():
parser = argparse.ArgumentParser(description="Generate AI metrics report.")
parser.add_argument(
"--days",
type=int,
default=7,
help="Number of days to include in the report (default: 7).",
)
args = parser.parse_args()
add_project_root_to_path()
from src.analytics.token_monitor import TokenMonitor
monitor = TokenMonitor()
stats = monitor.get_system_token_stats(days=args.days) or {}
print(f"=== AI 指标报告(最近 {args.days} 天) ===\n")
total_tokens = stats.get("total_tokens", 0)
total_cost = stats.get("total_cost", 0.0)
total_requests = stats.get("total_requests", 0)
successful_requests = stats.get("successful_requests", 0)
failed_requests = stats.get("failed_requests", 0)
success_rate = stats.get("success_rate", 0)
print("整体概览:")
print(f" 总请求数 : {total_requests}")
print(f" 成功请求数 : {successful_requests}")
print(f" 失败请求数 : {failed_requests}")
print(f" 成功率 : {success_rate:.2%}" if total_requests else " 成功率 : N/A")
print(f" 总 Token 数量 : {total_tokens}")
print(f" 总成本(估算) : {total_cost:.4f}")
print()
# 模型使用分布
model_usage = stats.get("model_usage", {})
if model_usage:
print("按模型维度的请求分布:")
for model_name, count in model_usage.items():
pct = (count / total_requests) * 100 if total_requests else 0
print(f" - {model_name}: {count} 次 ({pct:.1f}%)")
print()
# 按日期的成本趋势(如有)
daily_usage = stats.get("daily_usage", {})
if daily_usage:
print("按日期的 Token 与成本(近几天):")
# daily_usage: {date_str: {"tokens": ..., "cost": ...}}
for date_str in sorted(daily_usage.keys()):
day_data = daily_usage[date_str]
tokens = day_data.get("tokens", 0)
cost = day_data.get("cost", 0.0)
print(f" {date_str}: tokens={tokens}, cost={cost:.4f}")
print()
print("提示:")
print(" - 成本与成功率仅基于 TokenMonitor 收集的调用记录进行估算;")
print(" - 如需更细粒度的会话质量指标,可结合 analytics 模块或自定义报表。")
if __name__ == "__main__":
main()