8.6 KiB
8.6 KiB
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
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