# Easy Dataset Agent 指南 ## 项目概述 Easy Dataset 是一个专为大型语言模型(LLM)微调数据集创建而设计的应用程序。它提供完整的workflow,从文档处理到数据集导出,支持多种文件格式和AI模型。 ## 技术栈 - **前端**: Next.js 14 (App Router), React 18, Material-UI v5 - **后端**: Node.js, Prisma ORM, SQLite - **AI集成**: OpenAI API, Ollama, 智谱AI, OpenRouter - **桌面应用**: Electron - **国际化**: i18next - **构建工具**: npm/pnpm, Electron Builder ## 核心架构 ### 1. 数据流架构 ``` 文档上传 → 文本分割 → 问题生成 → 答案生成 → 数据集导出 ↓ ↓ ↓ ↓ ↓ 文件处理 智能分块 LLM生成 LLM生成 格式转换 ``` ### 2. 模块结构 ``` lib/ ├── api/ # API接口层 ├── db/ # 数据访问层 ├── file/ # 文件处理模块 ├── llm/ # AI模型集成 ├── services/ # 业务逻辑层 └── util/ # 工具函数 ``` ## 开发指南 ### 环境设置 ```bash # 安装依赖 npm install # 数据库初始化 npm run db:push # 开发模式 npm run dev # 构建 npm run build ``` ### 代码规范 - 使用ES6+语法 - 模块化开发 - 异步操作使用async/await - 错误处理使用try/catch - 注释使用JSDoc格式 ### 重要文件路径 - **主入口**: `app/page.js` - **项目路由**: `app/projects/[projectId]/` - **API路由**: `app/api/` - **LLM核心**: `lib/llm/core/index.js` - **任务处理**: `lib/services/tasks/` ## 功能模块详解 ### 1. 文档处理模块 (`lib/file/`) - **支持的格式**: PDF, Markdown, DOCX, EPUB, TXT - **核心功能**: - 智能文本分割 - 目录结构提取 - 自定义分隔符分块 - 多语言支持 ### 2. AI模型集成 (`lib/llm/`) - **支持的提供商**: - OpenAI (GPT系列) - Ollama (本地模型) - 智谱AI (GLM系列) - OpenRouter (多模型聚合) - **功能特性**: - 统一API接口 - 流式输出支持 - 多语言提示词 - 错误重试机制 ### 3. 任务系统 (`lib/services/tasks/`) - **任务类型**: - 文件处理任务 - 问题生成任务 - 答案生成任务 - 数据清洗任务 - **状态管理**: 待处理、处理中、完成、失败 ### 4. 数据管理 (`lib/db/`) - **数据模型**: - Project (项目) - Text/Chunk (文本块) - Question (问题) - Dataset (数据集) - Tag (标签) ## 常用开发任务 ### 添加新的AI模型提供商 1. 在 `lib/llm/core/providers/` 创建新的provider文件 2. 实现基础接口 (generate, streamGenerate) 3. 在 `lib/llm/core/index.js` 中注册provider 4. 更新配置文件和UI界面 ### 添加新的文件格式支持 1. 在 `lib/file/file-process/` 创建格式处理器 2. 实现内容提取和文本转换逻辑 3. 更新文件类型检测和验证 4. 添加相应的UI组件 ### 自定义提示词模板 1. 在 `lib/llm/prompts/` 创建新的提示词文件 2. 使用i18n支持多语言 3. 在设置界面添加配置选项 4. 测试不同模型的效果 ### 添加新的导出格式 1. 在 `components/export/` 创建新的导出组件 2. 实现数据格式转换逻辑 3. 更新导出对话框界面 4. 添加格式验证和错误处理 ## 调试技巧 ### 1. 数据库调试 ```bash # 打开Prisma Studio npm run db:studio # 查看数据库文件 sqlite3 prisma/db.sqlite ``` ### 2. LLM API调试 ```javascript // 在lib/llm/core/index.js中添加日志 console.log('LLM Request:', { provider, model, prompt }); console.log('LLM Response:', response); ``` ### 3. 文件处理调试 ```javascript // 在lib/file/中添加调试信息 console.log('File processing:', fileName, fileType); console.log('Text chunks:', chunks.length, chunks[0]); ``` ## 性能优化建议 ### 1. 文件处理优化 - 大文件分片处理 - 异步并发处理 - 内存使用监控 - 进度条显示 ### 2. LLM调用优化 - 请求缓存机制 - 批量处理请求 - 重试策略优化 - 并发数控制 ### 3. 前端性能优化 - 组件懒加载 - 虚拟滚动列表 - 图片懒加载 - 代码分割 ## 常见问题解决 ### 1. 数据库相关问题 - **问题**: 数据库连接失败 - **解决**: 检查prisma配置,确保数据库文件存在 ### 2. LLM API相关问题 - **问题**: API调用超时 - **解决**: 调整超时时间,检查网络连接,增加重试机制 ### 3. 文件处理问题 - **问题**: 大文件处理内存溢出 - **解决**: 使用流式处理,分块读取,增加内存限制 ### 4. Electron打包问题 - **问题**: 打包后应用无法启动 - **解决**: 检查依赖项配置,确保native模块正确打包 ## 部署指南 ### Docker部署 ```bash # 构建镜像 docker build -t easy-dataset . # 运行容器 docker run -d -p 1717:1717 -v ./local-db:/app/local-db easy-dataset ``` ### 桌面应用构建 ```bash # 构建各平台安装包 npm run electron-build-mac # macOS npm run electron-build-win # Windows npm run electron-build-linux # Linux ``` ## 贡献指南 ### 提交规范 - 使用conventional commits格式 - 提交前运行lint检查 - 更新相关文档 - 添加测试用例 ### 分支策略 - `main`: 主分支,稳定版本 - `dev`: 开发分支,集成新功能 - `feature/*`: 功能分支 - `fix/*`: 修复分支 ---