1. 项目概述与定位
1.1 项目背景
TradingAgents-CN 是基于 TauricResearch/TradingAgents 的中文增强版多智能体股票分析系统。项目定位为学习与研究平台,专注于为中文用户提供合规的股票分析工具,不提供实盘交易指令。
1.2 核心定位
- 教育导向:作为AI金融技术的学习工具
- 研究平台:支持多维度股票分析策略实验
- 中文本地化:完整支持A股、港股、美股市场
- 多LLM集成:支持国内外主流大语言模型
1.3 版本演进
项目经历了从 v0.1.x 到 v1.0.0-preview 的重大架构升级:
- v0.1.x:基于 Streamlit 的单体应用
- v1.0.0-preview:FastAPI + Vue 3 的企业级架构
2. 整体架构设计
2.1 分层架构概览
2.2 技术栈矩阵
| 层级 | v0.1.x | v1.0.0-preview | 升级意义 |
|---|---|---|---|
| 前端框架 | Streamlit | Vue 3 + Vite | 从原型工具升级为生产级SPA |
| 后端框架 | Streamlit | FastAPI + Uvicorn | 性能提升10倍,支持高并发 |
| 数据库 | 可选MongoDB | MongoDB + Redis | 引入Redis缓存层,降低延迟 |
| API架构 | 单体应用 | RESTful + WebSocket | 支持实时进度推送和双向通信 |
| 部署方式 | 本地/Docker | 多架构Docker + GitHub Actions | 支持x86_64和ARM64,CI/CD自动化 |
3. 多智能体系统设计思想
3.1 智能体分层架构
3.2 智能体协作模式
核心设计思想:
- 专业化分工:每个分析师专注特定领域(市场、基本面、新闻、社交媒体)
- 辩论机制:看涨/看跌研究员通过辩论形成平衡观点
- 层级决策:从分析→研究→交易→风控的渐进式决策流程
- 记忆系统:基于ChromaDB的向量记忆,支持经验积累
状态管理:
- 使用
AgentState统一状态管理 - 支持
InvestDebateState和RiskDebateState专用状态 - 通过 LangGraph 实现状态持久化和回溯
4. 数据流与缓存架构
4.1 统一数据源接口设计
项目采用策略模式实现多数据源支持,核心抽象在 dataflows/interface.py:
# 统一接口示例
def get_china_stock_data_unified(ticker: str, start_date: str, end_date: str) -> str:
# 自动选择最佳数据源(Tushare → AKShare → BaoStock)
# 智能日期范围处理
# 多级缓存查询
4.2 多级缓存架构
缓存实现亮点:
- 自适应缓存:
AdaptiveCache根据数据访问频率自动调整策略 - 智能降级:缓存失效时自动降级到下一级
- 数据一致性:通过版本号和哈希校验确保缓存一致性
4.3 数据源注册表
在 constants/data_sources.py 中定义了统一的数据源注册机制:
class DataSourceCode(str, Enum):
MONGODB = "mongodb" # 最高优先级缓存
TUSHARE = "tushare" # 专业A股数据
AKSHARE = "akshare" # 开源金融数据
YFINANCE = "yfinance" # 美股数据
# ... 更多数据源
DATA_SOURCE_REGISTRY: Dict[str, DataSourceInfo] = {
# 详细元数据配置
}
设计优势:
- 可扩展性:新增数据源只需注册,无需修改核心逻辑
- 优先级管理:支持动态调整数据源优先级
- 市场适配:不同市场(A股/港股/美股)可配置不同数据源组合
5. LLM集成与适配器模式
5.1 多LLM提供商支持架构
项目采用适配器模式实现多LLM提供商支持,核心实现在 trading_graph.py 的 create_llm_by_provider 函数:
def create_llm_by_provider(
provider: str,
model: str,
backend_url: str,
temperature: float,
max_tokens: int,
timeout: int,
api_key: str = None
):
# 统一创建LLM实例,支持10+提供商
5.2 支持的LLM提供商
| 提供商 | 适配器文件 | 特点 | 成本优化 |
|---|---|---|---|
| OpenAI | 原生支持 | Function Calling | 支持 |
| Google AI | google_openai_adapter.py |
OpenAI兼容模式 | 支持 |
| 阿里百炼 | dashscope_openai_adapter.py |
原生工具调用 | 支持 |
| DeepSeek | deepseek_adapter.py |
Token统计 | 支持 |
| 智谱AI | openai_compatible_base.py |
GLM系列 | 支持 |
| Anthropic | 原生支持 | Claude系列 | 支持 |
| SiliconFlow | OpenAI兼容 | 模型聚合平台 | 支持 |
| OpenRouter | OpenAI兼容 | 统一路由 | 支持 |
| Ollama | OpenAI兼容 | 本地部署 | 支持 |
| 自定义 | openai_compatible_base.py |
任意OpenAI兼容API | 支持 |
5.3 混合模式支持
核心创新:支持快速模型和深度模型来自不同提供商
# 配置示例
config = {
"quick_provider": "dashscope", # 快速思考:阿里百炼
"deep_provider": "openai", # 深度思考:OpenAI
"quick_think_llm": "qwen-turbo",
"deep_think_llm": "gpt-4"
}
优势:
- 成本优化:快速任务使用低成本模型,深度任务使用高性能模型
- 性能平衡:根据任务复杂度动态选择模型
- 风险分散:避免单一提供商故障导致系统不可用
6. 配置管理与可扩展性
6.1 配置系统演进
项目经历了从文件配置到数据库配置的演进:
旧系统(已废弃):
config_manager.py- JSON文件存储- 支持模型配置、定价配置、使用记录
- 废弃原因:不支持动态更新,多实例配置不一致
新系统:
- 数据库驱动:MongoDB存储配置
- 实时生效:无需重启即可更新配置
- 版本管理:支持配置版本回滚
- 多租户支持:不同用户可拥有独立配置
6.2 环境变量管理
采用 12-Factor App 原则,关键配置通过环境变量注入:
# LLM提供商配置
DASHSCOPE_API_KEY=sk-xxx
OPENAI_API_KEY=sk-xxx
GOOGLE_API_KEY=xxx
# 数据库配置
MONGODB_CONNECTION_STRING=mongodb://...
REDIS_URL=redis://...
# 功能开关
ONLINE_TOOLS_ENABLED=true
ONLINE_NEWS_ENABLED=true
REALTIME_DATA_ENABLED=false
6.3 插件化架构
工具系统采用插件化设计:
Toolkit统一管理所有工具- 支持动态加载和卸载工具
- 工具自动注册机制
数据源系统:
BaseProvider抽象基类- 统一接口规范,降低接入成本
- 自动发现机制扫描可用数据源
7. 部署与运维架构
7.1 Docker多架构支持
# docker-compose.yml 核心服务
services:
backend:
build:
context: .
dockerfile: Dockerfile.backend
# 支持 amd64 和 arm64
platform: linux/amd64,linux/arm64
frontend:
build:
context: .
dockerfile: Dockerfile.frontend
# Nginx静态资源服务
mongodb:
image: mongo:4.4
# 数据持久化
redis:
image: redis:7-alpine
# 缓存服务
多架构支持:
- x86_64:传统服务器
- ARM64:Apple Silicon、AWS Graviton、树莓派
- 自动化构建:GitHub Actions自动构建多架构镜像
7.2 监控与健康检查
健康检查机制:
- 后端:HTTP接口
/api/health - 前端:Nginx状态页
- 数据库:MongoDB ping命令
- Redis:
redis-cli ping
日志系统:
- 统一日志:
logging_manager.py集中管理 - 结构化日志:JSON格式,支持ELK栈集成
- 分级存储:INFO级别本地文件,ERROR级别发送到监控平台
7.3 性能监控
性能数据收集:
- 每个节点执行时间统计
- LLM Token使用量追踪
- 数据库查询性能分析
- 缓存命中率监控
性能报告示例:
🔍 分析性能统计报告
========================================
📊 分析师团队
• Market Analyst 12.34秒 (35.2%)
• Fundamentals Analyst 8.56秒 (24.3%)
📊 工具调用
• tools_market 5.23秒 (14.8%)
📊 研究团队
• Bull Researcher 3.45秒 (9.8%)
• Bear Researcher 4.12秒 (11.7%)
========================================
🎯 总执行时间: 35.12秒 (0.59分钟)
📈 节点总数: 12
⏱️ 平均节点耗时: 2.93秒
🐌 最慢节点: Market Analyst (12.34秒)
⚡ 最快节点: Msg Clear Market (0.12秒)
8. 核心设计模式与最佳实践
8.1 设计模式应用
1. 适配器模式(Adapter Pattern)
- 应用场景:LLM提供商统一接口
- 实现文件:所有
llm_adapters/文件 - 优势:新增LLM提供商无需修改核心逻辑
2. 策略模式(Strategy Pattern)
- 应用场景:数据源选择、缓存策略
- 实现文件:
dataflows/cache/adaptive.py - 优势:运行时动态切换策略
3. 工厂模式(Factory Pattern)
- 应用场景:智能体创建、工具节点生成
- 实现文件:
agents/__init__.py - 优势:集中管理对象创建逻辑
4. 观察者模式(Observer Pattern)
- 应用场景:进度回调、事件通知
- 实现文件:
graph/trading_graph.py的_send_progress_update - 优势:解耦进度生成和消费
5. 装饰器模式(Decorator Pattern)
- 应用场景:日志记录、性能监控
- 实现文件:
utils/logging_manager.py - 优势:非侵入式增强功能
8.2 代码质量实践
类型提示:全面使用 Python 3.12+ 类型提示
def get_stock_news_unified(
stock_code: str,
max_news: int = 100,
model_info: str = ""
) -> str:
...
错误处理:分级错误处理策略
- 可恢复错误:降级到备用数据源
- 不可恢复错误:记录详细日志并通知用户
- 警告:非关键问题,不影响主流程
文档规范:Google/Sphinx风格文档字符串
"""
统一新闻获取工具
Args:
stock_code (str): 股票代码 (支持A股如000001、港股如0700.HK、美股如AAPL)
max_news (int): 最大新闻数量,默认100
model_info (str): 当前使用的模型信息,用于特殊处理
Returns:
str: 格式化的新闻内容
"""
9. 性能优化策略
9.1 异步与并发优化
LangGraph异步支持:
# 使用异步流式处理
async for chunk in self.graph.astream(init_agent_state):
await self._send_progress_update(chunk, progress_callback)
数据库连接池:
- MongoDB:默认连接池大小100
- Redis:连接池自动管理
- HTTP客户端:httpx异步客户端
9.2 缓存优化
智能缓存预热:
# 在系统启动时预热热门股票数据
async def warmup_cache():
hot_stocks = ["000001", "600036", "AAPL", "TSLA"]
for stock in hot_stocks:
await cache.preload(stock)
缓存淘汰策略:
- LRU:最近最少使用
- TTL:基于时间的过期
- 手动清理:支持API触发缓存清理
9.3 LLM调用优化
批处理:合并多个请求减少API调用次数 重试机制:指数退避重试策略 超时控制:可配置的超时时间,防止长时间阻塞 Token优化:智能截断和压缩长文本
10. 安全与合规设计
10.1 API密钥管理
安全存储:
- 环境变量优先(12-Factor原则)
- 数据库加密存储(AES-256)
- 内存中不存储明文密钥
密钥轮换:
- 支持运行时更新API密钥
- 无需重启即可生效
- 旧密钥自动失效
10.2 数据安全
数据隔离:
- 用户数据隔离(MongoDB集合级别)
- 缓存数据隔离(Redis key前缀)
- 日志脱敏(自动隐藏API密钥)
访问控制:
- JWT令牌认证
- 基于角色的权限管理(RBAC)
- API速率限制
10.3 合规性
研究定位:
- 明确声明不提供实盘交易建议
- 所有分析结果仅供参考
- 用户需自行承担投资风险
数据合规:
- 使用公开数据源
- 遵守各数据源使用条款
- 支持数据本地化存储
11. 总结与展望
11.1 架构优势
- 模块化设计:各组件低耦合,易于扩展和维护
- 多LLM支持:灵活的适配器模式,快速集成新模型
- 智能缓存:多级缓存架构,显著提升性能
- 企业级部署:完整的Docker化方案,支持生产环境
- 中文本地化:深度支持A股、港股、美股市场
11.2 技术债务
- 配置系统迁移:旧版JSON配置系统已废弃,需完成向数据库配置的迁移
- 代码重复:部分数据源实现存在重复代码,可进一步抽象
- 测试覆盖:需要更全面的单元测试和集成测试
11.3 未来演进方向
- 强化学习集成:引入RL优化智能体决策
- 知识图谱:构建金融知识图谱增强分析能力
- 实时流处理:支持实时行情数据流式分析
- 联邦学习:多用户协同训练模型
- 量化回测:集成专业回测引擎
附录:核心文件索引
核心引擎
tradingagents/graph/trading_graph.py- 主引擎tradingagents/graph/setup.py- 工作流配置tradingagents/graph/conditional_logic.py- 条件逻辑
智能体
tradingagents/agents/__init__.py- 智能体工厂tradingagents/agents/analysts/- 分析师实现tradingagents/agents/researchers/- 研究员实现tradingagents/agents/risk_mgmt/- 风控实现
数据流
tradingagents/dataflows/interface.py- 统一接口tradingagents/dataflows/data_source_manager.py- 数据源管理tradingagents/dataflows/cache/- 缓存实现
LLM适配器
配置管理
tradingagents/config/config_manager.py- 配置管理(已废弃)tradingagents/default_config.py- 默认配置
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!
推荐
智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。