开发日志文档跟新 #1

Merged
yuanfeiliao merged 1 commits from lyf-dev-req0001 into lyf-dev 2025-07-17 18:14:43 +08:00
2 changed files with 54 additions and 1 deletions

View File

@ -198,3 +198,56 @@
**结果**:
通过这次系统性的修复,我们确保了所有训练器在保存模型时,都会将完整的、可用于重新实例化模型的配置信息写入检查点文件。这从根本上解决了所有模型算法的预测失败问题,使得整个系统在处理不同算法时具有了通用性和健壮性。
---
## 2025-07-17系统性链路疏通与规范化
**开发者**: lyf
### 15:00 - 创建技术文档与上手指南
- **任务**: 为了便于新成员理解和未来维护,创建了两份核心技术文档。
- **产出**:
1. **`系统调用逻辑与核心代码分析.md`**: 一份深入代码细节的端到端调用链路分析文档,详细描述了从前端交互到后端处理,再到模型训练和预测的完整流程。
2. **`项目快速上手指南.md`**: 一份面向新成员特别是Java背景的高层次指南通过技术栈类比、架构分层图和清晰的开发流程帮助新成员快速建立对项目的宏观理解。
### 16:00 - 修复 `mLSTM` 模型加载链路
- **问题**: `mLSTM` 模型在预测时因参数名不一致而加载失败。
- **分析**:
- 第一次失败: 加载器需要 `num_layers`,但训练器保存的是 `mlstm_layers`
- 第二次失败: 加载器需要 `dropout`,但训练器保存的是 `dropout_rate`
- **修复**: 遵循“保存方决定命名”的原则,修改了 `server/predictors/model_predictor.py`,将加载时使用的参数名统一为 `mlstm_layers``dropout_rate`,与训练器保持一致。
### 16:45 - 修复 `mLSTM` 模型算法缺陷
- **问题**: `mLSTM` 模型修复加载问题后,预测结果为一条无效的直线。
- **根本原因**: `server/models/mlstm_model.py` 中的模型架构存在设计缺陷。其解码器逻辑错误地将输入序列的最后一个时间步复制多份作为预测,导致模型无法学习时间序列的变化。
- **修复**: 重构了 `MLSTMTransformer` 类的 `forward` 方法,移除了有问题的解码器逻辑,改为直接使用编码器最终的隐藏状态通过一个线性层进行预测,从根本上修正了算法的实现。
### 17:00 - 修复 `TCN` 模型加载链路
- **问题**: `TCN` 模型在预测加载时存在硬编码参数,是一个潜在的崩溃点。
- **分析**: `server/predictors/model_predictor.py` 在创建 `TCNForecaster` 实例时,硬编码了 `kernel_size=3`,而没有从模型配置中读取。
- **修复**: 修改了 `model_predictor.py`,使其从 `config['kernel_size']` 中动态读取该参数,确保了配置的完整性和一致性。
### 17:15 - 修复 `KAN` 模型版本发现问题
- **问题**: `KAN``优化版KAN` 训练成功后,在预测页面无法找到任何模型版本。
- **根本原因**: **保存**和**搜索**逻辑不匹配。`kan_trainer.py` 使用 `model_manager.py``..._product_...` 格式保存模型,而 `server/core/config.py` 中的 `get_model_versions` 函数却只按 `..._epoch_...` 的格式进行搜索。
- **修复**: 扩展了 `config.py` 中的 `get_model_versions` 函数,使其能够兼容并搜索多种命名格式,包括 `KAN` 模型使用的 `..._product_...` 格式。
### 17:25 - 修复 `KAN` 模型文件路径生成问题
- **问题**: 修复版本发现问题后,点击预测依然失败,提示“未找到模型文件”。
- **根本原因**: 只修复了**版本发现**逻辑,但未同步修复**文件路径生成**逻辑。`config.py` 中的 `get_model_file_path` 函数在为 `KAN` 模型生成路径时,依然错误地使用了 `_epoch_` 格式。
- **修复**: 修改了 `get_model_file_path` 函数,为 `kan``optimized_kan` 模型增加了特殊处理,确保在生成其文件路径时使用正确的 `_product_` 命名格式。
### 17:40 - 升级 `KAN` 训练器的版本管理功能
- **问题**: `KAN` 模型只有一个静态的 `'v1'` 版本,与其他模型(有 `best`, `final_epoch_...` 等版本)不一致。
- **根本原因**: `kan_trainer.py` 的实现逻辑过于简单,缺少在训练过程中动态评估并保存多个版本的功能,仅在最后硬编码保存为 `'v1'`
- **修复 (功能升级)**: 重构了 `server/trainers/kan_trainer.py`,为其增加了与其他训练器完全一致的动态版本管理功能。现在它可以在训练时自动追踪并保存性能最佳的 `best` 版本,并在训练结束后保存 `final_epoch_...` 版本。
### 17:58 - 最终结论
- **状态**: **所有已知问题已修复**
- **成果**:
1. 所有模型的 **“数据 -> 训练 -> 保存 -> 加载 -> 预测 -> 可视化”** 执行链路已全面打通和验证。
2. 统一并修复了所有模型在配置持久化和加载过程中的参数不一致问题。
3. 将所有模型的版本管理逻辑和工程实现标准完全对齐。
4. 创建并完善了核心技术文档,固化了开发规范。
- **项目状态**: 系统现在处于一个健壮、一致且可扩展的稳定状态。

View File

@ -1920,7 +1920,7 @@ def get_prediction_history():
product_id = request.args.get('product_id')
model_type = request.args.get('model_type')
page = int(request.args.get('page', 1))
page_size = int(request.args.get('page_size', 10))
page_size = int(request.args.get('page_size', 10))
# 计算分页偏移量
offset = (page - 1) * page_size