# 【项目实战】智能问数金融平台:FastAPI+Vue3+大模型RAG全栈实现

📅 发布时间:2026/7/14 4:26:29
# 【项目实战】智能问数金融平台:FastAPI+Vue3+大模型RAG全栈实现 该项目为完整的**智能问数金融平台*。这个项目不仅涵盖了传统的金融数据处理与量化分析还创新性地融入了大语言模型与RAG检索增强技术实现了自然语言对话式投研的交互体验。本文将从架构设计、核心模块实现、关键技术难点三个维度完整复盘这个项目的开发过程。文末附项目结构与核心代码建议收藏。 **项目技术栈**FastAPI SQLite Vue3 Element Plus ECharts scikit-learn DeepSeek API FAISS向量检索---## ️ 一、整体架构设计### 1.2 核心功能模块1.2.1 功能说明意图识别引擎:自然语言解析用户提问提取股票代码、行业、年份等参数 | 正则匹配 关键词置信度评分函数调用调度:根据意图自动调用对应分析函数返回结构化结果 | 反射机制 模板化回复智能对话:结合数据分析结果调用大模型生成专业解读,DeepSeek API Function Call思想RAG知识库: 金融知识向量检索增强问答准确性,sentence-transformers FAISS量化选股:多条件财务指标筛选,ROE、PE、PB、净利润增长, Pandas条件过滤 排序风险评估:波动率、最大回撤、夏普比率等风险指标计算 | NumPy滚动窗口统计策略回测:均线策略、动量策略历史回测 | 向量化回测框架 |机器学习预测: 7种分类模型股价涨跌预测 | scikit-learn集成 |数据上传:支持CSV/Excel/JSON等多格式数据导入 | python-multipart Pandas二、核心模块深度解析2.1 意图识别引擎IntentEngine这是整个智能对话的大脑入口。用户输入自然语言后系统需要先识别用户想做什么再提取关键参数。设计思路-预定义10种意图市场分析、个股分析、行业分析、风险评估、财务分析、智能选股等-每种意图配置patterns关键词、params参数列表、examples示例-通过关键词命中数 参数匹配度计算置信度-取置信度最高且超过阈值的意图作为匹配结果def match_intent(self, query: str) - Optional[Dict[str, Any]]: results [] for intent in self.intents: confidence 0 # 1. 关键词模式匹配 for pattern in intent[patterns]: if pattern in query: confidence 1 # 2. 参数匹配加权 if stock_code in intent[params]: if re.search(r(\d{6}), query): confidence 0.5 # 3. 归一化置信度 if confidence 0: max_score len(intent[patterns]) 2 confidence min(confidence / max_score, 1.0) results.append({ intent_id: intent[intent_id], function: intent[function], params: self.extract_params(query, intent[params]), confidence: confidence }) # 返回最佳匹配 if results: best_match max(results, keylambda x: x[confidence]) return best_match if best_match[confidence] 0.2 else None return None参数提取亮点支持股票代码6位数字、股票名称中文2-6字排除词表、行业名称、年份、筛选条件ROE15、PE20等的智能提取。2.2 函数调用调度器FunctionCaller借鉴大模型Function Call的思想但用纯Python实现了轻量版。识别到意图后自动映射到对应分析函数# chat.py 核心调度逻辑 intent_result intent_engine.match_intent(user_query) if intent_result: # 通过函数名反射调用 func_name intent_result[function].split(.)[-1] func getattr(function_caller, func_name, None) if func: result func(intent_result[params]) # 模板化组装回复 template intent_engine.response_templates.get(intent_result[intent_id]) reply template.format(**result) if template else str(result) FunctionCaller类封装了十余种分析方法 - analyze_market() - 大盘概览、涨跌榜 - analyze_stock() - 个股技术指标MA5/MA20、波动率、MACD、布林带 - analyze_industry() - 行业成分股排名 - analyze_finance() - 财务报表分析营收、净利润、ROE趋势 - risk_evaluation() - 风险评估VaR、夏普比率、最大回撤 - stock_picker() - 多条件选股 - backtest_strategy() - 策略回测 - predict_price()2.3 AI 数据双引擎对话模式这是项目最有特色的设计——**两种对话模式**模式一基础模式Basic- 纯规则引擎驱动速度快、确定性高- 直接返回结构化数据分析结果- 适合明确的查询需求如分析股票000001模式二AI增强模式AI- 先通过意图识别函数调用拿到真实数据- 再把数据作为上下文喂给大模型- 大模型结合数据生成专业、自然的解读和投资建议python# AI模式核心流程 data_summary f【数据分析结果】\n{function_reply}\n\n context_prompt f你是专业的金融数据分析助手。 以下是基于数据库查询得到的实际数据分析结果 请结合这些数据用专业、易懂的自然语言回答用户的问题并给出投资建议。 {data_summary} ai AIService(api_key, api_base) ai_reply ai.chat_completion(messages)这种设计的优势大模型不编造数据所有数字都来自真实数据库查询 hallucination大幅降低。2.4 机器学习建模模块集成了7种经典分类模型用于股价涨跌预测| 模型 | 适用场景 | 特点 ||------|---------|------|| RandomForest | 主力模型 | 抗过拟合、特征重要性可解释 || GradientBoosting | 高精度 | 逐步拟合残差通常准确率最高 || LogisticRegression | 基线模型 | 速度快、可解释性强 || AdaBoost | 集成学习 | 弱分类器叠加 || DecisionTree | 单模型 | 直观易理解 || SVM | 非线性分类 | 高维空间效果好 || KNN | 距离-based | 简单直观 |特征工程使用前N日收盘价作为滞后特征lag_1 ~ lag_5预测次日涨跌方向二分类。def prepare_features(self, df, target_colclose, look_back5): result df.copy() for i in range(1, look_back 1): result[flag_{i}] result[close].shift(i) result[target] (result[target_col].shift(-1) result[target_col]).astype(int) return result.dropna()模型训练后自动保存为joblib文件支持在线预测和特征重要性分析。2.5 数据处理流水线DataProcessor类提供完整的数据分析工具链数据清洗去重 前后填充 Z-score异常值剔除3σ原则指标计算日收益率、累计收益、波动率、MA5/10/20/60、MACD、布林带特征选择SelectKBest F检验显著性检验单因素方差分析ANOVA数据归一化StandardScaler / MinMaxScaler相关性分析Pearson相关系数时间重采样日K转周K/月K 三、数据库设计使用SQLite作为轻量级存储数据表设计如下--股票交易数据表核心CREATE TABLE trade_data (id INTEGER PRIMARY KEY AUTOINCREMENT,trade_date TEXT, ts_code TEXT,open REAL, high REAL, low REAL, close REAL,pct_chg REAL, vol REAL, amount REAL,year INTEGER, month INTEGER, day INTEGER);-- 财务数据表CREATE TABLE fin_data (id INTEGER PRIMARY KEY AUTOINCREMENT,stock_code TEXT, year INTEGER,revenue REAL, net_profit REAL, roe REAL);-- 股票基本信息CREATE TABLE stock_basic (id INTEGER PRIMARY KEY AUTOINCREMENT,ts_code TEXT, name TEXT, industry TEXT, market TEXT);-- 申万行业分类CREATE TABLE industry_info (id INTEGER PRIMARY KEY AUTOINCREMENT,stock_code TEXT, company_short TEXT, industry_level1 TEXT);-- 用户系统CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT,username TEXT UNIQUE NOT NULL,password_hash TEXT NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);数据规模- 交易数据478万条覆盖2023-2025年复权数据- 财务数据7年2018-2024年度财务指标- 股票基本信息全A股上市公司- 行业分类申万一级行业完整映射 4、前端技术实现4.1 技术选型框架Vue 3 ViteUI组件库Element Plus图表库EChartsvue-echarts封装状态管理Pinia路由Vue RouterHTTP请求Axios4.2 核心页面1. 数据看板页市场概览 涨跌榜 行业热力图2. 智能对话*聊天式交互 快捷功能标签 图表自动渲染3. 选股回测页条件筛选器 回测结果可视化4. 风险分析页风险指标仪表盘 持仓分析5. 数据管理页文件上传 数据表预览 数据导入导出### 4.3 智能对话的图表自动渲染前端收到后端返回的chart_dataECharts option格式后直接动态渲染// 自动检测并渲染图表 if (response.data response.data.chart_data) { this.chartOption response.data.chart_data this.showChart true实现了问一句话自动出图的交互效果。五、关键技术难点与解决方案难点1自然语言参数提取的准确性问题用户输入五花八门如帮我看看贵州茅台最近怎么样、ROE大于15的银行股有哪些。方案- 股票代码正则\d{6}精确匹配- 股票名称中文2-6字 排除词表过滤分析、查看、风险等常用词- 条件参数针对ROE/PE/PB/净利润分别设计正则模式如ROE\s*[大于超过]\s*(\d)- 行业匹配从预定义行业关键词表中遍历匹配难点2大模型回答的数据真实性问题直接让大模型回答金融问题容易编造数据。方案采用**检索-生成**两阶段架构1. 先用规则引擎从数据库查出真实数据2. 再把数据作为上下文prompt喂给大模型3. 要求大模型只能基于提供的数据作答难点3多格式数据上传与导入问题用户可能上传CSV、Excel、JSON等不同格式字段名也不统一。方案DataLoader封装统一加载接口自动识别格式staticmethod def load(file_path, formatNone): if format is None: ext os.path.splitext(file_path)[1].lower() format ext.lstrip(.) if format in [csv]: return pd.read_csv(file_path) elif format in [xlsx, xls]: return pd.read_excel(file_path) elif format json: return pd.read_json(file_path) # ... 支持parquet、feather、sqlite等难点4SQLite多线程安全问题FastAPI异步环境下SQLite连接容易报错。方案创建连接时设置check_same_threadFalse所有写操作通过单例串行化处理。 六、项目目录结构project/├── backend/ # 后端服务│ ├── app.py # FastAPI主入口│ ├── config.py # 配置文件│ ├── database.py # 数据库操作│ ├── requirements.txt # Python依赖│ ├── user_behavior.json # 意图配置文件│ ├── modules/ # 核心模块│ │ ├── intent_engine.py # 意图识别引擎│ │ ├── function_caller.py # 函数调用调度器│ │ ├── ai_service.py # AI服务 RAG系统│ │ ├── data_processing.py # 数据处理流水线│ │ ├── model_building.py # 机器学习建模│ │ ├── data_loader.py # 多格式数据加载│ │ └── knowledge_base.py # 向量知识库│ ├── routers/ # API路由│ │ ├── auth.py # 用户认证│ │ ├── chat.py # 智能对话│ │ ├── market.py # 市场数据│ │ ├── stock.py # 个股数据│ │ ├── industry.py # 行业数据│ │ ├── picker.py # 选股│ │ ├── backtest.py # 回测│ │ ├── risk.py # 风险评估│ │ ├── data.py # 数据查询│ │ └── data_upload.py # 数据上传│ └── 数据/ # 数据文件目录│├── frontend/ # 前端项目│ ├── src/│ ├── package.json│ └── vite.config.js│└── data/ # 数据目录├── raw/└── processed/ 七、快速启动后端启动bashcd backendpip install -r requirements.txtuvicorn app:app --reload --port 8000前端启动bashcd frontendnpm installnpm run dev启动后访问 http://localhost:5173 即可使用。 八、效果展示一整体布局系统采用创新的对话主界面悬浮工具抽屉布局。左侧为聊天侧边栏占据主要屏幕空间是用户与系统交互的核心区域右下角设置悬浮按钮点击后从右侧滑出工具抽屉包含数据可视化、数据上传、数据预览三个标签页。这种布局设计保证了对话的沉浸感同时将辅助工具收纳在抽屉中需要时随时呼出不干扰主交互流程。整体界面简洁高效符合对话式产品的使用习惯。二登录页面登录页面采用居中卡片式设计包含用户名、密码输入框与登录、注册切换标签页。页面背景采用简洁的渐变设计突出登录表单主体。表单校验采用Element Plus的表单验证机制对输入格式进行实时校验。登录成功后JWT令牌存储在Pinia状态管理与localStorage中自动跳转到系统聊天主页。密码采用bcrypt哈希存储确保用户账号安全。三AI对话主页面智能对话页面是系统的核心交互入口采用类ChatGPT的聊天式交互设计。左侧为对话历史区域右侧为主聊天区。用户可以用自然语言描述分析需求系统通过意图识别引擎自动解析用户意图调用对应的数据计算函数并以自然语言回复结果。支持基础模式仅意图识别函数调用与AI增强模式大模型专业解读两种对话模式切换。对话中涉及的数据分析结果会自动同步到右侧可视化抽屉中展示图表。四数据可视化抽屉数据可视化抽屉从右侧滑出采用标签页设计分为三个功能区。数据可视化标签页展示分析结果图表基于ECharts实现支持折线图、柱状图、K线图等多种图表类型支持缩放、悬停查看详情等交互操作。当用户通过对话触发数据分析时图表数据自动更新并展示实现对话提问→数据计算→图表展示的流畅体验。用户也可以手动打开抽屉查看历史分析结果数据上传功能位于工具抽屉的第二个标签页支持拖拽上传与点击上传两种方式。支持CSV、Excel.xlsx/.xls、JSON、Parquet、Feather等多种数据格式单文件限制100MB。上传前显示文件列表与基本信息上传后系统自动解析文件结构并导入数据库。已上传文件列表展示文件名、行数、列数等信息支持预览查看与删除操作方便用户管理自有数据。六数据预览模块数据预览功能位于工具抽屉的第三个标签页用户可通过下拉选择器选择数据库中的任意数据表系统以分页表格形式展示数据内容。表格支持列宽自适应、内容悬浮提示等功能方便用户快速浏览数据。这一功能帮助用户确认数据质量、检查字段完整性为后续的数据分析做好准备。七用户偏好设置页面用户偏好设置页面提供个性化配置功能包括主题切换亮色/暗色、默认聊天模式基础/AI增强、偏好行业设置、默认股票设置、图表类型偏好等。用户设置保存在数据库中下次登录自动加载打造个性化的使用体验。系统还提供独立的数据预览页面与偏好设置页面入口方便用户集中管理。智能对话示例 **用户**分析股票000001 **系统** - 股票代码000001.SZ 平安银行 - 最新价格12.35元 - 5日均线12.2820日均线12.15 - 年化波动率18.56% - 技术面短期均线上穿长期均线呈多头排列 **AI解读平安银行近期走势偏强均线系统呈现多头排列态势短期动能充足。波动率处于行业中等水平风险可控。建议关注成交量配合情况若放量突破前高可考虑加仓……智能选股示例 用户筛选ROE大于15且市盈率小于20的股票 系统共筛选出 23 只符合条件的股票TOP5 1. 招商银行 - ROE: 16.8%, PE: 8.5 2. 宁波银行 - ROE: 17.2%, PE: 9.1 3. ... 九、项目亮点与创新点1. 意图识别函数调用的轻量Agent架构不依赖大模型Function Call也能实现工具调用成本低、速度快2. 数据AI双引擎规则保证数据准确大模型负责自然语言解读兼顾准确性与体验3. RAG知识库增强FAISS向量检索 sentence-transformers编码金融知识问答更专业4. 7种机器学习模型集成开箱即用的量化建模能力支持特征重要性分析5. 完整的数据工程流水线清洗、指标计算、特征选择、显著性检验一站式6. 多格式数据导入支持CSV/Excel/JSON/Parquet等7种格式7. **前后端分离架构**FastAPI Vue3接口清晰易于扩展 十、总结与展望这个项目作为数据分析实训项目完整覆盖了**数据采集→数据清洗→特征工程→建模分析→可视化展示→产品化交付**的全链路。后续可优化方向接入真实行情API实现数据实时更新并引入LSTM/Transformer等深度学习模型提升预测精度增加更多量化策略因子选股、套利策略等优化意图识别为基于Embedding的语义匹配和接入更多数据源新闻、舆情、宏观数据同时部署上线支持多用户并发访问十一、视频展示智能问数--金融数据挖掘平台视频-1