开源解读(3)|TradingAgents:把一句“这只股票能不能买”,拆成一支 AI 投研团队

📅 2026/7/1 1:30:10
开源解读(3)|TradingAgents:把一句“这只股票能不能买”,拆成一支 AI 投研团队
你有没有遇到过这种情况你把一只股票代码丢给 AI问它“能不能买”它很快给你一段看起来很完整的回答。宏观、技术面、基本面、风险提示都有语气也很稳。但读完之后你会发现一个问题它太像一个人在自圆其说了。它没有真正请一个人唱反调也没有让风控角色单独质疑交易方案更没有把最后结论压成程序可以解析的结构化决策。这正是 TradingAgents 这个开源项目有意思的地方。它不是让一个 LLM 直接给投资建议而是把一次交易判断拆成一条可审查的执行链分析师报告、研究员辩论、交易员方案、风控复核、Portfolio Manager 拍板。我这篇不是投资建议也不会讨论哪只股票该买。这里更值得看的是 TradingAgents 如何用 LangGraph、ToolNode、共享状态、结构化输出和多 Agent 辩论把“单次回答”改造成“多角色决策流程”。下面涉及架构、机制和课程内容的判断都是我基于 GitHub 当前信息、AIFlowLearn Codex 选型页、DeepWiki 采集文档和 Classroom 课程材料逐层对照后整理出来的源码里能确认的我会按事实写推导性的部分只作为架构解读。一、仓库信息卡片项目信息GitHubTauricResearch/TradingAgents基本信息Stars88,1272026-06-23 查询 / LanguagePython / LicenseApache-2.0 / Latest releasev0.3.0一句话价值用多 Agent 分工、对抗式辩论和结构化输出模拟投研团队从数据收集到交易决策的完整流程。Codex15 分钟看架构与选型重点看 Agent 团队、LangGraph 编排、技术选型和边界。Classroom40 分钟看交互 PPT 视频讲解重点看动态流程、节点高亮、命令与脚本模拟。这个仓库最适合的学习对象不是“我想直接拿它炒股”而是这三类人你想学什么TradingAgents 能给你的东西需要警惕的边界多 Agent 决策架构13 个角色、五阶段流水线、共享状态传递Agent 多不等于结论一定正确LangGraph 工作流编排StateGraph、ToolNode、条件边、循环退出不适合亚秒级或高频执行金融场景里的结构化输出ResearchPlan、TraderProposal、PortfolioDecision 等 schema输出是研究辅助不是交易承诺二、一张大图先看懂 TradingAgents如果只抓主线TradingAgents 的架构可以压缩成一句话用户通过 CLI 或 Python API 输入 ticker/dateTradingAgentsGraph读取配置创建 Deep/Quick 两类 LLM注册 ToolNode 和 Agent 节点然后用 LangGraph 的 StateGraph 推动状态从分析师团队一路流到 Portfolio Manager。这个设计的关键不是“Agent 数量多”而是每个角色都在同一个状态对象里接力写入结果。市场分析师写market_report情绪分析师写sentiment_report新闻分析师写news_report基本面分析师写fundamentals_report。后面的 Bull / Bear Researcher 不再凭空争论而是拿这些报告做多空辩论Trader 再把辩论结论转成交易方案Risk Team 再围绕方案做三方质疑最后 PM 给出五档评级。User Input - TradingAgentsGraph.propagate(ticker, date) - Analyst Reports - Bull / Bear Debate - Research Manager plan - Trader proposal - Risk debate - PortfolioDecision - SignalProcessor.process_signal()这个流程里最值得注意的是两件事。第一TradingAgents 把“分析”与“决策”分开。分析师只负责取数和写报告研究团队负责辩论交易员负责方案风控负责质疑PM 负责最终裁决。这样做会拉长链路但也让每一步更容易审查。第二它用结构化输出收束 LLM。研究经理、交易员、PM 这类关键节点不是随便写一段自然语言而是尽量落到固定 schema 上最终评级也被限制在 Buy / Overweight / Hold / Underweight / Sell 这样的离散集合里。三、技术选型为什么是 LangGraph 多角色辩论Codex 的选型页里把 TradingAgents 的定位说得很清楚它解决的是“单一 LLM 的交易决策容易受确认偏误影响”的问题路线是“多 Agent 对抗式辩论 结构化决策输出”。1. 和 FinRobot、单 Agent Tool 的区别维度TradingAgentsFinRobot单 Agent Tool决策机制多 Agent 对抗式辩论最后结构化裁决多 Agent 协作更偏任务分工单次推理或少量工具调用Agent 组织分析师、研究员、交易员、风控、PM 角色完整角色更少流程更轻通常只有一个主 Agent编排方式LangGraph StateGraph支持条件边和状态流转多为自定义编排往往不需要复杂编排输出控制ResearchPlan / TraderProposal / PortfolioDecision 等结构视实现而定很容易回到自由文本适用重点学习投研决策流水线、多 Agent 对抗机制快速搭金融 Agent 原型快速问答、轻量分析如果你只是想做一个“查股票数据然后总结”的工具TradingAgents 会显得重。它的价值在另一边你想研究如何把一个高风险、容易偏见的判断拆成多个角色互相制衡的流程。2. 为什么用 StateGraphTradingAgents 的中心不是某个神奇 prompt而是TradingAgentsGraph这层编排。它把系统拆成几个可组合组件ConditionalLogic判断下一步走哪里GraphSetup构建节点和边Propagator负责初始化和运行状态SignalProcessor从最终文本里提取交易信号Reflector在结果出来后做复盘。这比简单的函数串联更适合 Agent 系统因为 Agent 经常会出现“还需要查数据”的中间状态。比如市场分析师最后一条消息如果包含tool_calls条件边就把流程路由到tools_market如果没有工具调用就进入清理节点再交给后续角色。defshould_continue_market(state):last_messagestate[messages][-1]iflast_message.tool_calls:returntools_marketreturnMsg Clear Market这段逻辑看起来很小但它解释了很多 Agent 框架里最核心的一件事Agent 并不是“回答一次就结束”而是在“推理 - 调工具 - 再推理 - 退出”的循环里工作。LangGraph 的条件边把这个循环显式化了。3. 为什么分 Deep / Quick 两类 LLMDeepWiki 材料里能看到TradingAgentsGraph初始化时会创建deep_thinking_llm和quick_thinking_llm。从职责上看快速模型更多用于分析师、Trader、信号处理等节点深度模型更多用于 Research Manager、Portfolio Manager 这类需要综合裁决的角色。这是一种很现实的工程取舍不是每一步都用最贵模型。取数、整理、初步报告可以更快真正需要综合多方意见、做最终判断的地方再给更强的模型预算。四、核心原理它怎样把“AI 回答”变成“投研流水线”1. AgentState 是整条链路的共享工作台TradingAgents 的状态不是一段聊天上下文而是一个有业务字段的共享对象。DeepWiki 的AgentState文档里列出了关键字段company_of_interest、trade_date、四类 analyst report、investment_debate_state、investment_plan、trader_investment_plan、risk_debate_state、final_trade_decision、past_context等。这意味着每个 Agent 的产出都有明确落点。它不像普通 ChatGPT 对话那样把所有内容塞进一段上下文里而是让后续节点按字段读取上游结果。阶段写入的关键状态后续谁会消费Analyst phasemarket_report/sentiment_report/news_report/fundamentals_reportBull / Bear ResearcherResearch phaseinvestment_debate_state/investment_planTraderTrader phasetrader_investment_planRisk TeamRisk phaserisk_debate_statePortfolio ManagerFinal phasefinal_trade_decisionSignalProcessor / MemoryLog这也是文章开头说它“更像投研团队”的原因真正的团队协作不是所有人一起聊天而是每个人把自己负责的报告放到共享工作台后续角色基于这些材料继续加工。2. 分析师不是凭空说它们通过 ToolNode 取数四类分析师绑定的工具不同这一点很重要。市场技术分析师用get_stock_data和get_indicators新闻分析师会用get_news、get_global_news、get_insider_transactions基本面分析师会用get_fundamentals、get_balance_sheet、get_cashflow、get_income_statement。这样做的好处是角色边界清晰不是所有 Agent 都拿同一包工具乱用而是每个 Agent 只拿与职责匹配的工具。这个设计降低了提示词和工具选择的混乱度。当然代价也明显数据源质量、API 限速、数据覆盖范围会直接影响结果。Codex 选型页也提醒了边界它适合美股/加密货币多维分析、学术研究、多 Agent 架构学习不适合实盘高频交易、亚秒级策略执行、零 API 成本或纯 A 股深度覆盖。3. 辩论机制解决的是“单视角过度自信”TradingAgents 里有两层辩论。第一层是投资研究辩论Bull Researcher 和 Bear Researcher 基于四份分析师报告交替表达观点max_debate_rounds控制轮数。轮数结束后Research Manager 综合双方观点生成ResearchPlan。第二层是风险辩论Trader 给出方案后Aggressive、Conservative、Neutral 三个风控角色从不同立场审查最后 Portfolio Manager 综合风控意见做最终裁决。max_risk_discuss_rounds控制这一阶段的轮次。这里的核心不是让 AI 变得“更热闹”而是让反方观点在流程里有固定位置。单 Agent 很容易把最顺手的一条逻辑写到底TradingAgents 至少在流程层面强制它听见反方和风控。4. 结构化输出让系统能被程序接住LLM 最大的问题之一是自由文本太自由。今天说“建议买入”明天说“可以逐步配置”后天说“偏乐观但需谨慎”人能看懂程序不一定好解析。TradingAgents 在关键节点使用 schema 收束输出。例如研究经理输出ResearchPlan交易员输出TraderProposalPM 输出PortfolioDecision。Pydantic schema 会约束字段和枚举评级也被压在五档内。classPortfolioRating(Enum):BUYBuyOVERWEIGHTOverweightHOLDHoldUNDERWEIGHTUnderweightSELLSellclassTraderProposal(BaseModel):action:TraderAction reasoning:strentry_price:Optional[float]stop_loss:Optional[float]position_sizing:Optional[str]这就是它和普通问答最大的分水岭普通问答追求“看起来完整”TradingAgents 追求“流程上可审查结果上可解析”。5. MemoryLog 和 Reflector 让决策有复盘入口DeepWiki 里还提到一个容易被忽略的组件TradingMemoryLog。它会记录决策后续在结果出来后由Reflector根据 raw return 和 alpha return 更新经验。这不是神奇的“自动变聪明”更像一个工程化复盘入口。系统至少保留了“当时为什么这么判断、后来结果如何、有什么经验”的链路。对研究多 Agent 系统的人来说这比单次生成更重要因为长期质量来自可复盘而不是一次输出的漂亮程度。五、关键设计取舍它好在哪里又重在哪里1. 适合学习不适合神化TradingAgents 很容易被误读成“AI 炒股神器”。我反而建议把它当成多 Agent 工程样本看。它展示了如何把复杂决策拆角色、拆状态、拆工具、拆辩论、拆结构化输出。它适合学习多 Agent 决策架构不适合直接当作实盘高频交易系统。2. 成本来自链路长度一次完整运行要经过多个 Agent每个 Agent 可能还有工具调用。Codex 选型页里也把时间和 API 成本列为现实约束串行模式可能是分钟级外部 LLM 和数据 API 都会产生费用或限流。换句话说TradingAgents 用时间和成本换来了流程可审查。这个取舍是否值得取决于你要解决的问题。如果目标是“快速给一个粗略判断”它太重如果目标是“学习如何设计可审查的多 Agent 决策链”它很合适。3. 结构化不等于事实正确schema 能让输出格式稳定但不能保证输入数据一定充分也不能保证模型判断一定正确。它解决的是工程接口问题不是金融正确性问题。这也是使用这类项目时必须反复提醒自己的地方多 Agent、辩论、结构化输出、记忆复盘都会提高可解释性和可审查性但不能把研究辅助工具变成交易结论机器。六、Classroom PPT用交互把流水线跑给你看TradingAgents 的 Classroom 课程比普通静态文章更适合入门因为它不只是给你几张架构图而是把“用户输入之后发生什么”做成了动态演示。截图我不建议随便取前几页。对开源解读文章来说精选图应该服务于一条主线先给读者课程大纲再给系统架构再进入团队分工、工具层、交互式辩论、风控链路、状态流转、条件路由、最终收敛。下面这 10 张就是按这个顺序挑的第一张是大纲后面覆盖关键架构和关键交互原理。你可以在课程里看到分析师团队如何接力数据包如何从一个节点流到下一个节点Bull / Bear 如何展开辩论风控三方如何围绕交易员方案继续质疑。更重要的是它直接支持动态命令、脚本和交互式模拟节点高亮、流程推进、命令示例、代码翻译、测验反馈这些都能让用户更快理解实战链路。1. 课程导读与全景规划先知道这门课要学什么这张必须放第一。它不是装饰封面而是告诉读者学习路线先理解系统架构再看 Agent Teams然后进入交易决策管线、多 Agent 辩论、数据工具和部署配置。2. 系统架构总览看清 TradingAgents 的五层设计这张承担“架构入口”的作用。它把 User Interfaces、Orchestration、Agent Teams、Data Acquisition、LLM Integration 放到同一张图里方便读者先建立系统边界。3. 核心团队分工为什么不是一个 Agent 包办这张对应文章里“分析与决策分开”的判断。分析员、研究员、交易员、风控团队的边界清楚后面理解状态流和辩论链路就不会混。4. Analyst Team数据工具如何进入分析报告这张用来解释 ToolNode 和工具分配。Market、Social、News、Fundamentals 四类分析师不是共享同一堆工具而是各自绑定职责相关的数据能力。5. Researcher 交互辩论把反方观点固定进流程这张是关键交互截图。它展示 Bull / Bear / Judge 的辩论流不是静态讲概念而是把ConditionalLogic、多轮对抗和最终裁决放到一个可推进的交互场景里。6. Trader 与 Risk Manager交易方案不是最终答案这张解释为什么 TradingAgents 不是“Trader 一拍脑袋就结束”。Trader 只负责生成方案Risk Team 会从激进、保守、中立三种视角继续审查最后才交给 Portfolio Manager。7. AgentState 状态流转所有角色共享一张工作台这张对应核心原理里的 AgentState。它能帮读者看到market_report、investment_plan、trader_investment_plan、risk_debate_state这些字段是如何沿管线累积的。8. 条件路由与阶段衔接Agent 怎么决定继续还是退出这张是交互原理里最容易被忽略的一环。Agent 不是每一步都直线前进它会根据tool_calls、辩论轮次、风险讨论轮次等条件决定是调工具、继续辩论还是进入下一阶段。9. Bull / Bear 多空辩论对抗机制如何降低单视角偏见这张把“多 Agent 辩论”的价值讲得最直接。TradingAgents 的亮点不是角色数量而是让看多和看空都必须在流程里发声再由 Judge / Manager 负责收敛。10. 共识达成与决策收敛结构化输出如何接住最终结论最后这张收束到 Portfolio Manager、Schema 约束和确定性提取。它对应文章里“结构化输出让系统能被程序接住”的部分也是读者理解 TradingAgents 工程价值的关键。想看完整 PPT 和交互式讲解可以打开 TradingAgents Classroom。如果你想要完整 PPT 截图包也可以关注后回复「TradingAgents」我把完整材料整理给你。