# Eh-Moment **Repository Path**: igooc/eh-moment ## Basic Information - **Project Name**: Eh-Moment - **Description**: 这是一款创新的互联网AI平台,专注于为用户提供高效便捷的文本转图像及视频生成服务。该平台集成了多种前沿技术,包括文本生成图像(文生图)、图像间转换(图生图)、基于姿势生成图像(姿势生图)、图像画质增强以及文本和视频的直接转换(文生视频、图生视频)等功能,极大地丰富了用户的创作体验与表达形式 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-10-11 - **Last Updated**: 2026-10-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI内容生成平台 一个基于SpringBoot 3.x的AI内容生成平台,支持文生图、图生图、姿势生图、图像增强、文生视频、图生视频等多种AI生成功能。 ## 📋 项目简介 本项目是一个完整的AI内容生成平台,后端集成ComfyUI和Ollama等AI服务,提供RESTful API接口,前端基于Vue 3 + Vite构建,支持用户管理、任务调度、文件管理、邮件验证等功能。 ### 核心功能 - ✅ **用户管理**: 注册、登录、JWT认证、配额管理 - ✅ **任务管理**: 任务创建、查询、队列调度、进度跟踪(WebSocket实时推送) - ✅ **AI服务**: ComfyUI集成、Ollama集成、6种生成功能 - ✅ **文件管理**: 上传、下载、MinIO存储、预签名URL - ✅ **邮件服务**: 验证码发送、邮箱验证 - ✅ **监控告警**: Prometheus指标、Grafana仪表盘 - ✅ **管理员后台**: 用户管理、任务管理、配额管理 - ✅ **前端UI**: Vue 3 + Vite + Tailwind CSS 极简界面 ## 🛠️ 技术栈 ### 后端框架 - **SpringBoot**: 3.1.5 - **MyBatis-Plus**: 3.5.5 - **Java**: 17 - **Flyway**: 9.x(数据库版本迁移管理,支持 SQLite/MySQL) ### 存储 - **MySQL**: 8.0+ - **Redis**: Redisson 3.25.2 - **MinIO**: 8.5.7(对象存储) ### AI服务 - **ComfyUI**: 工作流引擎(图像/视频生成) - **Ollama**: 本地模型(姿势检测/质量分析) ### 前端 - **Vue 3**: 3.4.15 - **Vite**: 5.0.12 - **Tailwind CSS**: 3.4.1 - **Pinia**: 2.1.7 ### 其他组件 - **WebSocket**: 实时通信 - **JWT**: jjwt 0.12.3 - **Swagger**: springdoc 2.3.0 - **Prometheus**: Micrometer - **Docker**: 容器化部署 ## 📁 项目结构 ``` frontend/ # 前端应用(Vue 3 + Vite) ├── index.html ├── package.json ├── vite.config.js ├── tailwind.config.js ├── postcss.config.js └── src/ ├── main.js ├── App.vue ├── router/ # 路由配置(12条路由) ├── api/ # API请求层(7个模块) ├── store/ # Pinia状态管理 ├── composables/ # WebSocket composable ├── assets/styles/ # Tailwind CSS 主题 ├── components/ # 布局组件 ├── views/ # 页面组件(12个) └── views/admin/ # 管理员页面(3个) backend/ # 后端服务(SpringBoot) ├── src/main/java/com/ai/platform/ │ ├── aspect/ # 切面注解 │ │ ├── AuditLog.java # 审计日志注解 │ │ ├── AuditLogAspect.java # 审计日志切面 │ │ ├── RateLimit.java # 限流注解 │ │ └── RateLimitAspect.java # 限流切面 │ ├── ai/ # AI服务适配器 │ │ ├── AIServiceAdapter.java # 统一AI服务接口 │ │ ├── AIServiceFactory.java # 工厂模式选择适配器 │ │ ├── ComfyUIAdapter.java # ComfyUI工作流引擎 │ │ ├── OllamaAdapter.java # Ollama本地模型 │ │ ├── ComfyUIApi.java # ComfyUI API定义 │ │ ├── GenerateRequest.java │ │ ├── GenerateResult.java │ │ └── AIServiceException.java │ ├── common/ # 公共类 │ │ ├── BusinessException.java │ │ ├── GlobalExceptionHandler.java │ │ ├── PageResult.java │ │ ├── Result.java │ │ └── ResultCode.java │ ├── config/ # 配置类 │ │ ├── AIServiceConfig.java # AI适配器注册 │ │ ├── ApplicationInitializer.java # 应用启动初始化(MinIO等) │ │ ├── AsyncConfig.java # 异步线程池配置 │ │ ├── CustomMetricsConfig.java # 自定义 Prometheus 指标 │ │ ├── DataInitializer.java # 默认用户数据初始化(管理员/测试账户) │ │ ├── EmbeddedRedisConfig.java # 嵌入式 Redis(开发/测试) │ │ ├── JacksonConfig.java # Jackson 序列化配置(JavaTimeModule) │ │ ├── JwtAuthInterceptor.java # JWT认证拦截器 │ │ ├── MailConfig.java # 邮件配置 │ │ ├── MinioConfig.java # MinIO存储配置 │ │ ├── MyMetaObjectHandler.java # MyBatis-Plus自动填充 │ │ ├── MybatisPlusConfig.java # MyBatis-Plus分页/乐观锁 │ │ ├── RedisConfig.java # Redis序列化(含 JavaTimeModule) │ │ ├── RequestTraceFilter.java # 请求链路追踪(MDC) │ │ ├── Resilience4jConfig.java # 熔断降级配置 │ │ ├── SQLiteLocalDateTimeTypeHandler.java # SQLite 时间类型处理器 │ │ ├── SqliteTypeHandlerConfig.java # SQLite TypeHandler 注册 │ │ ├── SwaggerConfig.java # API文档配置 │ │ ├── WebConfig.java # CORS/拦截器 │ │ ├── WebSocketAuthInterceptor.java │ │ └── WebSocketConfig.java │ ├── controller/ # 控制器 │ │ ├── AdminController.java # 管理员管理 │ │ ├── FileController.java # 文件上传下载 │ │ ├── ImageEnhanceController.java # 画质增强 │ │ ├── ImageToImageController.java # 图生图 │ │ ├── ImageToVideoController.java # 图生视频 │ │ ├── MailController.java # 邮件验证 │ │ ├── PoseToImageController.java # 姿势生图 │ │ ├── TaskController.java # 任务管理 │ │ ├── TextToImageController.java # 文生图 │ │ ├── TextToVideoController.java # 文生视频 │ │ └── UserController.java # 用户管理 │ ├── dto/ # 数据传输对象(15个) │ ├── entity/ # 实体类(4个) │ ├── enums/ # 枚举类(3个) │ ├── mapper/ # MyBatis Mapper(4个) │ ├── service/ # 业务服务(17个) │ │ ├── AdminService.java # 管理员业务 │ │ ├── AIServiceCircuitBreaker.java # 熔断器保护 │ │ ├── FileService.java │ │ ├── ImageEnhanceService.java │ │ ├── ImageToImageService.java │ │ ├── ImageToVideoService.java │ │ ├── MailService.java │ │ ├── PoseToImageService.java │ │ ├── ProgressPusher.java # WebSocket进度推送 │ │ ├── PromptBuilder.java # 提示词构建 │ │ ├── TaskExecutor.java # 任务执行器 │ │ ├── TaskQueue.java # Redis优先级队列 │ │ ├── TaskService.java │ │ ├── TextToImageService.java │ │ ├── TextToVideoService.java │ │ └── UserService.java │ ├── util/ # 工具类 │ │ └── JwtTokenProvider.java │ ├── vo/ # 视图对象(6个) │ └── websocket/ # WebSocket处理 │ ├── TaskProgressWebSocketHandler.java # 任务进度推送 │ └── WebSocketSessionManager.java # 会话管理 ├── src/main/resources/ │ ├── application.yml # 主配置(默认激活 sqlite profile,启用 Flyway) │ ├── application-dev.yml # 开发环境配置 │ ├── application-mysql.yml # MySQL 生产配置(含 Flyway mysql 脚本) │ ├── application-postgresql.yml # PostgreSQL 配置 │ ├── application-prod.yml # 生产配置 │ ├── application-sqlite.yml # SQLite 默认配置(无需外部数据库) │ ├── logback-spring.xml │ ├── db/ │ │ ├── migration/ # Flyway 版本迁移 │ │ │ ├── sqlite/V1~V2.sql # SQLite 迁移脚本 │ │ │ └── mysql/V1~V2.sql # MySQL 迁移脚本 │ │ ├── init-schema.sql # MySQL 建表脚本 │ │ ├── init-data.sql # MySQL 初始化数据 │ │ ├── init-schema-sqlite.sql # SQLite 建表脚本 │ │ ├── init-data-sqlite.sql # SQLite 初始化数据 │ │ ├── init-schema-postgresql.sql # PostgreSQL 建表脚本 │ │ └── init-data-postgresql.sql # PostgreSQL 初始化数据 │ └── templates/ │ ├── positive-prompt.ftl │ └── negative-prompt.ftl ├── src/test/java/com/ai/platform/ │ ├── ai/ (3个AI适配器测试) │ ├── common/ (5个公共类测试) │ ├── controller/ (9个控制器集成测试) │ ├── service/ (7个服务测试) │ ├── util/JwtTokenProviderTest.java │ └── websocket/ (2个WebSocket测试) │ └── 总计 200+ 测试用例 ├── pom.xml ├── Dockerfile ├── docker-compose.yml ├── prometheus.yml ├── grafana-dashboard.json └── monitoring/ └── grafana/ └── provisioning/ └── datasources/ └── datasources.yml ``` ## 🚀 快速开始 ### 环境要求 - JDK 17+ - Maven 3.8+ - SQLite 3.x(默认数据库,无需额外安装) - MySQL 8.0+(可选,生产推荐) - Redis 6.0+(可选,开发/测试可使用嵌入式 Redis) - MinIO (可选,对象存储) ### 本地开发 1. **克隆项目** ```bash git clone cd eh-moment/backend ``` 2. **配置数据库** 项目默认使用 SQLite(无需额外安装数据库服务),首次启动时 Flyway 会自动迁移 Schema 与初始化数据。 ```bash # 如需使用 MySQL,创建数据库后由 Flyway 自动迁移 mysql -u root -p -e "CREATE DATABASE ai_platform DEFAULT CHARSET utf8mb4;" ``` 3. **切换数据库 profile** 编辑 `application.yml` 默认激活的 profile,或通过启动参数覆盖: ```yaml spring: profiles: active: sqlite # 可选: sqlite(默认), mysql, postgresql, dev, prod ``` 或通过命令行参数: ```bash mvn spring-boot:run -Dspring-boot.run.profiles=mysql ``` > Flyway 会根据 profile 加载对应迁移脚本(`db/migration/sqlite` 或 `db/migration/mysql`)。 > 用户账户由 `DataInitializer` 在启动时创建(默认:admin@ai-platform.com / admin123)。 4. **启动项目** ```bash mvn clean install mvn spring-boot:run ``` 5. **访问服务** - API文档: http://localhost:8080/swagger-ui.html - 健康检查: http://localhost:8080/actuator/health ### Docker部署 **生产环境(推荐):** ```bash # 1. 配置环境变量 cp .env.example .env # 编辑 .env 文件,修改密码等敏感信息 # 2. 启动所有服务(Redis + MySQL + MinIO + 后端) docker compose -f docker-compose.prod.yml --profile full up -d ``` **开发/测试环境:** ```bash docker-compose up -d ``` ## 📖 API文档 启动项目后,访问Swagger UI查看完整的API文档: **地址**: http://localhost:8080/swagger-ui.html ### 主要API接口 #### 用户管理 - `POST /api/v1/users/register` - 用户注册 - `POST /api/v1/users/login` - 用户登录 - `GET /api/v1/users/profile` - 获取用户信息 - `GET /api/v1/users/quota` - 获取配额信息 #### 任务管理 - `POST /api/v1/tasks` - 创建任务 - `GET /api/v1/tasks/{id}` - 获取任务详情 - `GET /api/v1/tasks` - 查询任务列表 - `DELETE /api/v1/tasks/{id}` - 取消任务 - `POST /api/v1/tasks/{id}/retry` - 重试任务 #### AI生成 - `POST /api/v1/text-to-image` - 文生图 - `POST /api/v1/image-to-image` - 图生图 - `POST /api/v1/pose-to-image` - 姿势生图 - `POST /api/v1/enhance` - 图像增强 - `POST /api/v1/text-to-video` - 文生视频 - `POST /api/v1/image-to-video` - 图生视频 #### 文件管理 - `POST /api/v1/files/upload` - 上传文件 - `GET /api/v1/files/{id}` - 下载文件 - `DELETE /api/v1/files/{id}` - 删除文件 #### 邮件服务 - `POST /api/v1/mail/send-code` - 发送验证码 - `POST /api/v1/mail/verify` - 验证验证码 ## 🔧 配置说明 ### application.yml 主要配置 ```yaml # 服务器配置 server: port: 8080 # 数据库配置 spring: datasource: url: jdbc:mysql://localhost:3306/ai_platform username: root password: password # Redis配置 redis: host: localhost port: 6379 # MinIO配置 minio: endpoint: http://localhost:9000 accessKey: minioadmin secretKey: minioadmin bucketName: ai-platform # AI服务配置 ai: comfyui: url: http://localhost:8188 ollama: url: http://localhost:11434 # JWT配置 jwt: secret: your-secret-key expiration: 86400000 ``` ## 📊 监控 ### Prometheus指标 访问: http://localhost:8080/actuator/prometheus 主要指标: - `ai_task_created_total` - 任务创建总数 - `ai_task_completed_total` - 任务完成总数 - `ai_task_failed_total` - 任务失败总数 - `ai_queue_size` - 队列大小 - `ai_websocket_connections` - WebSocket连接数 ### Grafana仪表盘 导入 `grafana-dashboard.json` 配置文件即可使用。 ## 🔐 安全说明 - **JWT认证**: 所有API接口(除登录注册外)需要JWT Token - **密码加密**: 使用BCrypt加密存储 - **CORS配置**: 支持跨域访问 - **SQL注入防护**: 使用MyBatis-Plus参数化查询 - **XSS防护**: 输入参数验证 ## 📝 开发指南 ### 代码规范 - 遵循阿里巴巴Java开发规范 - 使用Lombok简化代码 - 统一异常处理 - 统一响应格式 ### 分支管理 - `main` - 生产分支 - `develop` - 开发分支 - `feature/*` - 功能分支 - `hotfix/*` - 修复分支 ## 🤝 贡献指南 1. Fork本项目 2. 创建功能分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 创建Pull Request ## 📄 许可证 本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件 ## 👥 联系方式 - 项目主页: https://github.com/your-repo/ai-platform - 问题反馈: https://github.com/your-repo/ai-platform/issues - 邮箱: support@ai-platform.com ## 🙏 致谢 - [SpringBoot](https://spring.io/projects/spring-boot) - [MyBatis-Plus](https://baomidou.com/) - [ComfyUI](https://github.com/comfyanonymous/ComfyUI) - [Ollama](https://ollama.ai/) --- **AI Platform Team** - 让AI创作更简单