前言
你是否也曾幻想过,在敲代码的间隙,只需轻轻一问,就能获得专业的金融分析报告?当同事还在各个财经网站间频繁切换时,你却已经在Cursor中看到了自动生成的股价走势图和技术指标分析。
这不再是科幻电影中的场景。今天,我将带你一步步构建一个完全在本地运行的智能金融分析师。它能够理解你的自然语言查询,自动编写分析代码,并生成精美的可视化图表——所有这一切,都直接在你的IDE中完成。
更重要的是,整个系统基于MCP协议构建,确保你的敏感金融数据不会离开本地环境。接下来,让我们开始这场从零到一的技术探险。
一、项目概述
这个项目的核心思路是构建一个多智能体协作系统,能够接收自然语言的金融查询请求,自动生成分析代码,并输出可视化图表。整个系统通过MCP协议与Cursor集成,让你可以直接在IDE中享受专业的金融分析服务。
技术选型说明
CrewAI:负责多智能体的协作调度
Ollama + DeepSeek-R1:本地部署的大语言模型,确保数据安全
Cursor:作为MCP的宿主平台
MCP协议:实现工具与IDE的无缝集成
二、系统架构设计
整个系统的工作流程是这样的:
用户在Cursor中提交金融查询请求
MCP服务器接收请求并启动金融分析团队
多个智能体协作进行研究分析
生成并执行Python分析脚本
输出可视化图表和分析报告
三、核心代码实现
1. 环境配置与依赖安装
首先,我们需要安装必要的依赖包:
pip install crewai ollama pandas matplotlib yfinance pydantic mcp
一键获取完整项目代码
code-snippet__js
1
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()
一键获取完整项目代码
code-snippet__js
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=[] # 稍后添加代码执行工具
)
一键获取完整项目代码
code-snippet__js
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]
一键获取完整项目代码
code-snippet__js
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
一键获取完整项目代码
code-snippet__js
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()
一键获取完整项目代码
code-snippet__js
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()
一键获取完整项目代码
code-snippet__js
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"
}
}
}
}
一键获取完整项目代码
code-snippet__js
9. 使用指南
配置完成后,你就可以在Cursor中直接使用金融分析功能了:
简单查询:
帮我分析一下特斯拉(TSLA)最近一个月的股价表现
对比分析:
比较苹果和谷歌最近半年的股价走势,包括技术指标分析
深度分析:
分析标普500指数成分股中科技板块的表现,生成详细的投资建议
四、系统优势
这个基于MCP的金融分析师有以下几个显著优势:
1. 本地化部署
使用Ollama本地部署模型,确保你的金融查询和数据不会泄露到外部服务商。
2. 智能协作
通过CrewAI的多智能体架构,每个智能体专注于自己擅长的领域,协作完成复杂的金融分析任务。
3. 无缝集成
通过MCP协议与Cursor深度集成,让你在编程过程中随时获得专业的金融分析支持。
4. 可扩展性
整个架构设计考虑了可扩展性,你可以轻松添加新的智能体或分析功能。
五、总结
站在AI技术与金融分析交叉口的我们,正见证着一个全新的工作方式诞生。这个基于MCP的智能金融分析师项目,不仅展示了多智能体协作的强大能力,更开创了在IDE中直接进行专业级数据分析的先河。
技术真正的魅力,不在于它有多复杂,而在于它如何优雅地解决实际问题。
现在,当你下次需要分析股票走势时,或许不再需要打开多个浏览器标签,不再需要在不同的金融门户网站间切换。只需要在Cursor中简单描述你的需求,剩下的,就交给这个你亲手打造的智能助手吧。
最后
为什么要学AI大模型
当下,⼈⼯智能市场迎来了爆发期,并逐渐进⼊以⼈⼯通⽤智能(AGI)为主导的新时代。企业纷纷官宣“ AI+ ”战略,为新兴技术⼈才创造丰富的就业机会,⼈才缺⼝将达 400 万!
DeepSeek问世以来,生成式AI和大模型技术爆发式增长,让很多岗位重新成了炙手可热的新星,岗位薪资远超很多后端岗位,在程序员中稳居前列。
与此同时AI与各行各业深度融合,飞速发展,成为炙手可热的新风口,企业非常需要了解AI、懂AI、会用AI的员工,纷纷开出高薪招聘AI大模型相关岗位。
最近很多程序员朋友都已经学习或者准备学习 AI 大模型,后台也经常会有小伙伴咨询学习路线和学习资料,我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师给大家这里给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频 全系列的学习资料,这些学习资料不仅深入浅出,而且非常实用,让大家系统而高效地掌握AI大模型的各个知识点。
AI大模型学习福利
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
四、AI大模型商业化落地方案

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量

被折叠的 条评论
为什么被折叠?



