quick_analysis.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. """
  2. 快速分析脚本:直接使用已有数据,跳过数据拉取
  3. """
  4. import os
  5. import sys
  6. from pathlib import Path
  7. import json
  8. import asyncio
  9. sys.path.insert(0, str(Path(__file__).parent.parent.parent))
  10. from dotenv import load_dotenv
  11. load_dotenv()
  12. from agent.utils import setup_logging
  13. setup_logging(level="INFO")
  14. # 设置环境
  15. sys.path.insert(0, str(Path(__file__).parent))
  16. from config import OUTPUTS_DIR
  17. async def main():
  18. """快速分析入口:检查已有 metrics 数据完整性,调用决策引擎并展示分类结果"""
  19. print("=" * 70)
  20. print(" 快速分析 — 使用20260415已有数据")
  21. print("=" * 70)
  22. print()
  23. # 步骤1: 检查数据完整性
  24. print("📌 步骤 1: 检查数据完整性")
  25. print("-" * 70)
  26. metrics_file = OUTPUTS_DIR / "metrics_20260415.csv"
  27. if metrics_file.exists():
  28. import pandas as pd
  29. df = pd.read_csv(metrics_file)
  30. print(f"✅ metrics_20260415.csv 存在: {len(df)} 个广告")
  31. else:
  32. print("❌ metrics_20260415.csv 不存在,需要先运行 ROI 计算")
  33. sys.exit(1)
  34. print()
  35. # 步骤2: 分析广告并生成决策
  36. print("📌 步骤 2: 调用决策引擎")
  37. print("-" * 70)
  38. from tools.ad_decision import get_ads_for_review
  39. # ctx参数实际未使用,传入None即可
  40. result = await get_ads_for_review(None, metrics_csv=str(metrics_file))
  41. if result.error:
  42. print(f"❌ 决策引擎失败: {result.error}")
  43. sys.exit(1)
  44. print(result.output)
  45. print()
  46. # 解析结果
  47. import re
  48. json_match = re.search(r'```json\n(.*?)\n```', result.output, re.DOTALL)
  49. if json_match:
  50. review_data = json.loads(json_match.group(1))
  51. print(f"✅ 分类完成:")
  52. print(f" 零消耗待关停: {review_data.get('a_count', 0)} 个")
  53. print(f" 待评估(候选): {review_data.get('b_count', 0)} 个")
  54. print(f" 正常运行: {review_data.get('c_count', 0)} 个")
  55. print(f" 📊 全局统计: ROI均值={review_data.get('roi_mean_all', 0):.2f}")
  56. # 展示待评估广告样例
  57. if 'b_ads' in review_data and len(review_data['b_ads']) > 0:
  58. print(f"\n📋 待评估广告样例(需AI推理):")
  59. for i, ad in enumerate(review_data['b_ads'][:3], 1):
  60. print(f"\n {i}. 广告 {ad.get('ad_id')}")
  61. print(f" ROI: {ad.get('动态ROI_7日均值', 0):.2f} 消耗: {ad.get('cost_7d_avg', 0):.0f}元/天")
  62. print(f" ROI区间: {ad.get('roi_zone', 'N/A')} 裂变对比: {ad.get('fission_vs_tier', 'N/A')}")
  63. else:
  64. print("⚠️ 无法解析决策结果")
  65. print()
  66. print("=" * 70)
  67. print("✅ 分析完成 — 现在可以让Agent基于待评估广告进行AI推理决策")
  68. print("=" * 70)
  69. if __name__ == "__main__":
  70. asyncio.run(main())