ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

TradingAgents-CN 分析报告模块深度解析:13 大报告模块完整性对比与实现原理

TradingAgents-CN 分析报告模块深度解析:13 大报告模块完整性对比与实现原理 TradingAgents-CN 分析报告模块深度解析13 大报告模块完整性对比与实现原理【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CNTradingAgents-CN 作为 TradingAgents 的中文增强版其分析报告功能是否与原版保持一致甚至有所超越本文基于对仓库源码的系统性比对逐一验证分析师团队、研究团队、交易团队、风险管理团队四大模块共 13 个报告子模块的实现完整性并深入解析web/utils/report_exporter.py与cli/main.py两套报告体系的差异、汇总报告生成逻辑、团队辩论状态debate state的格式化与 MongoDB 存储机制。读者读完后将完整掌握该项目的报告数据流、模块清单、代码定位与验证方法。一、执行摘要报告功能完整性结论经过对原版 TradingAgentsCLI 端与 TradingAgents-CNWeb 端的逐项比对可以确认TradingAgents-CN 的分析报告功能已完整实现与原版 TradingAgents 保持一致并在视觉标识、双语标题、MongoDB 存储、独立辩论状态文件四个方面做了增强13 个报告模块全部实现无需任何修复或补充。该结论并非主观判断而是建立在两份核心源码文件的逐一比对之上端报告定义文件关键代码位置原版 CLIcli/main.pyreport_sections定义于第 179-187 行实时展示逻辑位于第 810-948 行中文版 Webweb/utils/report_exporter.pyreport_modules定义于第 675-722 行汇总报告生成于第 267-331 行二、报告模块完整性逐项对比2.1 十三大报告模块清单报告模块原版我们状态状态字段state key分析师团队报告市场技术分析✅✅✅ 一致market_report市场情绪分析✅✅✅ 一致sentiment_report新闻事件分析✅✅✅ 一致news_report基本面分析✅✅✅ 一致fundamentals_report研究团队报告多头研究员分析✅✅✅ 一致bull_history存于investment_debate_state空头研究员分析✅✅✅ 一致bear_history存于investment_debate_state研究经理决策✅✅✅ 一致judge_decision存于investment_debate_state交易团队报告交易员计划✅✅✅ 一致trader_investment_plan风险管理团队报告激进分析师评估✅✅✅ 一致risky_history存于risk_debate_state保守分析师评估✅✅✅ 一致safe_history存于risk_debate_state中性分析师评估✅✅✅ 一致neutral_history存于risk_debate_state投资组合经理决策✅✅✅ 一致judge_decision存于risk_debate_state最终决策最终交易决策✅✅✅ 一致final_trade_decision总计13 个报告模块全部实现。其中 4 个分析师报告直接存为 state 字符串字段3 个研究团队报告与 4 个风险管理团队报告分别嵌套在investment_debate_state与risk_debate_state两个字典中。2.2 辩论状态字段的来源源码佐证这些嵌套字段并非凭空定义而是由多智能体辩论流程逐步写入 state。从源码结构看多头研究员在 tradingagents/agents/researchers/bull_researcher.py 中更新investment_debate_state的bull_history与count字段空头研究员在 tradingagents/agents/researchers/bear_researcher.py 中更新bear_history研究经理在 tradingagents/agents/managers/research_manager.py 汇总四条分析师报告后产出judge_decision激进/保守/中性分析师分别在 tradingagents/agents/risk_mgmt/aggresive_debator.py 等文件中写入risky_history、safe_history、neutral_history投资组合经理在 tradingagents/agents/managers/risk_manager.py 中产出final_trade_decision第 165 行final_trade_decision: response_content。这解释了为什么报告导出端需要专门针对investment_debate_state与risk_debate_state做字典解包式格式化——它们天然是嵌套结构。三、报告定义与展示的实现差异3.1 原版 TradingAgentsCLI内存字典 实时面板报告定义位于 cli/main.py 第 179-186 行self.report_sections { market_report: None, sentiment_report: None, news_report: None, fundamentals_report: None, investment_plan: None, trader_investment_plan: None, final_trade_decision: None, }展示逻辑位于 cli/main.py 第 819-944 行其核心特征是动态提取报告面板直接从final_state中读取从investment_debate_state提取bull_history、bear_history、judge_decision从risk_debate_state提取risky_history、safe_history、neutral_history、judge_decision实时渲染通过 Rich 的PanelColumns组件在 CLI 界面实时展示五大区块I. Analyst Team Reports 至 V. Portfolio Manager Decision不落盘辩论状态仅存在于内存与最终报告输出中不单独保存独立的 debate state 文件。3.2 TradingAgents-CNWeb模块映射 汇总报告Web 端的报告定义位于 web/utils/report_exporter.py 第 675-722 行除对齐原版七个顶层模块外还显式加入了两个团队辩论状态模块report_modules { market_report: {...}, sentiment_report: {...}, news_report: {...}, fundamentals_report: {...}, investment_plan: {...}, trader_investment_plan: {...}, final_trade_decision: {...}, investment_debate_state: {...}, # 包含 bull/bear/judge risk_debate_state: {...} # 包含 risky/safe/neutral/judge }每个模块还映射了独立文件名与中文标题例如investment_debate_state: { filename: research_team_decision.md, title: f{stock_symbol} 研究团队决策报告, state_key: investment_debate_state }, risk_debate_state: { filename: risk_management_decision.md, title: f{stock_symbol} 风险管理团队决策报告, state_key: risk_debate_state }四、报告结构对比从纯英文到中英双语4.1 原版结构纯英文五段式I. Analyst Team Reports - Market Analyst - Social Sentiment Analyst - News Analyst - Fundamentals Analyst II. Research Team Decision - Bull Researcher - Bear Researcher - Research Manager III. Trading Team Plan - Trader IV. Risk Management Team Decision - Aggressive Analyst - Conservative Analyst - Neutral Analyst V. Portfolio Manager Decision - Portfolio Manager4.2 TradingAgents-CN 结构中英双语 EmojiI. 分析师团队报告 - 市场技术分析 (Market Analysis) - 基本面分析 (Fundamentals Analysis) - 市场情绪分析 (Sentiment Analysis) - 新闻事件分析 (News Analysis) II. 研究团队决策 - 多头研究员分析 (Bull Researcher) - 空头研究员分析 (Bear Researcher) - 研究经理综合决策 (Research Manager) III. 交易团队计划 - 交易员计划 (Trader Plan) IV. 风险管理团队决策 - 激进分析师评估 (Aggressive Analyst) - ️ 保守分析师评估 (Conservative Analyst) - ⚖️ 中性分析师评估 (Neutral Analyst) - 投资组合经理最终决策 (Portfolio Manager) V. 最终交易决策 - 最终交易决策 (Final Trade Decision)该结构的落地位置同样在 web/utils/report_exporter.py 的_add_team_decision_reports第 267-331 行它以注释明确标注了II. 研究团队决策报告、III. 交易团队计划、IV. 风险管理团队决策、V. 最终交易决策四个区块与 CLI 端保持一致的层次。五、功能特性对比表功能特性原版我们优势方核心功能所有 13 个报告模块✅✅平手子报告提取✅✅平手报告层次结构✅✅平手展示优化Emoji 视觉标识❌✅我们中英文双语标题❌✅我们Markdown 格式化✅✅平手存储方式分模块文件保存✅✅平手汇总报告生成✅✅平手MongoDB 存储❌✅我们文件组织独立 debate state 文件❌✅我们报告目录结构✅✅平手三个核心增强点Emoji 视觉标识、中英文双语标题、MongoDB 存储使中文版在展示与存储维度上优于原版。六、团队决策内容格式化的核心实现6.1 独立函数_format_team_decision_content位于 web/utils/report_exporter.py 第 602-638 行负责将嵌套的辩论状态字典格式化为可读的 Markdown 章节def _format_team_decision_content(content: Dict[str, Any], module_key: str) - str: 格式化团队决策内容独立函数版本 formatted_content if module_key investment_debate_state: # 研究团队决策格式化 if content.get(bull_history): formatted_content ## 多头研究员分析\n\n formatted_content f{content[bull_history]}\n\n if content.get(bear_history): formatted_content ## 空头研究员分析\n\n formatted_content f{content[bear_history]}\n\n if content.get(judge_decision): formatted_content ## 研究经理综合决策\n\n formatted_content f{content[judge_decision]}\n\n elif module_key risk_debate_state: # 风险管理团队决策格式化 if content.get(risky_history): formatted_content ## 激进分析师评估\n\n formatted_content f{content[risky_history]}\n\n if content.get(safe_history): formatted_content ## ️ 保守分析师评估\n\n formatted_content f{content[safe_history]}\n\n if content.get(neutral_history): formatted_content ## ⚖️ 中性分析师评估\n\n formatted_content f{content[neutral_history]}\n\n if content.get(judge_decision): formatted_content ## 投资组合经理最终决策\n\n formatted_content f{content[judge_decision]}\n\n return formatted_content注意该函数在文件中有两个版本类方法版本第 333-369 行供内部调用模块级独立函数版本第 602-638 行供save_modular_reports_to_results_dir在保存分模块文件时直接引用。6.2 分模块报告保存的接入点位于 web/utils/report_exporter.py 第 739-740 行在遍历report_modules保存文件时对两个辩论状态模块走专用格式化路径if module_key in [investment_debate_state, risk_debate_state]: report_content _format_team_decision_content(content, module_key)其余模块则统一按字符串直接写入或字典逐子键写入sub_key.replace(_, ).title()处理并在内容未以#开头时自动补充一级标题# {module_info[title]}避免重复标题。6.3 汇总报告生成的完整逻辑位于 web/utils/report_exporter.py 第 267-331 行_add_team_decision_reports在基础 Markdown投资决策摘要、分析配置信息、六大分析模块之后追加团队决策章节def _add_team_decision_reports(self, md_content: str, state: Dict[str, Any]) - str: 添加团队决策报告部分与CLI端保持一致 # II. 研究团队决策报告 if investment_debate_state in state and state[investment_debate_state]: md_content \n---\n\n## 研究团队决策\n\n debate_state state[investment_debate_state] if debate_state.get(bull_history): md_content ### 多头研究员分析\n\n md_content f{debate_state[bull_history]}\n\n if debate_state.get(bear_history): md_content ### 空头研究员分析\n\n md_content f{debate_state[bear_history]}\n\n if debate_state.get(judge_decision): md_content ### 研究经理综合决策\n\n md_content f{debate_state[judge_decision]}\n\n # IV. 风险管理团队决策 if risk_debate_state in state and state[risk_debate_state]: md_content \n---\n\n## ⚖️ 风险管理团队决策\n\n risk_state state[risk_debate_state] # ... 类似的提取逻辑risky_history / safe_history / neutral_history / judge_decision与之配套的是generate_markdown_report第 166-265 行它先输出投资决策摘要表投资建议、置信度、风险评分、目标价位、分析配置信息LLM 提供商、AI 模型、分析师数量、研究深度、参与分析师列表再按analysis_modules列表渲染六大详细分析章节最后拼接风险提示与生成时间戳。两个函数组合即构成一份完整的中文分析报告。七、存储增强文件系统 MongoDB 双重落盘7.1 文件目录结构save_modular_reports_to_results_dir第 641-851 行负责分模块文件保存目录规则为{results_dir}/{stock_symbol}/{analysis_date}/reports/results_dir默认取项目根目录下的results可通过环境变量TRADINGAGENTS_RESULTS_DIR覆盖支持相对路径与绝对路径两种形式每个模块对应一个独立.md文件共生成market_report.md、sentiment_report.md、news_report.md、fundamentals_report.md、investment_plan.md、trader_investment_plan.md、final_trade_decision.md、research_team_decision.md、risk_management_decision.md九个文件同时在股票目录下生成message_tool.log空占位与analysis_metadata.json元数据中包含stock_symbol、analysis_date、timestamp、research_depth、analysts、reports_count、report_types等字段便于后续检索审计。7.2 MongoDB 存储实现web/utils/mongodb_report_manager.py 中的MongoDBReportManager提供了完整的报告持久化能力连接配置读取MONGODB_HOST默认localhost、MONGODB_PORT默认27017、MONGODB_USERNAME、MONGODB_PASSWORD、MONGODB_DATABASE默认tradingagents、MONGODB_AUTH_SOURCE默认admin等环境变量未安装pymongo时自动降级为不可用索引优化_create_indexes创建(stock_symbol, analysis_date, timestamp)复合索引以及analysis_id、status单字段索引文档结构save_analysis_report第 109-205 行生成的文档包含analysis_id格式{stock_symbol}_{YYYYmmdd_HHMMSS}、stock_name自动按市场类型解析 A 股/港股/美股名称、market_type依据 tradingagents/utils/stock_utils.py 的StockUtils.get_market_info推断、model_info、analysis_date、reports等字段查询接口提供get_analysis_reports按股票、日期范围过滤按时间倒序、get_report_by_id、get_all_reports、delete_report以及fix_inconsistent_reports修复reports字段缺失的空文档。保存流程在save_modular_reports_to_results_dir末尾统一触发先读取全部已保存的模块文件内容组装reports_content再调用mongodb_report_manager.save_analysis_report落库且 MongoDB 保存失败不影响文件保存的成功返回有独立的try/except兜底。八、Web 端导出的完整链路render_export_buttons第 900 行起将上述能力封装为 Streamlit 界面的三个导出按钮按钮内部调用产物 导出 Markdown保存分模块报告 export_report(results, markdown).md汇总报告 9 个模块文件 导出 Word保存分模块报告 export_report(results, docx).docx汇总报告需 pandoc 导出 PDF保存分模块报告 export_report(results, pdf).pdf汇总报告需 wkhtmltopdf/LaTeX每次导出都会依次执行① 保存分模块报告CLI 格式兼容→ ② 生成指定格式汇总报告 → ③ 保存汇总报告到 results 目录 → ④ 提供st.download_button下载。Markdown/Word/PDF 转换统一依赖 pandoc转换时使用--frommarkdown-yaml_metadata_block参数禁用 YAML 解析避免报告内容中的---分隔线被误判为 YAML 元数据块详见_clean_markdown_for_pandoc第 128-164 行。PDF 生成内置引擎降级策略依次尝试wkhtmltopdf→weasyprint→ pandoc 默认引擎。九、验证清单与复现方式对照以下清单可快速验证报告功能的完整性前六项可通过静态代码审查确认后两项需要实际运行分析任务✅ 所有 13 个报告模块都已实现web/utils/report_exporter.py 第 675-722 行✅investment_debate_state正确提取 3 个子报告bull/bear/judge✅risk_debate_state正确提取 4 个子报告risky/safe/neutral/judge✅ 分模块报告格式化正确_format_team_decision_content✅ 汇总报告包含所有内容_add_team_decision_reports✅ 代码实现清晰易维护模块映射 独立格式化函数无重复逻辑⏳ 实际运行测试需要运行分析任务验证⏳ MongoDB 存储验证需要实际运行测试运行验证的方式通过 Web 端web/app.py发起一次分析任务后点击导出按钮检查results/{stock_symbol}/{date}/reports/下是否生成 9 个模块文件与汇总报告并在 MongoDB 的tradingagents.analysis_reports集合中确认新增文档。十、最终结论TradingAgents-CN 的分析报告功能完全达标且在原版基础上有所增强。核心优势归纳为五点功能完整所有 13 个报告模块全部实现与原版一一对应结构清晰五段式报告层次分明分析师团队 → 研究团队 → 交易团队 → 风险管理团队 → 最终决策中英文双语标题与 Emoji 标识显著提升可读性视觉优化每个子报告配有语义化图标符合中文用户阅读习惯存储增强同时支持文件系统results目录分模块保存与 MongoDBanalysis_reports集合含股票名称、市场类型、模型信息等丰富元数据双重存储代码质量report_modules映射表 _format_team_decision_content独立格式化函数 _add_team_decision_reports汇总拼接的模块化设计逻辑清晰、易于维护与扩展。因此该模块不需要添加任何新的报告模块不需要修改报告结构也不需要改进格式化逻辑。所有报告能力均已就绪可以直接投入到多智能体金融分析的实战使用中。【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进