兰 亭 墨 苑
期货 · 量化 · AI · 终身学习
首页
归档
编辑文章
标题 *
URL 别名 *
内容 *
(支持 Markdown 格式)
# TradingAgents-MCPmode 深度分析报告与用户手册 > 基于 GitHub 开源项目源码的完整技术分析 > 版本:v1.0 | 分析日期:2026-04-02 | 分析者:雨轩 --- ## 第一章 项目概述 ### 1.1 项目定位 TradingAgents-MCPmode 是一个基于 MCP(Model Context Protocol)工具的多智能体交易分析系统。它通过 15 个专业化 AI Agent 的协作,模拟真实投研团队的工作流程,从多维度分析股票并提供交易决策建议。 该项目是原版 TradingAgents(GitHub 39k+ Star,清华唐杰教授门生肖易佳团队开发)的增强版本,主要改进包括:将数据源从 FinnHub 切换为支持 A 股的 MCP 工具链、新增股东分析师和产品分析师、引入三方风险辩论机制、提供完整的 Streamlit Web 前端。 ### 1.2 技术栈 | 组件 | 技术选型 | |------|----------| | Agent 编排 | LangGraph(有状态图) | | LLM 接口 | LangChain + OpenAI 兼容 API | | MCP 工具 | langchain-mcp-adapters | | Web 前端 | Streamlit | | 数据源 | finance-mcp(基于 Tushare) | | 异步运行 | asyncio + Python 3.12/3.13 | ### 1.3 项目文件结构 核心文件包括:main.py(CLI入口)、web_app.py(Streamlit前端)、mcp_config.json(MCP配置)、.env(环境变量)。src/目录下包含base_agent.py(Agent基类)、agent_states.py(状态定义)、mcp_manager.py(MCP工具管理器)、workflow_orchestrator.py(LangGraph工作流编排)、progress_tracker.py(进度追踪)。agents/子目录包含analysts.py(7个分析师)、researchers.py(看涨/看跌研究员)、managers.py(研究经理+交易员)、risk_management.py(风险团队4个Agent)。 --- ## 第二章 系统架构深度解析 ### 2.1 五阶段工作流 系统采用严格的流水线架构,数据从左到右单向流动: **阶段 0:公司概述** -- CompanyOverviewAnalyst 串行执行,获取公司全名、股票代码、市场、业务领域等基础信息,填充 company_details 字段。这是唯一串行阶段,先于所有其他 Agent。 **阶段 1:并行分析** -- 6 个分析师(Market、Sentiment、News、Fundamentals、Shareholder、Product)使用 copy.deepcopy(state) + asyncio.gather 并行执行。每个 Agent 获得独立 state 副本,分析完成后智能合并报告字段(后到者不覆盖非空已有值),完全避免竞态条件。 **阶段 2:投资辩论** -- BullResearcher 与 BearResearcher 循环辩论。首轮为独立论证,后续轮为针对性反驳。辩论轮数 = ceil((count+1)/2),由 max_debate_rounds 控制。 **阶段 3:管理层决策** -- ResearchManager 评估辩论结果做出投资决策(买入/卖出/持有),Trader 将决策转化为可执行交易计划(入场价位、止损止盈、应急预案)。 **阶段 4:风险辩论与最终决策** -- 激进/保守/中性三方循环辩论,RiskManager 做出最终风险管理决策。 ### 2.2 LangGraph 状态图设计 工作流编排使用 LangGraph StateGraph 构建。核心设计模式: 1. 条件边(Conditional Edges):根据辩论轮次动态决定下一步。_should_continue_investment_debate 和 _should_continue_risk_debate 在每轮发言后判断是否继续。 2. 深拷贝并行:analysts_parallel_node 中对每个分析师创建 state 的深拷贝,避免并发冲突。合并时按字段逐个检查,非空值不覆盖。 3. 智能体动态开关:禁用的 Agent 被跳过但工作流继续推进。辩论类 Agent 跳过时递增轮次计数器,防止无限循环。 4. 协作式取消:asyncio.wait + FIRST_COMPLETED + 0.3秒轮询,支持中途取消。 ### 2.3 AgentState 状态模型 通过 Pydantic 的 AgentState(MessagesState) 定义,是系统数据总线。核心字段包括:user_query(用户输入)、company_details(仅分析师可见)、7份 *_report、investment_debate_state(含 history/bull_history/bear_history/current_response/count)、investment_plan、trader_investment_plan、risk_debate_state(三方,多一个 neutral_history)、final_trade_decision、mcp_tool_calls、agent_execution_history、errors/warnings。 信息传递严格分级:company_details 仅给分析师,报告全量传递,辩论历史累积传递。 --- ## 第三章 15 个 Agent 详解 ### 3.1 基类设计(BaseAgent) base_agent.py 定义通用行为。call_llm_with_context 是统一的 LLM 调用入口,流程为:确保实例创建 -> 构建系统提示 + 输出格式要求 -> 构建上下文 -> MCP 启用时用 create_react_agent 创建 ReAct Agent,否则直接 llm.ainvoke -> MCP 失败时自动降级。 输出格式规范:全局要求连续段落表述,不使用 Markdown 标题符号、项目符号或编号。这确保了报告可读性,但牺牲了结构化信息提取能力。 ### 3.2 分析师团队(7 个 Agent) 所有分析师默认启用 MCP 工具,可访问 company_details,并行执行互不依赖。 **CompanyOverviewAnalyst**:获取公司全名、股票代码、市场、业务领域、竞争对手。唯一能填充 company_details 的 Agent。 **MarketAnalyst**:技术指标(MA/RSI/MACD/布林带)、交易量、支撑位/阻力位。根据股票代码判断市场类型。 **SentimentAnalyst**:社交媒体情绪、投资者心理、散户vs机构差异。识别情绪极端点。 **NewsAnalyst**:最新新闻、政策变化、行业动态。评估新闻对股价影响。 **FundamentalsAnalyst**:财务报表(收入/利润/现金流/资产负债)、估值(PE/PB/DCF)。要求获取最近两个完整财政年度财报,同行业对比。 **ShareholderAnalyst**(MCP版新增):股东户数变化、前十大股东、大宗交易、机构动向。核心逻辑:股东户数减少=筹码集中=看涨信号。 **ProductAnalyst**(MCP版新增):主营业务构成、产品竞争力、商业模式、客户集中度、供应链稳定性。 ### 3.3 研究员团队(2 个 Agent) 研究员默认不使用 MCP 工具,专注于综合分析和辩论。 **BullResearcher**:首轮构建看涨案例(竞争优势、增长潜力、被低估价值),后续轮反驳看跌观点。策略:承认风险但强调机会大于风险。 **BearResearcher**:首轮独立风险分析,后续轮反驳看涨观点。策略:识别风险盲点、质疑过度乐观假设、强调被忽视的负面因素。 ### 3.4 管理层(2 个 Agent) **ResearchManager**:评估辩论论证质量,综合风险收益比,做出买入/卖出/持有决策。输出 investment_plan。 **Trader**:将投资决策转化为可执行交易计划(方向、价位、时机、止损止盈、应急预案)。输出 trader_investment_plan。 ### 3.5 风险管理团队(4 个 Agent) **AggressiveRiskAnalyst**:哲学为高风险高回报,关注机会成本和主动管理能力。 **SafeRiskAnalyst**:资本保护优先,关注下行风险和黑天鹅事件,偏好分散投资和对冲。 **NeutralRiskAnalyst**:客观平衡,基于数据和概率,关注风险调整后收益。 **RiskManager**:综合三方观点,做出最终交易执行决策(批准/拒绝/修改/附加监控)。 --- ## 第四章 MCP 工具集成机制 ### 4.1 MCPManager 设计 mcp_manager.py 负责四个核心职责:LLM 初始化、MCP 客户端管理、权限控制、工具分发。 ### 4.2 配置陷阱 mcp_manager.py 从环境变量 LLM_MODEL、LLM_API_KEY、LLM_BASE_URL 读取配置,但 .env.example 中示例使用的是 OPENAI_API_KEY、OPENAI_BASE_URL、MODEL_NAME。这两套变量名不一致。部署时需要在 .env 中同时设置 LLM_* 变量,或者确认代码使用哪套命名。 ### 4.3 MCP 客户端初始化 通过 MultiServerMCPClient 连接配置文件中定义的所有 MCP 服务器。对每个服务器:逐个获取工具列表,工具名合法化(去除特殊字符),去重检查,按服务器分组存储。连接失败的服务器被跳过。 ### 4.4 权限控制 每个 Agent 的 MCP 权限通过环境变量 {AGENT_NAME}_MCP_ENABLED=true/false 独立控制,默认全部关闭。被禁用的 Agent 仍正常执行,只是无法调用外部数据源。 --- ## 第五章 部署与配置指南 ### 5.1 环境要求 Python 3.12+,可访问的 LLM API(OpenAI 兼容端点),Tushare API Key(A 股数据),至少 2GB 可用内存。 ### 5.2 安装步骤 克隆项目,创建虚拟环境,安装依赖(pip install -r requirements.txt),复制 .env.example 为 .env 并配置 API Key,编辑 mcp_config.json 配置 MCP 服务器。 ### 5.3 环境变量配置 核心配置包括:OPENAI_API_KEY(LLM API 密钥)、OPENAI_BASE_URL(API 端点)、MODEL_NAME(模型名称)、MAX_DEBATE_ROUNDS(投资辩论轮次,默认 1)、MAX_RISK_DEBATE_ROUNDS(风险辩论轮次,默认 1)。每个 Agent 有独立的 MCP 开关变量。 ### 5.4 MCP 工具配置 mcp_config.json 中配置 MCP 服务器地址和认证信息。默认使用 finvestai.top/mcp 端点,需要 Tushare Token 进行认证。支持 streamable_http 传输协议。 ### 5.5 启动方式 Web 前端:streamlit run web_app.py --server.port 8501 命令行:python main.py -c 分析苹果公司股票 ### 5.6 Web 前端功能 首页系统概览、系统配置(在线编辑 .env 和 MCP 配置)、实时分析(输入查询并监控进度)、智能体控制(动态启用/禁用特定 Agent)、辩论配置(实时调整辩论轮次)、智能体页面(按团队查看分析结果)、历史报告(管理历史会话,支持 Markdown/PDF/DOCX 导出)。 --- ## 第六章 使用示例 ### 6.1 快速体验模式 启用全部 7 个分析师 + 仅看涨研究员 + 投资辩论 1 轮 + 跳过风险辩论。预计 1-2 分钟完成,获得 7 份分析报告 + 看涨投资建议。 ### 6.2 深度分析模式 启用全部 15 个 Agent + 投资辩论 2 轮 + 风险辩论 1 轮。预计 5-10 分钟完成,获得完整的多维度分析和风险管理决策。 ### 6.3 自然语言查询 支持中英文自然语言查询,无需指定市场或日期。例如:分析特斯拉股票、给我分析一下600036招商银行、分析NVDA的投资价值。系统自动识别股票代码和市场类型。 --- ## 第七章 技术优势与局限性 ### 7.1 核心优势 **多空对抗辩论**:强制反证机制是真正的亮点。大多数 AI 交易系统只有单向分析,缺少对立视角的挑战。看涨/看跌研究员的辩论机制模仿了专业投研的魔鬼代言人制度。 **并行化架构**:6 个分析师并发执行,理论效率提升 5-6 倍。深拷贝方案虽然牺牲内存,但避免了复杂的锁机制。 **灵活的工作流控制**:前端可动态开关 Agent 和调整辩论轮次,用户可以在快速体验和深度分析之间自由切换。 **信息分级传递**:company_details 仅给分析师、报告全量传递、辩论历史累积传递。这种设计避免了信息过载,每个 Agent 在最适合的信息密度下工作。 **MCP 工具解耦**:数据源通过 MCP 协议解耦,可以灵活替换不同的数据提供商而不修改 Agent 代码。 ### 7.2 局限性 **输出格式限制**:全局要求连续段落、不使用标题符号降低了报告的结构化程度,不利于后续自动化处理。 **数据源依赖**:默认 MCP 端点(finvestai.top)依赖 Tushare Token,免费版有调用频率限制。没有 Tushare Token 的分析师会降级为无工具模式,只能依赖 LLM 的历史知识。 **模型成本**:15 个 Agent 串联执行,每次分析消耗大量 Token。以 qwen3.5-plus 计算,一次完整分析(15 Agent + 2 轮辩论)可能消耗 50k-100k Token。 **单模型同质化风险**:所有 Agent 使用同一个 LLM,辩论的多样性实际上来自 Prompt 的角色差异,而非真正的多视角。同一个模型很难真正反对自己。 **回测 vs 实盘**:系统生成的投资建议基于当前快照数据,不包含回测验证。学术论文中的回测结果不能直接代表实盘表现。 **Prompt 硬编码**:所有 Agent 的系统提示词写在 Python 代码中,修改需要改代码重启服务,不如配置文件灵活。 ### 7.3 改进建议 1. 输出格式可配置化:允许用户选择 Markdown 格式或连续段落格式 2. 多模型支持:让看涨/看跌研究员使用不同模型,增强辩论多样性 3. 数据源热插拔:支持同时配置多个 MCP 数据源,自动选择最优数据源 4. 历史回测集成:接入回测框架,验证投资建议的历史表现 5. Agent Prompt 外部化:将系统提示词移到配置文件或数据库中 6. 成本监控面板:实时显示每个 Agent 的 Token 消耗和 API 成本 --- ## 第八章 与原版 TradingAgents 对比 | 维度 | 原版 | MCP版 | |------|------|-------| | 分析师数量 | 4 | 7(+股东、产品、公司概述) | | 辩论模式 | 2方(多/空) | 2方投资+3方风险 | | 数据源 | FinnHub | MCP/Tushare(支持A股) | | Web 前端 | CLI 为主 | Streamlit 完整界面 | | Agent 控制 | 全部启用 | 动态开关 | | 辩论轮次 | 配置文件 | 前端实时调整 | | 报告导出 | Markdown | Markdown+PDF+DOCX | | 技术栈 | LangGraph | LangGraph+MCP | --- ## 第九章 安全与合规提示 1. 本系统仅供研究和学习用途,不构成投资建议 2. LLM 生成的分析可能包含事实错误或过时信息 3. 实盘交易需经过专业合规审查 4. API Key 和 Tushare Token 应妥善保管,不要提交到公开仓库 5. 系统会通过 MCP 工具调用外部数据源,注意网络安全 --- *雨轩于听雨轩* :house_with_garden:
配图 (可多选)
选择新图片文件或拖拽到此处
标签
更新文章
删除文章