为了方便调试和追踪数据获取过程,系统在所有数据获取操作中添加了 数据来源标记,可以清楚地看到每次数据是从哪里获取的。
所有数据获取日志都使用统一格式:
[数据来源: xxx] 操作描述
[数据来源: MongoDB]- 从 MongoDB 数据库获取[数据来源: MongoDB-历史数据]- MongoDB 历史行情数据[数据来源: MongoDB-财务数据]- MongoDB 财务数据[数据来源: MongoDB-新闻数据]- MongoDB 新闻数据[数据来源: MongoDB-stock_basic_info]- MongoDB 股票基本信息
[数据来源: 文件缓存]- 从本地文件缓存获取[数据来源: 文件缓存-FINNHUB]- FINNHUB 数据缓存[数据来源: 文件缓存-Yahoo Finance]- Yahoo Finance 数据缓存
[数据来源: tushare]- Tushare API[数据来源: akshare]- AKShare API[数据来源: baostock]- BaoStock API[数据来源: API调用-FINNHUB]- FINNHUB API[数据来源: API调用-Yahoo Finance]- Yahoo Finance API[数据来源: API调用-AKShare]- AKShare API(港股)[数据来源: API调用成功-XXX]- API 调用成功
[数据来源: 过期缓存]- 使用过期的缓存数据[数据来源: 备用数据]- 生成的备用数据[数据来源: 备用数据源]- 降级到备用数据源[数据来源: API失败]- API 调用失败
[数据来源: 生成分析]- 生成基本面分析[数据来源: 生成分析成功]- 分析生成成功
市场分析师
↓
get_stock_market_data_unified (agent_utils.py)
↓
get_china_stock_data_unified (interface.py)
↓
DataSourceManager.get_stock_data (data_source_manager.py)
↓
Provider (AKShare/Tushare/BaoStock)
↓
日志: [数据来源: akshare] 开始获取股票数据: 000001
日志: ✅ [数据来源: akshare] 成功获取股票数据: 000001 (455字符, 耗时0.19秒)
市场分析师
↓
get_us_stock_data_cached (optimized_us_data.py)
↓
缓存检查
↓ (缓存命中)
日志: ⚡ [数据来源: 文件缓存-FINNHUB] 从缓存加载美股数据: AAPL
↓ (缓存未命中)
FINNHUB API / Yahoo Finance API
↓
日志: 🌐 [数据来源: API调用-FINNHUB] 从FINNHUB API获取数据: AAPL
日志: ✅ [数据来源: API调用成功-FINNHUB] FINNHUB数据获取成功: AAPL
2025-09-30 17:30:12,310 | dataflows | INFO | 📊 [数据来源: akshare] 开始获取股票数据: 002475
2025-09-30 17:30:12,524 | dataflows | INFO | ✅ [数据来源: akshare] 成功获取股票数据: 002475 (455字符, 耗时0.19秒)
2025-09-30 17:30:11,250 | dataflows | INFO | ✅ [数据来源: MongoDB-stock_basic_info] 缓存命中 | cache_hit=true code=002475
2025-09-30 17:17:20,655 | agents | INFO | 🌐 [数据来源: API调用-FINNHUB] 从FINNHUB API获取数据: AAPL
2025-09-30 17:17:21,807 | agents | INFO | ✅ [数据来源: API调用成功-FINNHUB] FINNHUB数据获取成功: AAPL
2025-09-30 17:17:21,809 | agents | INFO | 💾 [数据来源: finnhub] 数据已缓存: AAPL
2025-09-30 17:17:21,820 | agents | INFO | 🌐 [数据来源: API调用-FINNHUB] 从FINNHUB API获取数据: 0700.HK
2025-09-30 17:17:22,648 | agents | ERROR | ⚠️ [数据来源: API失败-FINNHUB] FINNHUB数据获取失败,尝试备用方案
2025-09-30 17:17:22,666 | agents | INFO | 🇭🇰 [数据来源: API调用-AKShare] 尝试使用AKShare获取港股数据: 0700.HK
2025-09-30 17:17:52,604 | agents | INFO | ✅ [数据来源: API调用成功-AKShare] AKShare港股数据获取成功: 0700.HK
2025-09-30 17:17:20,177 | agents | INFO | 📊 [数据来源: MongoDB] 使用MongoDB历史数据: 000001 (42条记录)
2025-09-30 17:30:27,316 | agents | INFO | 🔍 优先从数据库缓存获取002475财务数据
2025-09-30 17:30:27,410 | agents | INFO | ✅ [财务缓存] 从数据库缓存获取002475原始财务数据
-
tradingagents/dataflows/data_source_manager.py- 在
get_stock_data()方法中添加数据来源标记 - 在
get_stock_info()方法中添加数据来源标记 - 在降级处理中添加数据来源标记
- 在
-
tradingagents/dataflows/optimized_china_data.py- 在
get_stock_data()方法中添加数据来源标记 - 在
get_fundamentals_data()方法中添加数据来源标记 - 在缓存、API、备用数据等各个环节添加标记
- 在
-
tradingagents/dataflows/optimized_us_data.py- 在
get_stock_data()方法中添加数据来源标记 - 区分 FINNHUB、Yahoo Finance、AKShare 等不同来源
- 在缓存和 API 调用中添加标记
- 在
-
tradingagents/dataflows/enhanced_data_adapter.py- 在
get_historical_data()方法中添加数据来源标记 - 在
get_financial_data()方法中添加数据来源标记 - 在
get_news_data()方法中添加数据来源标记
- 在
当数据获取失败时,可以通过日志快速定位问题:
- 是缓存问题?
- 是 API 调用失败?
- 是数据源不可用?
通过日志可以看到:
- 哪些数据从缓存获取(快速)
- 哪些数据需要 API 调用(慢速)
- 是否需要优化缓存策略
可以统计:
- 各个数据源的使用频率
- 各个数据源的成功率
- 降级处理的触发频率
当用户报告数据问题时,可以通过日志:
- 确认数据来源
- 检查数据获取时间
- 验证数据完整性
# 查看所有数据来源日志
tail -f logs/tradingagents.log | grep "数据来源"
# 查看特定股票的数据来源
tail -f logs/tradingagents.log | grep "数据来源" | grep "000001"
# 查看 API 调用日志
tail -f logs/tradingagents.log | grep "数据来源.*API"
# 查看缓存命中日志
tail -f logs/tradingagents.log | grep "数据来源.*缓存"# 统计各数据来源的使用次数
grep "数据来源" logs/tradingagents.log | grep -oP '\[数据来源: \K[^\]]+' | sort | uniq -c | sort -rn# 查看 API 失败日志
grep "数据来源.*失败" logs/tradingagents.log
# 统计失败次数
grep "数据来源.*失败" logs/tradingagents.log | wc -l# 设置环境变量
export TA_USE_APP_CACHE=true
# 或在 .env 文件中
TA_USE_APP_CACHE=true启用后,日志会显示:
📊 [数据来源: MongoDB] 使用MongoDB历史数据: 000001 (42条记录)
export TA_USE_APP_CACHE=false禁用后,日志会显示:
🌐 [数据来源: akshare] 开始获取股票数据: 000001
数据来源日志功能为系统提供了完整的数据获取追踪能力,使得:
- ✅ 调试更容易
- ✅ 性能优化有依据
- ✅ 问题排查更快速
- ✅ 数据来源清晰可见
所有数据获取操作都会在日志中明确标注数据来源,方便开发和运维人员快速定位问题!