你是否也曾幻想过,在敲代码的间隙,只需轻轻一问,就能获得专业的金融分析报告?当同事还在各个财经网站间频繁切换时,你却已经在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 ollamafrom 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, Crewfrom pydantic import BaseModelfrom typing import Listimport 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 asynciofrom mcp.server.fastmcp import FastMCPimport subprocessimport osimport tempfileimport matplotlibmatplotlib.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.pyimport yfinance as yfimport pandas as pdimport matplotlib.pyplot as pltimport numpy as npfrom datetime import datetime, timedeltadef 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 python3from financial_analyst_mcp import mcpif __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大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。 

 这份《LLM项目+学习笔记+电子书籍+学习视频》已经整理好,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方二维码免费领取【保证100%免费】👇👇

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。


👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。


1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

Logo

更多推荐