基于 LangGraph 的多Agent辩论式量化交易决策框架,15位AI分析师协作,输出结构化投资评级与可视化分析报告。
风险提示: 本工具仅供研究和辅助决策参考,不构成投资建议。投资有风险,入市需谨慎。
- 多Agent辩论: 15位专业角色(4位分析师 + 多空辩论 + 三方风控 + 研究/基金经理 + 交易员 + 信号/报告/记忆)
- 多源数据融合: Tushare 财务数据 + akshare 行情数据 + 东方财富新闻数据,三级 fallback
- 记忆反思: 历史决策记忆 + 延迟反思学习
- 可视化报告: 自动生成可交互 HTML 分析报告,10 阶段流水线过程全透明
- 结构化输出: Pydantic 模型保证输出格式,支持五级评级(买入/增持/持有/减持/卖出)
- 灵活LLM: OpenAI兼容接口,支持 DeepSeek/Qwen/GLM/Ollama 等 9 种提供商
- 生产级容错: Tenacity 指数退避重试(3次 4s→60s)+ 三态熔断器(5次失败→OPEN→30s冷却),保护所有 LLM 调用
- 四层模型分配: Deep/Heavy/Standard/Quick 四级模型分层,按角色复杂度自动路由到最优模型
- 智能上下文瘦身: 按目标节点裁剪报告内容(PM 保留结论 ~60-70% 压缩),整体节省 ~25% Token 消耗
- 向量记忆: 纯 Python TF-IDF bigram 语义检索,分析前注入历史上下文,分析后自动索引持久化
- 反思闭环: 跟踪历史预测 → akshare 获取实际收益 → LLM 生成反思教训 → 写回记忆提升未来决策
┌─────────────────────────────────────────────────────────────────┐
│ START │
└───────────────────────┬─────────────────────────────────────────┘
│
┌───────────────┼───────────────┬───────────────┐
▼ ▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Market │ │ Social │ │ News │ │ Fundamentals│
│ Analyst │ │ Analyst │ │ Analyst │ │ Analyst │
│ (技术面) │ │ (舆情) │ │ (新闻) │ │ (基本面) │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │ │
│ [ReAct tool loop: 工具调用 → 数据获取 → 分析] │
│ │ │ │
└────────────────┴────────┬───────┴────────────────┘
▼
┌───────────────────────────────┐
│ Investment Debate │
│ ┌─────────┐ ┌──────────┐ │
│ │ Bull │◄─►│ Bear │ │
│ │Researcher│ │Researcher│ │
│ │ (看多) │ │ (看空) │ │
│ └─────────┘ └──────────┘ │
└───────────────┬───────────────┘
▼
┌───────────────────────────────┐
│ Research Manager │
│ 综合辩论 → 投资评级方案 │
└───────────────┬───────────────┘
▼
┌───────────────────────────────┐
│ Trader │
│ 投资方案 → 交易执行计划 │
└───────────────┬───────────────┘
▼
┌───────────────────────────────┐
│ Risk Debate │
│ ┌──────────┐ ┌──────────┐ │
│ │Aggressive│─►│Conservat.│ │
│ │ (激进) │ │ (保守) │ │
│ └──────────┘ └────┬─────┘ │
│ ▼ │
│ ┌──────────┐ │
│ │ Neutral │ │
│ │ (中性) │ │
│ └──────────┘ │
└───────────────┬───────────────┘
▼
┌───────────────────────────────┐
│ Portfolio Manager │
│ 风控讨论 → 最终投决评级 │
└───────────────┬───────────────┘
▼
┌───────────────────────────────┐
│ Report Generator │
│ 生成可交互 HTML 分析报告 │
└───────────────┬───────────────┘
▼
END
15位AI角色:
| 角色 | 数量 | 职责 |
|---|---|---|
| 技术分析师 | 1 | 分析价格走势、技术指标、成交量 |
| 新闻舆情分析师 | 1 | 分析个股新闻、政策动态、全球市场联动 |
| 市场情绪分析师 | 1 | 分析大宗交易、资金流向、机构动向 |
| 基本面分析师 | 1 | 分析财报、估值、盈利能力 |
| 看多研究员 | 1 | 从看多角度论证投资理由 |
| 看空研究员 | 1 | 从看空角度提出风险与质疑 |
| 研究经理 | 1 | 综合多空辩论,输出结构化投资评级 |
| 交易员 | 1 | 制定具体交易计划(入场价/止损/仓位) |
| 激进风控分析师 | 1 | 从激进角度评估风险收益比 |
| 保守风控分析师 | 1 | 从保守角度强调风险控制 |
| 中性风控分析师 | 1 | 平衡双方观点给出中立评估 |
| 基金经理 | 1 | 综合风控讨论,做出最终投决 |
| 信号提取器 | 1 | 从决策文本中提取结构化评级 |
| 报告生成器 | 1 | 汇总各阶段产出,生成可交互 HTML 报告 |
| 记忆管理器 | 1 | 存储/检索/反思历史决策 |
- Python >= 3.10
- 网络连接(用于调用 LLM API 和获取行情数据)
# 克隆仓库 git clone https://github.com/2033121/astock-trading-agents.git cd astock-trading-agents # 开发模式安装 pip install -e .
# OpenAI export OPENAI_API_KEY=sk-your-key-here # 或 DeepSeek export OPENAI_API_KEY=sk-your-deepseek-key export OPENAI_BASE_URL=https://api.deepseek.com
支持的 LLM 提供商:
| 提供商 | --provider 值 |
默认 Base URL | 所需环境变量 |
|---|---|---|---|
| OpenAI | openai |
https://api.openai.com/v1 |
OPENAI_API_KEY |
| DeepSeek | deepseek |
https://api.deepseek.com |
OPENAI_API_KEY |
| Qwen/DashScope | qwen |
https://dashscope.aliyuncs.com/compatible-mode/v1 |
DASHSCOPE_API_KEY |
| GLM/智谱 | glm |
https://open.bigmodel.cn/api/paas/v4 |
OPENAI_API_KEY |
| Ollama (本地) | ollama |
http://localhost:11434/v1 |
无需 |
| OpenRouter | openrouter |
https://openrouter.ai/api/v1 |
OPENAI_API_KEY |
| SiliconFlow | siliconflow |
https://api.siliconflow.cn/v1 |
OPENAI_API_KEY |
| Together | together |
https://api.together.xyz/v1 |
OPENAI_API_KEY |
| Groq | groq |
https://api.groq.com/openai/v1 |
OPENAI_API_KEY |
| 数据源 | 用途 | 环境变量 | 获取方式 |
|---|---|---|---|
| Tushare Pro | 财务报表、资金流向、股东信息 | TUSHARE_TOKEN |
注册获取 |
| 东方财富妙想 | 新闻资讯、实时行情 | MX_APIKEY |
妙想平台 |
| akshare | 行情数据、技术指标 | 无需 | 开源库,自动可用 |
系统内置了三级 fallback 机制:当首选数据源不可用时,自动切换到备选源。
# 设置 HTML 报告保存目录 export ASTOCK_REPORT_DIR=/path/to/your/reports
未设置时,HTML 报告功能将自动禁用。
# 基础用法 — 分析平安银行 astock-trader analyze 000001 # 指定日期和提供商 astock-trader analyze 600519 --date 2025年06月01日 --provider deepseek # 仅选择技术面和基本面分析 astock-trader analyze 300750 --analysts market,fundamentals # 增加辩论轮数 astock-trader analyze 000001 --debate-rounds 2 --risk-rounds 2 # 指定深度思考模型 astock-trader analyze 600519 --deep-model deepseek-reasoner # 安静模式(仅输出评级) astock-trader analyze 000001 --quiet # 输出到指定文件 astock-trader analyze 000001 --output result.json
# 查看所有历史 astock-trader history # 查看特定标的历史 astock-trader history 000001 # 限制条数 astock-trader history 600519 --limit 5
# 显示所有记忆条目 astock-trader memory show # 列出 pending 状态的条目 astock-trader memory resolve # 清除所有记忆(需确认) astock-trader memory clear
# 显示当前配置 astock-trader config --show # 修改 LLM 提供商 astock-trader config --set llm_provider --value deepseek # 修改深度思考模型 astock-trader config --set deep_think_llm --value deepseek-reasoner # 修改快速思考模型 astock-trader config --set quick_think_llm --value deepseek-chat # 启用检查点(崩溃恢复) astock-trader config --set checkpoint_enabled --value true # 重置为默认配置 astock-trader config --reset
| 命令 | 说明 | 示例 |
|---|---|---|
analyze <symbol> |
运行多Agent分析流水线 | astock-trader analyze 000001 |
history [symbol] |
查看分析历史记录 | astock-trader history 600519 --limit 5 |
memory <action> |
管理决策记忆日志 | astock-trader memory show |
config |
查看和修改配置 | astock-trader config --show |
| 选项 | 简写 | 说明 | 默认值 |
|---|---|---|---|
--date |
-d |
交易日期 YYYY-MM-DD | 今天 |
--provider |
-p |
LLM 提供商 | openai |
--deep-model |
深度思考模型名称 | deepseek-chat |
|
--quick-model |
快速思考模型名称 | deepseek-chat |
|
--base-url |
自定义 API Base URL | 按提供商自动选择 | |
--language |
-l |
输出语言 | Chinese |
--analysts |
-a |
分析师组合(逗号分隔) | 全部四个 |
--debate-rounds |
多空辩论轮数 | 1 |
|
--risk-rounds |
风控讨论轮数 | 1 |
|
--checkpoint |
启用 SQLite 检查点 | false |
|
--output |
-o |
输出文件路径 | 自动生成 |
--quiet |
-q |
安静模式 | false |
| 操作 | 说明 |
|---|---|
show |
显示所有记忆条目 |
clear |
清除记忆(需确认) |
resolve |
列出所有 pending 条目 |
from astock_trader.graph import TradingAgentsGraph # 创建分析图 graph = TradingAgentsGraph( selected_analysts=["market", "news", "fundamentals"], config={ "llm_provider": "deepseek", "deep_think_llm": "deepseek-reasoner", "quick_think_llm": "deepseek-chat", "max_debate_rounds": 2, "max_risk_discuss_rounds": 1, "report_output_dir": "./reports", # HTML 报告保存目录 }, ) # 运行分析 final_state, rating = graph.propagate("000001", "2025-06-10") print(f"评级: {rating}") print(f"最终决策: {final_state.get('final_trade_decision', '')}") print(f"HTML 报告: {final_state.get('report_path', '')}")
from astock_trader.agents import ( create_market_analyst, create_bull_researcher, create_research_manager, create_trader, create_aggressive_debator, ) from astock_trader.llm_clients import create_llm_client # 创建 LLM client = create_llm_client(provider="deepseek", model="deepseek-chat") llm = client.get_llm() # 创建各角色 Agent market_node = create_market_analyst(llm) bull_node = create_bull_researcher(llm) manager_node = create_research_manager(llm, deep_think_llm=llm) import functools trader_node = functools.partial(create_trader(llm), company_name="贵州茅台")
from astock_trader.agents.utils.memory import TradingMemoryLog mem = TradingMemoryLog(memory_dir="~/.astock_trader") # 存储决策 mem.store_decision("000001", "2025-06-10", { "rating": "买入", "action": "买入", "reasoning": "技术面突破", }) # 获取历史上下文 context = mem.get_past_context("000001") # 批量更新反思 mem.batch_update_with_outcomes([ { "ticker": "000001", "trade_date": "2025-06-10", "reflection": {"outcome": "盈利5%", "lesson": "技术分析有效"}, "new_rating": "增持", }, ])
本系统可作为 QoderWork 插件使用,在 QoderWork 中直接调用分析能力:
- 将本项目安装到 QoderWork 环境中
- 通过 QoderWork 的 Plugin 机制注册
astock-trader命令 - 在 QoderWork 对话中使用
/智能分析 000001等命令触发分析
也可以通过 QoderWork 的定时任务(Cron)功能设置定期自动分析:
每天 15:30 分析自选股列表并生成报告
插件包含 5 个 Skill:
| Skill | 说明 |
|---|---|
| 智能分析 | 运行多Agent分析流水线,输出五级投资评级 |
| 分析历史 | 查看历史分析记录和决策结果 |
| 决策记忆 | 管理决策记忆日志,支持结算和反思 |
| 交易配置 | 查看和修改 LLM 模型、数据源等配置参数 |
| 复盘深度分析 | 回测数据深度分析,生成 per-agent 校准反馈 (v0.4) |
v0.4 实现了完整的反馈注入回路——从回测跟踪到质量校验再到 prompt 注入,形成闭环:
| 改进 | 模块 | 效果 |
|---|---|---|
| 反馈消费模块 | agents/utils/backtest_consumer.py |
读取 backtest_feedback.json,质量门禁(≥10 快照)+ 10 节点条件注入 |
| 三级衰减 | backtest_consumer.py |
fresh(<90d,1.0x) → warning(90-180d,0.5x) → expired(>180d,0x),防止过时反馈误导 |
| past_context 修复 | graph/setup.py |
修复 Bear/Manager/PM/3风控 缺失注入,消除辩论信息不对称 |
| 追踪间隔修复 | scripts/review_backtest.py |
T+N 改为交易日计数,修复周末/节假日导致的间隔偏差 |
| 快照置信度 | scripts/save_snapshot.py |
新增 confidence 数值字段(0.0–1.0),供反馈加权使用 |
| 记忆轮转 | graph/trading_graph.py |
自动调用 _apply_rotation(),防止记忆文件无限增长 |
| 复盘深度分析 Skill | skills/复盘深度分析/ |
Expert Suite Plugin,LLM 深度分析生成 per-agent 校准建议 |
| Cron 集成 | QoderWork | 每周五 17:00 自动运行回测+深度分析,结果推送微信 |
v0.3 基于 webnovel-studio v0.2 的生产工程经验横向迁移,6 项核心改进全部实施:
| 改进 | 模块 | 效果 |
|---|---|---|
| LLM 容错层 | llm_clients/resilience.py |
3 次指数退避重试 + 三态熔断器,API 故障时自动降级 |
| 四层模型分配 | graph/setup.py |
Deep/Heavy/Standard/Quick 按角色智能路由,成本降低 40%+ |
| 反思闭环 | graph/trading_graph.py |
T+5 实际收益回测 → LLM 反思 → 记忆更新,持续提升准确率 |
| 上下文瘦身 | graph/context_slimmer.py |
按节点裁剪报告,PM 压缩 60-70%,整体节省 ~25% Token |
| 向量记忆 | memory/market_memory.py |
TF-IDF bigram 语义检索,突破"最近 N 次"上下文限制 |
| Headroom 集成 | resilience.py |
Token 压缩层,长 prompt 场景节省 60-95% Token |
所有配置项均可通过 astock-trader config --set 或 default_config.py 调整。
本项目为多种 AI 编程助手提供内置的项目级指令文件,帮助 AI 快速理解代码库结构和开发规范。
项目根目录包含 CLAUDE.md,Claude Code 每次会话启动时自动读取。包含:
- 项目结构与模块说明
- 常用命令速查
- 编码规范与安全约束
- 环境变量清单
直接使用即可,无需额外配置。
项目根目录包含 AGENTS.md,Codex CLI 每次启动时自动加载。采用 Codex 推荐的精简格式,包含:
- Commands / Structure / Stack / Style / Tests / Boundaries 六大板块
- 关键架构约束(空消息修复、报告生成回填机制等)
直接使用即可,无需额外配置。
.trae/rules/ 目录下包含项目规则文件,Trae 在编码时自动注入上下文:
| 文件 | 作用域 | 说明 |
|---|---|---|
project_rules.md |
全局 | 项目概览、架构、开发规范 |
agents_rules.md |
src/astock_trader/agents/**/*.py |
智能体模块开发规则 |
graph_rules.md |
src/astock_trader/graph/**/*.py |
LangGraph 编排层开发规则 |
直接使用即可,Trae 会根据文件路径自动匹配对应规则。
# 运行所有测试(共 185 个) pytest tests/ # 详细输出 pytest tests/ -v # 运行特定测试文件 pytest tests/test_schemas.py pytest tests/test_conditional_logic.py pytest tests/test_signal_processing.py pytest tests/test_memory.py pytest tests/test_dataflows.py pytest tests/test_agents.py pytest tests/test_backtest_consumer.py # v0.4: 反馈消费 + 衰减测试 (34 tests) # 带覆盖率报告 pytest tests/ --cov=astock_trader --cov-report=term-missing
astock-trading-agents/
├── pyproject.toml # 项目配置与依赖
├── README.md # 本文件
├── LICENSE # MIT 许可证
├── skills/ # QoderWork 插件 Skills
│ ├── 智能分析/ # 多Agent分析
│ ├── 分析历史/ # 历史记录查看
│ ├── 决策记忆/ # 记忆管理
│ ├── 交易配置/ # 配置管理
│ └── 复盘深度分析/ # 回测反馈深度分析 (v0.4)
├── src/
│ └── astock_trader/
│ ├── __init__.py
│ ├── default_config.py # 默认配置
│ ├── cli/ # CLI 命令行接口
│ │ ├── __init__.py
│ │ └── main.py # Typer CLI (analyze/history/memory/config)
│ ├── agents/ # Agent 定义
│ │ ├── __init__.py # 顶层导出
│ │ ├── schemas.py # Pydantic 结构化输出模型
│ │ ├── analysts/ # 分析师 (4位)
│ │ │ ├── market_analyst.py
│ │ │ ├── news_analyst.py
│ │ │ ├── social_media_analyst.py
│ │ │ └── fundamentals_analyst.py
│ │ ├── researchers/ # 研究员 (看多/看空)
│ │ │ ├── bull_researcher.py
│ │ │ └── bear_researcher.py
│ │ ├── managers/ # 经理 (研究/组合)
│ │ │ ├── research_manager.py
│ │ │ └── portfolio_manager.py
│ │ ├── trader/ # 交易员
│ │ │ └── trader.py
│ │ ├── risk_mgmt/ # 风控分析师 (激进/保守/中性)
│ │ │ ├── aggressive_debator.py
│ │ │ ├── conservative_debator.py
│ │ │ └── neutral_debator.py
│ │ └── utils/ # Agent 工具与状态
│ │ ├── agent_states.py
│ │ ├── agent_utils.py
│ │ ├── core_stock_tools.py
│ │ ├── technical_indicators_tools.py
│ │ ├── fundamental_data_tools.py
│ │ ├── news_data_tools.py
│ │ ├── mx_data_tools.py # 东方财富妙想数据工具
│ │ ├── tushare_data_tools.py # Tushare 数据工具
│ │ ├── memory.py # 交易记忆系统
│ │ ├── backtest_consumer.py # 回测反馈消费 (v0.4)
│ │ ├── rating.py # 评级解析器
│ │ └── structured.py # 结构化输出工具
│ ├── dataflows/ # 数据层
│ │ ├── __init__.py
│ │ ├── config.py # 全局配置
│ │ ├── interface.py # Vendor 路由系统(三级 fallback)
│ │ ├── akshare_data.py # akshare 数据源(行情/技术指标)
│ │ ├── tushare_data.py # Tushare 数据源(财务/资金流向)
│ │ ├── mx_data.py # 东方财富妙想数据源(新闻/实时)
│ │ └── eastmoney_news.py # 东方财富新闻源
│ ├── graph/ # LangGraph 编排层
│ │ ├── __init__.py
│ │ ├── setup.py # 图构建与编译
│ │ ├── trading_graph.py # 主编排器
│ │ ├── conditional_logic.py # 条件路由
│ │ ├── propagation.py # 状态传播
│ │ ├── reflection.py # 反思机制
│ │ ├── signal_processing.py # 信号提取
│ │ ├── report_generator.py # HTML 报告生成器
│ │ ├── context_slimmer.py # 智能上下文瘦身
│ │ └── checkpointer.py # SQLite 检查点
│ ├── llm_clients/ # LLM 客户端
│ │ ├── __init__.py
│ │ ├── base_client.py # 基类
│ │ ├── openai_client.py # OpenAI 兼容客户端
│ │ ├── factory.py # 客户端工厂
│ │ └── resilience.py # LLM 容错层(重试 + 熔断 + Headroom)
│ └── memory/ # 向量记忆系统
│ ├── __init__.py
│ └── market_memory.py # TF-IDF bigram 语义检索 + 持久化
└── tests/ # 测试
├── conftest.py
├── test_schemas.py # Pydantic 模型测试
├── test_conditional_logic.py # 条件路由测试
├── test_signal_processing.py # 信号提取测试
├── test_memory.py # 记忆系统测试
├── test_dataflows.py # 数据层路由测试
├── test_agents.py # Agent 工厂测试
└── test_backtest_consumer.py # v0.4: 反馈消费 + 衰减测试
系统输出五级投资评级:
| 评级 | 含义 | 建议操作 |
|---|---|---|
| 买入 | 强烈看多,多维度共振 | 积极建仓 |
| 增持 | 偏多,有上行空间 | 逢低加仓 |
| 持有 | 中性,方向不明确 | 观望等待 |
| 减持 | 偏空,风险偏高 | 逐步减仓 |
| 卖出 | 强烈看空,破位信号 | 止损离场 |
本项目灵感来自 TradingAgents 框架,针对A股市场进行了全面适配和增强。
MIT