quick_analysis.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. print("=" * 70)
  19. print(" 快速分析 — 使用20260415已有数据")
  20. print("=" * 70)
  21. print()
  22. # 步骤1: 检查数据完整性
  23. print("📌 步骤 1: 检查数据完整性")
  24. print("-" * 70)
  25. metrics_file = OUTPUTS_DIR / "metrics_20260415.csv"
  26. if metrics_file.exists():
  27. import pandas as pd
  28. df = pd.read_csv(metrics_file)
  29. print(f"✅ metrics_20260415.csv 存在: {len(df)} 个广告")
  30. else:
  31. print("❌ metrics_20260415.csv 不存在,需要先运行 ROI 计算")
  32. sys.exit(1)
  33. print()
  34. # 步骤2: 分析广告并生成决策
  35. print("📌 步骤 2: 调用决策引擎")
  36. print("-" * 70)
  37. from tools.ad_decision import get_ads_for_review
  38. # ctx参数实际未使用,传入None即可
  39. result = await get_ads_for_review(None, metrics_csv=str(metrics_file))
  40. if result.error:
  41. print(f"❌ 决策引擎失败: {result.error}")
  42. sys.exit(1)
  43. print(result.output)
  44. print()
  45. # 解析结果
  46. import re
  47. json_match = re.search(r'```json\n(.*?)\n```', result.output, re.DOTALL)
  48. if json_match:
  49. review_data = json.loads(json_match.group(1))
  50. print(f"✅ 分类完成:")
  51. print(f" A类(极端差): {review_data.get('a_count', 0)} 个")
  52. print(f" B类(边缘): {review_data.get('b_count', 0)} 个")
  53. print(f" C类(正常): {review_data.get('c_count', 0)} 个")
  54. print(f" 📊 全局统计: ROI均值={review_data.get('roi_mean_all', 0):.2f}")
  55. # 展示B类广告样例
  56. if 'b_ads' in review_data and len(review_data['b_ads']) > 0:
  57. print(f"\n📋 B类广告样例(需AI推理):")
  58. for i, ad in enumerate(review_data['b_ads'][:3], 1):
  59. print(f"\n {i}. 广告 {ad.get('ad_id')}")
  60. print(f" ROI: {ad.get('动态ROI_7日均值', 0):.2f} 消耗: {ad.get('cost_7d_avg', 0):.0f}元/天")
  61. print(f" 建议: {ad.get('bid_candidate', 'N/A')}")
  62. else:
  63. print("⚠️ 无法解析决策结果")
  64. print()
  65. print("=" * 70)
  66. print("✅ 分析完成 — 现在可以让Agent基于B类广告进行AI推理决策")
  67. print("=" * 70)
  68. if __name__ == "__main__":
  69. asyncio.run(main())