Files
YG-Datasets/easy-dataset-main-架构分析报告.md

307 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Easy Dataset 项目架构分析报告
## 一、项目概述
**Easy Dataset** 是一个功能强大的大模型微调数据集创建工具,由 ConardLi 开发维护。该应用提供直观的界面和强大的内置文档解析、智能分割、数据清洗和增强功能可将各种格式的领域文档转换为高质量的结构化数据集适用于模型微调、RAG检索增强生成和模型性能评估等场景。
**项目地址**: https://github.com/ConardLi/easy-dataset
**当前版本**: 1.7.2
**许可证**: AGPL 3.0
---
## 二、技术栈分析
### 2.1 核心框架
| 类别 | 技术选型 | 说明 |
|------|----------|------|
| 前端框架 | Next.js 14 | App Router 架构 |
| UI 框架 | Material-UI (MUI) | v5.16.14 |
| 状态管理 | Jotai | 轻量级原子化状态管理 |
| 数据库 | Prisma + SQLite | 使用 Prisma ORM |
| 开发语言 | JavaScript | 全栈 JavaScript |
### 2.2 关键依赖
| 类别 | 库名称 | 用途 |
|------|--------|------|
| AI/ML | ai SDK, langchain | 大模型集成 |
| LLM 提供商 | @ai-sdk/openai, ollama-ai-provider, zhipu-ai-provider | 多模型支持 |
| 国际化 | i18next, react-i18next | 多语言支持 |
| 文档处理 | @opendocsg/pdf2md, mammoth, pdf2md-js | PDF/DOCX 解析 |
| 桌面应用 | Electron | 跨平台桌面客户端 |
| 数据处理 | xlsx, adm-zip, jszip | 文件处理 |
### 2.3 开发工具
- **包管理器**: pnpm
- **代码规范**: ESLint + Prettier
- **Git Hooks**: Husky + lint-staged
- **构建工具**: electron-builder (桌面应用打包)
---
## 三、目录结构
```
easy-dataset-main/
├── app/ # Next.js 应用目录 (App Router)
│ ├── api/ # API 路由 (150+ 个路由)
│ │ ├── check-update/ # 版本检查
│ │ ├── llm/ # LLM 模型相关 API
│ │ │ ├── fetch-models/ # 获取模型列表
│ │ │ ├── model/ # 模型配置
│ │ │ ├── ollama/ # Ollama 本地模型
│ │ │ └── providers/ # LLM 提供商
│ │ ├── monitoring/ # 监控 API
│ │ │ ├── logs/ # 日志
│ │ │ ├── stats/ # 统计
│ │ │ └── summary/ # 摘要
│ │ └── projects/ # 项目相关 API
│ │ └── [projectId]/ # 动态项目路由
│ │ ├── chunks/ # 文本分块
│ │ ├── datasets/ # 数据集
│ │ ├── eval-datasets/ # 评估数据集
│ │ ├── eval-tasks/ # 评估任务
│ │ ├── files/ # 文件管理
│ │ ├── images/ # 图片处理
│ │ ├── questions/ # 问题生成
│ │ ├── distill/ # 数据蒸馏
│ │ ├── blind-test-tasks/ # 盲测任务
│ │ ├── playground/ # 模型测试场
│ │ └── ...
│ └── (页面路由)
├── components/ # React 组件 (100+ 组件)
│ ├── common/ # 通用组件
│ ├── home/ # 首页组件
│ ├── Navbar/ # 导航栏
│ ├── dataset-square/ # 数据集广场
│ ├── datasets/ # 数据集组件
│ ├── distill/ # 数据蒸馏组件
│ ├── export/ # 导出组件
│ ├── questions/ # 问题组件
│ ├── text-split/ # 文本分割组件
│ ├── tasks/ # 任务管理组件
│ ├── playground/ # 测试场组件
│ └── settings/ # 设置组件
├── prisma/ # 数据库 schema
│ ├── schema.prisma # Prisma 数据模型
│ ├── sql.json # SQL 模板
│ └── generate-template.js # 模板生成
├── locales/ # 国际化资源
│ ├── en/ # 英文
│ ├── zh-CN/ # 简体中文
│ └── pt-BR/ # 葡萄牙语
├── electron/ # Electron 桌面应用
│ ├── main.js # 主进程
│ └── preload.js # 预加载脚本
├── public/ # 静态资源
├── desktop/ # 桌面端入口
└── package.json # 项目配置
```
---
## 四、核心模块设计
### 4.1 数据模型 (Prisma Schema)
项目使用 Prisma ORM 管理数据,主要数据模型包括:
- **Project**: 项目
- **File**: 上传的文件
- **Chunk**: 文本分块
- **Question**: 生成的问题
- **Dataset**: 微调数据集
- **EvalDataset**: 评估数据集
- **EvalTask**: 评估任务
- **BlindTestTask**: 盲测任务
- **ModelConfig**: 模型配置
- **Tag**: 标签
- **Conversation**: 对话记录
- **Image**: 图片数据
- **Task**: 后台任务
### 4.2 核心功能模块
#### 4.2.1 文档处理模块 (Text Split)
- 支持 PDF、Markdown、DOCX、TXT、EPUB 格式
- 多种分割算法Markdown结构、递归分隔符、固定长度、代码感知分块
- 目录结构提取
- PDF 转 Markdown
#### 4.2.2 问题生成模块 (Question Generation)
- 自动从文本片段提取相关问题
- 问题模板管理
- 批量生成
- 标签树自动构建
#### 4.2.3 数据集生成模块 (Dataset Generation)
- 单轮问答数据集
- 多轮对话数据集
- 图片问答数据集
- 数据蒸馏(无需上传文档)
#### 4.2.4 评估模块 (Evaluation)
- 评估数据集生成(判断题、单选、多选、简答、开放题)
- 自动化模型评估Judge Model
- 人类盲测系统Arena
- AI 质量评估
#### 4.2.5 LLM 集成模块
支持的模型提供商:
- OpenAI
- Ollama (本地模型)
- 智谱 AI
- 阿里百炼
- OpenRouter
- Google Gemini
- Anthropic Claude
---
## 五、API 架构
### 5.1 API 设计原则
- RESTful 风格路由
- 基于 Next.js App Router 的 Route Handlers
- 使用 Zod 进行请求/响应验证
### 5.2 主要 API 分组
| API 分组 | 路由前缀 | 功能 |
|----------|----------|------|
| 项目管理 | `/api/projects` | 项目 CRUD |
| 文件管理 | `/api/projects/[id]/files` | 文件上传/处理 |
| 文本分块 | `/api/projects/[id]/chunks` | 文本分割 |
| 问题生成 | `/api/projects/[id]/questions` | 问题生成/管理 |
| 数据集 | `/api/projects/[id]/datasets` | 数据集管理 |
| 评估 | `/api/projects/[id]/eval-*` | 评估相关 |
| 盲测 | `/api/projects/[id]/blind-test-tasks` | 盲测系统 |
| LLM | `/api/llm/*` | 模型配置/调用 |
| 监控 | `/api/monitoring/*` | 日志/统计 |
---
## 六、前端架构
### 6.1 组件设计模式
- **Jotai 状态管理**: 使用原子化状态管理,便于细粒度更新
- **MUI 组件库**: 统一的 UI 组件
- **Framer Motion**: 动画效果
### 6.2 主要页面
1. **首页** (`/`): 项目列表、创建项目、统计卡片
2. **项目页** (`/projects/[id]`):
- 文本分割 (`/text-split`)
- 问题列表 (`/questions`)
- 数据集 (`/datasets`)
- 评估 (`/eval-datasets`)
- 盲测 Arena (`/arena`)
- 设置 (`/settings`)
3. **模型测试场** (`/playground`)
4. **数据集广场** (`/datasets-square`)
---
## 七、部署架构
### 7.1 多平台支持
- **Web 应用**: Next.js 生产构建
- **桌面应用**: Electron
- Windows (NSIS 安装包)
- macOS (DMG)
- Linux (AppImage)
- **Docker**: 支持 Docker 部署
### 7.2 开发命令
```bash
# 开发
pnpm dev # 启动开发服务器 (端口 1717)
# 构建
pnpm build # 构建 Next.js 生产版本
pnpm electron-build # 构建桌面应用
# 数据库
pnpm db:push # 推送 schema 到数据库
pnpm db:studio # 打开 Prisma Studio
```
---
## 八、数据流设计
### 8.1 核心业务流程
```
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 上传文档 │ -> │ 文本分割 │ -> │ 问题生成 │ -> │ 数据集生成 │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
│ │ │ │
PDF/DOCX Chunk Question Dataset
Markdown 目录结构 标签树 导出格式
```
### 8.2 评估流程
```
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 评估数据集 │ -> │ 评估任务 │ -> │ 模型评估 │ -> │ 结果分析 │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
生成题目 批量处理 Judge Model Arena盲测
```
---
## 九、国际化
- **技术选型**: i18next + react-i18next
- **支持语言**:
- 英文 (en)
- 简体中文 (zh-CN)
- 土耳其语 (tr)
- 葡萄牙语 (pt-BR)
- **语言检测**: i18next-browser-languagedetector
---
## 十、特性亮点
1. **智能文档处理**: 支持多种格式,智能识别
2. **多种分割算法**: 灵活适应不同文档结构
3. **自动标签树**: 基于文档结构智能构建
4. **多类型数据集**: 单轮问答、多轮对话、图片问答
5. **完整评估体系**: 自动化评估 + 人类盲测
6. **多模型支持**: 兼容 OpenAI 格式的所有 API
7. **一键导出**: 支持多种格式和 LLaMA Factory 集成
8. **桌面客户端**: 跨平台支持
---
## 十一、扩展方向
根据项目发展路线,未来可能扩展的方向包括:
1. 更多文件格式支持
2. 数据集版本管理
3. 团队协作功能
4. 更多导出格式
5. 更强大的数据分析功能
---
*报告生成时间: 2026-03-17*
*基于 easy-dataset-main 项目源码分析*