307 lines
10 KiB
Markdown
307 lines
10 KiB
Markdown
# 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 项目源码分析*
|