源码级核验:requirements.txt + 上游 tradingagents/graph/setup.py@v0.5.0

PanWatch 的深度分析到底跑了什么:12 个节点、两种模型与一次分析的真实成本

PanWatch 把「多 Agent 投资决策」作为核心卖点,但官方 README 只说「9-Agent 投研团队」,没有列出这 9 个是谁。本页把上游锁定版本、节点清单、默认参数与失败模式从源码里数出来——你会发现真实节点是 12 个,而「9」在仓库里找不到对应名单。

上游锁定:TradingAgents v0.5.0(commit 2d17df8d)默认分析师:market / social / news / fundamentals默认预算:月度 10 美元,超预算拒绝执行依据:requirements.txt + 上游 setup.py + agent_catalog.py(固定 commit)
四类分析师
看多 / 看空研究员
研究主管与交易员
风控三方 → PM 决策
依据上游 TradingAgents v0.5.0 的 graph/setup.py 节点顺序整理的示意图;非官方架构图,完整节点清单见本页表格。
Version pin

它调的是哪个 TradingAgents?锁定版本与安装代价

PanWatch 不是「调用一个 API」,而是把上游仓库作为依赖直装。因此上游版本决定了你会看到什么行为。

项目取值来源与边界
依赖声明tradingagents @ git+https://github.com/TauricResearch/TradingAgents.git@v0.5.0requirements.txt(锁 tag,不是 @main)
对应上游 commit2d17df8da1536c121e4d7395ac5a5dcec9e96d6fGitHub API 解析 tag v0.5.0 得到
上游许可与规模Apache-2.0;2026-09-29 实测 109,117 star / 20,937 fork,创建于 2024-12-28上游仓库 API(本站实测,非转述)
README 里的旧数字PanWatch README 写「76k+ star / more than 76k stars」已过期:与上游当前数字差距约 3 万
安装代价首次安装会拉约 115 个依赖包(langchain / langgraph / yfinance 等),耗时约 2–5 分钟requirements.txt 注释
不启用时的开销零开销——只有真正启用「TradingAgents 深度分析」Agent 时才会调用同上(官方注释)
为什么这条重要:很多第三方介绍页把「76k star 的多 Agent 框架」当成固定事实到处复制,但上游已经翻了一倍还多。本站的做法是:引用版本号与 commit,不引用会漂移的数字;确实要写数字时标明采集日期。
Node list

上游 v0.5.0 的真实节点有哪些?12 个,不是 9 个

下表来自上游 tradingagents/graph/setup.py 的 setup_graph(),逐个节点数出来的。

阶段节点角色PanWatch 是否启用
分析师(默认 4 个)market市场 / 技术面分析启用(analyst_types 列表首位)
social情绪分析(由 create_sentiment_analyst 渲染)启用
news新闻分析启用
fundamentals基本面分析启用
研究辩论Bull Researcher看多研究员启用,与看空辩论(默认 1 轮)
Bear Researcher看空研究员启用
Research Manager研究主管:汇总结论启用
交易Trader交易员:形成投资计划启用
风控Aggressive Analyst激进方启用
Neutral Analyst中立方启用
Conservative Analyst保守方启用
决策Portfolio ManagerPM 整合,输出最终决策书启用
三个可核验的口径冲突。① README 写「nine-agent / 9-Agent」,但上游 v0.5.0 的图里是 12 个节点,PanWatch 自己的流程图文档写的是「四类分析师 → 多空辩论 → 风控 → PM」,三处口径互不相同,「9」在仓库里没有对应名单。② 上游同时存在 sentiment_analyst.py 与 social_media_analyst.py 两个文件,但 setup.py 的工厂函数只把 social 映射到 create_sentiment_analyst——也就是说「社交媒体分析师」这个文件没有被接线。③ 由于这些都随上游版本变化,本页写的是 v0.5.0 的快照。
Run sequence

一次深度分析从点击到收到结论,中间发生了什么

下面把「触发 → 取数 → 图执行 → 映射 → 推送」串成一条链;每一步都能在源码里找到对应实现。

从点击到收到结论的七个环节

  • 触发:在持仓页点深度分析图标,或由已启用的盘中异动规则触发;这是 single 模式,会先检查该标的所属市场是否在交易时段。
  • 预算与缓存检查:先看本月已花费是否超过月度预算,再看该标的是否命中 12 小时结果缓存;命中则直接复用,不再调用模型。
  • 装配数据上下文:把 PanWatch 侧的自选、持仓、行情与新闻转成上游需要的状态(data_context.py),并通过工具适配层把行情工具暴露给上游(toolkit_adapter.py)。
  • 执行上游图:LangGraph 按节点顺序运行——四类分析师依次跑完各自的工具循环,再进入多空辩论、研究主管、交易员、风控三方,最后由 PM 汇总。
  • 节点级进度与成本上报:每个节点的进度与花费通过回调上报,写入运行记录与成本统计,这也是「一次 3–5 分钟、约 0.05 美元」的来源。
  • 映射成 PanWatch 的结果结构:把上游的 final_state 映射成本站能展示的分析结果,解析 PM 正文里的评级标签,并决定是否标记为「待人工复核」。
  • 推送与落库:通知体只放「决策摘要 + PM 决策书 + 详情链接」,完整内容留在详情页;结论同时落库以便后续后验评估。
  • 为什么通知只推一小段:官方注释写明「四分析师报告、交易员、研究主管、风控辩论等完整内容都在详情页,避免通知过长被截断」。如果你觉得「推来的信息太少」,那是设计如此——完整推理链在应用的详情页里。
    Params and cost

    哪些默认参数决定账单与体验?十一个关键取值

    下表全部来自 agent_catalog.py 里深度分析的默认 config;这些值比「单次 0.05 美元」这种宣传数字更能决定你的实际体验。

    TradingAgents 深度分析的默认 config(agent_catalog.py)"analyst_types": ["market", "social", "news", "fundamentals"],
    "debate_rounds": 1,              # 多空辩论轮数
    "monthly_budget_usd": 10.0,      # 月度预算上限
    "over_budget_action": "reject",  # 超预算时的动作:直接拒绝执行
    "cache_ttl_hours": 12,           # 同标的结果缓存时长
    "deep_model": "",                # 留空 = 用默认 AI 服务商的模型
    "quick_model": "",               # 留空 = 与 deep_model 相同
    "timeout_minutes": 15,           # 单次分析总超时
    "llm_timeout_seconds": 120,      # 单次模型请求超时
    "llm_max_retries": 0,            # 图内重试次数:0 = 失败快速落终态
    "llm_max_tokens": 4096,          # 限制输出,避免网关空闲超时
    "emit_paper_trading_signal": False,  # 是否把 BUY 写入模拟盘信号
    "enable_sec_edgar": False,       # 仅美股:优先用带 filing 时间的 SEC EDGAR 财报
    "holding_period_days": 5,        # 上游决策质量回测用的持仓期限
    参数默认值它实际控制什么什么时候该改
    debate_rounds1多空辩论轮数;轮数越多越贵也越慢想让双方多交锋一轮可以加到 2,但成本近似翻倍
    monthly_budget_usd / over_budget_action10.0 / reject月度花费上限;超限时直接拒绝执行而不是降级预算敏感就保持 reject;这样最坏结果是「不分析」而不是「账单失控」
    cache_ttl_hours12同一标的 12 小时内的重复分析直接复用结果短线盯盘可缩短;只在盘后复盘可加长
    deep_model / quick_model空(用默认)把贵模型留给决策、便宜模型做采集,可显著压成本想控成本时是最有效的一个开关
    timeout_minutes15单次分析总超时标的特别多或模型特别慢时可延长
    llm_timeout_seconds120单次模型请求超时网关有空闲超时限制时,配合 llm_max_tokens 一起调
    llm_max_retries0图内重试次数官方注释写明是「深度分析失败快速落终态,不在图内重复重试」——失败就是失败,不烧钱重试
    llm_max_tokens4096限制单次输出长度,避免网关空闲超时模型输出被截断时可上调
    emit_paper_trading_signalFalse是否把买入结论写进模拟盘信号建议保持关闭;打开也只处理买入方向
    enable_sec_edgarFalse仅美股:用带 filing 时间语义的 SEC EDGAR 财报做美股基本面时打开,能改善数据时点问题
    holding_period_days5上游决策质量回测的默认持仓期限注意它与模拟盘桥接里写死的 10 天不是同一处参数
    Failure modes

    这条链可能在哪里断:五种失败与它们的表现

    多 Agent 链路的价值在于「分工」,代价是环节多、每环都可能失败。下表按环节列出失败表现。

    环节可能的失败表现设计上的处理
    触发前该市场当下不在交易时段点下去没反应或直接跳过single 模式按市场时段跳过,日志有记录
    预算检查本月花费已达上限分析不执行over_budget_action=reject:拒绝而非降级
    缓存命中12 小时内分析过同一标的几乎立即返回旧结论这是省钱机制,不是故障;看分析时间戳即可确认
    上游图执行模型超时 / 网关空闲断连运行失败并落失败终态llm_max_retries=0:不重试,避免重复烧钱
    评级解析PM 输出无法解析出评级标记为「待人工复核」REVIEW 不等同于「持有」,也不会触发自动交易动作
    最重要的一条:上游从 0.4.0 起引入 REVIEW 语义——当无法解析 PM 评级时返回 REVIEW,而 PanWatch 明确把它处理成「待人工复核」并降级为不触发自动交易的状态,而不是当成「持有」混过去。官方注释原文:REVIEW 不是可交易的 Hold。这也是本站建议把结论当第二意见而非指令的原因之一。
    Assistant runtime

    对话助手用的是什么运行时?一套独立的 Agent 内核

    PanWatch 把「受限 Agent 执行内核」抽成了与业务无关的包(pan-agent-runtime,import 名 pan_agent),对话助手就跑在它上面。它的设计边界对理解「AI 能不能自己动你的数据」很关键。

    机制规则对你的意义
    工具风险分级read / write / external / destructive 四级读操作可默认放行,写与外部副作用需要宿主策略决定
    默认策略ReadOnlyToolPolicy 只暴露风险等级为 read、且无需确认的工具即使模型想写,也过不了默认策略
    人工审批遇到需要审批的调用会暂停并返回 WAITING_FOR_APPROVAL可以只批准其中一张审批卡,其余保留
    恢复执行resume 不要求同一个 runtime 实例只要宿主持久化了 checkpoint,换进程也能继续
    执行限额默认 max_steps=6、max_tool_calls=8、工具超时 20s、总超时 90s单次对话不会无限循环烧钱
    循环熔断检测连续重复的相同工具调用并返回 repeated_tool_call模型卡在错误参数上时会主动中断
    工具渐进暴露ToolSpec.exposure 可设 direct / deferred / hidden工具变多时用检索而不是全量塞进上下文
    注意边界:这个运行时本身不连数据库、不做持久化、也不实现 SSE——「谁能执行什么」由宿主(也就是 PanWatch)的策略决定。官方文档也写明了 0.x 阶段允许在小版本内调整尚未稳定的细节,因此不要把内部行为当长期契约。
    FAQ

    TradingAgents 研究链常见问题

    答案基于固定 commit 的官方源码与文档;上游节点与默认值会随版本变化,以你实际锁定的版本为准。

    相关页面:AI 输出审计与后验复核 · 运行成本与运维安全

    它用的到底是哪个版本的 TradingAgents?

    PanWatch 在 requirements.txt 里锁定了 @v0.5.0(不是跟踪 @main),对应上游 commit 2d17df8da1536c121e4d7395ac5a5dcec9e96d6f。锁定 tag 的好处是行为可复现;想追新需要自己改依赖并承担上游变更风险。

    README 说的「9-Agent」到底是哪 9 个?

    没有名单。上游 v0.5.0 的图里实际是 12 个节点:4 个分析师 + 看多/看空研究员 + 研究主管 + 交易员 + 三方针险分析师 + PM。PanWatch 自己的流程图文档写的是「四类分析师 → 多空辩论 → 风控 → PM」。本站把三处口径并列,而不是替官方选定一个说法——本页的节点清单是从上游源码数出来的。

    一次深度分析大概多少钱?

    官方 README 给的口径是「默认 deepseek-chat,单次约 0.05 美元、3–5 分钟」。但更值得看的是控制机制:月度预算默认 10 美元、超预算直接拒绝执行、同标的 12 小时内复用结果、单次总超时 15 分钟、图内重试 0 次。这些参数决定了你的账单上限,本站不复制任何模型单价。

    为什么我的分析失败了却不自动重试?

    因为官方把 llm_max_retries 默认设为 0,注释写明「深度分析失败快速落终态,不在图内重复重试」。这是一个成本取舍:多 Agent 链路重试一次可能就要再花一遍钱。要重试请手动再触发一次。

    分析结论会直接写进模拟盘吗?

    默认不会。emit_paper_trading_signal 默认 False,需要你主动打开;而且即使打开,桥接逻辑也只处理买入方向(buy/add),卖出不会开新仓,入场区间与止损止盈是用当前价按固定比例算的粗略值。

    能不能只跑便宜模型?

    可以。深度分析支持把 deep_model 与 quick_model 分开配置:留空表示都用默认模型,填便宜模型可以做采集、贵模型只做决策。官方还提示可以配 Ollama 走本地模型,从而把按量计费换成硬件成本。

    这条链的输出可以直接用来下单吗?

    不建议,也不符合官方定位。项目是监控与研究工具;评级无法解析时会被标为「待人工复核」,通知也只推决策摘要。合理用法是把它当第二意见,并按输出审计页的清单逐项复核。

    链跑通了,输出怎么复核?

    评级从哪来、REVIEW 代表什么、后验按什么口径算命中、多少样本才算够——这三件事决定你能不能把结论当第二意见用。