>**极客深潜 第5期**
---
##一、开篇:假如你是CEO,手下有11个人但只有1台电脑
想象你是一家小型对冲基金的CEO。
早上9点,你的邮箱里堆满了分析师报告。市场分析师说「RSI超卖,技术面看涨」,社交媒体分析师说「Reddit情绪偏负面」,基本面分析师说「Q4财报超预期但现金流吃紧」,新闻分析师说「监管法案可能下周落地」。
你需要把这些相互矛盾的信息汇总、让多空双方辩论、制定交易方案、评估风险、最后拍板——买入、卖出还是持有?
正常来说,这需要一整个投行团队:4个分析师、2个研究员、1个研究主管、1个交易员、3个风控专家、1个投资组合经理。**11个人,一整天,几万块的人力成本。**
现在,你只需要一台电脑,一个Python环境,一个API Key。
运行一行代码,等待几分钟,屏幕上会浮现出一份完整的投资决策报告——包含技术面分析、多空辩论记录、交易方案、风险评估、最终评级(Buy/Overweight/Hold/Underweight/Sell)以及完整的投资论点。
这不是科幻。这是一个叫做 **TradingAgents** 的开源项目,**GitHub 69,647 Stars**,正在让整个开发者社区疯狂。
---
##二、项目介绍:TradingAgents 是什么?
TradingAgents 由 **Tauric Research** 团队开发,2024年12月28号开源,短短几个月飙升至 **69,647 Stars**,稳居 GitHub Trending Top 1。
它的核心理念极其简洁,又极其大胆:
>**用11个LLM Agent模拟一家对冲基金的完整投研流水线。**
每个Agent扮演一个角色——分析师、研究员、交易员、风控经理、投资组合经理——通过 **LangGraph 的 StateGraph** 编排成一个有向图,数据从起点流入,经过分析→辩论→交易→风控→决策五个阶段,最终输出结构化的投资建议。
整个项目只有 **~6,800行 Python 代码**,支持 **10+ LLM Provider**(OpenAI、Anthropic、Google、DeepSeek、xAI、Qwen、GLM、Ollama 等),还有一篇 **[arXiv论文(2412.20138)](https://arxiv.org/abs/2412.20138)** 讲解背后的方法论。
传统量化框架(如 Backtrader、Zipline)需要你精通金融工程和数学建模。而 TradingAgents 把 LLM 当作「分析师大脑」——你只需要会装 pip,就能获得一家虚拟对冲基金的全部输出。
---
##三、核心亮点深度拆解
###3a. 五大Phase投研流水线
TradingAgents 的整个流程分为 **5个Phase**,每个Phase由一组Agent协作完成:
```
Phase 1 [分析] → Phase 2 [辩论] → Phase 3 [交易] → Phase 4 [风控] → Phase 5 [终审]
4名分析师 Bull vs Bear Trader 3方风控讨论 Portfolio Manager
并行分析 多轮交锋 方案生成 多维度评估 最终决策
```
**Phase 1 — 分析团队(4 Analyst Node)**
4名分析师按顺序执行,每个分析师使用 `quick_thinking_llm`(轻量模型),通过 `bind_tools` 调用 yfinance API 拉取数据:
-**Market Analyst**:技术面分析(MACD、RSI、K线形态……)
-**Social Analyst**:社交媒体舆情扫描
-**News Analyst**:新闻事件、内幕交易检测
-**Fundamentals Analyst**:财报、资产负债表、现金流、利润表
四个分析师跑完后,state 里填满了四份报告——这就好比晨会前每个分析师把报告扔到你桌上。
**Phase 2 — 研究团队(Bull vs Bear 多轮辩论)**
研究经理把分析师报告同时交给多头(Bull)和空头(Bear)研究员。两人轮流发言,相互驳斥——「你说RSI超卖是底部信号?但历史上超卖后继续下跌的概率是38%……」
辩论持续多轮,最后由 **Research Manager**(使用 **deep_thinking_llm** 强模型)做出裁决,输出结构化投资计划。
**Phase 3 — Trader 交易方案**
Trader 接手研究裁决,输出具体交易参数:方向(buy/sell/hold)、入场价格区间、止损位、仓位比例。
**Phase 4 — 风险管理团队(三方多轮讨论)**
三种风险人格轮流发言:**Aggressive → Conservative → Neutral → Aggressive → ...**。激进派说「仓位可以加到30%」,保守派说「最多10%还要设止损」,中立派负责调和。默认3轮,三方各发言一次。
**Phase 5 — Portfolio Manager 终审**
最终的决策者登场。Portfolio Manager 使用 `deep_thinking_llm`,读取全部风险讨论历史、Trader 提案、以及历史记忆(后面细说),输出 **5档评级**:
| 评级 | 含义 |
|------|------|
|**Buy**| 强烈买入 |
|**Overweight**| 增持 |
|**Hold**| 持有/中性 |
|**Underweight**| 减持 |
|**Sell**| 卖出 |
整个流水线从原始数据到最终决策,没有任何人工干预——真正意义上的「从数据到决策的端到端自动化」。
---
###3b. Agent角色体系(11个Agent模拟真实团队)
这11个Agent不是随便编出来的,而是**真实投行投研团队的数字化重构**:
| 角色 | 对应真实岗位 | LLM级别 |
|------|-------------|---------|
| Market Analyst | 技术分析师 | 轻量 |
| Social Analyst | 舆情分析师 | 轻量 |
| News Analyst | 新闻分析师 | 轻量 |
| Fundamentals Analyst | 基本面分析师 | 轻量 |
| Bull Researcher | 多头研究员 | 轻量 |
| Bear Researcher | 空头研究员 | 轻量 |
| Research Manager | 研究主管 |**强模型**|
| Trader | 交易员 | 轻量 |
| Aggressive Debator | 激进风控师 | 轻量 |
| Conservative Debator | 保守风控师 | 轻量 |
| Neutral Debator | 中立风控师 | 轻量 |
|**Portfolio Manager**|**投资组合经理**|**强模型**|
> 严格来说是 **11个Agent + Research Manager 和 Portfolio Manager 使用强模型**,但因为 Research Manager 也在Phase 2中扮演核心角色,所以完整的「角色分工」是 11 个不同的 Agent 节点。
每个Agent的实现并不复杂——本质上就是一个 **System Prompt + 工具列表 + LLM 调用*的组合。真正巧妙的是它们之间的协作机制,这才是 TradingAgents 的设计精髓。
---
###3c. 双LLM策略:深思考 vs 快思考的分层设计
这是整个项目最值得学习的架构决策之一。
TradingAgents 在每个分析会话中创建**两个LLM实例**:
```
deep_thinking_llm → 强模型(如 GPT-5.4)
→ 用于 Research Manager、Portfolio Manager
→ 需要深度推理的裁决节点
quick_thinking_llm → 轻量模型(如 GPT-5.4-mini)
→ 用于 Analyst、Researcher、Trader、Debator
→ 高频、低成本的数据分析节点
```
为什么这么设计?
因为不是所有任务都需要动用「大炮」。分析师拉数据、写报告——这种任务 GPT-4-mini 级别完全够用。但 Portfolio Manager 需要综合所有信息做最终裁决——这时才需要最强模型。
这个分层策略在成本和效果之间找到了绝佳的平衡点。**所有多Agent项目都应该借鉴这个设计。**
---
###3d. 辩论机制:Bull vs Bear 多轮交锋
TradingAgents 最吸引人的设计之一,就是它的**结构化对抗式辩论**。
流程是这样的:
```
Bull Researcher 发言 → count+1
↓ (count < 2×rounds?)
Bear Researcher 反击 → count+1
↓ (count < 2×rounds?)
Bull Researcher 再反驳 → count+1
↓ (count 达到上限)
Research Manager 裁决
```
默认3轮辩论,上限是 `2 × max_debate_rounds = 6` 次发言。
为什么辩论有效?因为单个LLM分析容易产生「确认偏误」——它倾向于寻找支持初始结论的证据。但让两个LLM分别扮演多空双方,强制它们从相反的立场找论据,然后由第三个LLM做中立裁决——**这本质上是一种「对抗式验证」**,比单Agent分析可靠得多。
同样的设计也用在Phase 4的风险管理阶段:Aggressive / Conservative / Neutral 三方轮流发言,从不同风险偏好角度评估交易方案。
---
###3e. 自进化记忆系统:记录→回填→反思的闭环
这是 TradingAgents 最让我惊艳的设计。它不仅仅是每个 ticker 独立分析——**它会从历史决策中学习**。
记忆系统分为两个阶段:
**Phase A — 决策记录**:每次 propagate 结束时,将决策写入 `~/.tradingagents/memory/trading_memory.md`,标记为 "pending"(待回测)。有去重保护,相同条目不会重复写入。
**Phase B — 结果回填**:下次分析同一 ticker 时,系统会自动查找之前的 pending 条目,用 yfinance 拉取实际收益数据(raw_return、alpha_return、持有天数),然后让 LLM 生成 2-4 句反思,原子写入更新。
上下文注入时,系统会拉取**最近5条同标的决策 + 最近3条跨标的反思**,注入到 Portfolio Manager 的 prompt 中。
这意味着:**TradingAgents 会「记住」上次买 NVDA 亏了钱,这次就会更谨慎。** 这是真正的自进化系统。
---
##四、代码深潜:核心实现解读
###4.1 propagate:启动整个流水线的入口
`TradingAgentsGraph.propagate()` 是整个系统的入口方法。它的职责是创建初始状态、构建配置、调用 propagate 执行图、提取信号:
```python
class TradingAgentsGraph:
defpropagate(self,ticker,date=None,model_info=None):
"""主入口:分析一个股票代码,返回(原始输出,结构化决策)"""
ifself.checkpointer:
self.graph =self.graph_setup.create_graph()
initial_state =self.graph_setup.create_initial_state()
# 注入 ticker、日期、LLM 配置到初始状态
initial_state["ticker"]= ticker
initial_state["date"]= date or datetime.today().strftime("%Y-%m-%d")
initial_state["model_info"]= model_info or{}
# 解析配置:deep vs quick 双LLM
config =_parse_config(initial_state)
# 记忆系统:回填历史 pending 条目
self._resolve_pending_entries(ticker)
# 核心调用:执行 LangGraph 图
result =self.graph.invoke(initial_state, config)
# 信号提取:从 Portfolio Manager 输出中解析评级
decision =self.signal_processor.process_signal(result)
return result, decision
```
关键点:
-`_resolve_pending_entries(ticker)` 在每次分析前触发记忆回填——这是自进化的触发器
-`self.graph.invoke()` 是 LangGraph 的核心调用,一次调用驱动整个图的所有节点按顺序/条件执行
-`process_signal()` 通过正则从结构化输出中提取评级信息,**零额外LLM调用开销**
###4.2 结构化输出的优雅降级
TradingAgents 大量使用 Pydantic Schema 来规范 Agent 的输出。但问题是——**并不是所有 LLM Provider 都支持 `with_structured_output`**(比如 DeepSeek Reasoner)。
解决方案是一个巧妙的设计模式:
```python
definvoke_structured_or_freetext(llm,schema,prompt):
try:
# 优先尝试结构化输出(Schema 绑定)
structured_llm = llm.with_structured_output(schema)
return structured_llm.invoke(prompt)
exceptException:
# 自动降级:回退到自由文本 + 正则解析
response = llm.invoke(prompt)
returnparse_from_text(response)
```
这个模式保证了跨 Provider 的兼容性。如果你的模型不支持 Schema,系统不会报错——它会优雅地降级到自由文本解析。**这种防御性设计在所有 Agent 项目中都值得采用。**
###4.3 自定义配置:一行代码定制你的虚拟投行
TradingAgents 的配置系统非常灵活,支持自定义 LLM 提供商、模型选择、辩论轮次、检查点等:
```python
from tradingagents.graph.trading_graph import TradingAgentsGraph
from tradingagents.default_config importDEFAULT_CONFIG
# 复制默认配置并自定义
config =DEFAULT_CONFIG.copy()
config["llm_provider"]="openai"# 切换 Provider
config["deep_think_llm"]="gpt-5.4"# 裁决用强模型
config["quick_think_llm"]="gpt-5.4-mini"# 分析用轻量模型
config["max_debate_rounds"]=5# 增加到5轮辩论
config["checkpoint_enabled"]=True# 启用崩溃恢复
# 启动你的虚拟投行
ta =TradingAgentsGraph(debug=True,config=config)
_, decision = ta.propagate("AAPL","2026-01-15")
print(decision)
```

---
##五、如何上手?5分钟跑起来
###安装
```bash
git clonehttps://github.com/TauricResearch/TradingAgents.git
cdTradingAgents
pip install.
```
###设置 API Key
```bash
export OPENAI_API_KEY=sk-...
export ALPHA_VANTAGE_API_KEY=...
```
(至少一个 LLM Provider 即可,支持 OpenAI、Anthropic、Google、DeepSeek、xAI、Qwen、GLM 等10+)
###跑起来
**CLI 模式:**
```bash
tradingagents
```
启动交互式终端,输入股票代码即可。
**Python API 模式:**
```python
from tradingagents.graph.trading_graph import TradingAgentsGraph
ta =TradingAgentsGraph(debug=True)
_, decision = ta.propagate("NVDA","2026-01-15")
print(decision)
```
###Docker 部署
```bash
cp .env.example.env# 填入 API Key
docker composerun--rmtradingagents
```
支持 Ollama 本地模型:
```bash
docker compose--profileollamarun--rmtradingagents-ollama
```
---
##六、技术点总结
1.**LangGraph 多Agent编排范式**:`StateGraph` + 条件边实现复杂的多Agent协作流——节点是纯函数,边控制路由逻辑。这是可复用的 AI Agent 流水线架构样板。
2.**双LLM策略的性价比设计**:`deep_thinking_llm`(强贵)仅用于裁决节点,`quick_thinking_llm`(轻省)用于高频分析节点。简单任务不动用大模型——这个分层策略值得所有 Agent 项目借鉴。
3.**结构化输出 + 自动降级**:`with_structured_output` 配合 `invoke_structured_or_freetext` 优雅降级——Provider 不支持 Schema 时自动回退到自由文本,保证跨 Provider 兼容性。
4.**辩论机制(结构化对抗)**:Bull vs Bear 多轮辩论 + Research Manager 裁决,本质是**对抗式验证 + 第三方裁定**——让 LLM 自我纠错,比单 Agent 分析更可靠。
5.**记忆系统的两阶段生命周期**:Phase A(记录 pending)→ Phase B(回填结果 + 反思),不是简单的日志追加,而是有完整的闭环验证机制。原子写入 + 自动轮转保证了生产可用性。
6.**LLM 客户端工厂模式**:`create_llm_client()` 通过配置路由到 10+ Provider,每个 Provider 的差异由单独客户端类隔离。DeepSeek 的 `reasoning_content` 特殊处理展示了如何处理 Provider 特有的响应字段。
7.**11个Agent角色 + 5档评级体系**:从真实投行团队抽象出来的角色分工,Buy/Overweight/Hold/Underweight/Sell 五档评级——完整复刻了专业机构的决策流程。
---
##七、写在最后
TradingAgents 之所以能拿下 69,647 Stars,不是因为它是一个完美的交易系统(**请注意:这不是投资建议,不要用它做真实交易**),而是因为它提供了一个**令人惊艳的 AI Agent 协作范式**。
它证明了:
- 多个专业化 Agent 协作 > 一个通用 Agent 单干
- 结构化对抗(辩论)可以显著提升 LLM 输出的质量
- 记忆系统让 AI 系统具备了「从经验中学习」的能力
- 双LLM分层设计在成本和效果之间找到了黄金分割点
对于开发者来说,TradingAgents 的代码只有 **~6,800行 Python**,是学习 LangGraph 多Agent编排的绝佳教科书。无论你是想做 AI 投研、自动化报告生成,还是任何需要多角色协作的场景——这个项目的架构都值得深入研究。
---
**项目地址**:[https://github.com/TauricResearch/TradingAgents](https://github.com/TauricResearch/TradingAgents)
**论文**:[arXiv 2412.20138 — TradingAgents: Multi-Agent LLM Framework for Financial Trading](https://arxiv.org/abs/2412.20138)
**许可证**:Apache-2.0
---
>**⚠️ 免责声明**:本文仅作技术探讨,TradingAgents 是一个研究型项目,不构成任何投资建议。在真实金融市场中使用AI决策存在重大风险,请自行评估。
---
*极客深潜 · 下期预告:我们聊点不一样的。*