# CVSA ML 基础设施重构项目
## 项目概述
本项目旨在重构现有的 ML 服务基础设施,从原始的 `ml/filter` 系统迁移到新的前后端分离架构。主要目标是为 ML 训练、实验管理和数据处理提供一个现代化的 Web UI 界面。
### 核心功能
- **数据管线管理**: 从 PostgreSQL 数据库获取和预处理训练数据
- **实验管理**: 训练参数配置、实验追踪和结果可视化
- **超参数调优**: 动态超参数配置和调整
- **数据标注界面**: 简单易用的数据标注和管理工具
- **模型训练**: 2分类视频分类模型训练
- **嵌入向量管理**: 支持多种嵌入模型和向量维度
## 架构设计
### 技术栈
- **前端**: React + TypeScript + Vite + Tailwind CSS + shadcn/ui
- **后端**: FastAPI + Python
- **数据库**: PostgreSQL + Drizzle ORM
- **向量数据库**: PostgreSQL pgvector
- **包管理**: Bun (TypeScript) + pip (Python)
### 分层架构
```
┌─────────────────┐ ┌──────────────┐ ┌──────────────────┐
│ Web UI │ │ FastAPI │ │ Database │
│ (React TS) │◄──►│ (Python) │◄──►│ (PostgreSQL) │
└─────────────────┘ └──────────────┘ └──────────────────┘
```
## 目录结构
### 前端项目 (`packages/ml_panel/`)
```
packages/ml_panel/
├── src/ # 前端应用
│ ├── App.tsx # 主应用组件
│ ├── main.tsx # 应用入口
│ ├── index.css # 全局样式
│ └── lib/
│ └── utils.ts # 前端工具函数
├── lib/ # 核心库文件
│ ├── types.ts # 共享类型定义
│ ├── ml-client.ts # ML API 客户端
│ ├── data-pipeline/ # 数据管线类型
│ │ └── types.ts
│ └── index.ts # 导出文件
├── package.json
├── vite.config.ts
└── tailwind.config.js
```
### 后端服务 (`ml_new/training/`)
```
ml_new/training/
├── main.py # FastAPI 主服务
├── requirements.txt # Python 依赖
└── ... # 其他服务文件
```
### 数据库 Schema
使用现有的 `packages/core/drizzle/main/schema.ts` 中的定义:
- `videoTypeLabelInInternal`: 用户标注数据
- `embeddingsInInternal`: 嵌入向量存储
- `bilibiliMetadata`: 视频元数据
## 已完成的工作
### 1. 核心类型定义
**文件**: `packages/ml_panel/lib/types.ts`
- 定义了核心数据结构
- `DatasetRecord`: 数据集记录
- `UserLabel`: 用户标注
- `EmbeddingModel`: 嵌入模型配置
- `TrainingConfig`: 训练配置
- `ExperimentResult`: 实验结果
- `InconsistentLabel`: 标注不一致数据
### 2. 数据管线类型
**文件**: `packages/ml_panel/lib/data-pipeline/types.ts`
- `VideoMetadata`: 视频元数据
- `VideoTypeLabel`: 标注数据
- `EmbeddingRecord`: 嵌入记录
- `DataPipelineConfig`: 管线配置
- `ProcessedDataset`: 处理后的数据集
### 3. ML 客户端
**文件**: `packages/ml_panel/lib/ml-client.ts`
- `MLClient` 类用于与 FastAPI 通信
- 超参数获取和更新
- 训练任务启动和状态监控
- 实验管理
- 嵌入生成接口
### 4. FastAPI 服务框架
**文件**: `ml_new/training/main.py`
- 基础的 FastAPI 应用配置
- CORS 中间件配置
- 内存存储的训练会话管理
- 基础的 API 端点定义
### 5. 项目配置
- **前端**: `packages/ml_panel/package.json` - React + Vite + TypeScript 配置
- **后端**: `ml_new/training/requirements.txt` - Python 依赖
- **主项目**: `packages/ml/package.json` - Monorepo 工作空间配置
## 核心功能实现状态
### 已完成
- [x] 基础项目结构搭建
- [x] 核心类型定义
- [x] ML API 客户端
- [x] FastAPI 服务框架
- [x] 前端项目配置
### 待实现
- [ ] 数据管线核心逻辑实现
- [ ] React UI 组件开发
- [ ] FastAPI 服务功能完善
- [ ] 数据库连接和数据获取逻辑
- [ ] 用户标注数据处理
- [ ] 嵌入向量管理
- [ ] 标注一致性检查
- [ ] 训练任务队列
- [ ] 实验追踪和可视化
- [ ] 超参数动态配置
- [ ] 完整的前后端集成测试
## 数据流程设计
### 1. 数据集创建流程 (高 RTT 优化)
```mermaid
graph TD
A[前端点击创建数据集] --> B[选定嵌入模型]
B --> C[从 TOML 配置载入模型参数]
C --> D[从数据库批量拉取原始文本]
D --> E[文本预处理]
E --> F[计算文本 hash 并去重]
F --> G[批量查询已有嵌入]
G --> H[区分需要生成的新文本]
H --> I[批量调用嵌入 API]
I --> J[批量写入 embeddings 表]
J --> K[拉取完整 embeddings 数据]
K --> L[合并标签数据]
L --> M[构建最终数据集
格式: embeddings, label]
```
### 2. 数据获取流程 (数据库优化)
```mermaid
graph TD
A[PostgreSQL 远程数据库
RTT: 100ms] --> B[videoTypeLabelInInternal]
A --> C[embeddingsInInternal]
A --> D[bilibiliMetadata]
B --> E[批量获取用户最后一次标注
避免循环查询]
C --> F[批量获取嵌入向量
一次性查询所有维度]
D --> G[批量获取视频元数据
IN 查询避免 N+1]
E --> H[标注一致性检查]
F --> I[向量数据处理]
G --> J[数据合并]
H --> K[数据集构建]
I --> K
J --> K
```
### 3. 训练流程
```mermaid
graph TD
A[前端配置] --> B[超参数设置]
B --> C[FastAPI 接收]
C --> D[数据管线处理]
D --> E[模型训练]
E --> F[实时状态更新]
F --> G[结果存储]
G --> H[前端展示]
```
## 技术要点
### 1. 高性能数据库设计 (RTT 优化)
- **批量操作**: 避免循环查询,使用 `IN` 语句和批量 `INSERT/UPDATE`
### 2. 嵌入向量管理
- **多模型支持**: `embeddingsInInternal` 支持不同维度的向量 (2048/1536/1024)
- **去重机制**: 使用文本 hash 去重,避免重复生成嵌入
- **批量处理**: 批量生成和存储嵌入向量
- **缓存策略**: 优先使用已存在的嵌入向量
### 3. 2分类模型架构
- 从原有的 3分类系统迁移到 2分类
- 输入: 预计算的嵌入向量 (而非原始文本)
- 支持多种嵌入模型切换
### 4. 数据一致性处理
- **用户标注**: `videoTypeLabelInInternal` 存储多用户标注
- **最后标注**: 获取每个用户的最后一次标注作为有效数据
- **一致性检查**: 识别不同用户标注不一致的视频,标记为需要人工复核
## 后续开发计划
### Phase 1: 核心功能 (优先)
1. **数据管线实现**
- 标注数据获取和一致性检查
- 嵌入向量生成和存储
- 数据集构建逻辑
2. **FastAPI 服务完善**
- 构建新的模型架构(输入嵌入向量,直接二分类头)
- 迁移现有 ml/filter 训练逻辑
- 实现超参数动态暴露
- 集成 OpenAI 兼容嵌入 API
- 训练任务队列管理
### Phase 2: 用户界面
1. **数据集创建界面**
- 嵌入模型选择
- 数据预览和筛选
- 处理进度显示
2. **训练参数配置界面**
- 超参数动态渲染
- 参数验证和约束
3. **实验管理和追踪**
- 实验历史和比较
- 训练状态实时监控
- 结果可视化
### Phase 3: 高级功能
1. **超参数自动调优**
2. **模型版本管理**
3. **批量训练支持**
4. **性能优化**
## 注意事项
1. **数据库性能**: 远程数据库 RTT 高,避免 N+1 查询,使用批量操作
2. **标注一致性**: 实现自动的标注不一致检测
3. **嵌入模型支持**: 为未来扩展多种嵌入模型预留接口