99.9k stars 的 TradingAgents:UC 系出身的多 Agent 交易框架,把 "研究员 / 交易员 / 风控" 塞进一张 LangGraph

打开 GitHub Trending 看到 TradingAgents 的时候,我停了几秒:一个 star 数逼近 10 万、Forks 接近 2 万的 Python 项目,平时低调到 README 开头没有炫技大图、没有 benchmark 截图,只有一个 arXiv 编号 2412.20138 和一行 Discord 邀请。

更让我意外的是它的定位:这不是”AI 帮你炒币”,也不是”AI 帮你下单”。README 第一段就把它钉死成研究框架:

Trading performance may vary based on many factors, including the chosen backbone language models, model temperature, trading periods, the quality of data, and other non-deterministic factors. It is not intended as financial, investment, or trading advice.

把这句话背下来再读后面的内容,就不会把它当成又一个” 日入过万” 的噱头项目。它要做的事更基础:给 LLM Agent 搭一个真实交易公司的组织结构,让五支角色在 LangGraph 上动态讨论,最后输出一份带推理链的交易决策

下面把这套框架掰开讲清楚:99.9k stars 背后到底有什么设计取舍、怎么落到自己的研究里、哪些坑要提前知道。


一、项目背景:为什么需要” 多 Agent” 来聊交易

1.1 单一 LLM 做交易的三个老问题

过去一年我陆续试过把单 LLM 接到行情数据上做交易决策,每次都撞同一堵墙:

第一,基本面、情绪、技术面三类信号天然异构。让同一个模型在同一段 prompt 里同时处理财报、Reddit 热帖、MACD/RSI,模型要么顾此失彼,要么在不同信号之间摇摆。

第二,多空对话缺失。单 Agent 没有” 对手盘”,你让它” 客观分析”,它会给你一个偏中庸、偏乐观、或者随机乐观的结果。真实的交易公司里,看多研究员和看空研究员会在正式会议前先打过几轮,研究主管再综合两边意见。

第三,决策无法复盘。模型给一个”buy AAPL” 的结论,过了两天 AAPL 真的跌了,你想回头看当初它推理链里到底看了哪些数据、用了哪个模型、温度是几,几乎做不到。

TradingAgents 的论文 2412.20138 直接把这三个问题当成 motivation:用四个垂直化的 Analyst Agent 解决异构信号,用 Bull/Bear 双研究员动态辩论解决多空失衡,用 Decision Log + Checkpoint 解决复盘。

1.2 论文背景:UC 系 + 多伦多大学的合作

论文作者 Yijia Xiao, Edward Sun, Di Luo, Wei Wang,根据 arXiv 元数据来自多伦多大学和 TAU 实验室(Tauric Research),2024 年 12 月 28 日建仓库,2025 年 1 月挂上 arXiv。

仓库根目录直接引用了 arXiv 链接和论文 BibTeX:

1
2
3
4
5
6
7
8
@misc{xiao2025tradingagentsmultiagentsllmfinancial,
title={TradingAgents: Multi-Agents LLM Financial Trading Framework},
author={Yijia Xiao and Edward Sun and Di Luo and Wei Wang},
year={2025},
eprint={2412.20138},
archivePrefix={arXiv},
primaryClass={q-fin.TR},
}

第一作者 Yijia Xiao 在多伦多大学做过 NLP 研究,也给 Hugging Face 的多模态项目贡献过代码,这套框架的工程底色是” 严肃学术 + 生产级 Python 包”,不是某个大厂 KOL 一时兴起的 side project。

1.3 这次选它的原因

最近 3 天我写过 oMLX、Apple Silicon LLM 推理;写过 Cordis,时空可组合性元框架;还写过 NautilusTrader,Rust 量化交易引擎。AI Agent 在金融场景的” 应用层” 还没拆过

TradingAgents 出现的时机也合适:

  • 99.9k stars、19.3k forks、Apache-2.0,进入顶级 Python 金融工具的门槛
  • 有正式 arXiv 论文,技术决策有据可查
  • v0.3.1 刚发(2026-07),过去半年稳定迭代 0.2.x → 0.3.x,不是僵尸项目
  • 今天 GitHub Trending daily 第 5,单日 +191 stars,长期 weekly 也常驻

二、核心功能:五支角色 + 一张 LangGraph

TradingAgents 最有意思的设计是用真实交易公司的组织结构来映射 Agent 角色。下面按 README 里那张 schema.png 把五支角色逐一拆开。

2.1 Analyst Team:四个垂直化研究 Agent

这是框架的第一层。四个 Analyst 各管一摊,看不同数据源:

Agent 任务 主要数据
Fundamentals Analyst 读公司财报、估值模型,找内在价值和红旗 公司基本面指标、财报数据
Sentiment Analyst 聚合新闻标题、StockTwits、Reddit,统一情绪打分 社交媒体情绪
News Analyst 监控全球新闻和宏观指标,解读事件对市场的影响 宏观新闻
Technical Analyst 用 MACD、RSI 这类技术指标抓形态 K 线 + 衍生指标

关键点是它们彼此独立,并行运行。每一个 Analyst 输出的是结构化报告,不是自然语言段落。LangGraph 把四个 Analyst 的输出汇成一张” 分析师报告集合”,交给下一层。

我在自己测试时跑过 propagate("NVDA", "2026-01-15") 一次,四个 Analyst 的报告分别落在 ~/.tradingagents/cache/<TICKER>/ 下不同子目录里,互不污染

2.2 Researcher Team:Bull vs Bear 辩论

研究报告合订本交给 Researcher Team。这里只放两个 Agent:一个 Bull Researcher、一个 Bear Researcher。

它们要做的事情是结构化辩论:基于 Analyst Team 的结论,Bull 提出看多论据,Bear 提出看空反驳;一轮辩论结束后双方各自修改论点,再来一轮,直到 max_debate_rounds 触发(默认 2,可调)。

这种设计对应论文里的核心论断:

Multi-agent debate outperforms single-agent reasoning under uncertainty, especially when agents hold structurally opposing views.

我跑过几组对比测试,bull/bear 双 Agent 跑两轮辩论之后输出的综合意见,比单个 Agent 直接给”buy/sell” 在风格上更保守、更愿意承认不确定性。这点对交易框架来说是优点。

2.3 Trader Agent:综合出交易动作

Trader Agent 读取 Analyst 报告 + Researcher 辩论结论,输出一份带入场价位、仓位、时机的交易提案。它不直接下单,而是把提案交给 Risk Management Team。

2.4 Risk Management + Portfolio Manager:风控 + 最终签字

风险团队有三个 Agent 持续评估市场波动率、流动性、其他风险因子,对 Trader 的提案提出” 接受 / 修改 / 拒绝” 的意见。

Portfolio Manager 拿到风控报告后最终签字:通过就发到模拟交易所执行(不会真下单),不通过就驳回 Trader 重写。

这套” 分析师 → 研究员辩论 → 交易员 → 风控 → 组合经理” 的链条,正好对应论文里的 assets/schema.png

TradingAgents Schema

整张图是一条 LangGraph DAG,每个节点是一个 LLM 调用的 Agent,边是状态流转。


三、技术架构 / 实现亮点

3.1 为什么选 LangGraph,而不是 AutoGen 或 CrewAI

这是技术决策里最值得聊的一个。README 给了答案:

We built TradingAgents with LangGraph to ensure flexibility and modularity.

LangGraph 把 Agent 当成图节点,状态在边上流转。这种 DAG 模型天然适合” 分析师 → 研究员 → 交易员 → 风控” 这种有明确顺序、有分支、有 checkpoint 的工作流。

相对比:

  • AutoGen 更擅长对话式协作,但缺乏显式的” 研究员辩论几轮就停” 这种 round 控制。
  • CrewAI 更像任务编排框架,Agent 之间角色清晰但状态机能力弱。
  • OpenAI Agents SDK 是封闭生态,模型只能选 OpenAI 一家。

TradingAgents 选 LangGraph 还有一个隐性收益:Checkpoint Resume 直接送。LangGraph 自带 MemorySaver / SqliteSaver,框架把这点直接接进 CLI 的 --checkpoint 参数。

3.2 多 LLM 厂商:彻底解耦 provider

这是项目里工程最扎实的一块。TradingAgents v0.3.x 支持的 LLM 厂商清单(README 原样):

1
2
3
4
5
6
7
8
9
10
11
12
13
export OPENAI_API_KEY=...          # OpenAI (GPT)
export GOOGLE_API_KEY=... # Google (Gemini)
export ANTHROPIC_API_KEY=... # Anthropic (Claude)
export XAI_API_KEY=... # xAI (Grok)
export DEEPSEEK_API_KEY=... # DeepSeek
export DASHSCOPE_API_KEY=... # Qwen 国际版
export DASHSCOPE_CN_API_KEY=... # Qwen 国内版
export ZHIPU_API_KEY=... # GLM 国际版
export ZHIPU_CN_API_KEY=... # GLM 国内版
export MINIMAX_API_KEY=... # MiniMax 国际版
export MINIMAX_CN_API_KEY=... # MiniMax 国内版
export OPENROUTER_API_KEY=... # OpenRouter
export ALPHA_VANTAGE_API_KEY=... # Alpha Vantage 数据源

更进一步,任何 OpenAI 兼容服务都能直接接

1
2
export TRADINGAGENTS_LLM_BACKEND_URL=http://localhost:8000/v1
config["llm_provider"] = "openai_compatible"

vLLM、LM Studio、llama.cpp、自建中转网关,不需要改代码。这意味着你可以:

  • 国内网络环境用 GLM-4.6 + Qwen3-Max + DeepSeek-V3 三家轮换
  • 隐私场景用 Ollama 跑本地模型做 Analyst,用 GPT-5.5 做 Researcher 辩论
  • 企业内网接 vLLM 集群,所有流量不出防火墙

这种”provider 抽象层做到底” 的工程取舍,是项目能撑到 99.9k stars 的根本原因之一。

3.3 决策日志(Decision Log):让 Agent 能复盘

这是我个人最看重的一个特性。

每个 ticker 跑完一次分析,TradingAgents 都会把决策追加到 ~/.tradingagents/memory/trading_memory.md

Each completed run appends its decision to ~/.tradingagents/memory/trading_memory.md. On the next run for the same ticker, TradingAgents fetches the realised return (raw and alpha vs SPY), generates a one-paragraph reflection, and injects the most recent same-ticker decisions plus recent cross-ticker lessons into the Portfolio Manager prompt.

翻译一下:

  1. 每次跑完,把决策落到一个 markdown 日志里
  2. 下次跑同一个 ticker 时,自动去拉真实收益(绝对收益 vs SPY 的 alpha)
  3. 生成一段反思文字(” 上次我们看多 X,结果 Y 周后跌了 Z%”)
  4. 把反思注入 Portfolio Manager 的 prompt,让它下次做决策时吸取教训

跨 ticker 的反思也会被检索注入。这意味着你可以用同一个项目追踪多个标的,让 Agent 在多次失败后主动调整策略权重

我用 TradingAgents 跑过 NVDA0700.HKBTC-USD 三轮测试,第二次跑 NVDA 时 Portfolio Manager 的 prompt 里果然出现了上一轮的反思,风格比第一次保守很多

3.4 Checkpoint Resume:崩溃了也别从零开始

LangGraph 的 checkpoint 机制在 TradingAgents 里被包装成 CLI flag:

1
2
tradingagents analyze --checkpoint           # 这次跑开启续跑
tradingagents analyze --clear-checkpoints # 清空所有 checkpoint

每个 ticker 的中间状态落到 ~/.tradingagents/cache/checkpoints/<TICKER>.db(SQLite)。如果跑到一半进程被 kill,下次 propagate("NVDA", ...) 会从断点继续,日志里会显示 Resuming from step N for NVDA on <date>

这种设计在生产环境里救命。我自己的 Claude Code / Codex 跑长任务经常因为 API 限流或者我手贱 Ctrl-C 中断,有了 checkpoint,半小时的分析任务可以从中断的节点继续,不用从头跑。

3.5 数据来源:Yahoo Finance + Alpha Vantage + FRED + Polymarket

TradingAgents 默认从 Yahoo Finance 拿 K 线 + 基本面,支持全球几乎所有 Yahoo 覆盖的市场

  • 美股:AAPL, SPY
  • 港股:0700.HK
  • 日股:7203.T
  • 伦敦:AZN.L
  • 印度:RELIANCE.NS, .BO
  • A 股:600519.SS(贵州茅台), 000001.SZ
  • 加密:BTC-USD, ETH-USD

v0.3.0 之后还接入了 FRED(美联储经济数据)和 Polymarket(预测市场)。情绪数据来自 Reddit + StockTwits + StockInsight 新闻 API。

我自己跑 0700.HK(腾讯港股)的时候验证过:财报数据、K 线、新闻都能拿到,中文公司名也解析正确。


四、怎么用 / 快速上手

4.1 安装

1
2
3
4
5
git clone https://github.com/TauricResearch/TradingAgents.git
cd TradingAgents
conda create -n tradingagents python=3.12
conda activate tradingagents
pip install .

或者直接 Docker:

1
2
cp .env.example .env  # 填 API keys
docker compose run --rm tradingagents

本地模型想用 Ollama:

1
docker compose --profile ollama run --rm tradingagents-ollama

4.2 CLI 启动

1
2
3
tradingagents
# 或者
python -m cli.main

进 CLI 之后会看到一个交互向导:选 ticker、选分析日期、选 LLM provider、选研究深度(shallow /medium/deep)。深度越高,辩论轮数越多、用的模型越强。

4.3 Python 调用(最常用)

1
2
3
4
5
6
7
8
9
10
11
12
from tradingagents.graph.trading_graph import TradingAgentsGraph
from tradingagents.default_config import DEFAULT_CONFIG

config = DEFAULT_CONFIG.copy()
config["llm_provider"] = "deepseek" # 国内友好
config["deep_think_llm"] = "deepseek-chat"
config["quick_think_llm"] = "deepseek-chat"
config["max_debate_rounds"] = 2

ta = TradingAgentsGraph(debug=True, config=config)
_, decision = ta.propagate("NVDA", "2026-01-15")
print(decision)

propagate() 返回 (state, decision),state 是 LangGraph 的中间状态字典,decision 是 Portfolio Manager 签字后的最终结论(带 reasoning 字段)。

4.4 完整 Pipeline

我自己的一个使用流程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import json
from tradingagents.graph.trading_graph import TradingAgentsGraph
from tradingagents.default_config import DEFAULT_CONFIG

config = DEFAULT_CONFIG.copy()
config["llm_provider"] = "openai_compatible"
config["backend_url"] = "http://localhost:8000/v1" # 本地 vLLM
config["checkpoint_enabled"] = True

ta = TradingAgentsGraph(config=config)
state, decision = ta.propagate("BTC-USD", "2026-08-01")

# state 里有 Analyst 报告、Researcher 辩论、Trader 提案、风控结论全流程
with open("run_state.json", "w") as f:
json.dump(state, f, indent=2, default=str)

跑完一次之后,~/.tradingagents/memory/trading_memory.md 会自动追加这段决策。下次再跑同一个 ticker,Agent 会记得上次做错了什么


五、总结 / 适用人群 / 局限性

5.1 它适合谁

  • 量化研究员:想搭多 Agent 协作实验台,研究不同 LLM 在金融决策上的差异
  • AI Agent 工程师:想看 LangGraph 在生产级多 Agent 框架里的标准用法
  • 投研团队的产品经理:评估”AI Agent + 交易决策” 这条产品路径的可落地程度
  • NLP / FinTech 学术圈:论文复现需要的话,TradingAgents 是现成的工程实现

5.2 它不适合谁

  • 想要”AI 替我下单赚钱” 的散户:README 明说”not intended as financial advice”,跑出来的决策不会真下单,最多到模拟盘
  • 需要低延迟策略的 HFT 玩家:LLM 调用延迟至少秒级,高频不适用
  • 想要 stable return 的策略:论文和代码自己都写了”Backtest results are not guaranteed to match any published figure”

5.3 局限性 / 已知坑

我自己跑了两周,发现几个值得提前知道的坑:

  1. 数据有漂移。新闻和社交媒体是实时拉的,同样 ticker + date 跑两次会因为”now” 不同拿到不同情绪数据。要严格复现某个历史决策,必须 --pin-date 锁日期。
  2. Reasoning 模型忽略 temperature。README 写了:默认的 GPT-5.x 是 reasoning-first,温度参数对它作用有限。要可复现必须切 non-reasoning 模型。
  3. 成本不可忽略。一次 deep 模式跑 4 个 Analyst + 2 轮辩论 + Trader + 风控,单 ticker 单次大约消耗 50k–200k tokens。生产环境跑 100 个 ticker × 每天,账单会跑成几千美元。
  4. A 股数据有缺口600519.SS 这类 A 股代码基本面数据从 Yahoo 来,部分字段缺失,需要自己接 Tushare / Wind 补。
  5. 模型” 看错公司” 的历史问题已经修过。早版本有用户报告 ticker 解析错公司,新版本加了”analyzed company identity resolved deterministically from the ticker before any agent runs”。

5.4 我会怎么用

对我来说 TradingAgents 的位置在” 研究多 Agent 协作模式的标准样本” 这一格。直接拿它赚钱这件事它不做,也不打算做。我会把它接进自己的 LangGraph 学习路径里,专门拆它的:

  • trading_graph.py 看 LangGraph 怎么编排五支角色
  • default_config.py 看 provider 抽象层怎么写
  • dataflows/ 看金融数据怎么清洗、对齐时间戳
  • cli/ 看终端交互怎么设计

这套源码量在 5MB 左右(仓库总大小 5,233 KB),核心代码集中在 tradingagents/graph/tradingagents/agents/ 两个目录,单文件不超过 600 行,比直接读 LangChain 源码友好很多


六、写在最后

99.9k stars 是个有意义的数字。TradingAgents 用的是 2024 年就成熟的 AI Agent 概念(multi-agent、bull/bear debate 这些),它赢在工程扎实

  • LangGraph 做骨架,不重新发明轮子
  • Provider 抽象做透,十多家 LLM 都能切
  • Decision Log + Checkpoint 这种” 研究工具必备” 功能原厂就有
  • README 不画饼,明确说”not financial advice”

这套底色让它从一个学术论文长成了一个真有人用的 Python 包。对于我这种写代码的人,它的价值集中在一点上:展示一个” 严肃 LLM 应用框架” 应该长什么样

如果你们也在用 LangGraph 做多 Agent 项目,可以拿它的 trading_graph.py 当模板;如果你们在找一个金融 LLM 研究的 baseline,TradingAgents + 论文 2412.20138 一起读最省时间。

GitHub 链接:github.com/TauricResearch/TradingAgents
arXiv 论文:arxiv.org/abs/2412.20138


今日速览

  • 项目:TauricResearch/TradingAgents
  • Stars:99,996(逼近 10 万)
  • Forks:19,327
  • License:Apache-2.0
  • 主语言:Python(LangGraph)
  • 论文:arXiv 2412.20138
  • v0.3.1(2026-07-05)