190 lines
5.5 KiB
Markdown
190 lines
5.5 KiB
Markdown
# 药店销售预测系统 - LLM编程快速参考
|
||
|
||
## 🎯 项目概述
|
||
**技术栈**: Python (Flask) + Vue3 + SQLite + PyTorch + ECharts
|
||
**用途**: 基于深度学习的药品销售时序预测系统
|
||
**环境**: Windows + PowerShell + UV包管理器
|
||
|
||
## 🚀 快速启动
|
||
```powershell
|
||
# 后端启动
|
||
uv run .\server\api.py
|
||
|
||
# 前端启动
|
||
cd UI; npm run dev
|
||
```
|
||
|
||
## 📁 核心目录结构
|
||
```
|
||
药店销售预测系统/
|
||
├── server/ # 🐍 Python后端服务
|
||
│ ├── api.py # 主API入口 (2900+ 行)
|
||
│ ├── models/ # 🧠 深度学习模型
|
||
│ │ ├── mlstm/ # mLSTM模型
|
||
│ │ ├── transformer/ # Transformer模型
|
||
│ │ ├── kan/ # KAN模型
|
||
│ │ ├── kan_optimized/ # 优化KAN模型
|
||
│ │ └── tcn/ # TCN模型
|
||
│ ├── trainers/ # 🏋️ 模型训练器
|
||
│ ├── predictors/ # 🔮 模型预测器
|
||
│ ├── predictions/ # 📊 预测结果存储
|
||
│ └── static/ # 📁 静态文件
|
||
├── UI/ # 🖥️ Vue3前端
|
||
│ └── src/views/ # 📄 页面组件
|
||
│ ├── DataView.vue # 数据管理
|
||
│ ├── TrainingView.vue # 模型训练
|
||
│ ├── PredictionView.vue # 预测分析
|
||
│ ├── HistoryView.vue # 历史查看
|
||
│ └── ManagementView.vue # 模型管理
|
||
└── prediction_history.db # 🗄️ SQLite数据库
|
||
```
|
||
|
||
## 🔌 核心API接口
|
||
|
||
### 数据管理
|
||
- `GET /api/products` - 获取产品列表
|
||
- `GET /api/products/{id}/sales` - 获取销售数据
|
||
- `POST /api/data/upload` - 上传Excel数据
|
||
|
||
### 模型训练
|
||
- `POST /api/training` - 启动训练任务
|
||
- `GET /api/training/{task_id}` - 查询训练状态
|
||
|
||
### 预测分析
|
||
- `POST /api/prediction` - 执行预测
|
||
- `GET /api/prediction/history` - 获取历史记录
|
||
- `GET /api/prediction/history/{id}` - 获取预测详情
|
||
|
||
### 模型管理
|
||
- `GET /api/models` - 获取模型列表
|
||
- `DELETE /api/models/{id}` - 删除模型
|
||
|
||
## 🧠 支持的ML模型类型
|
||
1. **mLSTM** - 多层LSTM,适合长期预测
|
||
2. **Transformer** - 注意力机制,捕捉复杂模式
|
||
3. **KAN** - Kolmogorov-Arnold网络,函数拟合
|
||
4. **Optimized KAN** - 优化版KAN,提升效率
|
||
5. **TCN** - 时间卷积网络,并行训练
|
||
|
||
## 📊 数据流程
|
||
1. **数据上传** → Excel文件 → 数据预处理
|
||
2. **模型训练** → 选择模型 → 异步训练 → 保存模型
|
||
3. **预测分析** → 选择产品+模型 → 生成预测 → 保存结果
|
||
4. **结果查看** → 历史记录 → 详情展示 → 数据导出
|
||
|
||
## 🗄️ 数据库设计
|
||
```sql
|
||
-- prediction_history 表
|
||
CREATE TABLE prediction_history (
|
||
id INTEGER PRIMARY KEY,
|
||
product_id TEXT,
|
||
product_name TEXT,
|
||
model_type TEXT,
|
||
model_id TEXT,
|
||
start_date DATE,
|
||
future_days INTEGER,
|
||
created_at TIMESTAMP,
|
||
file_path TEXT
|
||
);
|
||
```
|
||
|
||
## 📝 API响应格式
|
||
```json
|
||
{
|
||
"status": "success|error",
|
||
"data": {},
|
||
"message": "操作说明",
|
||
"meta": {},
|
||
"analysis": {},
|
||
"chart_data": {}
|
||
}
|
||
```
|
||
|
||
## 🎨 前端组件架构
|
||
- **DataView.vue** - 数据管理和上传
|
||
- **TrainingView.vue** - 模型训练控制台
|
||
- **PredictionView.vue** - 预测分析主界面
|
||
- **HistoryView.vue** - 历史预测详情查看
|
||
- **ManagementView.vue** - 模型管理和性能监控
|
||
|
||
## 🔧 开发规范
|
||
|
||
### Python代码风格
|
||
- 使用 `snake_case` 命名
|
||
- 类型注解: `def predict(data: pd.DataFrame) -> Dict[str, Any]:`
|
||
- 错误处理: `try-except` 包装API调用
|
||
|
||
### JavaScript代码风格
|
||
- 使用 `camelCase` 命名
|
||
- Vue3 Composition API: `ref()`, `reactive()`
|
||
- Axios异步调用: `async/await`
|
||
|
||
### 文件命名规范
|
||
- Python文件: `model_trainer.py`
|
||
- Vue组件: `PredictionView.vue`
|
||
- 配置文件: `config.json`
|
||
|
||
## ⚠️ 常见问题解决
|
||
|
||
### 训练相关
|
||
```python
|
||
# 内存不足 - 调整batch_size
|
||
BATCH_SIZE = 16 # 降低批次大小
|
||
```
|
||
|
||
### 预测精度
|
||
```python
|
||
# 数据预处理 - 标准化
|
||
from sklearn.preprocessing import StandardScaler
|
||
scaler = StandardScaler()
|
||
```
|
||
|
||
### 前端错误处理
|
||
```javascript
|
||
// 统一错误处理
|
||
const handleError = (error) => {
|
||
ElMessage.error(error.response?.data?.message || '操作失败');
|
||
};
|
||
```
|
||
|
||
## 🚨 重要注意事项
|
||
1. **PowerShell语法**: 使用 `;` 连接命令,避免 `&&`
|
||
2. **路径分隔符**: Windows使用 `\` 或 `/`
|
||
3. **模型文件**: 训练后自动保存到 `saved_models/`
|
||
4. **预测结果**: JSON格式存储在 `predictions/`
|
||
5. **数据库备份**: 定期备份 `prediction_history.db`
|
||
|
||
## 🔄 开发工作流
|
||
1. **修改后端** → 重启 `uv run server/api.py`
|
||
2. **修改前端** → 热重载自动更新
|
||
3. **新增模型** → 添加trainer + predictor + 更新api.py
|
||
4. **数据库变更** → 手动SQL更新 + 代码同步
|
||
|
||
## 📦 核心依赖版本
|
||
```python
|
||
# requirements.txt 核心依赖
|
||
flask==3.1.1
|
||
torch==2.7.1+cu128
|
||
pandas==2.3.0
|
||
scikit-learn==1.7.0
|
||
flask-cors==6.0.0
|
||
```
|
||
|
||
```javascript
|
||
// package.json 核心依赖
|
||
"vue": "^3.x",
|
||
"element-plus": "^2.x",
|
||
"echarts": "^5.x",
|
||
"axios": "^1.x"
|
||
```
|
||
|
||
## 🎯 编程提示
|
||
- **添加新API**: 在`api.py`添加路由 + Swagger文档
|
||
- **新增页面**: 在`views/`创建Vue组件 + 路由配置
|
||
- **数据库操作**: 使用SQLite3原生查询
|
||
- **文件存储**: JSON格式,按模型类型分目录
|
||
- **错误处理**: 前后端统一错误格式
|
||
- **图表展示**: 使用ECharts响应式图表
|
||
|
||
---
|
||
*📝 此文档为LLM编程提供核心上下文,包含项目的关键信息和开发规范* |