金融深度研究#
📊 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工具获取(基于akshare和baostock接口实现)。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.yaml 和 collector.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.yaml(orchestrator.yaml、searcher.yaml、collector.yaml、analyst.yaml、aggregator.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#
提升金融数据抓取工具的稳定性与覆盖度。
持续优化工作流架构以降低 Token 消耗、提升报告生成性能。
加强报告的可视化呈现,支持多格式导出。
优化舆情搜索与研究pipeline,优化信息源管理。