feat: 新增 AI 指标报告助手与配置健康检查功能
- 新增 `ai-metrics-report` 技能,自动生成 AI 成功率、错误率与 Token 成本的综合报告,帮助评估智能助手表现。 - 新增 `config-audit` 技能,检查当前环境配置的完整性与可用性,输出健康检查报告,确保系统稳定运行。 - 相关脚本已实现,支持从项目根目录执行并输出结构化结果。
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
#!/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()
|
||||
|
||||
Reference in New Issue
Block a user