本地运行+数据安全:MCP协议多智能体金融分析攻略_金融mcp服务
这个项目的核心思路是构建一个多智能体协作系统,能够接收自然语言的金融查询请求,自动生成分析代码,并输出可视化图表。整个系统通过MCP协议与Cursor集成,让你可以直接在IDE中享受专业的金融分析服务。为每个智能体定义具体的任务:。
你是否也曾幻想过,在敲代码的间隙,只需轻轻一问,就能获得专业的金融分析报告?当同事还在各个财经网站间频繁切换时,你却已经在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
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=[] # 稍后添加代码执行工具``)
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大模型技术,也_想通过这项技能真正达到升职加薪,就业或是副业的目的,但是不知道该如何开始学习_,因为网上的资料太多太杂乱了,如果不能系统的学习就相当于是白学。
为了帮助大家打破壁垒,快速了解大模型核心技术原理,学习相关大模型技术。从原理出发真正入局大模型。在这里我和MoPaaS魔泊云联合梳理打造了系统大模型学习脉络,这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码免费领取🆓**⬇️⬇️⬇️

【大模型全套视频教程】
教程从当下的市场现状和趋势出发,分析各个岗位人才需求,带你充分了解自身情况,get 到适合自己的 AI 大模型入门学习路线。
从基础的 prompt 工程入手,逐步深入到 Agents,其中更是详细介绍了 LLM 最重要的编程框架 LangChain。最后把微调与预训练进行了对比介绍与分析。
同时课程详细介绍了AI大模型技能图谱知识树,规划属于你自己的大模型学习路线,并且专门提前收集了大家对大模型常见的疑问,集中解答所有疑惑!

深耕 AI 领域技术专家带你快速入门大模型
跟着行业技术专家免费学习的机会非常难得,相信跟着学习下来能够对大模型有更加深刻的认知和理解,也能真正利用起大模型,从而“弯道超车”,实现职业跃迁!

【精选AI大模型权威PDF书籍/教程】
精心筛选的经典与前沿并重的电子书和教程合集,包含《深度学习》等一百多本书籍和讲义精要等材料。绝对是深入理解理论、夯实基础的不二之选。

【AI 大模型面试题 】
除了 AI 入门课程,我还给大家准备了非常全面的**「AI 大模型面试题」,**包括字节、腾讯等一线大厂的 AI 岗面经分享、LLMs、Transformer、RAG 面试真题等,帮你在面试大模型工作中更快一步。
【大厂 AI 岗位面经分享(92份)】

【AI 大模型面试真题(102 道)】

【LLMs 面试真题(97 道)】

【640套 AI 大模型行业研究报告】

【AI大模型完整版学习路线图(2025版)】
明确学习方向,2025年 AI 要学什么,这一张图就够了!

👇👇点击下方卡片链接免费领取全部内容👇👇

抓住AI浪潮,重塑职业未来!
科技行业正处于深刻变革之中。英特尔等巨头近期进行结构性调整,缩减部分传统岗位,同时AI相关技术岗位(尤其是大模型方向)需求激增,已成为不争的事实。具备相关技能的人才在就业市场上正变得炙手可热。
行业趋势洞察:
- 转型加速: 传统IT岗位面临转型压力,拥抱AI技术成为关键。
- 人才争夺战: 拥有3-5年经验、扎实AI技术功底和真实项目经验的工程师,在头部大厂及明星AI企业中的薪资竞争力显著提升(部分核心岗位可达较高水平)。
- 门槛提高: “具备AI项目实操经验”正迅速成为简历筛选的重要标准,预计未来1-2年将成为普遍门槛。
与其观望,不如行动!
面对变革,主动学习、提升技能才是应对之道。掌握AI大模型核心原理、主流应用技术与项目实战经验,是抓住时代机遇、实现职业跃迁的关键一步。

01 为什么分享这份学习资料?
当前,我国在AI大模型领域的高质量人才供给仍显不足,行业亟需更多有志于此的专业力量加入。
因此,我们决定将这份精心整理的AI大模型学习资料,无偿分享给每一位真心渴望进入这个领域、愿意投入学习的伙伴!
我们希望能为你的学习之路提供一份助力。如果在学习过程中遇到技术问题,也欢迎交流探讨,我们乐于分享所知。
*02 这份资料的价值在哪里?*
专业背书,系统构建:
-
本资料由我与MoPaaS魔泊云的鲁为民博士共同整理。鲁博士拥有清华大学学士和美国加州理工学院博士学位,在人工智能领域造诣深厚:
-
- 在IEEE Transactions等顶级学术期刊及国际会议发表论文超过50篇。
- 拥有多项中美发明专利。
- 荣获吴文俊人工智能科学技术奖(中国人工智能领域重要奖项)。
-
目前,我有幸与鲁博士共同进行人工智能相关研究。

内容实用,循序渐进:
-
资料体系化覆盖了从基础概念入门到核心技术进阶的知识点。
-
包含丰富的视频教程与实战项目案例,强调动手实践能力。
-
无论你是初探AI领域的新手,还是已有一定技术基础希望深入大模型的学习者,这份资料都能为你提供系统性的学习路径和宝贵的实践参考,助力你提升技术能力,向大模型相关岗位转型发展。



抓住机遇,开启你的AI学习之旅!

更多推荐


所有评论(0)