feat(ai): 支持双模型多视角AI设计生图与后台管理系统
- 实现AI多视角设计图生成功能,支持6个可选设计参数配置 - 集成SiliconFlow FLUX.1与火山引擎Seedream 4.5双模型切换 - 构建专业中文转英文prompt系统,提升AI生成质量 - 前端设计预览支持多视角切换与视角指示器展示 - 增加多视角设计图片DesignImage模型关联及存储 - 后端设计服务异步调用AI接口,失败时降级生成mock图 - 新增管理员后台管理路由及完整的权限校验机制 - 实现后台模块:仪表盘、系统配置、用户/品类/设计管理 - 配置数据库系统配置表,支持动态AI配置及热更新 - 增加用户管理员标识字段,管理后台登录鉴权支持 - 更新API接口支持多视角设计参数及后台管理接口 - 优化设计删除逻辑,删除多视角相关图片文件 - 前端新增管理后台页面与路由,布局样式独立分离 - 更新环境变量增加AI模型相关Key与参数配置说明 - 引入httpx异步HTTP客户端用于AI接口调用及图片下载 - README文档完善AI多视角生图与后台管理详细功能与流程说明
This commit is contained in:
110
README.md
110
README.md
@@ -1,6 +1,6 @@
|
||||
# 玉宗 - 珠宝设计大师
|
||||
|
||||
AI 驱动的珠宝玉石设计生成系统,支持 12 种玉石品类的智能设计图生成。
|
||||
AI 驱动的珠宝玉石设计生成系统,支持 12 种玉石品类的智能设计图生成,双 AI 模型多视角生图,内置后台管理系统。
|
||||
|
||||
## 功能特性
|
||||
|
||||
@@ -14,10 +14,31 @@ AI 驱动的珠宝玉石设计生成系统,支持 12 种玉石品类的智能
|
||||
- **实现方式**:品类通过 `flow_type` 字段区分三种工作流程:`full`(选子类型,如牌子选牌型)、`size_color`(选尺寸+颜色,如珠子)、`simple`(直接设计);前端 `SubTypePanel` 组件根据 flow_type 动态渲染不同的选择界面
|
||||
- **优点**:灵活的品类工作流适配不同产品特性,用户操作路径清晰
|
||||
|
||||
### 3. 设计图生成
|
||||
- **功能说明**:用户选择品类参数后输入设计描述,系统生成 800×800 PNG 设计图
|
||||
- **实现方式**:后端 `mock_generator` 使用 Pillow 生成设计图,包含品类信息、颜色映射(中文颜色名→HEX)、自动文字颜色对比计算、系统中文字体检测(PingFang/STHeiti/DroidSansFallback);设计记录先创建(status=generating),生成完成后更新为 completed
|
||||
- **优点**:即时生成预览图,支持颜色定制;后续可替换为真实 AI 模型
|
||||
### 3. AI 多视角设计图生成
|
||||
- **功能说明**:用户选择品类参数后,可配置 6 个可选设计参数(雕刻工艺、设计风格、题材纹样、尺寸规格、表面处理、用途场景),输入设计描述后系统自动生成多视角设计图(每个品类 2~4 张不同视角)
|
||||
- **双模型支持**:
|
||||
- **SiliconFlow FLUX.1 [dev]**(默认):~0.13元/张,性价比高
|
||||
- **火山引擎 Seedream 4.5**(备选):~0.30元/张,高质量
|
||||
- **提示词系统**:自动将中文参数(品类/子类型/颜色/6个设计参数+视角)构建为专业英文 prompt,包含玉雕行业专业术语、摄影角度、质量标签
|
||||
- **按品类视角配置**:
|
||||
| 品类 | 视角数 | 视角列表 |
|
||||
|------|--------|----------|
|
||||
| 牌子 | 3 | 效果图(45°)、正面图、背面图 |
|
||||
| 珠子 | 2 | 效果图(45°)、正面图 |
|
||||
| 手把件/雕刻件/摆件 | 4 | 效果图(45°)、正面图、侧面图、背面图 |
|
||||
| 手镯 | 3 | 效果图(45°)、正面图、侧面图 |
|
||||
| 耳钉/耳饰/手链/项链/表带 | 2 | 效果图(45°)、正面图 |
|
||||
| 戒指 | 3 | 效果图(45°)、正面图、侧面图 |
|
||||
- **降级机制**:AI 生图失败时自动降级到 mock_generator 生成占位图
|
||||
- **可选参数**:
|
||||
- **雕刻工艺**:浮雕、圆雕、镂空雕、阴刻、线雕、俍色雕、薄意雕、素面,支持自定义输入
|
||||
- **设计风格**:古典传统、新中式、写实、抽象意境、极简素面,支持自定义输入
|
||||
- **题材纹样**:观音、弥勒、莲花、貔貅、龙凤、麒麟、山水、花鸟、人物、回纹、如意、平安扣,支持自定义输入
|
||||
- **尺寸规格**:根据品类动态变化(牌子尺寸/手镯内径/手把件大小等),支持自定义输入
|
||||
- **表面处理**:高光抛光、亚光/哑光、磨砂、保留皮色,支持自定义输入
|
||||
- **用途场景**:日常佩戴、收藏鉴赏、送礼婚庆、把玩文玩,支持自定义输入
|
||||
- **实现方式**:后端 `prompt_builder` 自动构建专业英文 prompt → `ai_generator` 调用 AI API 生图 → 下载保存到本地 → 创建 `DesignImage` 多视角记录;降级时使用 `mock_generator` Pillow 生成占位图
|
||||
- **优点**:AI 真实生图 + 多视角展示,专业玉雕提示词系统,双模型热切换 + 降级兜底
|
||||
|
||||
### 4. 设计管理
|
||||
- **功能说明**:用户中心查看设计历史列表(分页),支持预览、下载、删除设计
|
||||
@@ -29,6 +50,17 @@ AI 驱动的珠宝玉石设计生成系统,支持 12 种玉石品类的智能
|
||||
- **实现方式**:手机号唯一性校验,密码修改需验证旧密码;前端表单使用 Element Plus 表单验证
|
||||
- **优点**:安全的密码修改流程,手机号去重保障数据一致性
|
||||
|
||||
### 6. 后台管理系统
|
||||
- **功能说明**:管理员专属后台,支持仪表盘、系统配置、用户管理、品类管理、设计管理五大模块
|
||||
- **实现方式**:
|
||||
- **权限控制**:用户表 `is_admin` 字段 + `get_admin_user` 依赖注入,非管理员访问返回 403
|
||||
- **系统配置**:`system_configs` 表存储配置项,数据库配置优先于 .env 文件;敏感信息(API Key)脱敏显示
|
||||
- **品类管理**:支持品类、子类型、颜色的增删改查,含颜色拾色器
|
||||
- **用户管理**:搜索、分页、设置/取消管理员、删除用户
|
||||
- **设计管理**:查看所有用户设计,按状态筛选,管理员删除
|
||||
- **前端独立布局**:左侧导航 + 内容区,管理后台与前台完全分离
|
||||
- **优点**:AI 配置可热更新(无需重启服务),品类数据可视化管理,用户权限分级控制
|
||||
|
||||
## 业务流程
|
||||
|
||||
### 整体流程图
|
||||
@@ -43,9 +75,10 @@ graph TB
|
||||
D --> G[生成页 - 输入设计描述]
|
||||
E --> G
|
||||
F --> G
|
||||
G --> H[提交生成请求]
|
||||
H --> I[后端生成设计图]
|
||||
I --> J[预览设计图]
|
||||
G --> G2[选择可选参数]
|
||||
G2 --> H[提交生成请求]
|
||||
H --> I[后端 AI 多视角生图]
|
||||
I --> J[预览多视角设计图]
|
||||
J --> K{用户操作}
|
||||
K -->|下载| L[下载 PNG 文件]
|
||||
K -->|重新生成| G
|
||||
@@ -58,18 +91,20 @@ graph TB
|
||||
|
||||
1. **用户认证**:注册时检查用户名唯一性 → 密码 bcrypt 加密 → 创建用户记录 → 注册成功后自动登录 → 获取 JWT Token 存储到 localStorage
|
||||
2. **品类选择**:进入设计页自动加载品类列表 → 左侧导航选择品类 → 根据 flow_type 加载对应的子类型/颜色数据 → 右侧面板显示选择界面
|
||||
3. **设计生成**:跳转生成页携带品类参数 → 输入设计描述(最多 500 字) → 提交请求 → 显示水墨风格加载动画 → 生成完成后展示预览
|
||||
3. **设计生成**:跳转生成页携带品类参数 → 选择可选参数(工艺/风格/题材/尺寸/表面/用途) → 输入设计描述(最多 2000 字) → 提交请求 → 显示水墨风格加载动画 → 生成完成后展示预览
|
||||
4. **设计管理**:用户中心加载设计列表 → 卡片网格展示 → 支持分页浏览、下载 PNG、删除(确认弹窗)、点击卡片跳转重新编辑
|
||||
|
||||
### 关键数据流图
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A[前端 Store] -->|Axios + Token| B[API 路由]
|
||||
B -->|Depends 注入| C[Service 层]
|
||||
A[前端 Store] -->|“Axios + Token”| B[API 路由]
|
||||
B -->|“Depends 注入”| C[Service 层]
|
||||
C -->|prompt_builder| D1[英文 Prompt 构建]
|
||||
D1 -->|ai_generator| D2[AI 生图 API]
|
||||
D2 -->|下载保存| E[uploads/ 目录]
|
||||
C -->|SQLAlchemy ORM| D[MySQL 数据库]
|
||||
C -->|Pillow 生成| E[uploads/ 目录]
|
||||
E -->|StaticFiles 服务| F[前端图片展示]
|
||||
E -->|StaticFiles 服务| F[前端多视角展示]
|
||||
```
|
||||
|
||||
### API 调用链路
|
||||
@@ -84,11 +119,22 @@ graph LR
|
||||
| `/api/categories` | GET | 获取品类列表 | - |
|
||||
| `/api/categories/{id}/sub-types` | GET | 获取子类型 | category_id |
|
||||
| `/api/categories/{id}/colors` | GET | 获取颜色选项 | category_id |
|
||||
| `/api/designs/generate` | POST | 生成设计 | category_id, sub_type_id, color_id, prompt |
|
||||
| `/api/designs/generate` | POST | 生成设计 | category_id, sub_type_id, color_id, prompt, carving_technique?, design_style?, motif?, size_spec?, surface_finish?, usage_scene? |
|
||||
| `/api/designs` | GET | 设计列表(分页) | page, page_size |
|
||||
| `/api/designs/{id}` | GET | 设计详情 | design_id |
|
||||
| `/api/designs/{id}` | DELETE | 删除设计 | design_id |
|
||||
| `/api/designs/{id}/download` | GET | 下载设计图 | design_id |
|
||||
| `/api/admin/dashboard` | GET | 管理仪表盘统计 | Bearer Token (管理员) |
|
||||
| `/api/admin/configs` | GET | 获取系统配置 | group? |
|
||||
| `/api/admin/configs` | PUT | 更新系统配置 | configs: {key: value} |
|
||||
| `/api/admin/configs/init` | POST | 初始化默认配置 | - |
|
||||
| `/api/admin/users` | GET | 用户列表 | page, page_size, keyword? |
|
||||
| `/api/admin/users/{id}/admin` | PUT | 设置管理员 | is_admin |
|
||||
| `/api/admin/categories` | GET/POST | 品类列表/创建 | name, flow_type, sort_order |
|
||||
| `/api/admin/categories/{id}` | PUT/DELETE | 更新/删除品类 | - |
|
||||
| `/api/admin/sub-types` | POST | 创建子类型 | category_id, name |
|
||||
| `/api/admin/colors` | POST | 创建颜色 | category_id, name, hex_code |
|
||||
| `/api/admin/designs` | GET | 所有设计列表 | page, status? |
|
||||
|
||||
## 技术栈
|
||||
|
||||
@@ -107,7 +153,9 @@ graph LR
|
||||
| **数据库驱动** | PyMySQL | 1.1.0 | MySQL 连接 |
|
||||
| **认证** | python-jose | 3.3.0 | JWT Token |
|
||||
| **密码加密** | passlib + bcrypt | 1.7.4 | bcrypt 哈希 |
|
||||
| **图片生成** | Pillow | 10.2.0 | PNG 设计图生成 |
|
||||
| **图片生成** | Pillow | 10.2.0 | PNG 设计图生成(mock 降级) |
|
||||
| **AI 生图** | SiliconFlow FLUX.1 / Seedream 4.5 | - | 双模型多视角生图 |
|
||||
| **HTTP 客户端** | httpx | 0.27.0 | 异步调用 AI API + 图片下载 |
|
||||
| **数据库** | MySQL | - | utf8mb4 编码 |
|
||||
|
||||
## 目录结构
|
||||
@@ -124,14 +172,18 @@ YuShiSheJi/
|
||||
│ │ │ ├── auth.py # 认证路由(注册/登录)
|
||||
│ │ │ ├── categories.py # 品类查询路由
|
||||
│ │ │ ├── designs.py # 设计生成/管理路由
|
||||
│ │ │ ├── admin.py # 管理后台路由
|
||||
│ │ │ └── users.py # 用户信息路由
|
||||
│ │ ├── schemas/ # Pydantic 数据验证
|
||||
│ │ ├── services/ # 业务逻辑层
|
||||
│ │ │ ├── auth_service.py # 认证业务
|
||||
│ │ │ ├── design_service.py # 设计业务
|
||||
│ │ │ └── mock_generator.py # 图片生成服务
|
||||
│ │ │ ├── design_service.py # 设计业务(AI生图+降级)
|
||||
│ │ │ ├── ai_generator.py # AI 生图服务(双模型)
|
||||
│ │ │ ├── prompt_builder.py # 提示词构建器
|
||||
│ │ │ ├── config_service.py # 配置服务(数据库优先于.env)
|
||||
│ │ │ └── mock_generator.py # Mock图片生成(降级兜底)
|
||||
│ │ ├── utils/ # 工具函数
|
||||
│ │ │ ├── deps.py # 认证依赖注入
|
||||
│ │ │ ├── deps.py # 认证/管理员依赖注入
|
||||
│ │ │ └── security.py # JWT/密码工具
|
||||
│ │ ├── config.py # 配置管理
|
||||
│ │ ├── database.py # 数据库连接
|
||||
@@ -145,9 +197,11 @@ YuShiSheJi/
|
||||
│ │ │ ├── request.ts # Axios 实例(拦截器)
|
||||
│ │ │ ├── auth.ts # 认证接口
|
||||
│ │ │ ├── category.ts # 品类接口
|
||||
│ │ │ └── design.ts # 设计接口
|
||||
│ │ │ ├── design.ts # 设计接口
|
||||
│ │ │ └── admin.ts # 管理后台接口
|
||||
│ │ ├── components/ # 公共组件
|
||||
│ │ │ ├── AppHeader.vue # 顶部导航栏
|
||||
│ │ │ ├── AdminLayout.vue # 管理后台布局(侧边栏+内容区)
|
||||
│ │ │ ├── CategoryNav.vue # 品类左侧导航
|
||||
│ │ │ ├── SubTypePanel.vue# 子类型/颜色选择面板
|
||||
│ │ │ ├── ColorPicker.vue # 颜色选择器
|
||||
@@ -157,6 +211,12 @@ YuShiSheJi/
|
||||
│ │ │ ├── category.ts # 品类状态
|
||||
│ │ │ └── design.ts # 设计状态
|
||||
│ │ ├── views/ # 页面组件
|
||||
│ │ │ ├── admin/ # 管理后台页面
|
||||
│ │ │ │ ├── Dashboard.vue # 仪表盘
|
||||
│ │ │ │ ├── ConfigManage.vue # 系统配置管理
|
||||
│ │ │ │ ├── UserManage.vue # 用户管理
|
||||
│ │ │ │ ├── CategoryManage.vue # 品类管理
|
||||
│ │ │ │ └── DesignManage.vue # 设计管理
|
||||
│ │ │ ├── Login.vue # 登录页
|
||||
│ │ │ ├── Register.vue # 注册页
|
||||
│ │ │ ├── DesignPage.vue # 设计页(品类选择)
|
||||
@@ -236,11 +296,13 @@ uvicorn app.main:app --host 0.0.0.0 --port 8000
|
||||
|
||||
| 分类 | 表名 | 说明 |
|
||||
|-----|------|-----|
|
||||
| 用户 | `users` | 用户基本信息(用户名、密码、昵称、手机、头像) |
|
||||
| 用户 | `users` | 用户基本信息(用户名、密码、昵称、手机、头像、管理员标识) |
|
||||
| 品类 | `categories` | 12 种玉石品类(名称、图标、排序、流程类型) |
|
||||
| 品类 | `sub_types` | 品类子类型(牌型/尺寸,关联品类) |
|
||||
| 品类 | `colors` | 品类颜色选项(颜色名、HEX 色值,关联品类) |
|
||||
| 设计 | `designs` | 设计记录(用户、品类、子类型、颜色、描述、图片URL、状态) |
|
||||
| 设计 | `designs` | 设计记录(用户、品类、子类型、颜色、描述、6个可选参数、图片URL、状态) |
|
||||
| 设计 | `design_images` | AI 多视角设计图(视角名称、图片URL、AI模型、prompt、排序) |
|
||||
| 配置 | `system_configs` | 系统配置(AI API Key、模型、尺寸等,支持后台管理动态修改) |
|
||||
|
||||
## 环境变量
|
||||
|
||||
@@ -251,6 +313,12 @@ uvicorn app.main:app --host 0.0.0.0 --port 8000
|
||||
| `ALGORITHM` | `HS256` | 否 | JWT 算法 |
|
||||
| `ACCESS_TOKEN_EXPIRE_MINUTES` | `1440` | 否 | Token 有效期(分钟,默认 24 小时) |
|
||||
| `UPLOAD_DIR` | `uploads` | 否 | 图片上传存储目录 |
|
||||
| `SILICONFLOW_API_KEY` | 空 | 是(生图) | 硅基流动 API Key(FLUX.1 生图) |
|
||||
| `SILICONFLOW_BASE_URL` | `https://api.siliconflow.cn/v1` | 否 | 硅基流动 API 地址 |
|
||||
| `VOLCENGINE_API_KEY` | 空 | 否 | 火山引擎 API Key(Seedream 4.5 备选) |
|
||||
| `VOLCENGINE_BASE_URL` | `https://ark.cn-beijing.volces.com/api/v3` | 否 | 火山引擎 API 地址 |
|
||||
| `AI_IMAGE_MODEL` | `flux-dev` | 否 | 默认 AI 模型(flux-dev / seedream-4.5) |
|
||||
| `AI_IMAGE_SIZE` | `1024` | 否 | 生成图片尺寸 |
|
||||
|
||||
## 常用命令
|
||||
|
||||
|
||||
Reference in New Issue
Block a user