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