本文将深度解析 TradingAgents —— 一个由 Tauric Research 开源的、基于 LLM 的多智能体金融交易框架。该框架模拟真实交易公司的运作模式,通过部署专业化的 LLM 驱动智能体(基本面分析师、情绪分析师、技术分析师、交易员、风险管理团队),协同评估市场条件并做出交易决策。项目在 GitHub 上已获广泛关注,论文发表在 arXiv(2412.20138)。
TradingAgents 的核心设计理念是:将复杂的金融交易任务分解为专业化的智能体角色。这不同于传统的端到端单模型方案,而是借鉴了真实交易公司的组织结构——分析师负责收集信息,研究员负责辩论验证,交易员负责执行决策,风控团队负责把关。
框架使用 LangGraph 构建有向图(DAG)计算图,支持灵活的条件路由和多轮辩论循环。所有智能体共享一个模块化的工具系统,通过 Alpha Vantage、Yahoo Finance 等数据源获取实时市场数据。
四位专业分析师并行工作,各自关注不同的市场维度:
每个分析师都是一个 LangGraph 节点,使用 deep_thinking_llm(复杂推理模型)进行分析,并通过 ToolNode 调用对应的数据工具。
包含多头和空头两位研究员,他们对分析师的见解进行批判性评估。通过结构化辩论平衡潜在收益与固有风险:
# 来自 bull_researcher.py / bear_researcher.py
# 研究员接收分析报告,进行论证推理
researcher_response = deep_thinking_llm.invoke([
SystemMessage(content=RESEARCHER_SYSTEM_PROMPT),
HumanMessage(content=f"""
分析报告:
{analyst_reports}
请评估这些分析,给出你的{position}观点。
考虑:估值合理性、风险因素、市场情绪、技术指标
""")
])
TradingAgentsGraph 是框架的核心类,负责初始化组件、构建计算图并驱动执行流程:
from tradingagents.graph.trading_graph import TradingAgentsGraph
from tradingagents.default_config import DEFAULT_CONFIG
ta = TradingAgentsGraph(debug=True, config=DEFAULT_CONFIG.copy())
# 前向传播 —— 传入公司代码和交易日期
_, decision = ta.propagate("NVDA", "2026-01-15")
print(decision)
框架内部通过 GraphSetup 组件构建 LangGraph 图结构:
条件逻辑(ConditionalLogic)控制辩论轮次和流程分支:
# conditional_logic.py
class ConditionalLogic:
def __init__(self, max_debate_rounds=3, max_risk_discuss_rounds=3):
self.max_debate_rounds = max_debate_rounds
self.max_risk_discuss_rounds = max_risk_discuss_rounds
def should_continue_debate(self, state, current_round):
"""判断是否继续辩论"""
if current_round >= self.max_debate_rounds:
return "end_debate"
if state.get("consensus_reached"):
return "end_debate"
return "continue_debate"
TradingAgents 通过抽象工具层(agent_utils.py)统一数据访问接口,支持多数据源:
# agent_utils.py - 抽象工具方法
from tradingagents.agents.utils.core_stock_tools import get_stock_data
from tradingagents.agents.utils.technical_indicators_tools import get_indicators
from tradingagents.agents.utils.fundamental_data_tools import (
get_fundamentals, get_balance_sheet, get_cashflow, get_income_statement
)
from tradingagents.agents.utils.news_data_tools import (
get_news, get_insider_transactions, get_global_news
)
数据流层(dataflows/)封装了具体的数据源实现:
框架支持六大 LLM 提供商,通过工厂模式创建客户端:
# llm_clients/factory.py
def create_llm_client(provider, model, base_url=None, **kwargs):
if provider == "openai":
return OpenAIClient(model, base_url, **kwargs)
elif provider == "google":
return GoogleClient(model, base_url, **kwargs)
elif provider == "anthropic":
return AnthropicClient(model, base_url, **kwargs)
elif provider == "xai":
return OpenAIClient(model, "https://api.x.ai/v1", **kwargs)
elif provider == "openrouter":
return OpenAIClient(model, "https://openrouter.ai/api/v1", **kwargs)
elif provider == "ollama":
return OpenAIClient(model, "http://localhost:11434/v1", **kwargs)
每个智能体角色可以独立配置使用 "deep think"(复杂推理模型)或 "quick think"(快速响应模型),实现成本与性能的平衡。
default_config.py 定义了完整的配置体系:
DEFAULT_CONFIG = {
"llm_provider": "openai",
"deep_think_llm": "gpt-5.2", # 复杂推理模型
"quick_think_llm": "gpt-5-mini", # 快速响应模型
"max_debate_rounds": 3, # 最大辩论轮次
"max_risk_discuss_rounds": 3, # 最大风险讨论轮次
"project_dir": str(Path(__file__).parent),
"dataflow_provider": "alpha_vantage",
"openai_reasoning_effort": "high", # GPT 推理努力度
"google_thinking_level": "enabled", # Gemini 思考模式
"anthropic_effort": "high", # Claude 努力度
}
配置覆盖了模型选择、推理参数、数据源、交易策略等多个维度,用户可通过配置文件或代码方式灵活定制。
TradingAgents 的风险管理采用多层次辩论设计:
多头研究员 vs 空头研究员,每一轮都会结合对方的观点进行反论证,直至达成共识或达到最大轮数。
三个风险维度同时辩论:
# 风险状态跟踪
class RiskDebateState(TypedDict):
conservative_risk_score: float # 保守派风险评估
neutral_risk_score: float # 中立派风险评估
aggressive_risk_score: float # 激进派风险评估
consensus_risk_level: str # 最终风险等级
risk_adjusted_position: Dict # 风险调整后的持仓建议
git clone https://github.com/TauricResearch/TradingAgents.git
cd TradingAgents
pip install -e .
# 配置环境变量
export OPENAI_API_KEY=sk-xxx
export ALPHA_VANTAGE_API_KEY=xxx
config = DEFAULT_CONFIG.copy()
config["llm_provider"] = "anthropic" # 使用 Claude
config["deep_think_llm"] = "claude-sonnet-4-20250514"
config["quick_think_llm"] = "claude-haiku-4-20250514"
config["max_debate_rounds"] = 5
config["max_risk_discuss_rounds"] = 5
ta = TradingAgentsGraph(debug=True, config=config, selected_analysts=[
"market", "social", "news", "fundamentals"
])
decision = ta.propagate("AAPL", "2026-06-05")
print(f"交易决策: {decision}")
TradingAgents 展示了多智能体系统在金融领域的前沿应用潜力。通过专业化的角色分工、结构化的辩论机制、模块化的工具系统和灵活的 LLM 适配层,该框架为 AI 驱动的量化交易研究提供了一个强大且可扩展的基础设施。对于想要深入理解多智能体编排(特别是 LangGraph 实战)的开发者来说,TradingAgents 的源码是一个极佳的学习资源。
🔗 项目地址:https://github.com/TauricResearch/TradingAgents
📄 论文:arXiv:2412.20138