内容
# TradingAgents 🤖📈
> **A 股投研多智能体决策系统** — 基于 LangGraph 的 28 节点条件路由工作流,集成 MCP 协议与分层模型路由
[](https://python.org)
[](https://langchain-ai.github.io/langgraph/)
[](https://modelcontextprotocol.io)
[](LICENSE)
---
## 目录
- [整体架构](#整体架构)
- [工作流详解](#工作流详解)
- [核心特性](#核心特性)
- [快速开始](#快速开始)
- [模型路由](#模型路由)
- [MCP 集成](#mcp-集成)
- [回测表现](#回测表现)
- [项目结构](#项目结构)
- [面试指南](#面试指南)
---
## 整体架构
```
用户请求
│
▼
┌─────────────────────────────────────────────────────┐
│ 28 节点 StateGraph │
│ │
│ initialize → build_initial_plan │
│ │ │
│ ▼ │
│ ┌─────────────────┐ ┌──────────────────┐ │
│ │ memory_context │ │ market_data │ │
│ │ portfolio_context│ │ (并行上下文采集) │ │
│ └────────┬────────┘ └────────┬─────────┘ │
│ ▼ ▼ │
│ context_gate (条件路由) │
│ │ │
│ ▼ (通过则继续,失败则终止) │
│ refine_plan │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────┐ │
│ │ technical fundamental policy sent │ ← 四类并行 │
│ └──────────────────┬───────────────────┘ │
│ ▼ │
│ analysis_join → analysis_quality_gate │
│ │ │
│ ├─ 通过 → bull/bear 辩论 │
│ └─ 不足 → supplemental_retrieval (循环补检索) │
│ │
│ ┌──────────────────┐ │
│ │ 条件辩论循环(≤3轮) │ ← bull ↔ bear ↔ judge │
│ └────────┬─────────┘ │
│ ▼ │
│ risk_analyst → trader → decision_validator │
│ │ │
│ ├─ 高风险 → human_review (人工审批) │
│ └─ 低风险 → final_report │
│ │
│ reflection → memory_quality_gate → save_memory │
└─────────────────────────────────────────────────────┘
```
---
## 工作流详解
### 28 个节点功能
| 阶段 | 节点 | 说明 |
|:---|:---|:---|
| **初始化** | `initialize` | 分配 run_id,重置状态,裁剪 pipeline |
| **规划** | `build_initial_plan` → `refine_plan` | 两阶段规划:先选模块,再据数据质量修正 |
| **上下文采集** | `memory` / `portfolio` / `market_data` | 三个并行节点采集历史记忆、账户、行情 |
| **门控** | `context_gate` | 检查市场数据是否为空,为空则终止 |
| **专业分析** | `technical` / `fundamental` / `policy_news` / `sentiment` | 四类分析师**并行**执行 |
| **质量门控** | `analysis_quality_gate` | 证据不足→`supplemental_retrieval`(最多2轮) |
| **辩论** | `bull` → `judge` → `bull_rebuttal` / `bear_rebuttal` → `judge` | 条件循环辩论(最多3轮) |
| **风控** | `risk_analyst` | 综合评估风险等级 |
| **决策** | `trader` → `decision_validator` | 生成交易建议并校验 |
| **人工审核** | `human_review` | 高风险决策中断等待审批 |
| **报告** | `final_report` | 生成结构化投研报告 |
| **反思** | `reflection` → `memory_quality_gate` → `save_memory` | 质量门控→有价值才持久化 |
### 条件路由(6 处)
```python
# routing.py 核心逻辑
route_context_gate() # 数据缺失 → 终止; 正常 → refine_plan
route_analysis_nodes() # 根据计划选择运行哪些分析师
route_quality_gate() # 证据不足 → 补检索; 足够 → 辩论
route_supplemental_retrieval()# 检索轮数检查 → 继续检索或进入辩论
route_debate() # 置信度分歧 → 下一轮辩论或进风控
route_decision_validator() # 高风险 → 人工审核; 正常 → 出报告
```
---
## 核心特性
### 🧠 条件辩论循环
多空双方基于技术、基本面、政策、情绪四个维度的分析报告各自输出论点,裁判根据双方置信度分歧决定是否需要下一轮辩论,最多 3 轮硬终止。
```
Round 1: Bull论点(置信度0.7) vs Bear论点(置信度0.6) → 分歧大 → 继续
Round 2: Bull反驳(置信度0.65) vs Bear反驳(置信度0.55) → 分歧缩小 → 进风控
```
对比固定轮次策略,**减少约 60% 的 LLM 调用开销**。
### 🔍 证据覆盖度门控
分析证据不足时自动触发补充检索(最多 2 轮),仍不足则标记 `degraded` 并降低对应 Agent 置信度,确保系统不会基于不充分的信息产生误导性结论。
### 👤 Human-in-the-loop
高风险交易决策(如高风险等级下的买入操作)自动中断执行,保留完整上下文并等待人工审批,Agent 仅提供辅助决策建议。
### 🔄 两阶段规划
先根据请求参数选择所需模块,再根据工具实际返回数据质量修正计划。例如市场数据获取失败则自动关闭技术分析节点,避免空流程执行。
---
## 快速开始
### 环境要求
- Python 3.11+
- DeepSeek API Key(或其他 OpenAI 兼容 API)
### 安装
```bash
# 克隆仓库
git clone https://github.com/yourname/TradingAgents
cd TradingAgents
# 安装依赖
pip install -r requirements.txt
# 配置 API Key
echo "DEEPSEEK_API_KEY=sk-your-key" >> .env
```
### 运行
```bash
# 启动后端服务
python scripts/serve.py
# 发送分析请求
curl -X POST http://localhost:8000/api/v1/agent-analysis \
-H "Content-Type: application/json" \
-d '{"symbol": "515880.SH", "company": "通信ETF"}'
```
---
## 模型路由
系统采用分层模型路由策略,根据不同 Agent 的任务复杂度分配不同的 LLM:
| 层级 | 模型 | Agent | 说明 |
|:---:|:---|:---|:---|
| 🟢 **Flash** | deepseek-v4-flash | 技术/基本面/政策/情绪分析师 + 多/空研究员 | 数据采集、工具调用、简单分析 |
| 🔵 **Pro** | deepseek-v4-pro | 交易决策/风险评估/反思总结 | 综合推理、多源信息融合 |
简单任务使用低成本模型,复杂决策使用高推理质量模型,在保证决策质量的同时优化 Token 消耗。
---
## MCP 集成
系统通过 [Model Context Protocol](https://modelcontextprotocol.io) 标准协议接入金融数据:
### 消费侧(MCP Client)
```python
from backend.app.agents.mcp_client import tushare_mcp
# 获取 ETF 行情
data = tushare_mcp.get_fund_daily("515880.SH")
# 获取北向资金
hsgt = tushare_mcp.get_moneyflow_hsgt()
# 获取板块资金流向
flow = tushare_mcp.get_moneyflow_ind_dc("BK0988")
```
支持 **258 个 Tushare 数据工具**,覆盖股票行情、ETF、资金流向、财务数据、宏观经济等。
### 供给侧(MCP Server)
系统同时也作为 MCP Server 运行,对外暴露多 Agent 分析能力:
```json
// .mcp.json — 支持 Cursor、Claude Desktop 等直接发现
{
"mcpServers": {
"tushare": { "url": "https://api.tushare.pro/mcp/" },
"trading-agents": { "command": "python backend/app/agents/mcp_server.py" }
}
}
```
---
## 回测表现
### 三只关注 ETF 的回测结果(2025/01 — 2026/06)
| ETF | 总涨幅 | 最大回撤 | 收益/回撤比 |
|:---|:---:|:---:|:---:|
| 通信ETF(515880) | **+289.9%** | -29.0% | 9.99 |
| 半导体ETF(512480) | **+201.8%** | -19.9% | 10.13 |
| 芯片ETF(159995) | **+181.9%** | -21.7% | 8.38 |
### 回撤规律分析
基于历史数据挖掘的 >10% 回调共同特征:
**暴跌前:** RSI>75 超买 + 20 日涨幅>20% + 高位放量 + RSI 冲高后回落
**底部信号:** RSI<35 + 放量恐慌盘 + 大阳线(>3%)反弹(83%概率)
---
## 项目结构
```
TradingAgents/
├── backend/
│ └── app/
│ ├── agents/ # Agent 核心
│ │ ├── graph/ # LangGraph 图定义
│ │ ├── subgraphs/ # 子图(辩论、政策新闻)
│ │ ├── builder.py # 28 节点图构建器
│ │ ├── routing.py # 6 条件路由函数
│ │ ├── nodes.py # 节点实现
│ │ ├── workflow.py # 工作流引擎
│ │ ├── llm.py # LLM 客户端
│ │ ├── config.py # 模型配置管理
│ │ ├── tools.py # 工具集
│ │ ├── mcp_client.py # MCP 客户端
│ │ └── mcp_server.py # MCP 服务端
│ ├── api/ # REST API
│ ├── schemas/ # Pydantic 数据模型
│ ├── services/ # 业务服务
│ └── tests/ # 测试
├── config/
│ └── agents.yaml # 模型路由配置
├── scripts/ # 工具脚本
├── data/ # 数据存储
└── .mcp.json # MCP Server 配置
```
---
## 面试指南
准备面试时,建议突出以下亮点:
| 面试题 | 你的回答方向 |
|:---|:---|
| **为什么用 LangGraph?** | 需要条件路由(证据门控、辩论循环),线性链做不到 |
| **多 Agent 怎么协作?** | 四类分析师并行→辩论→风控→决策,结构化 Pydantic 消息 |
| **可靠性怎么保证?** | Evidence Grounding + 置信度门控 + 降级 + HITL |
| **MCP 是什么?** | Agent 工具调用的标准化协议,类似 USB-C 接口 |
| **模型选型策略?** | 按任务复杂度分层路由,简单任务 Flash,复杂任务 Pro |
---
## License
MIT
---
*项目为 Agent 开发实习准备 · 成都信息工程大学*