你是否也曾幻想过,在敲代码的间隙,只需轻轻一问,就能获得专业的金融分析报告?当同事还在各个财经网站间频繁切换时,你却已经在Cursor中看到了自动生成的股价走势图和技术指标分析。

这不再是科幻电影中的场景。今天,我将带你一步步构建一个完全在本地运行的智能金融分析师。它能够理解你的自然语言查询,自动编写分析代码,并生成精美的可视化图表——所有这一切,都直接在你的IDE中完成。

更重要的是,整个系统基于MCP协议构建,确保你的敏感金融数据不会离开本地环境。接下来,让我们开始这场从零到一的技术探险。

一、项目概述

这个项目的核心思路是构建一个多智能体协作系统,能够接收自然语言的金融查询请求,自动生成分析代码,并输出可视化图表。整个系统通过MCP协议与Cursor集成,让你可以直接在IDE中享受专业的金融分析服务。

技术选型说明

  • CrewAI:负责多智能体的协作调度
  • Ollama + DeepSeek-R1:本地部署的大语言模型,确保数据安全
  • Cursor:作为MCP的宿主平台
  • MCP协议:实现工具与IDE的无缝集成

二、系统架构设计

整个系统的工作流程是这样的:

  1. 用户在Cursor中提交金融查询请求
  2. MCP服务器接收请求并启动金融分析团队
  3. 多个智能体协作进行研究分析
  4. 生成并执行Python分析脚本
  5. 输出可视化图表和分析报告

三、核心代码实现

1. 环境配置与依赖安装

首先,我们需要安装必要的依赖包:

pip install crewai ollama pandas matplotlib yfinance pydantic mcp

2. 大模型配置

使用Ollama本地部署DeepSeek-R1模型:

import ollama
from crewai import LLM
# 配置本地Ollama模型
def setup_llm():
"""配置本地DeepSeek-R1模型"""
llm = LLM(
model="ollama/deepseek-r1:latest",
base_url="http://localhost:11434"
)
return llm
# 初始化模型
local_llm = setup_llm()

3. 构建智能体团队

这是整个系统的核心部分,我们需要创建三个专门的智能体:

from crewai import Agent, Task, Crew
from pydantic import BaseModel
from typing import List
import json
# 定义查询结构
class FinancialQuery(BaseModel):
"""金融查询结构化数据模型"""
stocks: List[str]
analysis_type: str
time_period: str
metrics: List[str]
# 查询解析智能体
query_parser = Agent(
role="金融查询解析专家",
goal="将自然语言的金融查询转换为结构化数据",
backstory="""你是一位经验丰富的金融查询解析专家,
擅长理解用户的自然语言查询意图,并将其转换为结构化的数据格式。
你能准确识别股票代码、分析类型、时间范围和所需指标。""",
llm=local_llm,
verbose=True
)
# 代码编写智能体
code_writer = Agent(
role="Python金融分析代码专家",
goal="根据结构化查询编写高质量的金融分析Python代码",
backstory="""你是一位资深的Python开发者和金融分析师,
精通使用pandas处理金融数据,matplotlib创建专业图表,
以及yfinance获取股票数据。你编写的代码简洁、高效且易于理解。""",
llm=local_llm,
verbose=True
)
# 代码执行智能体
code_executor = Agent(
role="代码执行与验证专家",
goal="安全执行Python代码并生成分析结果",
backstory="""你是一位谨慎的代码执行专家,
负责在沙箱环境中安全执行代码,检查潜在错误,
并确保生成准确的分析图表和报告。""",
llm=local_llm,
verbose=True,
tools=[]  # 稍后添加代码执行工具
)

一直在更新,更多的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇

在这里插入图片描述

4. 定义分析任务

为每个智能体定义具体的任务:

def create_analysis_tasks(user_query: str):
"""创建金融分析任务链"""
# 任务1:解析查询
parse_task = Task(
description=f"""
解析以下用户查询:{user_query}
提取以下信息:
- 股票代码列表
- 分析类型(价格趋势、技术指标、比较分析等)
- 时间范围(如30天、3个月、1年等)
- 需要的指标(价格、成交量、移动平均线等)
请以JSON格式输出结构化结果。
""",
agent=query_parser,
expected_output="JSON格式的结构化查询数据"
)
# 任务2:编写代码
code_task = Task(
description="""
基于解析结果编写Python代码,要求:
1. 使用yfinance获取股票数据
2. 使用pandas处理和分析数据
3. 使用matplotlib创建专业的可视化图表
4. 代码要有适当的注释和错误处理
5. 确保图表美观且信息丰富
代码应该是完整可执行的,包含所有必要的import语句。
""",
agent=code_writer,
expected_output="完整的Python分析代码",
context=[parse_task]
)
# 任务3:执行代码
execute_task = Task(
description="""
执行生成的Python代码:
1. 检查代码语法和逻辑错误
2. 在安全环境中运行代码
3. 生成分析图表
4. 提供执行结果摘要
如果出现错误,请提供详细的错误信息和建议修复方案。
""",
agent=code_executor,
expected_output="代码执行结果和生成的图表路径",
context=[code_task]
)
return [parse_task, code_task, execute_task]

5. 创建分析团队

def create_financial_crew(user_query: str):
"""创建金融分析团队"""
tasks = create_analysis_tasks(user_query)
crew = Crew(
agents=[query_parser, code_writer, code_executor],
tasks=tasks,
verbose=True,
process="sequential"  # 顺序执行任务
)
return crew
# 测试分析团队
def test_financial_analysis():
"""测试金融分析功能"""
test_query = "帮我分析苹果公司(AAPL)和微软(MSFT)最近3个月的股价走势,包括移动平均线"
crew = create_financial_crew(test_query)
result = crew.kickoff()
print("分析结果:")
print(result)
return result

6. 构建MCP服务器

现在我们需要将这个金融分析师封装为MCP工具:

import asyncio
from mcp.server.fastmcp import FastMCP
import subprocess
import os
import tempfile
import matplotlib
matplotlib.use('Agg')  # 使用非交互式后端
# 创建MCP服务器
mcp = FastMCP("Financial Analyst")
@mcp.tool()
def analyze_financial_query(query: str) -> str:
"""
分析金融查询请求
Args:
query: 用户的自然语言金融查询
Returns:
分析结果和建议
"""
try:
crew = create_financial_crew(query)
result = crew.kickoff()
return str(result)
except Exception as e:
return f"分析过程中出现错误:{str(e)}"
@mcp.tool()
def save_code(code: str, filename: str = "financial_analysis.py") -> str:
"""
保存生成的分析代码到本地文件
Args:
code: Python代码内容
filename: 保存的文件名
Returns:
保存结果信息
"""
try:
with open(filename, 'w', encoding='utf-8') as f:
f.write(code)
return f"代码已成功保存到 {filename}"
except Exception as e:
return f"保存代码时出现错误:{str(e)}"
@mcp.tool()
def run_code_and_show_plot(code: str) -> str:
"""
执行代码并生成图表
Args:
code: 要执行的Python代码
Returns:
执行结果和图表路径
"""
try:
# 创建临时文件
with tempfile.NamedTemporaryFile(mode='w', suffix='.py', delete=False) as f:
f.write(code)
temp_file = f.name
# 执行代码
result = subprocess.run(
['python', temp_file],
capture_output=True,
text=True,
cwd=os.getcwd()
)
# 清理临时文件
os.unlink(temp_file)
if result.returncode == 0:
return f"代码执行成功!\n输出:{result.stdout}"
else:
return f"代码执行失败!\n错误:{result.stderr}"
except Exception as e:
return f"执行代码时出现错误:{str(e)}"
# MCP服务器启动函数
def start_mcp_server():
"""启动MCP服务器"""
if __name__ == "__main__":
mcp.run()

7. 完整的示例代码

让我们创建一个完整的示例来演示整个系统:

# financial_analyst_demo.py
import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from datetime import datetime, timedelta
def demo_financial_analysis():
"""演示金融分析功能"""
# 示例:分析AAPL和MSFT的股价对比
stocks = ['AAPL', 'MSFT']
end_date = datetime.now()
start_date = end_date - timedelta(days=90)  # 3个月数据
# 获取股票数据
stock_data = {}
for stock in stocks:
ticker = yf.Ticker(stock)
data = ticker.history(start=start_date, end=end_date)
stock_data[stock] = data
# 创建图表
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(15, 12))
# 1. 股价对比图
for stock in stocks:
ax1.plot(stock_data[stock].index, stock_data[stock]['Close'],
label=f'{stock} 收盘价', linewidth=2)
ax1.set_title('股价对比(最近3个月)', fontsize=14)
ax1.legend()
ax1.grid(True, alpha=0.3)
# 2. 成交量对比
for stock in stocks:
ax2.bar(stock_data[stock].index, stock_data[stock]['Volume'],
alpha=0.7, label=f'{stock} 成交量')
ax2.set_title('成交量对比', fontsize=14)
ax2.legend()
# 3. 移动平均线
for stock in stocks:
data = stock_data[stock]
ax3.plot(data.index, data['Close'], label=f'{stock} 收盘价', alpha=0.7)
ax3.plot(data.index, data['Close'].rolling(window=20).mean(),
label=f'{stock} 20日均线', linewidth=2)
ax3.set_title('股价与20日移动平均线', fontsize=14)
ax3.legend()
ax3.grid(True, alpha=0.3)
# 4. 收益率对比
for stock in stocks:
returns = stock_data[stock]['Close'].pct_change().dropna()
ax4.hist(returns, bins=30, alpha=0.7, label=f'{stock} 日收益率分布')
ax4.set_title('日收益率分布对比', fontsize=14)
ax4.legend()
ax4.set_xlabel('收益率')
ax4.set_ylabel('频次')
plt.tight_layout()
plt.savefig('financial_analysis.png', dpi=300, bbox_inches='tight')
plt.show()
# 生成分析报告
print("=== 金融分析报告 ===")
for stock in stocks:
data = stock_data[stock]
current_price = data['Close'].iloc[-1]
price_change = ((current_price - data['Close'].iloc[0]) / data['Close'].iloc[0]) * 100
avg_volume = data['Volume'].mean()
print(f"\n{stock} 分析结果:")
print(f"当前价格: ${current_price:.2f}")
print(f"3个月涨跌幅: {price_change:.2f}%")
print(f"平均日成交量: {avg_volume:,.0f}")
if __name__ == "__main__":
demo_financial_analysis()

MCP服务器配置

8. Cursor集成配置

要将我们的金融分析师集成到Cursor中,需要进行以下配置:

  • 启动MCP服务器

创建服务器启动脚本 start_server.py

#!/usr/bin/env python3
from financial_analyst_mcp import mcp
if __name__ == "__main__":
mcp.run()
Cursor MCP配置
在Cursor中添加MCP服务器配置:
{
"mcpServers": {
"financial-analyst": {
"command": "python",
"args": ["path/to/your/start_server.py"],
"env": {
"PYTHONPATH": "path/to/your/project"
}
}
}
}

9. 使用指南

配置完成后,你就可以在Cursor中直接使用金融分析功能了:

  • 简单查询

    帮我分析一下特斯拉(TSLA)最近一个月的股价表现

  • 对比分析

    比较苹果和谷歌最近半年的股价走势,包括技术指标分析

  • 深度分析

    分析标普500指数成分股中科技板块的表现,生成详细的投资建议

四、系统优势

这个基于MCP的金融分析师有以下几个显著优势:

1. 本地化部署

使用Ollama本地部署模型,确保你的金融查询和数据不会泄露到外部服务商。

2. 智能协作

通过CrewAI的多智能体架构,每个智能体专注于自己擅长的领域,协作完成复杂的金融分析任务。

3. 无缝集成

通过MCP协议与Cursor深度集成,让你在编程过程中随时获得专业的金融分析支持。

4. 可扩展性

整个架构设计考虑了可扩展性,你可以轻松添加新的智能体或分析功能。

五、总结

站在AI技术与金融分析交叉口的我们,正见证着一个全新的工作方式诞生。这个基于MCP的智能金融分析师项目,不仅展示了多智能体协作的强大能力,更开创了在IDE中直接进行专业级数据分析的先河。

技术真正的魅力,不在于它有多复杂,而在于它如何优雅地解决实际问题。

现在,当你下次需要分析股票走势时,或许不再需要打开多个浏览器标签,不再需要在不同的金融门户网站间切换。只需要在Cursor中简单描述你的需求,剩下的,就交给这个你亲手打造的智能助手吧。

六、如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一直在更新,更多的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇

在这里插入图片描述

01.大模型风口已至:月薪30K+的AI岗正在批量诞生

在这里插入图片描述

2025年大模型应用呈现爆发式增长,根据工信部最新数据:

国内大模型相关岗位缺口达47万

初级工程师平均薪资28K(数据来源:BOSS直聘报告)

70%企业存在"能用模型不会调优"的痛点

真实案例:某二本机械专业学员,通过4个月系统学习,成功拿到某AI医疗公司大模型优化岗offer,薪资直接翻3倍!

02.大模型 AI 学习和面试资料

1️⃣ 提示词工程:把ChatGPT从玩具变成生产工具
2️⃣ RAG系统:让大模型精准输出行业知识
3️⃣ 智能体开发:用AutoGPT打造24小时数字员工

📦熬了三个大夜整理的《AI进化工具包》送你:
✔️ 大厂内部LLM落地手册(含58个真实案例)
✔️ 提示词设计模板库(覆盖12大应用场景)
✔️ 私藏学习路径图(0基础到项目实战仅需90天)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

Logo

更多推荐