恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
TradingAgents-CN 管理层团队深度解析:多智能体投资决策中枢的设计与实现
首页
资讯中心
/
TradingAgents-CN 管理层团队深度解析:多智能体投资决策中枢的设计与实现
TradingAgents-CN 管理层团队深度解析:多智能体投资决策中枢的设计与实现
发布时间:2026/9/10 12:05:48
TradingAgents-CN 管理层团队深度解析多智能体投资决策中枢的设计与实现【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN导读管理层团队是 TradingAgents-CN 多智能体金融交易框架中的决策核心它负责协调分析师、研究员、交易员与风险团队的输出评估投资辩论质量并最终产出明确的买入/卖出/持有决策与可执行的交易计划。本文以 docs/agents/v0.1.13/managers.md 为主线结合仓库内真实源码research_manager.py、risk_manager.py、agent_states.py 等深入讲解管理层的架构设计、决策流程、配置参数、日志监控与扩展方式。读完本文你将掌握管理层团队如何完成从信息收集、辩论评估到执行计划制定的完整决策闭环并能在自己的流程中定制新的管理角色与决策模型。管理层架构基础设计管理层团队基于统一的架构设计专注决策协调与策略制定。在仓库实际实现中每位经理都是一个由create_xxx_manager(llm, memory)工厂函数创建的 LangGraph 节点例如 research_manager.py 中的create_research_manager(llm, memory)。文档给出的统一日志装饰器模式如下# 统一的管理层模块日志装饰器 from tradingagents.utils.tool_logging import log_manager_module # 统一日志系统 from tradingagents.utils.logging_init import get_logger logger get_logger(default) log_manager_module(manager_type) def manager_node(state): # 管理层决策逻辑实现 pass仓库中虽然当前没有名为log_manager_module的装饰器该名称出现于 docs/agents/v0.1.13/managers.md为设计文档中的抽象接口但其设计思想在 tool_logging.py 中得到完整落地该模块提供了log_analysis_module、log_analyst_module、log_graph_module、log_dataflow_module、log_tool_call、log_llm_call等系列装饰器可自动记录模块开始、完成、错误与耗时并通过get_logger_manager().log_module_start/log_module_complete/log_module_error统一上报从而实现「一处装饰、全程可观测」。实际管理节点源码中直接使用get_logger(default)获取统一 logger 进行结构化日志输出见 research_manager.py。智能体状态管理管理层团队通过AgentState获取完整的分析和决策信息。仓库中的真实定义位于 agent_states.py它继承自 LangGraph 的MessagesState除文档列出的字段外还包含辩论状态子结构class AgentState(MessagesState): company_of_interest: Annotated[str, Company that we are interested in trading] trade_date: Annotated[str, What date we are trading at] sender: Annotated[str, Agent that sent this message] # research step market_report: Annotated[str, Report from the Market Analyst] sentiment_report: Annotated[str, Report from the Social Media Analyst] news_report: Annotated[str, Report from the News Researcher of current world affairs] fundamentals_report: Annotated[str, Report from the Fundamentals Researcher] # researcher team discussion step investment_debate_state: Annotated[InvestDebateState, Current state of the debate on if to invest or not] investment_plan: Annotated[str, Plan generated by the Analyst] trader_investment_plan: Annotated[str, Plan generated by the Trader] # risk management team discussion step risk_debate_state: Annotated[RiskDebateState, Current state of the debate on evaluating risk] final_trade_decision: Annotated[str, Final decision made by the Risk Analysts]其中两个子状态结构也很关键InvestDebateState看涨/看跌研究员辩论包含bull_history、bear_history、history、current_response、judge_decision、countRiskDebateState风险分析师辩论包含risky_history、safe_history、neutral_history、history、latest_speaker、current_risky_response、current_safe_response、current_neutral_response、judge_decision、count。管理层团队成员1. 研究经理 (Research Manager)文件位置: tradingagents/agents/managers/research_manager.py核心职责与文档一致作为投资组合经理和辩论主持人评估投资辩论质量和有效性总结看涨和看跌分析师的关键观点基于最有说服力的证据做出明确的买入、卖出或持有决策为交易员制定详细的投资计划。仓库实际实现要点研究经理节点的 Prompt 设计在 research_manager.py 中其核心逻辑包括标的约束注入通过build_instrument_context(ticker)定义于 instrument_utils.py强制在所有分析中使用精确、大小写一致的股票代码并保留.HK、.TO、.L、.T等交易所后缀历史记忆检索当memory不为 None 时通过memory.get_memories(curr_situation, n_matches2)检索过去 2 条相似场景的历史建议让经理「从过去的错误中学习」目标价格强制输出Prompt 明确要求必须给出具体的 1/3/6 个月目标价格区间并禁止回复「无法确定」或「需要更多信息」耗时与 Token 统计记录 LLM 调用耗时、Prompt 长度与估算 Token 数估算公式为字符数 / 1.8适配中文约 1.5–2 字符/token 的特性。研究经理的输出同时写入investment_debate_state.judge_decision与investment_plan两个字段前者供图状态流转追踪后者作为交易员的输入。决策特点:综合评估: 全面考虑基本面、市场、情绪、新闻四类报告与辩论结果客观决策: 基于证据强度而非个人偏好且明确「避免默认持有」——只有存在强有力论据时才选择持有具体指导: 提供明确的执行计划、目标价格与时间框架风险意识: 结合过去错误反思完善决策。2. 交易员 (Trader)文件位置: tradingagents/agents/trader/trader.py文档中交易员作为投资计划的执行者出现在管理层决策链中Research Manager - Trader - Risky Analyst。在 setup.py 中交易员节点通过create_trader(self.quick_thinking_llm, self.trader_memory)创建接收研究经理的investment_plan并生成trader_investment_plan为后续风险辩论提供「待完善」的交易计划基线。3. 风险经理 (Risk Manager)文件位置: tradingagents/agents/managers/risk_manager.py核心职责与文档一致监控整体风险敞口设定和执行风险限额协调风险控制措施提供风险管理指导。仓库实际实现要点风险经理在图中注册为Risk Judge节点见 setup.py其实现相比文档版本更强调工程健壮性三方辩论输入接收激进Risky、安全/保守Safe、中性Neutral三位风险分析师的辩论历史risk_debate_state[history]以及交易员计划trader_planrisk_manager.pyLLM 调用重试机制最多重试 3 次每次失败后等待 2 秒成功条件要求响应内容超过 10 个字符risk_manager.py默认决策兜底若所有调用均失败自动生成「默认建议持有」的结构化文案明确提示「此为系统默认建议建议结合人工分析做出最终决策」保证图流程永不中断真实 Token 统计若 LLM 响应元数据中包含token_usage则记录实际的输入/输出/总 Token 数与估算值互为校验输出字段写入risk_debate_state.judge_decision与final_trade_decision后者是整条流程的最终投资决策。管理特点:全面监控: 覆盖激进、保守、中性多维风险视角主动管理: 通过重试与兜底机制保障高可用量化分析: 输出可量化的止损止盈与仓位建议应急响应: 内置失败降级预案。决策流程管理层决策流程通过 setup.py 中的 LangGraph 边定义串联整体顺序为START - (各分析师) - Bull/Bear Researcher 辩论 - Research Manager - Trader - Risky/Safe/Neutral 风险辩论 - Risk Judge - END关键边定义setup.pyResearch Manager - Trader投资计划交给交易员细化Trader - Risky Analyst交易计划进入风险辩论三位风险分析师与Risk Judge之间通过add_conditional_edges形成多轮辩论回路按count与历史状态判断继续辩论或移交裁决Risk Judge - END风险经理的裁决即最终输出。1. 信息收集阶段文档给出了InformationGathering类的校验逻辑缺失报告告警、信息质量评分其质量评分由长度、关键词、结构三部分平均得到。从源码结构看信息收集的实质是分析师团队向AgentState写入fundamentals_report、market_report、sentiment_report、news_report四个字段研究经理再将其拼接为curr_situation作为记忆检索与决策 Prompt 的输入。class InformationGathering: def __init__(self): self.required_reports [ fundamentals_report, market_report, sentiment_report, news_report ] self.debate_results [ bull_argument, bear_argument ] self.risk_analyses [ conservative_risk_analysis, aggressive_risk_analysis, neutral_risk_analysis ] def validate_inputs(self, state): 验证输入信息完整性 missing_reports [] for report in self.required_reports: if not state.get(report): missing_reports.append(report) if missing_reports: logger.warning(f缺少必要报告: {missing_reports}) return False, missing_reports return True, [] def assess_information_quality(self, state): 评估信息质量 quality_scores {} for report in self.required_reports: content state.get(report, ) quality_scores[report] self.calculate_content_quality(content) return quality_scores def calculate_content_quality(self, content): 计算内容质量分数 if not content: return 0.0 # 基于长度、关键词、结构等因素评估质量 length_score min(len(content) / 1000, 1.0) # 标准化长度分数 keyword_score self.check_keywords(content) structure_score self.check_structure(content) return (length_score keyword_score structure_score) / 32. 辩论评估阶段DebateEvaluation类定义了四维评估标准逻辑强度权重 0.3、证据质量0.3、风险意识0.2、市场洞察0.2并为看涨/看跌论证分别打分胜负由分数差决定绝对差作为置信度。这一「胜者 置信度」的输出结构与仓库中InvestDebateState.judge_decision的设计意图一致。class DebateEvaluation: def __init__(self): self.evaluation_criteria { logic_strength: 0.3, # 逻辑强度 evidence_quality: 0.3, # 证据质量 risk_awareness: 0.2, # 风险意识 market_insight: 0.2 # 市场洞察 } def evaluate_arguments(self, bull_argument, bear_argument): 评估辩论论证质量 bull_score self.score_argument(bull_argument) bear_score self.score_argument(bear_argument) return { bull_score: bull_score, bear_score: bear_score, winner: bull if bull_score bear_score else bear, confidence: abs(bull_score - bear_score) } def score_argument(self, argument): 为单个论证打分 scores {} for criterion, weight in self.evaluation_criteria.items(): criterion_score self.evaluate_criterion(argument, criterion) scores[criterion] criterion_score * weight return sum(scores.values()) def evaluate_criterion(self, argument, criterion): 评估特定标准 # 使用NLP技术或规则评估论证质量 if criterion logic_strength: return self.assess_logical_structure(argument) elif criterion evidence_quality: return self.assess_evidence_strength(argument) elif criterion risk_awareness: return self.assess_risk_consideration(argument) elif criterion market_insight: return self.assess_market_understanding(argument) return 0.5 # 默认分数3. 决策制定阶段DecisionMaking类将五类分数基本面 0.3、技术 0.2、情绪 0.15、辩论 0.25、风险 0.1——风险分取反后计入加权得到综合分再映射为强烈买入/买入/持有/卖出/强烈卖出五档置信度由四项分数的一致性标准差计算标准差越小置信度越高。class DecisionMaking: def __init__(self, config): self.decision_thresholds config.get(decision_thresholds, { strong_buy: 0.8, buy: 0.6, hold: 0.4, sell: 0.2, strong_sell: 0.0 }) self.confidence_threshold config.get(confidence_threshold, 0.7) def make_investment_decision(self, analysis_results): 制定投资决策 # 综合各项分析结果 fundamental_score analysis_results.get(fundamental_score, 0.5) technical_score analysis_results.get(technical_score, 0.5) sentiment_score analysis_results.get(sentiment_score, 0.5) debate_score analysis_results.get(debate_score, 0.5) risk_score analysis_results.get(risk_score, 0.5) # 加权计算综合分数 weights { fundamental: 0.3, technical: 0.2, sentiment: 0.15, debate: 0.25, risk: 0.1 } composite_score ( fundamental_score * weights[fundamental] technical_score * weights[technical] sentiment_score * weights[sentiment] debate_score * weights[debate] (1 - risk_score) * weights[risk] # 风险分数取反 ) # 确定投资决策 decision self.score_to_decision(composite_score) confidence self.calculate_confidence(analysis_results) return { decision: decision, composite_score: composite_score, confidence: confidence, reasoning: self.generate_reasoning(analysis_results, decision) } def score_to_decision(self, score): 将分数转换为投资决策 if score self.decision_thresholds[strong_buy]: return 强烈买入 elif score self.decision_thresholds[buy]: return 买入 elif score self.decision_thresholds[hold]: return 持有 elif score self.decision_thresholds[sell]: return 卖出 else: return 强烈卖出 def calculate_confidence(self, analysis_results): 计算决策置信度 # 基于各项分析的一致性计算置信度 scores [ analysis_results.get(fundamental_score, 0.5), analysis_results.get(technical_score, 0.5), analysis_results.get(sentiment_score, 0.5), analysis_results.get(debate_score, 0.5) ] # 计算标准差标准差越小置信度越高 import numpy as np std_dev np.std(scores) confidence max(0, 1 - std_dev * 2) # 标准化到0-1范围 return confidence4. 执行计划制定ExecutionPlanning支持三种仓位计算方式凯利公式默认基于胜率 × 期望收益与波动率、固定仓位基础 2% × 置信度、风险平价目标风险 2% ÷ 波动率最终仓位被限制在[min_position_size0.01, max_position_size0.05]区间内。买入计划输出包含行动、仓位、入场价、目标价、止损价、时间框架与执行策略。class ExecutionPlanning: def __init__(self, config): self.position_sizing_method config.get(position_sizing, kelly) self.max_position_size config.get(max_position_size, 0.05) self.min_position_size config.get(min_position_size, 0.01) def create_execution_plan(self, decision_result, market_info): 创建执行计划 decision decision_result[decision] confidence decision_result[confidence] if decision in [买入, 强烈买入]: return self.create_buy_plan(decision_result, market_info) elif decision in [卖出, 强烈卖出]: return self.create_sell_plan(decision_result, market_info) else: return self.create_hold_plan(decision_result, market_info) def create_buy_plan(self, decision_result, market_info): 创建买入计划 confidence decision_result[confidence] current_price market_info.get(current_price, 0) # 计算仓位大小 position_size self.calculate_position_size( decision_result, market_info ) # 计算目标价格 target_price self.calculate_target_price( current_price, decision_result, buy ) # 计算止损价格 stop_loss self.calculate_stop_loss( current_price, decision_result, buy ) return { action: 买入, position_size: position_size, entry_price: current_price, target_price: target_price, stop_loss: stop_loss, time_horizon: self.estimate_time_horizon(decision_result), execution_strategy: self.select_execution_strategy(market_info) } def calculate_position_size(self, decision_result, market_info): 计算仓位大小 confidence decision_result[confidence] volatility market_info.get(volatility, 0.2) if self.position_sizing_method kelly: # 凯利公式 expected_return decision_result.get(expected_return, 0.1) win_rate confidence avg_win expected_return avg_loss volatility kelly_fraction (win_rate * avg_win - (1 - win_rate) * avg_loss) / avg_win position_size max(self.min_position_size, min(self.max_position_size, kelly_fraction)) elif self.position_sizing_method fixed: # 固定仓位 base_size 0.02 position_size base_size * confidence else: # 风险平价 target_risk 0.02 position_size target_risk / volatility return min(self.max_position_size, max(self.min_position_size, position_size))决策质量评估DecisionQualityAssessment以五个等权各 0.2指标评估决策质量信息完整性、分析深度、风险考虑、逻辑一致性、执行可行性。综合得分映射为优秀≥0.9、良好≥0.8、中等≥0.7、及格≥0.6、需要改进0.6五档并附带改进建议。class DecisionQualityAssessment: def __init__(self): self.quality_metrics { information_completeness: 0.2, # 信息完整性 analysis_depth: 0.2, # 分析深度 risk_consideration: 0.2, # 风险考虑 logical_consistency: 0.2, # 逻辑一致性 execution_feasibility: 0.2 # 执行可行性 } def assess_decision_quality(self, decision_process): 评估决策质量 quality_scores {} for metric, weight in self.quality_metrics.items(): score self.evaluate_metric(decision_process, metric) quality_scores[metric] score * weight overall_quality sum(quality_scores.values()) return { overall_quality: overall_quality, metric_scores: quality_scores, quality_grade: self.grade_quality(overall_quality), improvement_suggestions: self.suggest_improvements(quality_scores) } def evaluate_metric(self, decision_process, metric): 评估特定质量指标 if metric information_completeness: return self.assess_information_completeness(decision_process) elif metric analysis_depth: return self.assess_analysis_depth(decision_process) elif metric risk_consideration: return self.assess_risk_consideration(decision_process) elif metric logical_consistency: return self.assess_logical_consistency(decision_process) elif metric execution_feasibility: return self.assess_execution_feasibility(decision_process) return 0.5 # 默认分数 def grade_quality(self, score): 质量等级评定 if score 0.9: return 优秀 elif score 0.8: return 良好 elif score 0.7: return 中等 elif score 0.6: return 及格 else: return 需要改进配置选项管理层配置manager_config { decision_model: consensus, # 决策模型 confidence_threshold: 0.7, # 置信度阈值 risk_tolerance: moderate, # 风险容忍度 position_sizing_method: kelly, # 仓位计算方法 max_position_size: 0.05, # 最大仓位 rebalance_frequency: weekly, # 再平衡频率 performance_review_period: monthly # 绩效评估周期 }决策参数decision_params { analysis_weights: { # 分析权重 fundamental: 0.3, technical: 0.2, sentiment: 0.15, debate: 0.25, risk: 0.1 }, decision_thresholds: { # 决策阈值 strong_buy: 0.8, buy: 0.6, hold: 0.4, sell: 0.2, strong_sell: 0.0 }, time_horizons: { # 投资期限 short_term: 1-3个月, medium_term: 3-12个月, long_term: 1年以上 } }从源码结构看上述配置对应DecisionMaking、ExecutionPlanning等类的构造参数config.get(...)取值默认值已在类定义中内置用户可覆盖阈值、权重、仓位上下限等关键决策参数。LLM 的选择quick_thinking_llm、trader_memory等则在 setup.py 中组装属于更上层的运行时配置。日志和监控详细日志记录仓库真实管理节点遵循文档的日志风格并进一步结构化。研究经理记录 Prompt/响应长度与估算 Tokenresearch_manager.py风险经理在此基础上增加真实 Token 读取与重试/兜底日志risk_manager.py。文档给出的日志模式如下# 管理层活动日志 logger.info(f [管理层] 开始决策流程: {company_name}) logger.info(f [信息收集] 收集到 {len(reports)} 份分析报告) logger.info(f⚖️ [辩论评估] 看涨分数: {bull_score:.2f}, 看跌分数: {bear_score:.2f}) logger.info(f [投资决策] 决策: {decision}, 置信度: {confidence:.2%}) logger.info(f [执行计划] 仓位: {position_size:.2%}, 目标价: {target_price}) logger.info(f✅ [决策完成] 投资计划制定完成)绩效监控指标决策准确率风险调整收益最大回撤控制决策执行效率组合多样化程度扩展指南添加新的管理角色创建新管理角色# tradingagents/agents/managers/new_manager.py from tradingagents.utils.tool_logging import log_manager_module from tradingagents.utils.logging_init import get_logger logger get_logger(default) def create_new_manager(llm): log_manager_module(new_manager) def new_manager_node(state): # 新管理角色逻辑 pass return new_manager_node仓库中创建管理节点的标准模式可参考create_research_manager(llm, memory)research_manager.py与create_risk_manager(llm, memory)risk_manager.py工厂函数接收 LLM 与可选的记忆组件内部返回接收state的闭包节点。集成到决策流程在 setup.py 中实例化节点并用workflow.add_node(name, node)注册再通过add_edge/add_conditional_edges接入现有链路现有链路的注册方式参见该文件第 160–264 行# 在图配置中添加新管理角色 from tradingagents.agents.managers.new_manager import create_new_manager new_manager create_new_manager(llm)自定义决策模型实现决策模型接口class DecisionModel: def analyze_inputs(self, state): pass def make_decision(self, analysis_results): pass def create_execution_plan(self, decision): pass注册决策模型decision_models { consensus: ConsensusModel(), majority_vote: MajorityVoteModel(), weighted_average: WeightedAverageModel() }最佳实践1. 全面信息整合确保所有必要信息都已收集验证信息质量和可靠性识别信息缺口和不确定性建立信息更新机制。2. 客观决策制定基于数据和分析而非直觉考虑多种情景和可能性量化风险和收益预期保持决策过程透明。仓库实现中「避免默认持有」「必须给出具体目标价格」等 Prompt 约束正是这一原则的落地。3. 动态策略调整定期评估决策效果根据市场变化调整策略学习和改进决策模型。仓库中研究经理与风险经理均通过memory.get_memories(...)检索历史建议并注入 Prompt形成「复盘-学习-改进」闭环保持策略灵活性。4. 有效风险管理设定明确的风险限额建立多层风险控制机制研究经理 → 交易员 → 三位风险分析师 → 风险经理定期进行压力测试制定应急预案风险经理内置默认决策兜底即为一例。故障排除常见问题决策冲突检查各分析师输出一致性调整决策权重配置decision_params[analysis_weights]增加仲裁机制提高信息质量。执行计划不可行验证市场流动性调整仓位大小max_position_size/min_position_size修改执行时间框架考虑市场冲击成本。决策质量下降评估输入信息质量可参考InformationGathering.assess_information_quality检查模型参数设置阈值、权重、置信度更新决策算法增加人工审核。仓库中风险经理的默认决策文案即明确提示「建议结合人工分析做出最终决策」。调试技巧决策流程跟踪logger.debug(f决策输入: {decision_inputs}) logger.debug(f分析结果: {analysis_results}) logger.debug(f决策输出: {decision_output})质量评估logger.debug(f信息完整性: {information_completeness}) logger.debug(f分析深度: {analysis_depth}) logger.debug(f决策质量: {decision_quality})此外tool_logging.py 提供的模块级装饰器会自动记录每个管理节点的开始、成功、失败与耗时配合 logging_manager.py 的会话级聚合可以按股票代码与会话追溯完整的决策链路。总结管理层团队作为 TradingAgents-CN 的决策中枢通过「信息收集 → 辩论评估 → 决策制定 → 执行计划 → 质量评估」的科学流程将分析师团队的多元输出收敛为明确可执行的投资决策。仓库源码在文档设计的基础上进一步强化了工程能力LangGraph 驱动的确定性状态流转setup.py、标的代码约束与历史记忆注入instrument_utils.py、LLM 调用重试与默认决策兜底risk_manager.py以及全链路的耗时与 Token 统计。理解管理层团队就掌握了这个多智能体框架从「各抒己见」到「统一决策」的核心机制——这也是构建可靠金融分析 Agent 系统最值得借鉴的部分。【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考