金融深度研究#

📊 FinResearch:面向金融研究的多智能体分析引擎 FinResearch 是 MS-Agent 体系下专为金融领域打造的智能研究工作流系统,旨在自动化完成从原始市场信号到专业级研究报告的端到端生成。 它不再依赖单一大模型“幻觉式”输出,而是通过结构化任务分解 + 多源异构数据融合 + 可验证分析闭环,实现高可信度、高解释性、高可复现性的金融洞察。

原理介绍#

特性#

  • 多智能体架构:Orchestrator / Searcher / Collector / Analyst / Aggregator 五个专用智能体以 DAG 形式协同完成从任务拆解到报告聚合的全流程。

  • 多维度研究:同时覆盖“金融数据(定量)+ 舆情资讯(定性)”,实现结构化与非结构化数据的融合分析,结论更全面、更具解释性。

  • 金融数据采集:支持模型自动获取A股、港股、美股等市场的行情、财报、宏观指标与市场数据。

  • 舆情深度研究:新闻/媒体/社区等多源舆情深度分析。

  • 安全可复现:量化分析在 Docker 沙箱中执行,保证环境隔离与可复现性。

  • 专业报告输出:遵循 MECE、SWOT、金字塔原理等方法论,逐章生成并跨章节进行一致性校验。

架构#

                    ┌─────────────┐
                    │ Orchestrator│
                    │   Agent     │
                    └──────┬──────┘
              ┌────────────┴────────────┐
              ▼                         ▼
      ┌──────────────┐          ┌──────────────┐
      │   Searcher   │          │  Collector   │
      │    Agent     │          │    Agent     │
      └──────┬───────┘          └──────┬───────┘
             │                         │
             │                         ▼
             │                  ┌──────────────┐
             │                  │   Analyst    │
             │                  │    Agent     │
             │                  └──────┬───────┘
             │                         │
             └────────────┬────────────┘
                   ┌──────────────┐
                   │  Aggregator  │
                   │    Agent     │
                   └──────────────┘
  • Orchestrator:拆解用户任务为任务与范围、金融数据任务、舆情研究任务三部分。

  • Searcher:非结构化数据搜集,调用 ms-agent/projects/deep_research 执行舆情深度研究,输出舆情分析报告。

  • Collector:金融结构化数据搜集,按任务清单采集财报、宏观指标等金融数据,使用FinancialDataFetcher工具获取(基于aksharebaostock接口实现)。

  • Analyst:在沙箱内执行定量分析,产出数据分析报告(带有可视化结果)。

  • Aggregator:整合舆情分析与定量分析结果,逐章生成报告并进行一致性校验,最后合成综合研究报告。

使用方式#

Python环境#

# 源码下载
git clone https://github.com/modelscope/ms-agent.git
cd ms-agent

# Python 环境
conda create -n fin_research python=3.11
conda activate fin_research
# 从 PyPI 安装(>=v1.5.0)
pip install 'ms-agent[research]'
# 从源码安装
pip install -r requirements/framework.txt
pip install -r requirements/research.txt
pip install -e .

# 数据接口依赖
pip install akshare baostock

沙箱环境#

Collector 与 Analyst 默认使用 Docker 沙箱以安全执行代码(可选):

# 安装 ms-enclave(https://github.com/modelscope/ms-enclave)
pip install ms-enclave docker websocket-client

# 构建所需 Docker 镜像(确保设备已安装并运行 Docker)
bash projects/fin_research/tools/build_jupyter_image.sh

如果不希望安装 Docker 等依赖,也可以选择配置本地代码执行工具,推荐将 analyst.yamlcollector.yaml 中默认的 tools 配置修改为:

tools:
  code_executor:
    mcp: false
    implementation: python_env
    exclude:
      - python_executor
      - shell_executor
      - file_operation

该配置下默认依赖 Jupyter Kernel 执行代码,提供对环境变量的隔离,并支持 shell 命令执行,相应的依赖将在第一次运行代码时自动安装(包括数据分析和代码执行需要的依赖)。如果希望只使用更轻量的 Python 执行环境而不引入其他依赖,可以修改为:

tools:
  code_executor:
    mcp: false
    implementation: python_env
    exclude:
      - notebook_executor
      - file_operation

该配置使用独立的 Python 执行器和 Shell 命令执行器,适合轻量级代码执行场景。

环境变量#

在系统环境或 YAML 中配置 API Key:

# LLM API(系统环境配置示例)
export OPENAI_API_KEY=your_api_key
export OPENAI_BASE_URL=your-api-url

# 搜索引擎(用于舆情研究,可选 exa 或 serpapi),下列服务均提供一定的免费额度,请注册并配置API Key
# exa账号注册地址为https://exa.ai,SerpApi账号注册地址为https://serpapi.com
# 如果不希望配置搜索引擎就启动FinResearch项目进行测试,可跳过并参考快速启动一节
export EXA_API_KEY=your_exa_api_key
export SERPAPI_API_KEY=your_serpapi_api_key

searcher.yaml 指定搜索引擎配置:

tools:
  search_engine:
    config_file: projects/fin_research/conf.yaml

快速启动#

快速启动完整FinResearch工作流进行测试:

# 在 ms-agent 根目录执行
PYTHONPATH=. python ms_agent/cli/cli.py run \
  --config projects/fin_research \
  --query '请分析宁德时代(300750.SZ)近四个季度盈利能力变化,并与新能源领域主要竞争对手进行对比;结合产业政策与锂价波动,预测其未来两季度趋势。' \
  --trust_remote_code true

在没有配置搜索引擎服务的情况下,允许配置最小版本FinResearch工作流进行测试(无舆情深度研究部分),需要修改workflow.yaml文件如下:

type: DagWorkflow

orchestrator:
  next:
    - collector
  agent_config: orchestrator.yaml

collector:
  next:
    - analyst
  agent_config: collector.yaml

analyst:
  next:
    - aggregator
  agent_config: analyst.yaml

aggregator:
  agent_config: aggregator.yaml

随后在命令行中按之前相同的方式启动即可。需要注意的是,由于信息维度不全面,FinResearch可能无法对复杂问题给出篇幅较长、内容丰富的分析报告,建议仅用于测试。

开发指南#

组件说明#

  • workflow.yaml:工作流配置入口,编排 Orchestrator / Searcher / Collector / Analyst / Aggregator 五个智能体的执行流程,基于DagWorkflow运行。

  • agent.yamlorchestrator.yamlsearcher.yamlcollector.yamlanalyst.yamlaggregator.yaml):定义各智能体(或者工作流)的行为、工具、LLM 参数和提示词(角色与职责)。

  • conf.yaml:搜索引擎配置,包含 Exa / SerpAPI 等搜索工具的 API Key 与参数设置。

  • callbacks/:各智能体专属的callback模块。

    • orchestrator_callback.py:保存任务规划到本地。

    • collector_callback.py:从本地加载任务规划并添加至用户消息。

    • analyst_callback.py:从本地加载任务规划并保存量化分析报告到本地。

    • aggregator_callback.py:保存最终综合分析报告到本地。

    • file_parser.py:代码/JSON文本的解析与处理。

  • tools/:工具目录。

    • build_jupyter_image.sh:构建沙箱所需的 Docker 环境。

    • principle_skill.py:加载 MECE / SWOT / 金字塔原理等分析方法论。

    • principles/:报告生成所用方法论的 Markdown 文档。

  • 其他关键模块:

    • time_handler.py:注入当前日期和时间到提示词中,避免出现幻觉。

    • searcher.py:调用深度研究项目进行舆情检索。

    • aggregator.py:聚合舆情与数据分析两类结果并生成最终报告。

使用示例#

LLM 配置示例:

llm:
  service: openai
  model: qwen3-max  # Analyst 可选 qwen3-coder-plus
  openai_api_key: your-api-key
  openai_base_url: https://dashscope.aliyuncs.com/compatible-mode/v1

工具(沙箱)配置示例:

tools:
  code_executor:
    sandbox:
      mode: local
      type: docker_notebook
      image: jupyter-kernel-gateway:version1
      timeout: 120
      memory_limit: "1g"
      cpu_limit: 2.0
      network_enabled: true

搜索配置(searcher.yaml)示例:

breadth: 3  # 每层搜索生成的查询数
depth: 1    # 最大搜索深度
is_report: true  # 输出报告而非简短回答

输出结构#

output/
├── plan.json                           # 任务拆解结果
├── financial_data/                     # 采集的金融数据
│   ├── stock_prices_*.csv
│   ├── quarterly_financials_*.csv
│   └── ...
├── sessions/                           # 数据分析智能体的会话目录
│   └── session_xxxx/
│       ├── *.png                       # 绘制的图表
│       └── metrics_*.csv               # 计算指标
├── memory/                             # 各智能体的记忆存储目录
├── search/                             # 舆情研究搜索结果
├── resources/                          # 舆情研究文档解析获取的图片
├── synthesized_findings.md             # 关键发现整合
├── report_outline.md                   # 报告大纲
├── chapter_1.md                        # 第1章内容
├── chapter_2.md                        # 第2章内容
├── ...
├── cross_chapter_mismatches.md         # 跨章节一致性校验结果
├── analysis_report.md                  # 数据分析报告
├── sentiment_report.md                 # 舆情分析报告
└── report.md                           # 最终综合报告

数据支持范围#

受到数据接口限制,可能存在一定的缺失和错误,请注意甄别。

  • 市场:A股(sh./sz.)、港股(hk.)、美股(us.)

  • 指数:上证50、沪深300(HS300)、中证500(ZZ500)

  • 数据类型:K线、财报(利润/资产负债/现金流)、分红、行业分类

  • 宏观:利率、存款准备金率、货币供应量(中国)

📝 TODOs#

  1. 提升金融数据抓取工具的稳定性与覆盖度。

  2. 持续优化工作流架构以降低 Token 消耗、提升报告生成性能。

  3. 加强报告的可视化呈现,支持多格式导出。

  4. 优化舆情搜索与研究pipeline,优化信息源管理。