Add comprehensive codebase analysis guide
Added 分析指南.md - a detailed Chinese guide for analyzing the TradingAgents codebase, including: - Project overview and architecture - Multi-agent workflow explanation - Directory structure breakdown - Key design patterns - Step-by-step learning path - Code reading recommendations - Common questions and best practices
This commit is contained in:
parent
13b826a31d
commit
083466c75e
|
|
@ -0,0 +1,889 @@
|
|||
# TradingAgents 代码库分析指南
|
||||
|
||||
## 📊 代码库概述
|
||||
|
||||
**TradingAgents** 是一个基于大语言模型的**多智能体金融交易框架**,模拟真实交易公司的运作方式。它使用专业的AI代理团队来分析市场、辩论投资策略,并在风险管理监督下执行交易决策。
|
||||
|
||||
### 核心数据
|
||||
|
||||
- 🏗️ **3,061 行** Python 代码
|
||||
- 📁 **56 个**源文件
|
||||
- 📦 **5.1 MB** 代码库大小
|
||||
- 🤖 **10+ 专业**AI代理
|
||||
- 📚 **引用文献**: TauricResearch (arXiv: 2412.20138)
|
||||
|
||||
### 技术特点
|
||||
|
||||
- **金融交易与投资分析**: 股票市场分析和决策制定
|
||||
- **多代理协作**: 具有不同角色的专业代理在交易工作流中协作
|
||||
- **研究导向**: 专为金融AI研究设计(不作为投资建议)
|
||||
- **LLM原生架构**: 使用LangChain和LangGraph进行代理编排
|
||||
- **模块化数据处理**: 支持多个数据供应商(yfinance、Alpha Vantage、OpenAI、本地)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 如何系统地分析这个代码库
|
||||
|
||||
### 第一步:理解项目架构(推荐阅读顺序)
|
||||
|
||||
#### 1️⃣ 入门文件(必读)
|
||||
|
||||
```
|
||||
📄 README.md
|
||||
- 项目概览、安装指南、使用示例
|
||||
- 框架图和代理角色描述
|
||||
```
|
||||
|
||||
#### 2️⃣ 核心架构文件(理解系统设计)
|
||||
|
||||
```
|
||||
📄 tradingagents/graph/trading_graph.py
|
||||
- 主编排器类(TradingAgentsGraph)
|
||||
- 初始化所有组件
|
||||
- propagate() 方法展示执行流程
|
||||
- 记忆系统初始化
|
||||
|
||||
📄 tradingagents/graph/setup.py
|
||||
- 使用LangGraph构建图
|
||||
- 代理节点创建和边定义
|
||||
- 工作流编排模式(100+ 行)
|
||||
|
||||
📄 tradingagents/agents/utils/agent_states.py
|
||||
- 多代理系统的状态定义
|
||||
- AgentState、InvestDebateState、RiskDebateState 模式
|
||||
```
|
||||
|
||||
#### 3️⃣ 数据层文件(理解数据流)
|
||||
|
||||
```
|
||||
📄 tradingagents/dataflows/interface.py
|
||||
- 数据供应商路由和抽象
|
||||
- 配置驱动的数据源选择
|
||||
- 回退机制实现
|
||||
|
||||
📄 tradingagents/default_config.py
|
||||
- LLM、辩论轮数、数据供应商的配置设置
|
||||
- 可轻松定制用于不同实验
|
||||
```
|
||||
|
||||
#### 4️⃣ 代理实现示例(理解代理工作方式)
|
||||
|
||||
```
|
||||
📄 tradingagents/agents/analysts/market_analyst.py
|
||||
- 分析师的结构示例
|
||||
- 与LangChain的工具使用模式
|
||||
- 报告生成
|
||||
|
||||
📄 tradingagents/agents/researchers/bull_researcher.py
|
||||
- 记忆增强代理示例
|
||||
- 辩论参与模式
|
||||
- 从过去情况中学习
|
||||
|
||||
📄 tradingagents/agents/trader/trader.py
|
||||
- 交易决策制定
|
||||
- 历史记忆参考
|
||||
```
|
||||
|
||||
#### 5️⃣ 用户界面(理解使用方式)
|
||||
|
||||
```
|
||||
📄 cli/main.py
|
||||
- 用户友好的CLI与Rich TUI
|
||||
- 用于跟踪代理进度的消息缓冲区
|
||||
- 报告聚合和显示
|
||||
|
||||
📄 main.py
|
||||
- 展示编程式使用的最小示例
|
||||
- 自定义配置和测试
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ 目录结构详解
|
||||
|
||||
```
|
||||
TradingAgents/
|
||||
├── README.md # 综合文档
|
||||
├── pyproject.toml # 项目元数据和依赖
|
||||
├── requirements.txt # Python包要求
|
||||
├── setup.py # 包安装配置
|
||||
├── main.py # 入口点和示例
|
||||
├── test.py # 简单测试脚本
|
||||
├── .env.example # 环境变量模板
|
||||
├── LICENSE # Apache 2.0 许可证
|
||||
│
|
||||
├── tradingagents/ # 主包(3,061 行)
|
||||
│ ├── default_config.py # 全局配置设置
|
||||
│ │
|
||||
│ ├── agents/ # 代理实现
|
||||
│ │ ├── __init__.py # 代理工厂导出
|
||||
│ │ │
|
||||
│ │ ├── analysts/ # 研究团队 - 市场分析
|
||||
│ │ │ ├── market_analyst.py # 技术指标和价格模式
|
||||
│ │ │ ├── fundamentals_analyst.py # 财务数据和公司基本面
|
||||
│ │ │ ├── news_analyst.py # 新闻和宏观指标
|
||||
│ │ │ └── social_media_analyst.py # 社交媒体情绪分析
|
||||
│ │ │
|
||||
│ │ ├── researchers/ # 辩论团队 - 投资论证
|
||||
│ │ │ ├── bull_researcher.py # 主张买入(带记忆)
|
||||
│ │ │ └── bear_researcher.py # 主张卖出(带记忆)
|
||||
│ │ │
|
||||
│ │ ├── risk_mgmt/ # 风险管理辩论团队
|
||||
│ │ │ ├── aggresive_debator.py # 激进/冒险风险立场
|
||||
│ │ │ ├── conservative_debator.py # 保守/安全风险立场
|
||||
│ │ │ └── neutral_debator.py # 中立风险视角
|
||||
│ │ │
|
||||
│ │ ├── trader/ # 决策代理
|
||||
│ │ │ └── trader.py # 将辩论转化为交易行动
|
||||
│ │ │
|
||||
│ │ ├── managers/ # 管理和协调
|
||||
│ │ │ ├── research_manager.py # 投资辩论的裁判/主持人
|
||||
│ │ │ └── risk_manager.py # 风险辩论的裁判/主持人
|
||||
│ │ │
|
||||
│ │ └── utils/ # 共享工具
|
||||
│ │ ├── agent_states.py # 多代理系统的状态定义
|
||||
│ │ ├── agent_utils.py # 工具定义和实用程序
|
||||
│ │ ├── memory.py # 基于嵌入的记忆(ChromaDB)
|
||||
│ │ ├── core_stock_tools.py # 股票价格/OHLCV工具
|
||||
│ │ ├── technical_indicators_tools.py # 技术分析工具
|
||||
│ │ ├── fundamental_data_tools.py # 财务数据工具
|
||||
│ │ └── news_data_tools.py # 新闻和情绪工具
|
||||
│ │
|
||||
│ ├── dataflows/ # 数据抽象和供应商路由
|
||||
│ │ ├── interface.py # 供应商路由和回退逻辑
|
||||
│ │ ├── config.py # 数据供应商配置
|
||||
│ │ ├── y_finance.py # yfinance集成
|
||||
│ │ ├── alpha_vantage*.py # Alpha Vantage集成(4个文件)
|
||||
│ │ ├── openai.py # 用于数据获取的OpenAI API
|
||||
│ │ ├── google.py # Google新闻集成
|
||||
│ │ ├── local.py # 本地数据回退
|
||||
│ │ ├── reddit_utils.py # Reddit情绪抓取(PRAW)
|
||||
│ │ ├── googlenews_utils.py # Google新闻解析
|
||||
│ │ ├── stockstats_utils.py # 技术指标计算
|
||||
│ │ ├── yfin_utils.py # yfinance实用程序
|
||||
│ │ └── utils.py # 通用数据流实用程序
|
||||
│ │
|
||||
│ └── graph/ # 工作流编排(LangGraph)
|
||||
│ ├── trading_graph.py # 主编排器类
|
||||
│ ├── setup.py # 图构建和边定义
|
||||
│ ├── propagation.py # 状态初始化
|
||||
│ ├── conditional_logic.py # 代理流的路由器逻辑
|
||||
│ ├── reflection.py # 决策后学习和记忆
|
||||
│ └── signal_processing.py # 最终信号提取
|
||||
│
|
||||
├── cli/ # 命令行界面
|
||||
│ ├── main.py # 交互式CLI应用(Typer/Rich)
|
||||
│ ├── models.py # CLI数据模型
|
||||
│ ├── utils.py # CLI实用程序
|
||||
│ └── static/ # 静态资源
|
||||
│
|
||||
└── assets/ # 文档图片/图表
|
||||
├── TauricResearch.png
|
||||
├── schema.png
|
||||
├── analyst.png
|
||||
├── cli/ # CLI截图
|
||||
└── wechat.png
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔄 多代理工作流
|
||||
|
||||
系统采用**状态机架构**,代理按以下顺序协作:
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ 阶段1: 分析师团队(并行分析) │
|
||||
├─────────────────────────────────────────────┤
|
||||
│ • 市场分析师 → 技术指标分析 │
|
||||
│ - 工具: get_stock_data(), get_indicators()
|
||||
│ - 指标: SMA, EMA, MACD, RSI, 布林带, ATR
|
||||
│ - 输出: market_report │
|
||||
│ │
|
||||
│ • 基本面分析师 → 财务数据分析 │
|
||||
│ - 工具: get_fundamentals(), get_balance_sheet()
|
||||
│ - 输出: fundamentals_report │
|
||||
│ │
|
||||
│ • 新闻分析师 → 宏观事件影响 │
|
||||
│ - 工具: get_news(), get_global_news() │
|
||||
│ - 输出: news_report │
|
||||
│ │
|
||||
│ • 社交媒体分析师 → 市场情绪 │
|
||||
│ - 工具: get_news() (用于情绪) │
|
||||
│ - 输出: sentiment_report │
|
||||
└─────────────────────────────────────────────┘
|
||||
↓
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ 阶段2: 研究团队(辩论决策) │
|
||||
├─────────────────────────────────────────────┤
|
||||
│ • 多头研究员 │
|
||||
│ - 角色: 倡导投资(买入立场) │
|
||||
│ - 能力: 使用ChromaDB记忆回忆类似情况 │
|
||||
│ │
|
||||
│ • 空头研究员 │
|
||||
│ - 角色: 反对投资(卖出立场) │
|
||||
│ - 能力: 带过去空头分析的记忆增强 │
|
||||
│ │
|
||||
│ • 研究经理(裁判) │
|
||||
│ - 决策: 做出最终决定(买入/卖出/持有) │
|
||||
│ - 输出: investment_plan │
|
||||
└─────────────────────────────────────────────┘
|
||||
↓
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ 阶段3: 交易员(转化为行动) │
|
||||
├─────────────────────────────────────────────┤
|
||||
│ • 交易员 │
|
||||
│ - 输入: 研究经理的投资计划 │
|
||||
│ - 记忆: 参考过去的交易决策及结果 │
|
||||
│ - 输出: trader_investment_plan │
|
||||
│ - 特点: 从过去的错误中学习 │
|
||||
└─────────────────────────────────────────────┘
|
||||
↓
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ 阶段4: 风险管理团队(风险评估) │
|
||||
├─────────────────────────────────────────────┤
|
||||
│ • 激进/冒险分析师 │
|
||||
│ - 角色: 主张接受投资机会 │
|
||||
│ - 关注: 增长潜力、上行场景 │
|
||||
│ │
|
||||
│ • 保守/安全分析师 │
|
||||
│ - 角色: 强调下行保护和风险缓解 │
|
||||
│ - 关注: 损失预防、可持续性 │
|
||||
│ │
|
||||
│ • 中立分析师 │
|
||||
│ - 角色: 激进和保守观点之间的平衡视角 │
|
||||
│ - 关注: 风险回报平衡 │
|
||||
│ │
|
||||
│ • 风险经理(裁判) │
|
||||
│ - 决策: 批准/拒绝交易决定 │
|
||||
│ - 输出: final_trade_decision │
|
||||
└─────────────────────────────────────────────┘
|
||||
↓
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ 阶段5: 反思(学习) │
|
||||
├─────────────────────────────────────────────┤
|
||||
│ • reflect_and_remember() 分析交易结果 │
|
||||
│ • 用经验教训更新记忆 │
|
||||
│ • 存储表现供未来参考 │
|
||||
└─────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ 关键技术栈
|
||||
|
||||
### 核心框架
|
||||
|
||||
| 层级 | 技术 | 版本 | 用途 |
|
||||
|------|------|------|------|
|
||||
| **代理编排** | LangGraph | v0.4.8+ | 多代理工作流引擎、状态管理、条件路由 |
|
||||
| **LLM集成** | LangChain | v0.3+ | 工具绑定、提示模板、多提供商支持 |
|
||||
| **LLM提供商** | OpenAI, Anthropic, Google | - | 多种LLM后端(o1-preview, gpt-4o, claude等) |
|
||||
| **记忆系统** | ChromaDB | v1.0+ | 代理的基于嵌入的语义记忆 |
|
||||
| **嵌入** | OpenAI text-embedding-3-small | - | 语义搜索过去的决策 |
|
||||
| **数据源** | yfinance, Alpha Vantage, EODHD, Finnhub, TuShare | - | 股票/基本面数据提供商 |
|
||||
| **情绪分析** | PRAW (Reddit), feedparser | - | 社交媒体和新闻情绪 |
|
||||
| **技术指标** | StockStats | v0.6.5 | MACD, RSI, 布林带, SMA, EMA, ATR, VWMA |
|
||||
| **回测** | Backtrader | v1.9+ | 交易策略回测 |
|
||||
| **CLI框架** | Typer, Rich, Questionary | - | 交互式命令行界面 |
|
||||
| **数据处理** | Pandas, Numpy | - | 数据处理和分析 |
|
||||
| **HTTP客户端** | Requests | - | API通信 |
|
||||
| **异步缓存** | Redis | v6.2+ | API响应缓存 |
|
||||
| **环境** | Python 3.10+ | - | 运行时和依赖管理 |
|
||||
|
||||
---
|
||||
|
||||
## 🎨 核心设计模式
|
||||
|
||||
### 设计模式1:条件路由模式
|
||||
|
||||
**文件**: `tradingagents/graph/conditional_logic.py`
|
||||
|
||||
系统使用路由逻辑控制代理之间的流转:
|
||||
|
||||
```python
|
||||
# 示例路由函数
|
||||
def should_continue_debate(state):
|
||||
"""决定辩论是否应该继续"""
|
||||
if state["debate_rounds"] >= max_rounds:
|
||||
return "end_debate"
|
||||
return "continue_debate"
|
||||
|
||||
def should_continue_analyst(state):
|
||||
"""决定分析师是否需要执行工具"""
|
||||
last_message = state["messages"][-1]
|
||||
if last_message.tool_calls:
|
||||
return "execute_tools"
|
||||
return "continue_workflow"
|
||||
```
|
||||
|
||||
**特点**:
|
||||
- 在多头/空头研究员之间交替
|
||||
- 使用辩论轮数计数器限制迭代
|
||||
- 根据工具调用决定执行路径
|
||||
|
||||
---
|
||||
|
||||
### 设计模式2:供应商抽象与回退
|
||||
|
||||
**文件**: `tradingagents/dataflows/interface.py`
|
||||
|
||||
数据层支持多供应商配置,带自动回退机制:
|
||||
|
||||
```python
|
||||
VENDOR_METHODS = {
|
||||
"get_stock_data": {
|
||||
"alpha_vantage": get_alpha_vantage_stock,
|
||||
"yfinance": get_YFin_data_online,
|
||||
"local": get_YFin_data, # 回退选项
|
||||
},
|
||||
"get_fundamentals": {
|
||||
"alpha_vantage": get_alpha_vantage_fundamentals,
|
||||
"openai": get_openai_fundamentals,
|
||||
"yfinance": get_yfinance_fundamentals,
|
||||
}
|
||||
}
|
||||
|
||||
def route_to_vendor(method_name, *args, **kwargs):
|
||||
"""路由到配置的供应商,失败时回退"""
|
||||
vendor = config.get_vendor_for(method_name)
|
||||
try:
|
||||
return VENDOR_METHODS[method_name][vendor](*args, **kwargs)
|
||||
except Exception as e:
|
||||
# 尝试回退供应商
|
||||
fallback_vendor = config.get_fallback_vendor(method_name)
|
||||
return VENDOR_METHODS[method_name][fallback_vendor](*args, **kwargs)
|
||||
```
|
||||
|
||||
**优势**:
|
||||
- 配置驱动的供应商选择
|
||||
- 主供应商失败时自动回退
|
||||
- 每个工具支持多个数据提供商
|
||||
|
||||
---
|
||||
|
||||
### 设计模式3:记忆增强代理
|
||||
|
||||
**文件**: `tradingagents/agents/utils/memory.py`
|
||||
|
||||
基于ChromaDB的语义记忆实现学习:
|
||||
|
||||
```python
|
||||
class FinancialSituationMemory:
|
||||
def __init__(self, collection_name):
|
||||
self.client = chromadb.Client()
|
||||
self.collection = self.client.create_collection(collection_name)
|
||||
|
||||
def get_embedding(self, situation):
|
||||
"""使用OpenAI嵌入"""
|
||||
return openai.embeddings.create(
|
||||
input=situation,
|
||||
model="text-embedding-3-small"
|
||||
)
|
||||
|
||||
def add_situations(self, situations_and_recommendations):
|
||||
"""存储过去的情况和建议"""
|
||||
for situation, recommendation in situations_and_recommendations:
|
||||
embedding = self.get_embedding(situation)
|
||||
self.collection.add(
|
||||
embeddings=[embedding],
|
||||
documents=[situation],
|
||||
metadatas=[{"recommendation": recommendation}]
|
||||
)
|
||||
|
||||
def get_memories(self, current_situation, n_matches=2):
|
||||
"""检索类似的过去决策"""
|
||||
query_embedding = self.get_embedding(current_situation)
|
||||
results = self.collection.query(
|
||||
query_embeddings=[query_embedding],
|
||||
n_results=n_matches
|
||||
)
|
||||
return results
|
||||
```
|
||||
|
||||
**应用场景**:
|
||||
- 多头研究员回忆类似的牛市情况
|
||||
- 空头研究员参考过去的熊市分析
|
||||
- 交易员从过去的错误中学习
|
||||
- 风险经理考虑历史风险决策
|
||||
|
||||
---
|
||||
|
||||
### 设计模式4:工具绑定模式
|
||||
|
||||
代理通过LangChain的 `bind_tools()` 访问工具:
|
||||
|
||||
```python
|
||||
from langchain_core.tools import tool
|
||||
|
||||
@tool
|
||||
def get_stock_data(symbol: str, start_date: str, end_date: str):
|
||||
"""获取股票的历史价格数据"""
|
||||
# 通过interface.py路由到配置的供应商
|
||||
return route_to_vendor("get_stock_data", symbol, start_date, end_date)
|
||||
|
||||
# 在代理中
|
||||
market_analyst = llm.bind_tools([
|
||||
get_stock_data,
|
||||
get_indicators,
|
||||
# ... 其他工具
|
||||
])
|
||||
```
|
||||
|
||||
**特点**:
|
||||
- LLM在推理时可以调用工具
|
||||
- 工具返回的数据供代理处理
|
||||
- 支持多供应商自动回退
|
||||
- 工具用 `@tool` 装饰器定义
|
||||
|
||||
---
|
||||
|
||||
## 📊 数据流和工具系统
|
||||
|
||||
### 工具分类
|
||||
|
||||
#### 1. 核心股票API (`core_stock_tools.py`)
|
||||
```python
|
||||
get_stock_data(symbol, start_date, end_date) → OHLCV数据
|
||||
```
|
||||
- **供应商**: yfinance(默认)、Alpha Vantage、本地
|
||||
|
||||
#### 2. 技术指标 (`technical_indicators_tools.py`)
|
||||
```python
|
||||
get_indicators(symbol, indicator, curr_date, look_back_days)
|
||||
```
|
||||
- **计算**: SMA, EMA, MACD, RSI, 布林带, ATR, VWMA
|
||||
- **供应商**: yfinance(通过StockStats)
|
||||
|
||||
#### 3. 基本面数据 (`fundamental_data_tools.py`)
|
||||
```python
|
||||
get_fundamentals() # 公司概览
|
||||
get_balance_sheet() # 资产负债表
|
||||
get_cashflow() # 现金流量表
|
||||
get_income_statement() # 损益表
|
||||
```
|
||||
- **供应商**: Alpha Vantage、OpenAI、yfinance
|
||||
|
||||
#### 4. 新闻与情绪 (`news_data_tools.py`)
|
||||
```python
|
||||
get_news() # 公司新闻
|
||||
get_global_news() # 宏观经济新闻
|
||||
get_insider_sentiment() # 内部人士交易情绪
|
||||
get_insider_transactions() # 内部人士活动
|
||||
```
|
||||
- **供应商**: Alpha Vantage、Google新闻、Reddit(PRAW)、OpenAI
|
||||
|
||||
### 供应商支持矩阵
|
||||
|
||||
| 工具 | yfinance | Alpha Vantage | OpenAI | Google | Local |
|
||||
|------|----------|---------------|--------|--------|-------|
|
||||
| 股票价格 | ✅ | ✅ | ❌ | ❌ | ✅ |
|
||||
| 技术指标 | ✅ | ✅ | ❌ | ❌ | ❌ |
|
||||
| 基本面数据 | ✅ | ✅ | ✅ | ❌ | ❌ |
|
||||
| 公司新闻 | ❌ | ✅ | ✅ | ✅ | ❌ |
|
||||
| 全球新闻 | ❌ | ✅ | ✅ | ✅ | ❌ |
|
||||
| 内部人士数据 | ✅ | ✅ | ❌ | ❌ | ❌ |
|
||||
| 社交情绪 | ❌ | ❌ | ❌ | ❌ | Reddit |
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ 配置系统
|
||||
|
||||
### 默认配置 (`tradingagents/default_config.py`)
|
||||
|
||||
```python
|
||||
DEFAULT_CONFIG = {
|
||||
# LLM设置
|
||||
"llm_provider": "openai", # openai, anthropic, google
|
||||
"deep_think_llm": "o4-mini", # 用于复杂推理
|
||||
"quick_think_llm": "gpt-4o-mini", # 用于快速决策
|
||||
|
||||
# 辩论设置
|
||||
"max_debate_rounds": 1, # 多头/空头辩论迭代次数
|
||||
"max_risk_discuss_rounds": 1, # 风险团队迭代次数
|
||||
|
||||
# 数据供应商
|
||||
"data_vendors": {
|
||||
"core_stock_apis": "yfinance",
|
||||
"technical_indicators": "yfinance",
|
||||
"fundamental_data": "alpha_vantage",
|
||||
"news_data": "alpha_vantage",
|
||||
},
|
||||
|
||||
# 工具级别覆盖(可选)
|
||||
"tool_vendors": {
|
||||
# "get_stock_data": "alpha_vantage", # 覆盖特定工具
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 自定义配置示例
|
||||
|
||||
```python
|
||||
from tradingagents.graph.trading_graph import TradingAgentsGraph
|
||||
|
||||
# 创建自定义配置
|
||||
custom_config = {
|
||||
"llm_provider": "anthropic",
|
||||
"deep_think_llm": "claude-3-opus-20240229",
|
||||
"quick_think_llm": "claude-3-haiku-20240307",
|
||||
"max_debate_rounds": 3, # 更深入的辩论
|
||||
"data_vendors": {
|
||||
"core_stock_apis": "alpha_vantage",
|
||||
"technical_indicators": "yfinance",
|
||||
"fundamental_data": "openai",
|
||||
"news_data": "google",
|
||||
}
|
||||
}
|
||||
|
||||
# 使用自定义配置
|
||||
ta = TradingAgentsGraph(debug=True, config=custom_config)
|
||||
final_state, decision = ta.propagate("AAPL", "2024-01-15")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 实践分析建议
|
||||
|
||||
### 建议1:从入口点开始
|
||||
|
||||
```bash
|
||||
# 查看编程式使用示例
|
||||
cat main.py
|
||||
|
||||
# 运行示例(需要API密钥)
|
||||
python main.py
|
||||
|
||||
# 运行CLI了解交互流程
|
||||
python -m cli.main
|
||||
```
|
||||
|
||||
### 建议2:追踪单个代理执行
|
||||
|
||||
选择一个代理(如市场分析师),完整追踪其执行流程:
|
||||
|
||||
1. **阅读代理实现**
|
||||
```bash
|
||||
cat tradingagents/agents/analysts/market_analyst.py
|
||||
```
|
||||
|
||||
2. **查看它使用的工具**
|
||||
```bash
|
||||
cat tradingagents/agents/utils/technical_indicators_tools.py
|
||||
```
|
||||
|
||||
3. **理解工具如何获取数据**
|
||||
```bash
|
||||
cat tradingagents/dataflows/interface.py
|
||||
```
|
||||
|
||||
4. **查看数据供应商实现**
|
||||
```bash
|
||||
cat tradingagents/dataflows/y_finance.py
|
||||
```
|
||||
|
||||
### 建议3:修改配置做实验
|
||||
|
||||
修改 `tradingagents/default_config.py` 并观察行为变化:
|
||||
|
||||
```python
|
||||
# 实验1: 更改LLM提供商
|
||||
"llm_provider": "anthropic" # 改为 Claude
|
||||
|
||||
# 实验2: 增加辩论轮数
|
||||
"max_debate_rounds": 3 # 从 1 改为 3
|
||||
|
||||
# 实验3: 切换数据供应商
|
||||
"data_vendors": {
|
||||
"core_stock_apis": "alpha_vantage", # 从 yfinance 改为 Alpha Vantage
|
||||
}
|
||||
|
||||
# 实验4: 使用工具级别覆盖
|
||||
"tool_vendors": {
|
||||
"get_stock_data": "local", # 仅此工具使用本地数据
|
||||
}
|
||||
```
|
||||
|
||||
### 建议4:绘制数据流图
|
||||
|
||||
选择一个工具(如 `get_stock_data`),追踪完整数据流:
|
||||
|
||||
```
|
||||
用户请求
|
||||
↓
|
||||
market_analyst.py (调用工具)
|
||||
↓
|
||||
technical_indicators_tools.py (工具定义)
|
||||
↓
|
||||
interface.py (路由到供应商)
|
||||
↓
|
||||
y_finance.py 或 alpha_vantage.py (实际获取数据)
|
||||
↓
|
||||
数据处理和返回
|
||||
↓
|
||||
代理分析并生成报告
|
||||
```
|
||||
|
||||
### 建议5:理解状态管理
|
||||
|
||||
**文件**: `tradingagents/agents/utils/agent_states.py`
|
||||
|
||||
研究三种状态类型:
|
||||
|
||||
```python
|
||||
# 1. AgentState - 基础状态
|
||||
class AgentState(TypedDict):
|
||||
company: str # 股票代码
|
||||
curr_date: str # 当前日期
|
||||
messages: list # 消息历史
|
||||
market_report: str # 市场分析报告
|
||||
fundamentals_report: str # 基本面报告
|
||||
news_report: str # 新闻报告
|
||||
sentiment_report: str # 情绪报告
|
||||
|
||||
# 2. InvestDebateState - 投资辩论状态
|
||||
class InvestDebateState(AgentState):
|
||||
bull_arguments: list # 多头论据
|
||||
bear_arguments: list # 空头论据
|
||||
debate_history: list # 辩论历史
|
||||
debate_rounds: int # 当前轮数
|
||||
investment_plan: str # 最终投资计划
|
||||
|
||||
# 3. RiskDebateState - 风险辩论状态
|
||||
class RiskDebateState(InvestDebateState):
|
||||
risky_arguments: list # 激进论据
|
||||
safe_arguments: list # 保守论据
|
||||
neutral_arguments: list # 中立论据
|
||||
risk_rounds: int # 风险轮数
|
||||
final_trade_decision: str # 最终交易决定
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 学习路径
|
||||
|
||||
### 初级阶段(1-2天)
|
||||
|
||||
1. ✅ **阅读文档**
|
||||
- README.md
|
||||
- 本分析指南
|
||||
|
||||
2. ✅ **运行示例**
|
||||
```bash
|
||||
python main.py
|
||||
```
|
||||
|
||||
3. ✅ **理解工作流**
|
||||
- 5个阶段的代理协作流程
|
||||
- 每个代理的角色和职责
|
||||
|
||||
4. ✅ **阅读一个分析师**
|
||||
- 选择 `market_analyst.py` 或 `fundamentals_analyst.py`
|
||||
- 理解代理如何使用工具
|
||||
- 查看报告生成方式
|
||||
|
||||
### 中级阶段(3-5天)
|
||||
|
||||
5. ✅ **深入核心编排**
|
||||
- 阅读 `trading_graph.py`
|
||||
- 理解 `setup.py` 中的图构建
|
||||
- 研究 `conditional_logic.py` 的路由机制
|
||||
|
||||
6. ✅ **理解状态管理**
|
||||
- 研究 `agent_states.py`
|
||||
- 追踪状态在工作流中的变化
|
||||
- 理解状态如何在代理间传递
|
||||
|
||||
7. ✅ **研究数据系统**
|
||||
- 探索 `interface.py` 的供应商路由
|
||||
- 查看不同供应商的实现
|
||||
- 理解回退机制
|
||||
|
||||
8. ✅ **实验配置**
|
||||
- 修改 `default_config.py`
|
||||
- 尝试不同LLM提供商
|
||||
- 调整辩论轮数
|
||||
|
||||
### 高级阶段(1-2周)
|
||||
|
||||
9. ✅ **深入记忆系统**
|
||||
- 研究 `memory.py` 实现
|
||||
- 理解ChromaDB集成
|
||||
- 查看代理如何检索记忆
|
||||
|
||||
10. ✅ **理解工作流构建**
|
||||
- 深入LangGraph的使用
|
||||
- 理解节点和边的定义
|
||||
- 研究条件路由的实现
|
||||
|
||||
11. ✅ **扩展系统**
|
||||
- 添加自定义分析师
|
||||
- 创建新的工具
|
||||
- 集成新的数据供应商
|
||||
|
||||
12. ✅ **优化和调试**
|
||||
- 性能优化
|
||||
- 调试模式使用
|
||||
- 错误处理改进
|
||||
|
||||
---
|
||||
|
||||
## 🔑 关键文件快速参考
|
||||
|
||||
| 目的 | 文件路径 | 描述 |
|
||||
|------|----------|------|
|
||||
| **项目概览** | `README.md` | 安装、使用、示例 |
|
||||
| **主编排器** | `tradingagents/graph/trading_graph.py` | TradingAgentsGraph类 |
|
||||
| **工作流构建** | `tradingagents/graph/setup.py` | LangGraph图构建 |
|
||||
| **条件路由** | `tradingagents/graph/conditional_logic.py` | 路由逻辑 |
|
||||
| **状态定义** | `tradingagents/agents/utils/agent_states.py` | 状态模式 |
|
||||
| **数据路由** | `tradingagents/dataflows/interface.py` | 供应商抽象 |
|
||||
| **配置** | `tradingagents/default_config.py` | 系统配置 |
|
||||
| **记忆系统** | `tradingagents/agents/utils/memory.py` | ChromaDB集成 |
|
||||
| **工具定义** | `tradingagents/agents/utils/*_tools.py` | 各类工具 |
|
||||
| **市场分析师** | `tradingagents/agents/analysts/market_analyst.py` | 技术分析 |
|
||||
| **多头研究员** | `tradingagents/agents/researchers/bull_researcher.py` | 买入论证 |
|
||||
| **交易员** | `tradingagents/agents/trader/trader.py` | 交易决策 |
|
||||
| **风险经理** | `tradingagents/agents/managers/risk_manager.py` | 风险管理 |
|
||||
| **CLI入口** | `cli/main.py` | 命令行界面 |
|
||||
| **编程入口** | `main.py` | 编程式使用 |
|
||||
|
||||
---
|
||||
|
||||
## 🎓 深入理解要点
|
||||
|
||||
### 1. 为什么使用多代理系统?
|
||||
|
||||
**答**: 模拟真实交易公司的决策流程
|
||||
- **分工明确**: 每个代理专注于特定领域(技术、基本面、新闻、风险)
|
||||
- **视角多样**: 多头vs空头、激进vs保守,避免单一视角偏见
|
||||
- **决策质量**: 通过辩论和反驳提高决策质量
|
||||
- **可解释性**: 每个代理的推理过程清晰可追踪
|
||||
|
||||
### 2. 记忆系统的价值
|
||||
|
||||
**答**: 从历史中学习,避免重复错误
|
||||
- **语义搜索**: 通过嵌入找到相似的过去情况
|
||||
- **经验积累**: 存储过去的决策和结果
|
||||
- **性能改进**: 代理随时间逐步改进
|
||||
- **上下文感知**: 决策考虑历史模式
|
||||
|
||||
### 3. 供应商抽象的优势
|
||||
|
||||
**答**: 灵活性和鲁棒性
|
||||
- **供应商无关**: 轻松切换数据提供商
|
||||
- **自动回退**: 主供应商失败时使用备用
|
||||
- **成本优化**: 根据成本和限制选择供应商
|
||||
- **离线测试**: 支持本地数据进行开发和测试
|
||||
|
||||
### 4. LangGraph的作用
|
||||
|
||||
**答**: 复杂工作流的编排
|
||||
- **状态管理**: 自动管理代理间的状态传递
|
||||
- **条件路由**: 根据状态动态决定下一个代理
|
||||
- **并行执行**: 分析师可以并行运行以提高速度
|
||||
- **可视化**: 工作流图可视化便于理解和调试
|
||||
|
||||
---
|
||||
|
||||
## 💡 常见问题
|
||||
|
||||
### Q1: 如何添加新的分析师?
|
||||
|
||||
**步骤**:
|
||||
1. 在 `tradingagents/agents/analysts/` 创建新文件
|
||||
2. 定义代理类和工具
|
||||
3. 在 `tradingagents/graph/setup.py` 添加节点
|
||||
4. 更新状态定义以包含新报告字段
|
||||
5. 在配置中启用新代理
|
||||
|
||||
### Q2: 如何集成新的数据供应商?
|
||||
|
||||
**步骤**:
|
||||
1. 在 `tradingagents/dataflows/` 创建供应商文件
|
||||
2. 实现所需的数据获取函数
|
||||
3. 在 `interface.py` 的 `VENDOR_METHODS` 注册
|
||||
4. 在 `default_config.py` 添加配置选项
|
||||
5. 测试回退机制
|
||||
|
||||
### Q3: 如何优化LLM成本?
|
||||
|
||||
**建议**:
|
||||
- 使用 `gpt-4o-mini` 或 `o4-mini` 等小模型
|
||||
- 减少辩论轮数(`max_debate_rounds`)
|
||||
- 优化提示词长度
|
||||
- 缓存重复的API调用
|
||||
- 使用本地数据供应商进行开发
|
||||
|
||||
### Q4: 如何调试代理行为?
|
||||
|
||||
**方法**:
|
||||
```python
|
||||
# 启用调试模式
|
||||
ta = TradingAgentsGraph(debug=True, config=config)
|
||||
|
||||
# 查看状态变化
|
||||
final_state, decision = ta.propagate("AAPL", "2024-01-15")
|
||||
print(final_state) # 打印完整状态
|
||||
|
||||
# 查看消息历史
|
||||
for msg in final_state["messages"]:
|
||||
print(msg)
|
||||
```
|
||||
|
||||
### Q5: 系统适合生产环境吗?
|
||||
|
||||
**回答**:
|
||||
- ⚠️ 该框架是**研究项目**,不作为投资建议
|
||||
- 需要额外的错误处理、监控和测试
|
||||
- API密钥需要安全管理
|
||||
- 需考虑API速率限制和成本
|
||||
- 建议先在纸上交易或回测环境中测试
|
||||
|
||||
---
|
||||
|
||||
## 📖 参考资源
|
||||
|
||||
### 官方文档
|
||||
- **GitHub**: https://github.com/TauricResearch/TradingAgents
|
||||
- **论文**: arXiv: 2412.20138
|
||||
|
||||
### 依赖文档
|
||||
- **LangChain**: https://python.langchain.com/
|
||||
- **LangGraph**: https://langchain-ai.github.io/langgraph/
|
||||
- **ChromaDB**: https://docs.trychroma.com/
|
||||
- **yfinance**: https://pypi.org/project/yfinance/
|
||||
- **Alpha Vantage**: https://www.alphavantage.co/documentation/
|
||||
- **Backtrader**: https://www.backtrader.com/
|
||||
|
||||
---
|
||||
|
||||
## 🎯 下一步行动
|
||||
|
||||
完成本指南的学习后,你可以:
|
||||
|
||||
1. **实践操作**
|
||||
- 运行示例并观察输出
|
||||
- 修改配置并观察变化
|
||||
- 尝试不同的股票和日期
|
||||
|
||||
2. **深入研究**
|
||||
- 选择感兴趣的模块深入学习
|
||||
- 阅读相关论文理解理论基础
|
||||
- 研究LangChain和LangGraph文档
|
||||
|
||||
3. **扩展开发**
|
||||
- 添加新的分析师或工具
|
||||
- 集成新的数据源
|
||||
- 优化性能和成本
|
||||
|
||||
4. **参与社区**
|
||||
- 提交issue报告问题
|
||||
- 贡献代码改进
|
||||
- 分享使用经验
|
||||
|
||||
---
|
||||
|
||||
**祝学习愉快!** 🚀
|
||||
|
||||
如有问题,欢迎在GitHub仓库提issue或参与讨论。
|
||||
Loading…
Reference in New Issue