Browse Source

修复bug

lxylxy123321 2 tuần trước cách đây
mục cha
commit
22beca4fe1
2 tập tin đã thay đổi với 126 bổ sung1 xóa
  1. 120 0
      CLAUDE.md
  2. 6 1
      backend/app/schemas/common.py

+ 120 - 0
CLAUDE.md

@@ -0,0 +1,120 @@
+# CLAUDE.md
+
+This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
+
+## 项目概览
+
+基于 PEFT 的前后端分离微调平台,支持文本(LLaMA/Qwen)、视觉(ViT/CLIP)、多模态(LLaVA/Qwen-VL)三类模型,完整 MLOps 流水线。
+
+## 常用命令
+
+### 后端
+
+```bash
+cd backend
+pip install -r requirements.txt
+uvicorn main:app --host 0.0.0.0 --port 8000 --reload
+```
+
+API 文档:`http://192.168.91.253:8000/docs`
+
+### 前端
+
+```bash
+cd frontend
+npm install
+npm run dev          # 开发
+npm run build        # 构建
+npm run preview      # 预览构建产物
+```
+
+## 架构
+
+### 三层环境变量
+
+| 文件 | 归属 | 路径 |
+|------|------|------|
+| `.env` | 全局共享 | HF Token、GPU、ModelScope |
+| `backend/.env` | 后端专属 | HOST/PORT/CORS、数据库、训练参数 |
+| `frontend/.env` | 前端专属 | VITE_API_BASE_URL、VITE_WS_BASE_URL |
+
+`backend/app/config.py` 中的 `Settings` 类通过 `pydantic-settings` 加载 `backend/.env`。
+
+### 后端分层
+
+```
+main.py → FastAPI 入口(挂载路由 + CORS + 健康检查)
+├── api/        REST 路由层(薄,委托给 services)
+│   ├── models.py       GET /api/v1/models, POST /download
+│   ├── datasets.py     上传/预览/验证/列表/删除
+│   ├── training.py     训练任务 CRUD + 取消 + 日志流
+│   ├── evaluation.py   评估运行 + 结果查询
+│   └── deployment.py   adapter 合并 + 导出
+├── core/       基础设施
+│   ├── db.py           SQLAlchemy async + aiosqlite
+│   ├── job_queue.py    训练任务状态模型 + 状态机
+│   ├── websocket.py    WebSocket 广播(进度/错误/心跳)
+│   └── logging.py      结构化日志
+├── services/   业务逻辑层
+│   ├── model_service.py     模型下载/缓存
+│   ├── dataset_service.py   上传/格式检测
+│   ├── training_service.py  任务编排
+│   ├── eval_service.py      评估
+│   └── deploy_service.py    adapter 导出
+├── engines/    按模型类型的训练引擎(BaseEngine 抽象接口)
+│   ├── base.py             load_model / get_peft_config / preprocess_dataset / train
+│   ├── text_engine.py      LLaMA/Qwen
+│   ├── vision_engine.py    ViT/CLIP
+│   └── multimodal_engine.py LLaVA/Qwen-VL
+├── peft/       PEFT 配置工厂(LoRA/QLoRA/IA3/AdaLoRA/PrefixTuning)
+├── schemas/    Pydantic 请求/响应模型
+└── preprocessors/ 数据预处理(待实现)
+```
+
+### 前端结构
+
+```
+src/
+├── api/
+│   ├── client.ts      Axios 实例 + 拦截器
+│   └── websocket.ts   WebSocket 管理器 + 自动重连
+├── stores/
+│   └── trainingStore.ts  Zustand 训练任务状态
+├── components/layout/Layout.tsx  侧边栏导航 + 内容区
+├── pages/            Dashboard / Models / Datasets / Training / Evaluation / Deployment
+└── App.tsx           React Router 路由定义
+```
+
+### 关键数据流
+
+1. 前端通过 `/api/v1/training/jobs` POST 创建训练任务
+2. 后端 `training_service` 创建任务记录,加入 job_queue
+3. 训练引擎从 `BaseEngine` 派生(text/vision/multimodal)执行训练
+4. `app/core/websocket.py` 通过 `/ws/training/{job_id}` 实时推送进度到前端
+5. 前端 `wsManager.subscribe()` 接收消息,更新 `trainingStore`
+
+### WebSocket 消息类型
+
+| type | 说明 | 关键字段 |
+|------|------|----------|
+| progress | 训练进度 | epoch, step, total_steps, loss, learning_rate |
+| epoch_done | epoch 完成 | epoch, eval_loss, eval_accuracy |
+| completed | 训练完成 | total_time_seconds, adapter_path |
+| error | 错误 | message |
+| heartbeat | 心跳保活 | timestamp |
+
+### 任务状态机
+
+```
+pending → queued → preprocessing → training → completed
+                                                   ↓
+                            cancelled ←── any state ← evaluating → evaluation_done
+                            failed   ←── any state ←
+```
+
+### 部署信息
+
+- 服务器地址:`192.168.91.253`
+- 项目路径:`/root/Fine-tuning`
+- 数据目录:`/root/Fine-tuning/backend/data`
+- 数据库:`/root/Fine-tuning/backend/data/finetuning.db`

+ 6 - 1
backend/app/schemas/common.py

@@ -31,12 +31,17 @@ class PeftMethod(str, Enum):
     PREFIX_TUNING = "prefix_tuning"
 
 
+from typing import Generic, Optional, TypeVar
+
+T = TypeVar("T")
+
+
 class PaginationParams(BaseModel):
     page: int = Field(default=1, ge=1)
     page_size: int = Field(default=20, ge=1, le=100)
 
 
-class PaginatedResponse[T](BaseModel):
+class PaginatedResponse(BaseModel, Generic[T]):
     items: list[T]
     total: int
     page: int