# YG-Dataset 架构设计文档

## 一、项目概述

YG-Dataset 是一个**数据生成平台**，用于将各类文档（PDF、DOCX、Excel、CSV等）转换为可用于训练大语言模型的高质量数据集。

### 1.1 核心能力
- 多格式文档解析与处理
- 智能文本分割（多种算法）
- 基于 LLM 的问题自动生成
- 数据集管理与多格式导出
- 模型评估与盲测系统

### 1.2 技术架构
```
┌─────────────────────────────────────────────────────────────┐
│                        Vue 3 Frontend                       │
│  (Element Plus + Pinia + Vue Router)                        │
└─────────────────────────┬───────────────────────────────────┘
                          │ HTTP/WebSocket
┌─────────────────────────▼───────────────────────────────────┐
│                     FastAPI Backend                          │
│  (REST API + WebSocket)                                     │
├─────────────────────────────────────────────────────────────┤
│  Services Layer                                             │
│  ├── FileProcessor (PDF/DOCX/Excel/CSV解析)                │
│  ├── TextSplitter (6种分割算法)                             │
│  ├── LLMService (问题生成/评估)                             │
│  └── ExportService (多格式导出)                             │
├─────────────────────────────────────────────────────────────┤
│  Data Access Layer (SQLAlchemy 2.0)                         │
└─────────────────────────┬───────────────────────────────────┘
                          │
┌─────────────────────────▼───────────────────────────────────┐
│                   PostgreSQL + Redis                         │
│  (主数据库 + 缓存/任务队列)                                 │
└─────────────────────────────────────────────────────────────┘
```

---

## 二、系统架构

### 2.1 分层架构

```
┌────────────────────────────────────────────────────────┐
│                    Presentation Layer                   │
│  Vue 3 + Element Plus + Pinia + Vue Router             │
├────────────────────────────────────────────────────────┤
│                     API Layer                            │
│  FastAPI + Pydantic + CORS Middleware                  │
├────────────────────────────────────────────────────────┤
│                   Service Layer                          │
│  FileProcessor / TextSplitter / LLM / Export           │
├────────────────────────────────────────────────────────┤
│                  Repository Layer                        │
│  SQLAlchemy Models + Async Session                      │
├────────────────────────────────────────────────────────┤
│                   Infrastructure                         │
│  PostgreSQL / Redis / File System                      │
└────────────────────────────────────────────────────────┘
```

### 2.2 数据流架构

```
文件上传 → 文档解析 → 文本提取 → 分割处理 → 问题生成 → 数据集构建 → 导出
                                              ↓
                                        评估/盲测
```

---

## 三、模块设计

### 3.1 后端模块

| 模块 | 职责 | 关键类/函数 |
|------|------|-------------|
| `app/api/v1/` | REST API 路由 | Router 配置 |
| `app/models/` | SQLAlchemy ORM 模型 | Project, File, Chunk, Question 等 |
| `app/schemas/` | Pydantic 数据验证 | Request/Response 模型 |
| `app/services/` | 业务逻辑 | FileProcessor, TextSplitter, LLMWrapper |
| `app/core/` | 核心配置 | Config, Database, Security |

### 3.2 前端模块

| 目录 | 职责 |
|------|------|
| `views/` | 页面组件 (Home, Project, Playground, DataSquare) |
| `components/` | 可复用组件 |
| `stores/` | Pinia 状态管理 |
| `api/` | API 封装 |
| `router/` | 路由配置 |

---

## 四、API 设计

### 4.1 API 路由结构

```
/api/v1/
├── /projects/          # 项目管理
│   ├── GET /          # 列表
│   ├── POST /         # 创建
│   ├── GET /{id}      # 详情
│   └── DELETE /{id}   # 删除
├── /files/            # 文件处理
│   ├── POST /upload   # 上传
│   ├── POST /process  # 处理
│   └── GET /{id}      # 状态
├── /chunks/           # 文本分割
│   ├── POST /split    # 执行分割
│   └── GET /          # 列表
├── /questions/        # 问题管理
│   ├── POST /generate # 生成
│   └── GET /          # 列表
├── /datasets/         # 数据集
│   ├── GET /          # 列表
│   ├── POST /         # 创建
│   └── POST /export   # 导出
└── /eval/             # 评估系统
    ├── POST /generate # 生成评估题
    └── POST /run      # 运行评估
```

---

## 五、数据库设计

### 5.1 核心表

| 表名 | 说明 |
|------|------|
| `projects` | 项目表 |
| `files` | 文件表（上传的文件） |
| `chunks` | 文本块表（分割后的片段） |
| `tags` | 标签/领域树 |
| `questions` | 问题表 |
| `datasets` | 数据集表 |
| `eval_datasets` | 评估数据集表 |
| `model_configs` | 模型配置表 |
| `tasks` | 任务表 |

### 5.2 ER 关系

```
Project 1──∞ File
Project 1──∞ Chunk
Project 1──∞ Question
Project 1──∞ Dataset
File 1──∞ Chunk
Chunk 1──∞ Question
Chunk *──* Tag
Dataset *──* Question
```

---

## 六、部署架构

### 6.1 Docker Compose

```yaml
services:
  postgres:   # 主数据库
  redis:      # 缓存/队列
  backend:    # FastAPI 服务
  frontend:   # Vue 3 服务
```

### 6.2 目录结构

```
YG-Datasets/
├── backend/           # FastAPI 后端
│   ├── app/
│   │   ├── api/      # API 路由
│   │   ├── models/   # ORM 模型
│   │   ├── schemas/  # Pydantic 模型
│   │   ├── services/ # 业务逻辑
│   │   └── core/     # 核心配置
│   ├── alembic/      # 数据库迁移
│   └── requirements.txt
├── frontend/          # Vue 3 前端
│   ├── src/
│   │   ├── views/    # 页面
│   │   ├── components/
│   │   ├── stores/   # Pinia
│   │   └── api/
│   └── package.json
├── docker-compose.yml
└── README.md
```

---

## 七、技术选型理由

| 技术 | 选型理由 |
|------|----------|
| FastAPI | 高性能、异步支持、自动 API 文档 |
| SQLAlchemy 2.0 | 异步 ORM、类型安全 |
| PostgreSQL | 可靠的关系型数据库 |
| Redis | 缓存、任务队列 |
| Vue 3 | Composition API、更好的 TypeScript 支持 |
| Element Plus | 成熟的 Vue 3 UI 组件库 |
| Pinia | 轻量级、TypeScript 友好 |
| Docker Compose | 简化开发/部署 |

---

## 八、安全考虑

- CORS 配置（生产环境需限制域名）
- 文件上传大小限制
- API 请求验证
- 数据库连接池管理

---

*文档版本: v1.0*
*更新日期: 2026-03-17*
