FinanceGPT v2.0(金融大语言模型2.0版)
一个结合了模型上下文协议(MCP)和多供应商大型语言模型(LLM)支持的、由人工智能驱动的金融研究助手。通过RESTful API查询金融数据、分析公司并获取实时市场洞察。
建筑
FastAPI REST API
↓
MCP Client Layer (LangChain-based)
├─ LLM Router (Gemini/Claude/OpenAI)
└─ MCP Connector
↓
MCP Server (stdio)
↓
Financial Tools
├─ Yahoo Finance (yfinance)
├─ Web Scraper (BeautifulSoup4)
└─ Internet Search (DuckDuckGo/SerpAPI)
↓
MongoDB (sessions + chat history)特点/特性
- 支持多供应商大型语言模型(LLM)在Google Gemini、Anthropic Claude和OpenAI之间切换
- MCP驱动的工具通过标准化的模型上下文协议获取财务数据
- 会话管理与MongoDB存储进行持久对话
- 实时数据实时财务报表、公司简介及市场新闻
- 清洁架构模块化设计,关注点分离
项目结构
personal_mcp_project/
├── src/
│ ├── main.py # FastAPI application entry point
│ ├── api/ # API layer
│ │ ├── models.py # Pydantic request/response models
│ │ ├── dependencies.py # Agent management & DI
│ │ ├── tasks.py # Background tasks
│ │ └── routes/ # API endpoints
│ │ ├── chat.py # Chat endpoint
│ │ ├── session.py # Session management
│ │ └── system.py # System info & health
│ ├── mcp_client/ # MCP client layer
│ │ ├── llm_factory.py # LLM provider factory
│ │ ├── mcp_connector.py # MCP server connector
│ │ └── agent.py # Unified AI agent
│ ├── mcp_server/ # MCP server
│ │ └── server.py # Financial tools server
│ ├── core/ # Shared business logic
│ │ ├── tools/ # Financial data tools
│ │ │ ├── yahoo_finance.py
│ │ │ ├── web_scraper.py
│ │ │ └── internet_search.py
│ │ └── config/ # Configuration
│ │ ├── constants.py
│ │ └── prompts.py
│ └── database/ # MongoDB layer
│ ├── connection.py # Database connection
│ └── repositories.py # Data repositories
├── requirements.txt # Python dependencies
├── start_api_server.sh # API server startup script
└── start_mcp_server.sh # MCP server startup script先决条件
- Python 3.13及以上版本
- MongoDB 4.0+(用于会话存储)
- API密钥:
- 根据您的指示,以下是原文内容的翻译:“Google Gemini API密钥(必需)” - Anthropic Claude API密钥(可选) - OpenAI API密钥(可选) - SerpAPI密钥(可选,用于Google搜索)
安装
1. 克隆并设置环境
# Install uv (fast Python package installer)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Create virtual environment
python3 -m venv .venv
source .venv/bin/activate
# Install dependencies using uv
uv pip install -r requirements.txt2. 配置环境变量
创建一个 .env 项目根目录下的文件:
# Required
GOOGLE_API_KEY=your_gemini_api_key_here
# Optional LLM Providers
ANTHROPIC_API_KEY=your_claude_api_key_here
OPENAI_API_KEY=your_openai_api_key_here
# Optional Search
SERPAPI_KEY=your_serpapi_key_here
# MongoDB Configuration
MONGODB_URI=mongodb://localhost:27017
MONGODB_DB_NAME=financegpt
# Server Configuration
PORT=80813. 启动MongoDB
# macOS (Homebrew)
brew services start mongodb-community
# Linux (systemd)
sudo systemctl start mongod
# Docker
docker run -d -p 27017:27017 --name mongodb mongo:latest4. 启动应用程序
选项A:使用启动脚本
# Make scripts executable
chmod +x start_api_server.sh start_mcp_server.sh
# Start API server
./start_api_server.sh
# MCP server starts automatically when API server receives requests选项B:手动启动
# Start API server
PORT=8081 PYTHONPATH=. .venv/bin/python3 src/main.py
# MCP server starts automatically when API server receives requestsAPI 将位于 http://localhost:8081
API 使用
健康检查
curl http://localhost:8081/health创建聊天会话
curl -X POST http://localhost:8081/session/create \
-H "Content-Type: application/json" \
-d '{"provider": "gemini"}'发送聊天消息
curl -X POST http://localhost:8081/chat \
-H "Content-Type: application/json" \
-d '{
"message": "What is Apple'\''s current stock price?",
"provider": "gemini"
}'与不同供应商聊天
# Using Claude
curl -X POST http://localhost:8081/chat \
-H "Content-Type: application/json" \
-d '{
"message": "Analyze Tesla'\''s financials",
"provider": "claude"
}'
# Using OpenAI
curl -X POST http://localhost:8081/chat \
-H "Content-Type: application/json" \
-d '{
"message": "Compare Microsoft and Google",
"provider": "openai"
}'继续会话
curl -X POST http://localhost:8081/chat \
-H "Content-Type: application/json" \
-d '{
"message": "What about their debt ratios?",
"session_id": "your-session-id-here",
"provider": "gemini"
}'获取系统信息
curl http://localhost:8081/system/info可用工具
MCP服务器提供了以下金融工具:
- 获取股票价格 - 获取当前股票价格和基本信息
- 获取损益表 - 获取公司损益表
- 获取资产负债表 - 获取资产负债表数据
- 获取现金流 - 获取现金流量表
- 获取公司信息 - 获取详细的公司简介
- 搜索网络 - 在网上搜索财经新闻和信息
- 抓取网址 - 从特定URL中提取内容
大型语言模型(LLM)提供商
Google Gemini(默认)
- 模型:
gemini-2.0-flash-exp - 最适合:快速响应,逻辑清晰
- 温度:0.2
Anthropic Claude(注:此处“Anthropic”通常指的是一个专注于人工智能研究的公司名,而“Claude”可能是该公司的某个具体模型或项目的名称,但直接翻译时,我们保持原样以体现其专有性)
- 模型:
claude-3-5-sonnet-20241022 - 最适合用于:复分析,详细解释
- 温度:0.2
OpenAI(开放人工智能研究所)
- 型号:
gpt-4o-mini - 最适合:性能与成本均衡
- 温度:0.2
发展
使用Insomnia进行测试
该项目包含一个即开即用的Insomnia集合,用于API测试:
- 进口系列/进口收藏品:
- 打开Insomnia(注:Insomnia通常指一款API测试工具,此处“打开”根据上下文可能意为启动或访问该工具) - 首选 进口/出口 → 导入数据 → 来自文件 - 选择 insomnia_collection.json
- 收藏内容包括:
- 18+ 个预设请求 - 所有3家大型语言模型(LLM)提供商(Gemini、Claude、OpenAI) - 会话管理端点 - 示例财务查询 - 环境配置
- 快速入门:
# Start MongoDB
brew services start mongodb-community
# Start API server
PORT=8081 PYTHONPATH=. .venv/bin/python3 src/main.py然后使用Insomnia来测试端点!
见 《失眠指南》.md 以获取详细说明。
运行测试
# Install test dependencies
uv pip install pytest pytest-asyncio httpx
# Run tests
pytest tests/代码结构
- src/main.py 翻译为中文是:“源代码/主文件.py” 或者更简洁地 “主程序文件.py”(根据上下文,“src”通常表示“source code”的缩写,即“源代码”)最小化的FastAPI应用设置(62行代码)
- src/api/ 翻译为中文是:“源代码/接口(目录)/”。不过,这里的“src”通常代表“source code”(源代码)的缩写,而“api”代表“application programming interface”(应用程序编程接口),所以更自然的翻译可能是“源代码/接口(文件夹)/”或者根据上下文简化为“源码/接口/”。但直接翻译“src/api/”保持原样结构的话,就是“源代码/接口(目录)/”路由、模型和依赖项的清晰分离
- src/mcp_client/ 翻译为中文是:源代码目录/mcp客户端/基于LangChain的MCP集成
- src/mcp_server/ 翻译为中文是:“源代码/mcp服务器/” 或者根据具体上下文,也可以翻译为“源代码目录下的mcp服务器部分/”。不过,通常在技术文档或文件结构描述中,我们可能会直接保留“src/mcp_server/”这样的路径表示,因为它已经是一种通用的、被广泛理解的文件路径表述方式。但如果需要将其含义解释得更明确一些,上述翻译是一个不错的选择独立MCP服务器,配备金融工具
- src/database/ 翻译为中文是:源代码/数据库/用于会话和消息的MongoDB存储库
添加新工具
- 在(某处/某系统中)创建工具函数
src/core/tools/ - 添加工具定义到
src/mcp_server/server.py - MCP客户端自动发现并使用新工具
添加新的大型语言模型(LLM)提供商
- 添加提供商到
LLMProvider\enum in\翻译为中文是:“枚举在(或:在枚举中)”。不过,这个翻译可能需要根据具体的上下文来调整,因为“enum in”本身可能是一个编程或技术语境下的短语,具体含义可能因上下文而异。如果“enum in”是一个特定的编程语言结构或命令的一部分,那么翻译时可能需要考虑其在该语言或上下文中的特定含义。但基于一般的理解,“enum in”可以翻译为“枚举在(或:在枚举中)”llm_factory.py - 在(系统/应用中)实现提供者案例
LLMFactory.create() - 安装所需的LangChain集成包
故障排除
MongoDB 连接被拒绝
# Check if MongoDB is running
ps aux | grep mongod
# Start MongoDB
brew services start mongodb-community # macOS
sudo systemctl start mongod # Linux导入错误
# Ensure PYTHONPATH is set
export PYTHONPATH=.
# Or use the startup scripts which set it automatically
./start_api_server.sh未找到MCP服务器
MCP服务器路径已自动检测。如果您移动了文件:
# Update path in src/mcp_client/mcp_connector.py
server_script_path = os.path.join(project_root, "src", "mcp_server", "server.py")API密钥错误
确保 .env 文件位于项目根目录,且包含正确的API密钥:
# Verify .env file
cat .env | grep API_KEY部署
生产环境的环境变量
# Set secure MongoDB URI
MONGODB_URI=mongodb+srv://user:pass@cluster.mongodb.net/
# Use production API keys
GOOGLE_API_KEY=prod_key_here
# Adjust server settings
PORT=8080
WORKERS=4Docker 部署(即将推出)
# Dockerfile example
FROM python:3.13-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY src/ ./src/
CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8080"]示例查询
尝试以下示例查询来测试系统:
- “苹果目前的负债权益比是多少?”
- “比较特斯拉和里维安的现金流”
- “关于英伟达的最新消息”
- “分析微软的收入趋势”
- “顶级的人工智能芯片公司有哪些?”
架构优势
- 模块化每个组件(API、MCP客户端、MCP服务器、工具)都是独立的
- 可扩展性易于添加新的大型语言模型(LLM)提供商或金融工具
- 可维护性代码结构清晰,职责单一
- 可扩展性无状态API设计,使用外部会话存储
- 可测试性松耦合实现全面测试
做出贡献
这是一个个人作品集项目,但欢迎提出建议!
许可证
MIT 许可证 - 欢迎将此项目作为您自己工作的参考。
联系
对于此项目的疑问或反馈,请在GitHub上提交一个问题。
______________________________________________________________________
使用(某材料/技术等)建造FastAPI、LangChain、MCP、MongoDB、yfinance、BeautifulSoup4,以及☕(一杯咖啡)
