# 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 项目源码分析*
