feat: restructure gen2D deck with enriched content and frankfurt theme components
Deploy Slides / build-and-deploy (push) Successful in 1m32s
Deploy Slides / build-and-deploy (push) Successful in 1m32s
- Restructure from 12 slides to 21 slides with proper section navigation - Split into pages/ for modular maintenance (15 page files) - Use frankfurt theme: cover layout, Item component, section frontmatter - Remove all two-cols layouts to avoid rendering issues - Add rich content from tmp/ docs: Eino pipeline, prompt agent, async tasks, data model, deployment - Use Item component for structured content blocks - Add mermaid ER diagram for data model - Add Go code block for pipeline type definitions
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
# 系统架构全景
|
||||
|
||||
<div class="text-sm mt-2">
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────────────┐
|
||||
│ Frontend (React + Vite + TypeScript) │
|
||||
│ │
|
||||
│ ┌──────────┐ ┌──────────────┐ ┌──────────┐ ┌───────────┐ │
|
||||
│ │ 项目画廊 │ │ 工作台面板 │ │ 结果预览 │ │ 风格编辑器 │ │
|
||||
│ └──────────┘ └──────────────┘ └──────────┘ └───────────┘ │
|
||||
│ │ Zustand 状态管理 │
|
||||
│ │ react-router v7 路由 │
|
||||
└────────────────────────┼─────────────────────────────────────────┘
|
||||
│ HTTP (REST API) + WebSocket
|
||||
┌────────────────────────┼─────────────────────────────────────────┐
|
||||
│ Backend (Go + Gin + Eino) │
|
||||
│ │ │
|
||||
│ ┌────────────────────▼─────────────────────────────────────┐ │
|
||||
│ │ Handler Layer (Gin Router) │ │
|
||||
│ │ JWT 中间件 · 请求校验 · 错误处理 │ │
|
||||
│ └────────────────────┬─────────────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ┌────────────────────▼─────────────────────────────────────┐ │
|
||||
│ │ Service Layer (业务逻辑) │ │
|
||||
│ │ ┌─────────────────────────────────────────────────────┐ │ │
|
||||
│ │ │ Eino compose.Graph Pipeline │ │ │
|
||||
│ │ │ PromptOptimizer → AssetGenerator → QualitySupervisor│ │ │
|
||||
│ │ │ ↓ │ │ │
|
||||
│ │ │ FormatAdapter │ │ │
|
||||
│ │ └─────────────────────────────────────────────────────┘ │ │
|
||||
│ │ ┌──────────┐ ┌───────────┐ ┌──────────┐ │ │
|
||||
│ │ │ 项目管理 │ │ 风格系统 │ │ 用户认证 │ │ │
|
||||
│ │ └──────────┘ └───────────┘ └──────────┘ │ │
|
||||
│ └──────────────────────────────────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ┌────────────────────▼─────────────────────────────────────┐ │
|
||||
│ │ Data Layer (数据访问) │ │
|
||||
│ │ GORM + SQLite sync.Map 缓存 │ │
|
||||
│ └──────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ 外部依赖:DeepSeek LLM · Stability AI · 七牛云 Kodo │
|
||||
└──────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,34 @@
|
||||
# 异步任务模型
|
||||
|
||||
提交即返回,后台并发执行
|
||||
|
||||
<Item title="📤 任务提交流程">
|
||||
|
||||
1. 用户提交生成请求 → 创建 Task 记录(状态 `running`)
|
||||
2. 立即返回 `taskId`,前端开始轮询 / 建立 WebSocket
|
||||
3. 后台启动 goroutine 执行管线
|
||||
|
||||
</Item>
|
||||
|
||||
<Item title="🔄 管线执行与进度推送">
|
||||
|
||||
| 阶段 | 进度范围 | 说明 |
|
||||
|------|---------|------|
|
||||
| PromptOptimizer | 5% → 25% | 风格合并 + LLM 优化 |
|
||||
| AssetGenerator | 25% → 60% | 调用文生图 API |
|
||||
| QualitySupervisor | 60% → 80% | 视觉模型质检 |
|
||||
| FormatAdapter | 80% → 100% | 格式组装 + 上传 |
|
||||
|
||||
</Item>
|
||||
|
||||
<Item title="🔁 重试策略">
|
||||
|
||||
- **质检重试**(管线内):QualitySupervisor 不合格 → 回退 PromptOptimizer,最多 3 次
|
||||
- **任务级重试**(管线外):整个管线失败 → 5 秒间隔重试,最多 1 次
|
||||
- **降级兜底**:超过重试次数后,使用当前最优结果输出
|
||||
|
||||
</Item>
|
||||
|
||||
<div class="mt-4 text-sm text-gray-400">
|
||||
任务生命周期:running → completed / failed
|
||||
</div>
|
||||
@@ -0,0 +1,39 @@
|
||||
# 数据模型与存储
|
||||
|
||||
四表结构,清晰的实体关系
|
||||
|
||||
```mermaid {scale: 0.8}
|
||||
erDiagram
|
||||
USER ||--o{ PROJECT : "拥有"
|
||||
PROJECT ||--|| PROJECT_STYLE : "配置"
|
||||
PROJECT ||--o{ TASK : "生成"
|
||||
TASK ||--o{ ASSET : "产出"
|
||||
```
|
||||
|
||||
<div class="grid grid-cols-2 gap-4 mt-2">
|
||||
|
||||
<Item title="👤 USER 用户表">
|
||||
- `id`:前缀 + 随机 base62(6 字节 crypto/rand)
|
||||
- `username`:唯一用户名
|
||||
- `password_hash`:bcrypt 哈希
|
||||
</Item>
|
||||
|
||||
<Item title="📁 PROJECT 工程表">
|
||||
- `id`:唯一标识
|
||||
- `user_id`:外键关联用户
|
||||
- `name` / `description`:工程信息
|
||||
</Item>
|
||||
|
||||
<Item title="🎨 PROJECT_STYLE 风格表">
|
||||
- `project_id`:一对一关联工程
|
||||
- `kv_pairs`:JSON 存储风格键值对
|
||||
- 支持 `custom:` 前缀自定义标签
|
||||
</Item>
|
||||
|
||||
<Item title="📦 TASK + ASSET 任务/素材表">
|
||||
- Task:`id` / `project_id` / `prompt` / `status` / `style_override`
|
||||
- Asset:`id` / `task_id` / `file_url` / `metadata`
|
||||
- 文件存储:七牛云 Kodo,CDN 签名访问
|
||||
</Item>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,32 @@
|
||||
# 请求去重 + 实时推送
|
||||
|
||||
两项关键的工程优化
|
||||
|
||||
<Item title="🔍 请求去重(Request Dedup)">
|
||||
|
||||
- **策略**:`hash(prompt + assetType + params)` 生成唯一键
|
||||
- **存储**:`sync.Map` 内存缓存,TTL 自动过期
|
||||
- **逻辑**:相同参数的并发请求自动合并,返回已有 `taskId`
|
||||
- **效果**:避免重复生成,节省 API 调用成本,提升用户体验
|
||||
|
||||
</Item>
|
||||
|
||||
<Item title="📡 WebSocket 实时推送">
|
||||
|
||||
- 用户建立 `ws://host/api/v1/tasks/:taskId/ws` 连接
|
||||
- 管线各阶段执行时推送实时状态消息:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "progress",
|
||||
"stage": "asset_generator",
|
||||
"progress": 45,
|
||||
"message": "正在生成素材..."
|
||||
}
|
||||
```
|
||||
|
||||
- 质检重试时推送额外信息:重试次数、重试原因
|
||||
- 管线完成时推送最终结果:素材 URL、元数据
|
||||
- **兼容方案**:同时支持 HTTP 轮询(`GET /api/v1/tasks/:taskId`)
|
||||
|
||||
</Item>
|
||||
@@ -0,0 +1,40 @@
|
||||
# 部署架构
|
||||
|
||||
Docker Compose 双容器 + 一键部署
|
||||
|
||||
```mermaid {scale: 0.8}
|
||||
graph TB
|
||||
subgraph Docker Compose
|
||||
A[nginx 容器<br/>前端静态文件 + 反向代理]
|
||||
B[app 容器<br/>Go 后端 + SQLite]
|
||||
end
|
||||
A -->|proxy_pass| B
|
||||
B --> C[七牛云 Kodo<br/>素材文件存储]
|
||||
B --> D[DeepSeek LLM<br/>提示词优化]
|
||||
B --> E[Stability AI<br/>文生图 API]
|
||||
User -->|HTTP| A
|
||||
```
|
||||
|
||||
<Item title="🐳 容器化方案">
|
||||
|
||||
- **nginx 容器**:Vite 构建产物 + 反向代理 `/api` 到后端
|
||||
- **app 容器**:Go 二进制 + SQLite 数据库文件挂载
|
||||
- **网络**:Docker 内部网络通信,nginx 暴露 8080 端口
|
||||
|
||||
</Item>
|
||||
|
||||
<Item title="🚀 一键部署">
|
||||
|
||||
```bash
|
||||
# 构建并启动
|
||||
docker compose up -d --build
|
||||
|
||||
# 或使用部署脚本
|
||||
./deploy.sh
|
||||
```
|
||||
|
||||
- Gitee CI/CD 自动触发:push → 构建 → 部署
|
||||
- SQLite 嵌入式数据库,无需额外数据库服务
|
||||
- 配置通过环境变量 / `.env` 文件注入
|
||||
|
||||
</Item>
|
||||
@@ -0,0 +1,47 @@
|
||||
# Eino 管线编排 — compose.Graph
|
||||
|
||||
四阶段智能体协作的核心实现
|
||||
|
||||
<div class="mt-2">
|
||||
|
||||
```go {all|1-8|10-15|17-22|24-28}
|
||||
// 类型定义
|
||||
type PipelineInput struct {
|
||||
UserID string
|
||||
ProjectID string
|
||||
TaskID string
|
||||
Prompt string
|
||||
AssetType string
|
||||
StyleMap map[string]string
|
||||
}
|
||||
|
||||
type PipelineState struct {
|
||||
OptimizedPrompt string
|
||||
ImageURL string
|
||||
QualityPassed bool
|
||||
RetryCount int
|
||||
}
|
||||
|
||||
type PipelineOutput struct {
|
||||
AssetURL string
|
||||
Metadata map[string]any
|
||||
}
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
<v-clicks>
|
||||
|
||||
<Item title="graph.Build() — 构建管线">
|
||||
使用 `compose.NewGraph[PipelineInput, PipelineOutput]()` 创建有向图,依次注册四个节点:PromptOptimizer → AssetGenerator → QualitySupervisor → FormatAdapter。质检节点支持条件分支:通过则进入格式适配,不通过则回退到提示词优化。
|
||||
</Item>
|
||||
|
||||
<Item title="stateHandler — 状态管理">
|
||||
通过 `AddLambda` 注册状态处理器,在节点间传递优化后的提示词、图片 URL、重试计数等状态。质检节点根据 `RetryCount` 决定重优化还是降级输出。
|
||||
</Item>
|
||||
|
||||
<Item title="graph.Invoke() — 执行管线">
|
||||
传入 `PipelineInput`,管线自动按拓扑顺序执行各节点。每个节点执行完成后通过回调更新进度(5% → 25% → 60% → 80% → 100%)。
|
||||
</Item>
|
||||
|
||||
</v-clicks>
|
||||
@@ -0,0 +1,29 @@
|
||||
# 核心亮点总结
|
||||
|
||||
<v-clicks>
|
||||
|
||||
<Item title="🤖 多智能体协作管线">
|
||||
Eino `compose.Graph` 编排四阶段智能体,支持质检重试(最多 3 次)与降级输出。每个节点独立可测试、可替换。
|
||||
</Item>
|
||||
|
||||
<Item title="🧠 提示词优化 Agent">
|
||||
Eino Chain 驱动,支持任意 OpenAI 兼容 API(默认 DeepSeek)。无 API Key 自动回退模板,保证功能可用。
|
||||
</Item>
|
||||
|
||||
<Item title="📡 实时进度推送">
|
||||
WebSocket 推送管线各阶段状态、进度百分比与质检重试信息。兼容 HTTP 轮询方案。
|
||||
</Item>
|
||||
|
||||
<Item title="🔍 请求去重">
|
||||
`hash(prompt + assetType + params)` + `sync.Map` 缓存,相同参数并发请求自动合并,节省 API 调用成本。
|
||||
</Item>
|
||||
|
||||
<Item title="🎨 工程级风格系统">
|
||||
两层风格架构(Project Style + Task Override),六个维度预设键 + 自定义标签,保证素材风格一致性。
|
||||
</Item>
|
||||
|
||||
<Item title="🚀 一键部署">
|
||||
Docker Compose 双容器架构 + Gitee CI/CD 自动部署。SQLite 嵌入式数据库,零外部依赖。
|
||||
</Item>
|
||||
|
||||
</v-clicks>
|
||||
@@ -0,0 +1,34 @@
|
||||
# 核心生成管线
|
||||
|
||||
基于 Eino `compose.Graph` 编排的四阶段智能体协作管线
|
||||
|
||||
```mermaid {scale: 0.75}
|
||||
graph LR
|
||||
A[用户输入] --> B[PromptOptimizer<br/>提示词优化]
|
||||
B --> C[AssetGenerator<br/>素材生成]
|
||||
C --> D{QualitySupervisor<br/>质检}
|
||||
D -->|通过| E[FormatAdapter<br/>格式适配]
|
||||
D -->|不通过| B
|
||||
E --> F[输出素材]
|
||||
D -->|重试 ≥ 3| E
|
||||
```
|
||||
|
||||
<v-clicks>
|
||||
|
||||
<Item title="① PromptOptimizer — 提示词优化">
|
||||
合并工程风格 + 任务风格覆盖,将用户描述转化为三段式规范提示词(主体描述 + 风格约束 + 技术规格)。调用 Eino Chain 驱动的 LLM 优化,无 API Key 时自动回退模板。
|
||||
</Item>
|
||||
|
||||
<Item title="② AssetGenerator — 素材生成">
|
||||
调用 OpenAI 兼容的文生图 API(默认 Stability AI),根据优化后的提示词生成素材。支持 `/v1/images/generations` 标准接口。
|
||||
</Item>
|
||||
|
||||
<Item title="③ QualitySupervisor — 质检">
|
||||
使用视觉模型自动检测生成结果,不合格则触发重优化流程(最多 3 次)。超过重试次数后降级输出当前最优结果。
|
||||
</Item>
|
||||
|
||||
<Item title="④ FormatAdapter — 格式适配">
|
||||
组装输出素材与元数据,支持 Spritesheet 打包。素材上传至七牛云 Kodo,返回 CDN 访问链接。
|
||||
</Item>
|
||||
|
||||
</v-clicks>
|
||||
@@ -0,0 +1,33 @@
|
||||
# 痛点:2D 游戏素材制作
|
||||
|
||||
<div class="mt-4">
|
||||
|
||||
<Item title="🎨 美术成本高">
|
||||
|
||||
- 像素画 / 手绘需要专业美术人员,独立开发者难以负担
|
||||
- 外包费用高,单张精绘素材 50-500 元不等
|
||||
- 迭代周期长,试错成本高 —— 一次修改可能需要数天
|
||||
|
||||
</Item>
|
||||
|
||||
<Item title="🔧 管线适配难">
|
||||
|
||||
- 生成素材尺寸 / 格式不统一,无法直接导入游戏引擎
|
||||
- 精灵表(Spritesheet)需手动拆分与对齐
|
||||
- 多张素材之间风格一致性难以保证
|
||||
|
||||
</Item>
|
||||
|
||||
<Item title="🤖 现有 AI 工具的局限">
|
||||
|
||||
- 通用文生图模型缺乏游戏素材领域知识
|
||||
- 无法理解 "像素风"、"赛璐璐" 等游戏美术术语
|
||||
- 输出结果不可控,没有质检和重试机制
|
||||
|
||||
</Item>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="mt-4 text-center text-gray-400">
|
||||
<b>核心诉求</b>:低门槛 · 风格一致 · 管线友好 · 质量可控
|
||||
</div>
|
||||
@@ -0,0 +1,29 @@
|
||||
# 提示词优化 Agent
|
||||
|
||||
Eino Chain 驱动的智能提示词生成
|
||||
|
||||
```mermaid {scale: 0.8}
|
||||
graph LR
|
||||
A[用户描述] --> B[风格合并]
|
||||
B --> C[三段式组装]
|
||||
C --> D[LLM 优化]
|
||||
D --> E[最终提示词]
|
||||
F[工程风格] --> B
|
||||
G[任务覆盖] --> B
|
||||
H[重试注入] --> D
|
||||
```
|
||||
|
||||
<Item title="① 风格合并">
|
||||
`finalStyle = merge(projectStyle, taskStyle)` — 工程风格为基底,任务风格逐键覆盖。自定义标签(`custom:` 前缀)自动提取。
|
||||
</Item>
|
||||
|
||||
<Item title="② 三段式提示词组装">
|
||||
将合并后的风格信息组装为三段式规范提示词:
|
||||
- **主体描述**:用户输入的角色/场景描述
|
||||
- **风格约束**:美术风格、色调、线条等风格键
|
||||
- **技术规格**:尺寸、格式、透明背景等引擎适配参数
|
||||
</Item>
|
||||
|
||||
<Item title="③ LLM 优化 + 回退机制">
|
||||
调用 Eino Chain 将三段式提示词发给 DeepSeek 等 LLM 进行润色优化。**无 API Key 时自动回退到模板生成**,保证功能可用。优化失败时注入重试上下文,指导模型修正。
|
||||
</Item>
|
||||
@@ -0,0 +1,32 @@
|
||||
# 路线图
|
||||
|
||||
<div class="grid grid-cols-2 gap-6 mt-4">
|
||||
|
||||
<Item title="✅ 已完成">
|
||||
|
||||
- 提示词优化 Agent(Eino Chain)
|
||||
- 多智能体生成管线(Eino Graph)
|
||||
- 工程风格系统 + 任务级覆盖
|
||||
- 用户认证(JWT + bcrypt)
|
||||
- 异步任务 + 进度轮询
|
||||
- 素材帧预览、GIF 动画与导出
|
||||
- 自定义标签系统
|
||||
- Docker Compose 部署
|
||||
- 请求去重 + 降级兜底
|
||||
|
||||
</Item>
|
||||
|
||||
<Item title="🔲 规划中">
|
||||
|
||||
- WebSocket 实时进度推送
|
||||
- 批量生成与队列调度
|
||||
- 文生图多模型适配(DALL-E、Midjourney)
|
||||
- 素材版本管理与历史记录
|
||||
- 分布式令牌桶限流(Redis + Lua)
|
||||
- 自定义协程池(NumCPU × 4 workers)
|
||||
- RabbitMQ 消息队列解耦
|
||||
- Prometheus 监控 + Grafana 看板
|
||||
|
||||
</Item>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,29 @@
|
||||
# gen2D 的解决方案
|
||||
|
||||
<div class="mt-4">
|
||||
|
||||
| 输入 | 处理 | 输出 |
|
||||
|------|------|------|
|
||||
| 自然语言描述 + 风格参数 | 多智能体协作管线 | Sprite、背景、UI 元素、动画帧 |
|
||||
|
||||
</div>
|
||||
|
||||
<v-clicks>
|
||||
|
||||
<Item title="🗣️ 自然语言驱动">
|
||||
用文字描述你想要的素材,AI 自动理解需求并生成。支持中英文,无需编写 Prompt 工程。
|
||||
</Item>
|
||||
|
||||
<Item title="🎨 风格一致性">
|
||||
工程级风格预设系统(Project Style)+ 任务级覆盖(Task Override),保证同一项目素材风格统一。
|
||||
</Item>
|
||||
|
||||
<Item title="📦 管线友好">
|
||||
标准尺寸输出,适配 Unity / Godot 等主流引擎。自动组装 Spritesheet,附带元数据。
|
||||
</Item>
|
||||
|
||||
<Item title="✅ 质量可控">
|
||||
多智能体质检(QualitySupervisor)自动检测不合格素材,触发重优化(最多 3 次),最终降级兜底。
|
||||
</Item>
|
||||
|
||||
</v-clicks>
|
||||
@@ -0,0 +1,35 @@
|
||||
# 预设风格键一览
|
||||
|
||||
六个维度覆盖游戏素材的核心视觉属性
|
||||
|
||||
<div class="grid grid-cols-3 gap-4 mt-4">
|
||||
|
||||
<Item title="🎨 美术风格 artStyle">
|
||||
pixel(像素)、cartoon(卡通)、vector(矢量)、realistic(写实)、flat(扁平)、anime(动漫)
|
||||
</Item>
|
||||
|
||||
<Item title="🌈 色调 palette">
|
||||
warm(暖色)、cool(冷色)、vibrant(鲜艳)、muted(灰暗)、pastel(粉彩)、monochrome(单色)
|
||||
</Item>
|
||||
|
||||
<Item title="✏️ 线条 lineWeight">
|
||||
thin(细线)、medium(中等)、thick(粗线)、none(无线条)、sketch(手绘感)
|
||||
</Item>
|
||||
|
||||
<Item title="🏞️ 场景 scene">
|
||||
forest(森林)、dungeon(地牢)、city(城市)、space(太空)、underwater(水下)、desert(沙漠)
|
||||
</Item>
|
||||
|
||||
<Item title="💡 光照 lighting">
|
||||
bright(明亮)、dramatic(戏剧)、neon(霓虹)、soft(柔光)、sunset(日落)、dark(暗调)
|
||||
</Item>
|
||||
|
||||
<Item title="🎭 情绪 mood">
|
||||
cheerful(欢快)、dark(暗黑)、epic(史诗)、calm(宁静)、mysterious(神秘)、playful(活泼)
|
||||
</Item>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="mt-4 text-sm text-gray-400">
|
||||
支持自定义标签:<code>custom:</code> 前缀的键值对会被自动提取到提示词中
|
||||
</div>
|
||||
@@ -0,0 +1,35 @@
|
||||
# 风格系统 — 两层架构
|
||||
|
||||
保证一致性与灵活性的风格管理方案
|
||||
|
||||
<Item title="🏗️ 工程风格(Project Style)">
|
||||
|
||||
- 工程级别的全局风格配置,存储在 `project_style` 表中
|
||||
- 以 Key-Value 对(kvPairs)形式存储,如 `artStyle=pixel`, `palette=warm`
|
||||
- 同一工程下所有素材自动继承,保证风格统一
|
||||
|
||||
</Item>
|
||||
|
||||
<Item title="🔀 任务风格覆盖(Task Override))">
|
||||
|
||||
- 单次生成任务可覆盖部分风格键,仅指定需要变化的项
|
||||
- 未指定的键自动继承工程风格
|
||||
- 适合在同一工程下生成不同变体(如:同一角色的不同表情)
|
||||
|
||||
</Item>
|
||||
|
||||
<div class="mt-6">
|
||||
|
||||
<Item title="⚙️ 合并逻辑">
|
||||
|
||||
```
|
||||
finalStyle = merge(projectStyle, taskStyle)
|
||||
```
|
||||
|
||||
- 工程风格作为基底,任务风格逐键覆盖
|
||||
- 自定义标签(`custom:` 前缀)自动提取到 Prompt 中
|
||||
- 合并后的风格键注入三段式提示词的风格约束段
|
||||
|
||||
</Item>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,52 @@
|
||||
# 技术栈一览
|
||||
|
||||
<div class="grid grid-cols-3 gap-6 mt-4">
|
||||
|
||||
<Item title="⚙️ 后端">
|
||||
|
||||
- **语言**:Go 1.26
|
||||
- **框架**:Gin 1.12
|
||||
- **AI 编排**:Eino 0.8(compose.Graph)
|
||||
- **ORM**:GORM + SQLite
|
||||
- **认证**:JWT + bcrypt
|
||||
- **配置**:Viper(多层配置)
|
||||
- **存储**:七牛云 Kodo
|
||||
|
||||
</Item>
|
||||
|
||||
<Item title="🖥️ 前端">
|
||||
|
||||
- **框架**:React 18 + TypeScript 5.6
|
||||
- **构建**:Vite 6
|
||||
- **状态管理**:Zustand
|
||||
- **路由**:react-router v7
|
||||
- **样式**:CSS Modules + 暗色主题
|
||||
- **API 层**:封装 Fetch + 类型安全
|
||||
|
||||
</Item>
|
||||
|
||||
<Item title="🏗️ 基础设施">
|
||||
|
||||
- **容器化**:Docker 多阶段构建
|
||||
- **反向代理**:nginx
|
||||
- **CI/CD**:Gitee Actions 自动部署
|
||||
- **数据库**:SQLite 嵌入式
|
||||
- **文件存储**:七牛云 Kodo CDN
|
||||
- **通信**:REST API + WebSocket
|
||||
|
||||
</Item>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="mt-6">
|
||||
|
||||
<Item title="📐 架构分层原则">
|
||||
|
||||
- **Handler 层**(薄):请求校验、参数绑定、错误处理
|
||||
- **Service 层**(厚):业务逻辑、管线编排、风格合并
|
||||
- **Model 层**(数据):GORM 实体定义、数据库操作
|
||||
- **日志系统**:基于 `log/slog`,分级别记录(Debug / Info / Warn / Error)
|
||||
|
||||
</Item>
|
||||
|
||||
</div>
|
||||
+31
-235
@@ -23,272 +23,68 @@ AI 驱动的 2D 游戏素材生成工具
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
# 痛点:2D 游戏素材制作
|
||||
|
||||
<div class="grid grid-cols-2 gap-8 mt-6">
|
||||
<div>
|
||||
|
||||
### 🎨 美术成本高
|
||||
|
||||
- 像素画 / 手绘需专业美术人员
|
||||
- 独立开发者难以负担外包费用
|
||||
- 迭代周期长,试错成本高
|
||||
|
||||
</div>
|
||||
<div>
|
||||
|
||||
### 🔧 管线适配难
|
||||
|
||||
- 生成素材尺寸 / 格式不统一
|
||||
- 精灵表需手动拆分与对齐
|
||||
- 风格一致性难以保证
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-6 text-center text-gray-400">
|
||||
<b>核心诉求</b>:低门槛、风格一致、管线友好
|
||||
</div>
|
||||
|
||||
src: ./pages/problem.md
|
||||
---
|
||||
|
||||
# gen2D 的解决方案
|
||||
|
||||
<div class="mt-4">
|
||||
|
||||
| 输入 | 处理 | 输出 |
|
||||
|------|------|------|
|
||||
| 文本描述 + 风格参数 | 多智能体协作管线 | Sprite、背景、UI 元素、动画帧 |
|
||||
|
||||
</div>
|
||||
|
||||
<v-clicks>
|
||||
|
||||
- **自然语言驱动** — 用文字描述你想要的素材,AI 自动生成
|
||||
- **风格一致性** — 工程级风格预设,保证同一项目素材风格统一
|
||||
- **管线友好** — 标准尺寸、格式适配 Unity / Godot 等主流引擎
|
||||
- **质量可控** — 自动质检 + 重试机制,不合格素材自动优化
|
||||
|
||||
</v-clicks>
|
||||
---
|
||||
src: ./pages/solution.md
|
||||
---
|
||||
|
||||
---
|
||||
layout: section
|
||||
section: '产品演示'
|
||||
src: ./pages/pipeline.md
|
||||
---
|
||||
|
||||
# 产品演示
|
||||
|
||||
---
|
||||
layout: default
|
||||
src: ./pages/style-system.md
|
||||
---
|
||||
|
||||
# 核心生成管线
|
||||
|
||||
基于 Eino `compose.Graph` 的四阶段智能体协作管线
|
||||
|
||||
```mermaid {scale: 0.85}
|
||||
graph LR
|
||||
A[用户输入] --> B[PromptOptimizer<br/>提示词优化]
|
||||
B --> C[AssetGenerator<br/>素材生成]
|
||||
C --> D{QualitySupervisor<br/>质检}
|
||||
D -->|通过| E[FormatAdapter<br/>格式适配]
|
||||
D -->|不通过| B
|
||||
E --> F[输出素材]
|
||||
D -->|重试 ≥ 3| E
|
||||
```
|
||||
|
||||
<v-clicks>
|
||||
|
||||
- **PromptOptimizer** — 合并工程风格 + 任务风格覆盖,生成三段式规范提示词
|
||||
- **AssetGenerator** — 调用文生图 API 生成素材
|
||||
- **QualitySupervisor** — 自动质检,不合格触发重优化(最多 3 次)
|
||||
- **FormatAdapter** — 组装输出素材与元数据,降级兜底
|
||||
|
||||
</v-clicks>
|
||||
|
||||
---
|
||||
layout: two-cols
|
||||
src: ./pages/style-keys.md
|
||||
---
|
||||
|
||||
# 风格系统
|
||||
|
||||
两层风格架构,保证一致性与灵活性
|
||||
|
||||
### 工程风格(Project Style)
|
||||
|
||||
- 工程级别的风格配置
|
||||
- 保证同一工程下所有素材风格一致
|
||||
|
||||
### 任务风格覆盖(Task Override)
|
||||
|
||||
- 单次生成任务的风格差异
|
||||
- 仅覆盖需要变化的键
|
||||
|
||||
<div class="mt-4 text-sm text-gray-400">
|
||||
合并逻辑:finalStyle = merge(project, task)
|
||||
</div>
|
||||
|
||||
::right::
|
||||
|
||||
<div class="pl-4 text-sm mt-12">
|
||||
|
||||
### 预设风格键
|
||||
|
||||
| 分类 | 示例 |
|
||||
|------|------|
|
||||
| 美术风格 | pixel, cartoon, vector |
|
||||
| 色调 | warm, cool, vibrant |
|
||||
| 线条 | thin, medium, thick |
|
||||
| 场景 | forest, dungeon, city |
|
||||
| 光照 | bright, dramatic, neon |
|
||||
| 情绪 | cheerful, dark, epic |
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
layout: section
|
||||
section: '技术架构'
|
||||
src: ./pages/architecture.md
|
||||
---
|
||||
|
||||
# 技术架构
|
||||
|
||||
---
|
||||
layout: two-cols
|
||||
src: ./pages/tech-stack.md
|
||||
---
|
||||
|
||||
# 系统架构
|
||||
|
||||
<div class="text-sm">
|
||||
|
||||
```
|
||||
┌─────────────────────────────┐
|
||||
│ Frontend (React + Vite) │
|
||||
│ 画廊 / 工作台 / 结果预览 │
|
||||
└──────────────┬──────────────┘
|
||||
│ HTTP / WS
|
||||
┌──────────────▼──────────────┐
|
||||
│ Backend (Go + Gin + Eino) │
|
||||
│ ┌───────────────────────┐ │
|
||||
│ │ Eino Graph Pipeline │ │
|
||||
│ │ 4-Stage Agent Flow │ │
|
||||
│ └───────────────────────┘ │
|
||||
│ ┌────┐ ┌─────┐ ┌──────┐ │
|
||||
│ │ DB │ │ Kodo│ │ LLM │ │
|
||||
│ └────┘ └─────┘ └──────┘ │
|
||||
└─────────────────────────────┘
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
::right::
|
||||
|
||||
<div class="pl-4 text-sm mt-12">
|
||||
|
||||
### 技术栈
|
||||
|
||||
| 层 | 技术 |
|
||||
|----|------|
|
||||
| 后端 | Go + Gin + Eino |
|
||||
| ORM | GORM + SQLite |
|
||||
| 认证 | JWT + bcrypt |
|
||||
| 存储 | 七牛云 Kodo |
|
||||
| 前端 | React + TypeScript |
|
||||
| 状态 | Zustand |
|
||||
| 构建 | Vite 6 |
|
||||
| 部署 | Docker Compose |
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
section: '核心实现'
|
||||
src: ./pages/eino-graph.md
|
||||
---
|
||||
|
||||
# 核心亮点
|
||||
|
||||
<v-clicks>
|
||||
|
||||
- **多智能体协作管线** — Eino `compose.Graph` 编排四阶段智能体,支持质检重试与降级输出
|
||||
- **提示词优化 Agent** — Eino Chain 驱动,支持任意 OpenAI 兼容 API,无 key 自动回退模板
|
||||
- **实时进度推送** — WebSocket 推送管线各阶段状态、进度与质检重试信息
|
||||
- **请求去重** — 相同 prompt + 参数的并发请求自动合并,返回已有 taskId
|
||||
- **异步任务模型** — goroutine 并发控制,支持失败重试(最多 3 次)与降级输出
|
||||
- **一键部署** — Docker Compose 双容器架构 + deploy.sh 脚本
|
||||
|
||||
</v-clicks>
|
||||
|
||||
---
|
||||
layout: default
|
||||
src: ./pages/prompt-agent.md
|
||||
---
|
||||
|
||||
# 技术栈一览
|
||||
|
||||
<div class="grid grid-cols-3 gap-6 mt-4 text-sm">
|
||||
<div>
|
||||
|
||||
### 后端
|
||||
|
||||
- Go 1.26 + Gin
|
||||
- Eino 管线编排
|
||||
- GORM + SQLite
|
||||
- JWT 认证
|
||||
- 七牛云 Kodo
|
||||
|
||||
</div>
|
||||
<div>
|
||||
|
||||
### 前端
|
||||
|
||||
- React 18 + TS
|
||||
- Vite 6
|
||||
- Zustand 状态管理
|
||||
- react-router v7
|
||||
- CSS Modules 主题
|
||||
|
||||
</div>
|
||||
<div>
|
||||
|
||||
### 基础设施
|
||||
|
||||
- Docker 多阶段构建
|
||||
- nginx 反向代理
|
||||
- Gitee CI/CD
|
||||
- SQLite 嵌入式 DB
|
||||
- 暗色主题支持
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
---
|
||||
src: ./pages/async-task.md
|
||||
---
|
||||
|
||||
# 路线图
|
||||
---
|
||||
src: ./pages/dedup-ws.md
|
||||
---
|
||||
|
||||
<div class="grid grid-cols-2 gap-8 mt-4">
|
||||
<div>
|
||||
---
|
||||
src: ./pages/data-model.md
|
||||
---
|
||||
|
||||
### ✅ 已完成
|
||||
---
|
||||
src: ./pages/deployment.md
|
||||
---
|
||||
|
||||
- 提示词优化 Agent(Eino Chain)
|
||||
- 多智能体生成管线(Eino Graph)
|
||||
- 工程风格系统 + 任务级覆盖
|
||||
- 用户认证(JWT + bcrypt)
|
||||
- 异步任务 + 实时进度推送
|
||||
- 素材帧预览、GIF 动画与导出
|
||||
- 自定义标签系统
|
||||
---
|
||||
section: '总结'
|
||||
src: ./pages/highlights.md
|
||||
---
|
||||
|
||||
</div>
|
||||
<div>
|
||||
|
||||
### 🔲 规划中
|
||||
|
||||
- WebSocket 实时进度推送
|
||||
- 批量生成与队列调度
|
||||
- 文生图多模型适配
|
||||
- 素材版本管理与历史记录
|
||||
- 分布式令牌桶限流
|
||||
- 自定义协程池
|
||||
- RabbitMQ 消息队列
|
||||
|
||||
</div>
|
||||
</div>
|
||||
---
|
||||
src: ./pages/roadmap.md
|
||||
---
|
||||
|
||||
---
|
||||
layout: center
|
||||
|
||||
Reference in New Issue
Block a user