本文档详细说明了TradingAgents-CN项目在v0.1.2-v0.1.7版本中进行的重大架构优化,主要解决了配置管理混乱和数据库管理器重复的问题,并在v0.1.7中引入了容器化部署和报告导出功能。
配置管理混乱:
.env文件 ──┐
├─→ 配置冲突和优先级不明
default_config.py ──┘
数据库管理器重复:
tradingagents.config.database_manager ──┐
├─→ 功能重叠
tradingagents.dataflows.database_manager ──┘
统一配置管理:
.env文件 (唯一配置源)
↓
tradingagents.config.database_manager (统一管理器)
↓
自动检测 + 智能降级
↓
文件缓存 / MongoDB / Redis
优化前:
# tradingagents/default_config.py
"database": {
"mongodb": {
"enabled": True, # 硬编码,无法通过.env控制
"host": os.getenv("MONGODB_HOST", "localhost"),
# ...
}
}
优化后:
# tradingagents/default_config.py
# Note: Database configuration is now managed by .env file and config.database_manager
# No database settings in default config to avoid configuration conflicts
配置示例:
# 数据库启用开关 (默认禁用)
MONGODB_ENABLED=false
REDIS_ENABLED=false
# MongoDB配置
MONGODB_HOST=localhost
MONGODB_PORT=27018
MONGODB_USERNAME=admin
MONGODB_PASSWORD=tradingagents123
MONGODB_DATABASE=tradingagents
MONGODB_AUTH_SOURCE=admin
# Redis配置
REDIS_HOST=localhost
REDIS_PORT=6380
REDIS_PASSWORD=tradingagents123
REDIS_DB=0
删除的文件:
tradingagents/dataflows/database_manager.py
保留的统一管理器:
tradingagents/config/database_manager.py
更新的文件:
tradingagents/dataflows/tdx_utils.py
tradingagents/dataflows/stock_data_service.py
scripts/setup/setup_databases.py
scripts/setup/init_database.py
tests/test_database_fix.py
docs/database_setup.md
导入更改:
# 修改前
from tradingagents.dataflows.database_manager import get_database_manager
# 修改后
from tradingagents.config.database_manager import get_database_manager
PyMongo的数据库对象重写了__bool__
方法,直接进行布尔值判断会抛出NotImplementedError
。
错误的判断方式:
if mongodb_db: # ❌ 会抛出NotImplementedError
# 执行操作
正确的判断方式:
# 方式1:使用is not None
if mongodb_db is not None: # ✅ 安全
# 执行操作
# 方式2:使用专门的方法
if db_manager.is_mongodb_available(): # ✅ 推荐
# 执行操作
编辑项目根目录的.env
文件:
# 禁用所有数据库(默认配置)
MONGODB_ENABLED=false
REDIS_ENABLED=false
# 启用MongoDB
MONGODB_ENABLED=true
MONGODB_HOST=localhost
MONGODB_PORT=27018
# ... 其他MongoDB配置
# 启用Redis
REDIS_ENABLED=true
REDIS_HOST=localhost
REDIS_PORT=6380
# ... 其他Redis配置
from tradingagents.config.database_manager import get_database_manager
# 获取统一数据库管理器
db_manager = get_database_manager()
# 检查数据库可用性
if db_manager.is_mongodb_available():
print("MongoDB可用")
if db_manager.is_redis_available():
print("Redis可用")
# 获取缓存后端信息
backend = db_manager.get_cache_backend() # "file", "mongodb", "redis"
# 获取数据库客户端
mongodb_client = db_manager.get_mongodb_client()
redis_client = db_manager.get_redis_client()
当数据库禁用时:
当数据库启用但不可用时:
# 设置禁用数据库
echo "MONGODB_ENABLED=false" >> .env
echo "REDIS_ENABLED=false" >> .env
# 运行系统,应该看到:
# - 没有数据库连接消息
# - 使用文件缓存
# - 没有布尔值判断错误
import os
from tradingagents.config.database_manager import get_database_manager
# 检查环境变量
print(f"MONGODB_ENABLED: {os.getenv('MONGODB_ENABLED', 'false')}")
print(f"REDIS_ENABLED: {os.getenv('REDIS_ENABLED', 'false')}")
# 检查管理器状态
db_manager = get_database_manager()
print(f"MongoDB可用: {db_manager.is_mongodb_available()}")
print(f"Redis可用: {db_manager.is_redis_available()}")
# 两者应该一致
本次架构优化显著提升了项目的可维护性和用户体验:
这些改进为项目的后续发展奠定了更加稳固的基础。