TradingAgents-CN 研究深度五级体系实战指南:从快速分析到全面分析的统一化实现与源码解读
【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN
导读
本文档围绕 TradingAgents-CN(基于多智能体 LLM 的中文金融交易框架)中的"研究深度统一为 5 个级别"这一修复与增强工作展开。它解决了一个真实的体验割裂问题:同一套系统内,Web 界面、Frontend 界面与后端服务对"研究深度"的支持层级不一致,导致用户在不同入口看到的能力与耗时预期各不相同。读完本文,你将掌握五级研究深度的完整配置矩阵(辩论轮次、风险讨论轮次、记忆与在线工具的开关)、前后端改造的具体落点、research_depth字段在 API 链路中的流转方式,以及如何从源码层面验证与扩展这套体系。
背景:为什么需要统一为 5 个研究深度级别
在修复之前,系统内存在三套互不一致的"深度"定义:
- Web 界面(web/):已支持 5 个级别(1-5 级);
- Frontend 界面(frontend/):只支持 3 个级别(快速、标准、深度);
- 后端服务(app/):同样只支持 3 个级别(快速、标准、深度)。
这种不一致带来两个直接后果:一是用户体验割裂,用户在前端看到的能力与 Web 界面不同;二是系统分析能力没有被充分利用——中间缺少了"基础"(2 级)与"全面"(5 级)两档,既没有低成本的过渡档,也没有最高规格的完整报告档。
本次修复的目标很明确:将前端与后端统一为 5 个研究深度级别,与 Web 界面保持一致,同时保证旧有的 3 个级别(快速、标准、深度)继续有效,做到向后兼容。
五级研究深度配置矩阵
统一后的 5 个级别,每个级别在"辩论轮次、风险讨论轮次、记忆、在线工具、预期耗时、适用场景"六个维度上有明确区分:
| 级别 | 名称 | 辩论轮次 | 风险讨论 | 记忆 | 在线工具 | 预期耗时 | 适用场景 |
|---|---|---|---|---|---|---|---|
| 1 级 | 快速分析 | 1 轮 | 1 轮 | ❌ | ❌ | 2-4 分钟 | 日常快速决策、市场概览 |
| 2 级 | 基础分析 | 1 轮 | 1 轮 | ✅ | ✅ | 4-6 分钟 | 常规投资决策、基础研究 |
| 3 级 | 标准分析 | 1 轮 | 2 轮 | ✅ | ✅ | 6-10 分钟 | 重要投资决策(推荐) |
| 4 级 | 深度分析 | 2 轮 | 2 轮 | ✅ | ✅ | 10-15 分钟 | 多轮辩论,深度研究 |
| 5 级 | 全面分析 | 3 轮 | 3 轮 | ✅ | ✅ | 15-25 分钟 | 最全面的分析报告 |
注:上述耗时与文档中的初始设计值一致;实际运行中,
frontend/src/views/Analysis/SingleAnalysis.vue的depthOptions已根据实际测试数据将耗时标注调整为2-5 / 3-6 / 4-8 / 6-11 / 8-16分钟,更贴近真实执行情况,两个来源可互为参照。
各级别定位说明
- ⚡ 1 级 - 快速分析:1 轮辩论 + 1 轮风险讨论,禁用记忆与在线工具、使用缓存数据。速度最快、成本最低,适合日常市场监控、快速获取市场概况。
- 📈 2 级 - 基础分析:1 轮辩论 + 1 轮风险讨论,启用记忆与在线工具以获取最新数据。速度较快且包含最新行情,适合常规投资决策与基础研究。
- 🎯 3 级 - 标准分析(推荐):1 轮辩论 + 2 轮风险讨论,平衡速度与质量,性价比最高,是系统默认级别,适合重要投资决策与标准研究流程。
- 🔍 4 级 - 深度分析:2 轮辩论 + 2 轮风险讨论,通过多轮辩论确保分析全面性,适合重大投资决策与深度研究。
- 🏆 5 级 - 全面分析:3 轮辩论 + 3 轮风险讨论,最全面的分析、最高质量、结果最可靠,适合最重要的投资决策与完整研究报告撰写。
后端实现:数据模型与分析配置的改造
1. 数据模型层:AnalysisParameters 默认值
后端在 app/models/analysis.py 的AnalysisParameters模型中,将research_depth定义为字符串字段,默认值为"标准"(3 级),并在 docstring 中完整记录五级说明:
class AnalysisParameters(BaseModel): """分析参数模型 研究深度说明: - 快速: 1级 - 快速分析 (2-4分钟) - 基础: 2级 - 基础分析 (4-6分钟) - 标准: 3级 - 标准分析 (6-10分钟,推荐) - 深度: 4级 - 深度分析 (10-15分钟) - 全面: 5级 - 全面分析 (15-25分钟) """ market_type: str = "A股" analysis_date: Optional[datetime] = None research_depth: str = "标准" # 默认使用3级标准分析(推荐) ...该模型同时被单股分析(SingleAnalysisRequest)、批量分析(BatchAnalysisRequest)、分析任务(AnalysisTask)与分析批次(AnalysisBatch)复用,因此research_depth一经统一,整条 API 链路自动获得一致的默认行为。
2. 服务层:create_analysis_config 的五级分支
核心改造落在 app/services/simple_analysis_service.py 的create_analysis_config()。该函数有三个值得注意的设计:
其一,输入兼容数字与中文两种形式。函数开头先将数字(1-5)或数字字符串("1"-"5")通过numeric_to_chinese映射转换为中文等级,再进入五级分支;无效值(未知字符串、非法数字、错误类型)一律回退到"标准"并输出告警日志:
numeric_to_chinese = { 1: "快速", 2: "基础", 3: "标准", 4: "深度", 5: "全面" } if isinstance(research_depth, (int, float)): research_depth = int(research_depth) if research_depth in numeric_to_chinese: chinese_depth = numeric_to_chinese[research_depth] research_depth = chinese_depth else: research_depth = "标准" elif isinstance(research_depth, str) and research_depth.isdigit(): # 字符串数字同样映射为中文等级 ...其二,五级分支分别覆写四个关键配置项:max_debate_rounds(辩论轮次)、max_risk_discuss_rounds(风险讨论轮次)、memory_enabled(记忆开关)、online_tools(在线工具开关):
if research_depth == "快速": # 1级 - 快速分析 config["max_debate_rounds"] = 1 config["max_risk_discuss_rounds"] = 1 config["memory_enabled"] = False # 禁用记忆以加速 config["online_tools"] = True # 统一使用在线工具,避免离线工具的各种问题 elif research_depth == "基础": # 2级 - 基础分析 config["max_debate_rounds"] = 1 config["max_risk_discuss_rounds"] = 1 config["memory_enabled"] = True config["online_tools"] = True elif research_depth == "标准": # 3级 - 标准分析(推荐) config["max_debate_rounds"] = 1 config["max_risk_discuss_rounds"] = 2 config["memory_enabled"] = True config["online_tools"] = True elif research_depth == "深度": # 4级 - 深度分析 config["max_debate_rounds"] = 2 config["max_risk_discuss_rounds"] = 2 config["memory_enabled"] = True config["online_tools"] = True elif research_depth == "全面": # 5级 - 全面分析 config["max_debate_rounds"] = 3 config["max_risk_discuss_rounds"] = 3 config["memory_enabled"] = True config["online_tools"] = True需要留意一处与设计文档的差异:当前仓库源码中1 级(快速)的online_tools实际为True(注释说明"统一使用在线工具,避免离线工具的各种问题"),而文档中标注为关闭在线工具、使用缓存数据。这说明实现层面为了数据源稳定性做了一次实用化的权衡——以仓库源码为准。另外,配置组装完成后还会执行config["research_depth"] = research_depth,把最终生效的级别写回配置字典,供下游工具函数与日志读取。
其三,配置基座来自 TradingAgents 的默认配置。config = DEFAULT_CONFIG.copy()取自 tradingagents/default_config.py,其默认值max_debate_rounds=1、max_risk_discuss_rounds=1、online_tools由环境变量ONLINE_TOOLS_ENABLED控制——五级分支正是对这些默认值做精细化覆写。
3. 底层原理:轮次如何驱动图执行
研究深度的轮次参数最终作用于交易图(TradingAgents Graph)的条件路由逻辑。在 tradingagents/graph/conditional_logic.py 中,ConditionalLogic接收max_debate_rounds与max_risk_discuss_rounds:
def __init__(self, max_debate_rounds=1, max_risk_discuss_rounds=1): self.max_debate_rounds = max_debate_rounds self.max_risk_discuss_rounds = max_risk_discuss_rounds- 投资辩论的终止条件:
max_count = 2 * self.max_debate_rounds,即"每轮双人发言 × 轮数"(should_continue_debate); - 风险讨论的终止条件:
max_count = 3 * self.max_risk_discuss_rounds,即"每轮三方发言 × 轮数"(should_continue_risk_analysis)。
由此可见,research_depth选择 5 级(3 轮辩论)时,投资辩论最多进行 6 次发言;选择 1 级时则只有 2 次发言——这正是各级别耗时差异的根本来源。可以推断,轮次越多、发言次数越多,LLM 调用次数与 Token 消耗随之线性增长,这也是"成本优化"设计意图的底层依据。
前端实现:单股分析与批量分析的选项改造
1. SingleAnalysis.vue:5 个深度卡片
frontend/src/views/Analysis/SingleAnalysis.vue 定义了 5 个深度选项(当前仓库的耗时已按实测数据微调):
// 深度选项(5个级别,基于实际测试数据更新) const depthOptions = [ { icon: '⚡', name: '1级 - 快速分析', description: '基础数据概览,快速决策', time: '2-5分钟' }, { icon: '📈', name: '2级 - 基础分析', description: '常规投资决策', time: '3-6分钟' }, { icon: '🎯', name: '3级 - 标准分析', description: '技术+基本面,推荐', time: '4-8分钟' }, { icon: '🔍', name: '4级 - 深度分析', description: '多轮辩论,深度研究', time: '6-11分钟' }, { icon: '🏆', name: '5级 - 全面分析', description: '最全面的分析报告', time: '8-16分钟' } ]页面渲染为可点击的卡片式选择器(.depth-selector/.depth-option),选中态通过analysisForm.researchDepth === index + 1判断;表单默认值researchDepth: 3(在onMounted中会从用户偏好加载覆盖)。提交分析时,通过getDepthDescription(analysisForm.researchDepth)将数字级别转换为中文值(1-5分别对应快速/基础/标准/深度/全面)写入请求的research_depth字段。此外,页面还内置"模型推荐"联动:checkModelSuitability()依据所选级别调用recommendModels(depthName),为快速模型与深度模型给出配套建议。
2. BatchAnalysis.vue:5 个下拉选项
批量分析页面 frontend/src/views/Analysis/BatchAnalysis.vue 将深度做成下拉选择,选项值与文档保持一致:
<el-form-item label="分析深度"> <el-select v-model="batchForm.depth" placeholder="选择深度" size="large" style="width: 100%"> <el-option label="⚡ 1级 - 快速分析 (2-4分钟/只)" value="1" /> <el-option label="📈 2级 - 基础分析 (4-6分钟/只)" value="2" /> <el-option label="🎯 3级 - 标准分析 (6-10分钟/只,推荐)" value="3" /> <el-option label="🔍 4级 - 深度分析 (10-15分钟/只)" value="4" /> <el-option label="🏆 5级 - 全面分析 (15-25分钟/只)" value="5" /> </el-select> </el-form-item>注意此处下拉绑定的是数字字符串("1"-"5"),直接以research_depth: batchForm.depth提交——得益于后端create_analysis_config对字符串数字的兼容处理,数字值会被自动映射为对应中文等级,前后端协议因此保持宽松一致。批量页同样会在onMounted中从用户偏好(userPrefs.default_depth)加载默认深度。
3. 类型定义:types/analysis.ts
frontend/src/types/analysis.ts 将research_depth收敛为五值联合类型,作为前端 TypeScript 侧的类型约束:
// 分析参数 export interface AnalysisParameters { market_type: 'A股' | '美股' | '港股' analysis_date?: string research_depth: '快速' | '基础' | '标准' | '深度' | '全面' selected_analysts: string[] custom_prompt?: string include_charts: boolean language: 'zh-CN' | 'en-US' }影响范围与兼容性
本次改动覆盖的文件(与仓库现状一致):
前端
frontend/src/views/Analysis/SingleAnalysis.vue— 单股分析页面(5 个深度卡片 + 模型推荐联动)frontend/src/views/Analysis/BatchAnalysis.vue— 批量分析页面(5 个下拉选项)frontend/src/views/Analysis/index.vue— 分析首页frontend/src/types/analysis.ts— 类型定义
后端
app/models/analysis.py—AnalysisParameters数据模型(默认"标准")app/services/simple_analysis_service.py—create_analysis_config五级分支
兼容性要点
- 向后兼容:旧的 3 个级别(快速、标准、深度)仍然有效;
- 新增 2 个级别:"基础"(2 级)与"全面"(5 级);
- 默认值统一为
"标准"(3 级),且前端数字输入与后端中文映射双向兼容。
使用建议:按场景选择级别
| 使用场景 | 推荐级别 | 理由 |
|---|---|---|
| 日常市场监控 | 1-2 级 | 快速获取市场概况,成本低 |
| 常规投资决策 | 2-3 级 | 平衡速度和质量 |
| 重要投资决策 | 3-4 级 | 确保分析质量,多轮辩论 |
| 重大资金投入 | 4-5 级 | 最全面的风险评估 |
| 研究报告撰写 | 4-5 级 | 需要详细的分析内容 |
迁移指南
对于现有用户:
- 之前使用"快速" → 对应现在的 1 级;
- 之前使用"标准" → 对应现在的 3 级(推荐);
- 之前使用"深度" → 对应现在的 4 级;
- 新增"基础"(2 级)与"全面"(5 级)可选用。
对于开发者:
- 前端发送的
research_depth字段取值为:"快速"|"基础"|"标准"|"深度"|"全面"(或数字"1"-"5",后端自动映射); - 后端接收并处理这 5 个值,无效输入回退到
"标准"; - 默认值统一为
"标准",前端默认选中 3 级。
测试与验证
前端测试:单股分析页面显示 5 个深度选项;批量分析页面显示 5 个深度选项;默认选中"标准"(3 级);每个选项显示正确的图标、名称、描述与预期耗时。
后端测试:接收 5 个不同的research_depth值;正确配置辩论轮次与风险讨论轮次;正确启用/禁用记忆与在线工具;默认值为"标准"。
集成测试:提交不同深度级别的分析任务;验证实际执行的配置是否正确;验证耗时是否符合预期;验证分析质量是否符合级别要求。
仓库中已有对应类型的验证用例可作参考,例如 tests/test_api_analysis.py 以"快速"级别提交单股分析 API 请求(并只选择market分析师以缩短测试链路),tests/test_300750_final.py 则直接以research_depth = '标准'构造DEFAULT_CONFIG副本后初始化工具包,均验证了research_depth从请求到执行配置的贯通。此外,app/routers/analysis.py 中任务状态与结果查询接口均会回读research_depth字段(历史记录缺失时回退为"快速"),说明该字段同时被持久化用于结果展示与追溯。
总结
研究深度五级体系是 TradingAgents-CN 中"统一体验"与"精细控制"结合的典型改动:它让 Web、Frontend、后端三方对"分析深度"的理解完全对齐,以 6 个可量化维度(辩论轮次、风险讨论轮次、记忆、在线工具、耗时、适用场景)为每个级别建立清晰边界,并通过默认值回退、数字/中文双输入兼容、历史记录回读等手段保证向后兼容与鲁棒性。对于使用者,它提供了从 2 分钟快览到 25 分钟深度报告的成本-质量梯度;对于开发者,其"模型层默认值 + 服务层配置分支 + 前端选项枚举"的分层改造模式,也适合作为同类参数体系(如市场类型、分析师组合)扩展的参考模板。
【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考