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:
2026-03-27 15:29:50 +08:00
parent e3ff55b4db
commit 032c43525a
41 changed files with 3756 additions and 81 deletions

110
README.md
View File

@@ -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 KeyFLUX.1 生图) |
| `SILICONFLOW_BASE_URL` | `https://api.siliconflow.cn/v1` | 否 | 硅基流动 API 地址 |
| `VOLCENGINE_API_KEY` | 空 | 否 | 火山引擎 API KeySeedream 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` | 否 | 生成图片尺寸 |
## 常用命令