|
28bae35783
|
# 扁平化模型数据处理规范 (最终版)
**版本**: 4.0 (最终版)
**核心思想**: 逻辑路径被转换为文件名的一部分,实现极致扁平化的文件存储。
---
## 一、 文件保存规则
### 1.1. 核心原则
所有元数据都被编码到文件名中。一个逻辑上的层级路径(例如 `product/P001_all/mlstm/v2`)应该被转换为一个用下划线连接的文件名前缀(`product_P001_all_mlstm_v2`)。
### 1.2. 文件存储位置
- **最终产物**: 所有最终模型、元数据文件、损失图等,统一存放在 `saved_models/` 根目录下。
- **过程文件**: 所有训练过程中的检查点文件,统一存放在 `saved_models/checkpoints/` 目录下。
### 1.3. 文件名生成规则
1. **构建逻辑路径**: 根据训练参数(模式、范围、类型、版本)确定逻辑路径。
- *示例*: `product/P001_all/mlstm/v2`
2. **生成文件名前缀**: 将逻辑路径中的所有 `/` 替换为 `_`。
- *示例*: `product_P001_all_mlstm_v2`
3. **拼接文件后缀**: 在前缀后加上描述文件类型的后缀。
- `_model.pth`
- `_metadata.json`
- `_loss_curve.png`
- `_checkpoint_best.pth`
- `_checkpoint_epoch_{N}.pth`
#### **完整示例:**
- **最终模型**: `saved_models/product_P001_all_mlstm_v2_model.pth`
- **元数据**: `saved_models/product_P001_all_mlstm_v2_metadata.json`
- **最佳检查点**: `saved_models/checkpoints/product_P001_all_mlstm_v2_checkpoint_best.pth`
- **Epoch 50 检查点**: `saved_models/checkpoints/product_P001_all_mlstm_v2_checkpoint_epoch_50.pth`
---
## 二、 文件读取规则
1. **确定模型元数据**: 根据需求确定要加载的模型的训练模式、范围、类型和版本。
2. **构建文件名前缀**: 按照与保存时相同的逻辑,将元数据拼接成文件名前缀(例如 `product_P001_all_mlstm_v2`)。
3. **定位文件**:
- 要加载最终模型,查找文件: `saved_models/{prefix}_model.pth`。
- 要加载最佳检查点,查找文件: `saved_models/checkpoints/{prefix}_checkpoint_best.pth`。
---
## 三、 数据库存储规则
数据库用于索引,应存储足以重构文件名前缀的关键元数据。
#### **`models` 表结构建议:**
| 字段名 | 类型 | 描述 | 示例 |
| :--- | :--- | :--- | :--- |
| `id` | INTEGER | 主键 | 1 |
| `filename_prefix` | TEXT | **完整文件名前缀,可作为唯一标识** | `product_P001_all_mlstm_v2` |
| `model_identifier`| TEXT | 用于版本控制的标识符 (不含版本) | `product_P001_all_mlstm` |
| `version` | INTEGER | 版本号 | `2` |
| `status` | TEXT | 模型状态 | `completed`, `training`, `failed` |
| `created_at` | TEXT | 创建时间 | `2025-07-21 02:29:00` |
| `metrics_summary`| TEXT | 关键性能指标的JSON字符串 | `{"rmse": 10.5, "r2": 0.89}` |
#### **保存逻辑:**
- 训练完成后,向表中插入一条记录。`filename_prefix` 字段是查找与该次训练相关的所有文件的关键。
---
## 四、 版本记录规则
版本管理依赖于根目录下的 `versions.json` 文件,以实现原子化、线程安全的版本号递增。
- **文件名**: `versions.json`
- **位置**: `saved_models/versions.json`
- **结构**: 一个JSON对象,`key` 是不包含版本号的标识符,`value` 是该标识符下最新的版本号(整数)。
- **Key**: `{prefix_core}_{model_type}` (例如: `product_P001_all_mlstm`)
- **Value**: `Integer`
#### **`versions.json` 示例:**
```json
{
"product_P001_all_mlstm": 2,
"store_S001_P002_transformer": 1
}
```
#### **版本管理流程:**
1. **获取新版本**: 开始训练前,构建 `key`。读取 `versions.json`,找到对应 `key` 的 `value`。新版本号为 `value + 1` (若key不存在,则为 `1`)。
2. **更新版本**: 训练成功后,将新的版本号写回到 `versions.json`。此过程**必须使用文件锁**以防止并发冲突。
调试完成药品预测和店铺预测
|
2025-07-21 16:39:52 +08:00 |
|
|
341d8d179c
|
--
**日期**: 2025-07-18
**主题**: 统一训练页面UI显示并修复后端数据传递
### 问题描述
1. 在“按店铺训练”和“全局模型训练”页面的任务列表中,模型版本号前缺少 'v' 前缀,与“按品训练”页面不一致。
2. 在“全局模型训练”页面的任务列表中,“聚合方式”一列始终为空,无法显示数据。
### 根本原因
1. **UI层面**: `UI/src/views/StoreTrainingView.vue` 和 `UI/src/views/training/GlobalTrainingView.vue` 在渲染版本号时,没有像 `ProductTrainingView.vue` 一样添加 'v' 前缀的模板。
2. **后端层面**: `server/utils/training_process_manager.py` 中的 `TrainingTask` 数据类缺少 `aggregation_method` 字段,导致从任务提交到数据返回的整个流程中,该信息都丢失了。
### 解决方案
1. **修复前端UI**:
* **文件**: `UI/src/views/StoreTrainingView.vue`, `UI/src/views/training/GlobalTrainingView.vue`
* **操作**: 修改了 `el-table-column` for `version`,为其添加了 `<template>`,使用 `<el-tag>v{{ row.version }}</el-tag>` 来渲染版本号,确保了显示格式的统一。
2. **修复后端数据流**:
* **文件**: `server/utils/training_process_manager.py`
* **操作**:
1. 在 `TrainingTask` 数据类中增加了 `aggregation_method: Optional[str] = None` 字段。
2. 修改 `submit_task` 方法,使其在创建 `TrainingTask` 对象时能接收并设置 `aggregation_method`。
3. 修改 `run_training_task` 方法,在调用 `predictor.train_model` 时,将 `task.aggregation_method` 传递下去。
### 最终结果
通过前后端的协同修复,现在所有训练页面的UI表现完全一致,并且全局训练的“聚合方式”能够被正确记录和显示。
|
2025-07-18 18:18:50 +08:00 |
|
|
9bd824c389
|
---
**日期**: 2025-07-15 14:05
**主题**: 仪表盘UI调整
### 描述
根据用户请求,将仪表盘上的“数据管理”卡片替换为“店铺管理”。
### 主要改动
* **文件**: `UI/src/views/DashboardView.vue`
* **修改**:
1. 在 `featureCards` 数组中,将原“数据管理”的对象修改为“店铺管理”。
2. 更新了卡片的 `title`, `description`, `icon` 和 `path`,使其指向店铺管理页面 (`/store-management`)。
3. 在脚本中导入了新的 `Shop` 图标。
### 结果
仪表盘现在直接提供到“店铺管理”页面的快捷入口,提高了操作效率,调整店铺管理的样式。
|
2025-07-15 19:18:25 +08:00 |
|
|
b1b697117b
|
**日期**: 2025-07-14
**主题**: UI导航栏重构
### 描述
根据用户请求,对左侧功能导航栏进行了调整。
### 主要改动
1. **删除“数据管理”**:
* 从 `UI/src/App.vue` 的导航菜单中移除了“数据管理”项。
* 从 `UI/src/router/index.js` 中删除了对应的 `/data` 路由。
* 删除了视图文件 `UI/src/views/DataView.vue`。
2. **提升“店铺管理”**:
* 将“店铺管理”菜单项在 `UI/src/App.vue` 中的位置提升,以填补原“数据管理”的位置,使其在导航中更加突出。
### 涉及文件
* `UI/src/App.vue`
* `UI/src/router/index.js`
* `UI/src/views/DataView.vue` (已删除)
**按药品模型预测**
---
**日期**: 2025-07-14
**主题**: 修复导航菜单高亮问题
### 描述
修复了首次进入或刷新页面时,左侧导航菜单项与当前路由不匹配导致不高亮的问题。
### 主要改动
* **文件**: `UI/src/App.vue`
* **修改**:
1. 引入 `useRoute` 和 `computed`。
2. 创建了一个计算属性 `activeMenu`,其值动态地等于当前路由的路径 (`route.path`)。
3. 将 `el-menu` 组件的 `:default-active` 属性绑定到 `activeMenu`。
### 结果
确保了导航菜单的高亮状态始终与当前页面的URL保持同步。
---
**日期**: 2025-07-15
**主题**: 修复硬编码文件路径问题,提高项目可移植性
### 问题描述
项目在从一台计算机迁移到另一台时,由于数据文件路径被硬编码在代码中,导致程序无法找到数据文件而运行失败。
### 根本原因
多个Python文件(`predictor.py`, `multi_store_data_utils.py`)中直接写入了相对路径 `'data/timeseries_training_data_sample_10s50p.parquet'` 作为默认值。这种方式在不同运行环境下(如从根目录运行 vs 从子目录运行)会产生路径解析错误。
### 解决方案:集中配置,统一管理
1. **修改 `server/core/config.py` (核心)**:
* 动态计算并定义了一个全局变量 `PROJECT_ROOT`,它始终指向项目的根目录。
* 基于 `PROJECT_ROOT`,使用 `os.path.join` 创建了一个跨平台的、绝对的默认数据路径 `DEFAULT_DATA_PATH` 和模型保存路径 `DEFAULT_MODEL_DIR`。
* 这确保了无论从哪个位置执行代码,路径总能被正确解析。
2. **修改 `server/utils/multi_store_data_utils.py`**:
* 从 `server/core/config` 导入 `DEFAULT_DATA_PATH`。
* 将所有数据加载函数的 `file_path` 参数的默认值从硬编码的字符串改为 `None`。
* 在函数内部,如果 `file_path` 为 `None`,则自动使用导入的 `DEFAULT_DATA_PATH`。
* 移除了原有的、复杂的、为了猜测正确路径而编写的冗余代码。
3. **修改 `server/core/predictor.py`**:
* 同样从 `server/core/config` 导入 `DEFAULT_DATA_PATH`。
* 在初始化 `PharmacyPredictor` 时,如果未提供数据路径,则使用导入的 `DEFAULT_DATA_PATH` 作为默认值。
### 最终结果
通过将数据源路径集中到唯一的配置文件中进行管理,彻底解决了因硬编码路径导致的可移植性问题。项目现在可以在任何环境下可靠地运行。
---
### 未来如何修改数据源(例如,连接到服务器数据库)
本次重构为将来更换数据源打下了坚实的基础。操作非常简单:
1. **定位配置文件**: 打开 `server/core/config.py` 文件。
2. **修改数据源定义**:
* **当前 (文件)**:
```python
DEFAULT_DATA_PATH = os.path.join(PROJECT_ROOT, 'data', 'timeseries_training_data_sample_10s50p.parquet')
```
* **未来 (数据库示例)**:
您可以将这行替换为数据库连接字符串,或者添加新的数据库配置变量。例如:
```python
# 注释掉或删除旧的文件路径配置
# DEFAULT_DATA_PATH = ...
# 新增数据库连接配置
DATABASE_URL = "postgresql://user:password@your_server_ip:5432/your_database_name"
```
3. **修改数据加载逻辑**:
* **定位数据加载函数**: 打开 `server/utils/multi_store_data_utils.py`。
* **修改 `load_multi_store_data` 函数**:
* 引入数据库连接库(如 `sqlalchemy` 或 `psycopg2`)。
* 修改函数逻辑,使其使用 `config.py` 中的 `DATABASE_URL` 来连接数据库,并执行SQL查询来获取数据,而不是读取文件。
* **示例**:
```python
from sqlalchemy import create_engine
from core.config import DATABASE_URL # 导入新的数据库配置
def load_multi_store_data(...):
# ...
engine = create_engine(DATABASE_URL)
query = "SELECT * FROM sales_data" # 根据需要构建查询
df = pd.read_sql(query, engine)
# ... 后续处理逻辑保持不变 ...
```
|
2025-07-15 10:37:33 +08:00 |
|
|
cfb50d0573
|
### 主要改动
1. **删除“数据管理”**:
* 从 `UI/src/App.vue` 的导航菜单中移除了“数据管理”项。
* 从 `UI/src/router/index.js` 中删除了对应的 `/data` 路由。
* 删除了视图文件 `UI/src/views/DataView.vue`。
2. **提升“店铺管理”**:
* 将“店铺管理”菜单项在 `UI/src/App.vue` 中的位置提升,以填补原“数据管理”的位置,使其在导航中更加突出。
### 涉及文件
* `UI/src/App.vue`
* `UI/src/router/index.js`
* `UI/src/views/DataView.vue` (已删除)
|
2025-07-14 20:00:05 +08:00 |
|
|
484f39e12f
|
完成模型训练调试,修改模型预测的导航栏
|
2025-07-14 19:27:06 +08:00 |
|
gdtiti
|
71a6975159
|
临时版本
|
2025-07-02 11:05:23 +08:00 |
|
gdtiti
|
441bbdcc56
|
v2.1.0: 建立LLM编程文档体系与API规范化 - 重大更新:建立完整的.codelf/文档体系,为LLM编程提供准确的知识库 - 创建详细的API参考文档,防止意外修改破坏API设计 - 规范化25+个API端点,包含6大分类和完整的请求/响应示例 - 新增功能:LLM编程文档体系、API保护文档、开发工具配置 - 问题修复:修复HistoryView.vue前端错误,改善数据访问安全性 - 架构改进:清理项目根目录,统一文档格式和API响应规范 - 技术价值:提升AI辅助开发效率,建立标准化开发流程,改善可维护性 - 此更新为未来的AI编程奠定坚实基础,确保系统架构稳定性
|
2025-06-18 06:39:41 +08:00 |
|
gdtiti
|
c0fe213b70
|
修复图表显示和数据处理问题
1. 修复前端图表日期排序问题:
- 改进 PredictionView.vue 和 HistoryView.vue 中的图表渲染逻辑
- 确保历史数据和预测数据按照正确的日期顺序显示
2. 修复后端API处理:
- 解决 optimized_kan 模型类型的路径映射问题
- 添加 JSON 序列化器处理 Pandas Timestamp 对象
- 改进预测数据与历史数据的衔接处理
3. 优化图表样式和用户体验
|
2025-06-15 00:01:57 +08:00 |
|
gdtiti
|
5d505b37af
|
修复图表显示和数据处理问题
1. 修复前端图表日期排序问题:
- 改进 PredictionView.vue 和 HistoryView.vue 中的图表渲染逻辑
- 确保历史数据和预测数据按照正确的日期顺序显示
2. 修复后端API处理:
- 解决 optimized_kan 模型类型的路径映射问题
- 添加 JSON 序列化器处理 Pandas Timestamp 对象
- 改进预测数据与历史数据的衔接处理
3. 优化图表样式和用户体验
|
2025-06-15 00:00:50 +08:00 |
|
gdtiti
|
7a52c67703
|
完善使用手册 修复一些bug
|
2025-06-14 05:00:17 +08:00 |
|
gdtiti
|
a51eccd689
|
正式 可以运行的 时序预测管理系统
|
2025-06-11 10:18:18 +08:00 |
|