diff --git a/decks/gen2D/pages/architecture.md b/decks/gen2D/pages/architecture.md
index 18e06d1..6fabe36 100644
--- a/decks/gen2D/pages/architecture.md
+++ b/decks/gen2D/pages/architecture.md
@@ -1,5 +1,9 @@
# 系统架构全景
-
+
+
+
diff --git a/decks/gen2D/pages/async-deep-dive.md b/decks/gen2D/pages/async-deep-dive.md
new file mode 100644
index 0000000..944e5be
--- /dev/null
+++ b/decks/gen2D/pages/async-deep-dive.md
@@ -0,0 +1,71 @@
+# 异步任务 — 队列与调度
+
+FIFO 串行执行,信号驱动调度
+
+
+
+```go {1-6|8-12|all}
+type TaskQueue struct {
+ mu sync.Mutex
+ jobs []*TaskJob
+ ready chan struct{} // 新任务到达信号
+ stop chan struct{} // 优雅关闭信号
+}
+
+func (q *TaskQueue) Enqueue(job *TaskJob) {
+ q.mu.Lock()
+ q.jobs = append(q.jobs, job)
+ q.mu.Unlock()
+ q.ready <- struct{}{} // 唤醒 run() 协程
+}
+```
+
+
+
+
+
+-
+提交任务入队并发送信号。`run()` 协程阻塞等待信号,收到后调用 `processNext()` 取队首任务执行。FIFO 保证任务按提交顺序串行处理。
+
+
+-
+`TaskJob` 封装了 `context.Context` 和执行函数。闭包捕获任务参数,context 控制超时和取消,确保每个任务独立且可中断。
+
+
+
+
+---
+
+# 进度推送与 WebSocket
+
+Context 注入 + 多通道推送
+
+
+
+```go {1-3|5-8|all}
+func WithProgressReporter(ctx context.Context, r ProgressReporter) context.Context {
+ return context.WithValue(ctx, progressCtxKey, r)
+}
+
+// 管线节点中使用
+reporter := GetProgressReporter(ctx)
+reporter.Report(Progress{Stage: "prompt", Percent: 25})
+```
+
+
+
+
+
+-
+5%(任务创建)→ 25%(提示词优化完成)→ 60%(素材生成完成)→ 80%(质检通过)→ 100%(格式适配 + 上传)。每个阶段由对应节点触发回调。
+
+
+-
+**WebSocket**:`ws://host/api/v1/tasks/:taskId/ws`,实时推送进度和结果。**HTTP 轮询**:`GET /api/v1/tasks/:taskId`,兼容降级方案。
+
+
+
+
+
+
+
diff --git a/decks/gen2D/pages/async-task.md b/decks/gen2D/pages/async-task.md
index e38865f..fcdec5c 100644
--- a/decks/gen2D/pages/async-task.md
+++ b/decks/gen2D/pages/async-task.md
@@ -2,6 +2,8 @@
提交即返回,后台并发执行
+
+
-
1. 提交请求 → 创建 Task(`running`)→ 立即返回 `taskId`
@@ -22,3 +24,5 @@
质检重试最多 3 次,任务级重试 1 次,超限降级输出。
+
+
diff --git a/decks/gen2D/pages/data-model.md b/decks/gen2D/pages/data-model.md
index bc4246c..7254275 100644
--- a/decks/gen2D/pages/data-model.md
+++ b/decks/gen2D/pages/data-model.md
@@ -3,20 +3,20 @@
四表结构,清晰的实体关系
-
+
-
-- 用户:`id`(base62)、`username`、`password_hash`(bcrypt)
-- 工程:`id`、`user_id`、`name`、`description`
+用户:`id`(base62)、`username`、`password_hash`(bcrypt)
+工程:`id`、`user_id`、`name`
-
-- 风格表:`project_id` 一对一,`kv_pairs` JSON 存储
-- 任务:`prompt`、`status`、`style_override`
-- 素材:`file_url`、`metadata`,存于七牛云 Kodo
+风格表:`project_id` 一对一,`kv_pairs` JSON
+任务:`prompt`、`status`、`progress`
+素材:`file_url`、`metadata`
diff --git a/decks/gen2D/pages/dedup-ws.md b/decks/gen2D/pages/dedup-ws.md
index d9270cd..f4bd927 100644
--- a/decks/gen2D/pages/dedup-ws.md
+++ b/decks/gen2D/pages/dedup-ws.md
@@ -2,6 +2,8 @@
两项关键的工程优化
+
+
-
`hash(prompt + assetType + params)` 生成唯一键,`sync.Map` 内存缓存。相同参数并发请求自动合并,返回已有 `taskId`,节省 API 调用成本。
@@ -9,3 +11,5 @@
-
建立 `ws://host/api/v1/tasks/:taskId/ws` 连接,管线各阶段推送进度、质检重试信息、最终结果。同时兼容 HTTP 轮询方案。
+
+
diff --git a/decks/gen2D/pages/deployment.md b/decks/gen2D/pages/deployment.md
index 185d516..abb2ab8 100644
--- a/decks/gen2D/pages/deployment.md
+++ b/decks/gen2D/pages/deployment.md
@@ -3,13 +3,17 @@
Docker Compose 双容器 + 一键部署
-
+
+
+
-
-nginx 容器:Vite 构建产物 + 反向代理 `/api`。app 容器:Go 二进制 + SQLite 挂载。内部网络通信,nginx 暴露 8080 端口。
+nginx 容器:Vite 构建产物 + 反向代理 `/api`。app 容器:Go 二进制 + SQLite 挂载。nginx 暴露 8080 端口。
-
-`docker compose up -d --build` 或 `./deploy.sh`。Gitee CI/CD 自动触发,SQLite 嵌入式零外部依赖。
+`docker compose up -d --build` 或 `./deploy.sh`。Gitee CI/CD 自动触发,SQLite 零外部依赖。
+
+
diff --git a/decks/gen2D/pages/eino-deep-dive.md b/decks/gen2D/pages/eino-deep-dive.md
new file mode 100644
index 0000000..223ac71
--- /dev/null
+++ b/decks/gen2D/pages/eino-deep-dive.md
@@ -0,0 +1,76 @@
+# Eino Graph 深入 — 构建与编排
+
+有向图构建与本地状态管理
+
+
+
+```go {1-5|7-11|all}
+g := compose.NewGraph[PipelineInput, PipelineOutput](
+ compose.WithGenLocalState(func(ctx context.Context) *PipelineState {
+ return &PipelineState{} // 每次调用获得全新状态
+ }),
+)
+
+g.AddLambdaNode(nodePromptOptimizer, &compose.Lambda{
+ StatePreHandler: preparePromptInput, // 从 state 读取输入
+ StatePostHandler: storePromptOutput, // 结果写回 state
+})
+```
+
+
+
+
+
+-
+每次 `graph.Invoke()` 调用生成独立的 `PipelineState`,避免并发调用间的状态污染。State 在节点间通过 Pre/Post Handler 流转。
+
+
+-
+PreHandler 从全局 State 提取当前节点所需字段;PostHandler 将节点输出写回 State。节点本身无状态,所有数据经 State 中转。
+
+
+
+
+---
+
+# Eino Graph 深入 — 分支路由与重试
+
+QualitySupervisor 驱动的条件分支
+
+
+
+```go {1-10|all}
+g.AddBranch(nodeQualitySupervisor, compose.NewGraphBranch(
+ func(ctx context.Context, _ PipelineInput) (string, error) {
+ var next string
+ _ = compose.ProcessState[*PipelineState](ctx,
+ func(_ context.Context, state *PipelineState) error {
+ next = state.NextNode // 质检结果决定路由
+ return nil
+ })
+ return next, nil
+ },
+ map[string]bool{
+ nodePromptOptimizer: true,
+ nodeFormatAdapter: true,
+ },
+))
+```
+
+
+
+
+
+-
+质检通过 → FormatAdapter 直接输出;不通过且 retry < 3 → PromptOptimizer 重新优化;不通过且 retry >= 3 → FormatAdapter 降级输出。
+
+
+-
+下图展示了完整的分支路由与重试机制,包括状态流转和降级路径。
+
+
+
+
+
+
+
diff --git a/decks/gen2D/pages/eino-graph.md b/decks/gen2D/pages/eino-graph.md
index 5cf84ee..23fd14e 100644
--- a/decks/gen2D/pages/eino-graph.md
+++ b/decks/gen2D/pages/eino-graph.md
@@ -2,7 +2,7 @@
-```go
+```go {all|1-4|6-10|all}
type PipelineInput struct {
UserID, ProjectID, TaskID string
Prompt, AssetType string
@@ -22,6 +22,8 @@ type PipelineOutput struct {
+
+
-
`compose.NewGraph` 创建有向图,注册四节点。质检节点条件分支:通过 → 格式适配,不通过 → 回退提示词优化。
@@ -29,3 +31,5 @@ type PipelineOutput struct {
-
传入 `PipelineInput`,按拓扑顺序执行。每节点完成回调更新进度(5% → 25% → 60% → 80% → 100%)。
+
+
diff --git a/decks/gen2D/pages/harness.md b/decks/gen2D/pages/harness.md
new file mode 100644
index 0000000..4da0a06
--- /dev/null
+++ b/decks/gen2D/pages/harness.md
@@ -0,0 +1,62 @@
+# 一致性保障 — 风格与管线
+
+多层一致性确保输出可控
+
+-
+Project Style(基底)+ Task Override(覆盖)→ `mergeStyle()` 逐键合并。工程风格定义全局基调,任务风格按需微调,互不干扰。
+
+
+
+
+```go
+func mergeStyle(projectStyle, taskStyle map[string]string) map[string]string {
+ result := make(map[string]string)
+ for k, v := range projectStyle { result[k] = v }
+ for k, v := range taskStyle { result[k] = v } // 覆盖
+ return result
+}
+```
+
+
+
+
+
+-
+Graph 强制拓扑顺序执行,State 每次调用独立生成。节点无状态,数据经 State 中转,避免并发污染。
+
+
+-
+QualitySupervisor 自动质检,不合格重试(最多 3 次),超限降级输出。确保最终产物始终可用。
+
+
+
+
+---
+
+# 一致性保障 — 数据与部署
+
+从存储到部署的全链路一致性
+
+
+
+-
+SQLite 单文件 ACID + GORM 事务包裹关键操作。CASCADE 删除保证级联清理,外键约束维护引用完整性。
+
+
+-
+格式:`prefix_base62`(如 `task_9bN4vR`)。`crypto/rand` 生成 base62 编码,全局唯一且可读。前缀标识实体类型,便于调试。
+
+
+-
+Docker Compose 双容器(nginx + app),确定性构建保证环境一致。CI/CD 推送 master 自动触发部署。
+
+
+-
+配置优先级:配置文件 → 环境变量 → 默认值。`Viper` 统一管理,开发/测试/生产环境无缝切换。
+
+
+
+
+
+
+
diff --git a/decks/gen2D/pages/highlights.md b/decks/gen2D/pages/highlights.md
index e887ced..c63bde4 100644
--- a/decks/gen2D/pages/highlights.md
+++ b/decks/gen2D/pages/highlights.md
@@ -1,5 +1,7 @@
# 核心亮点总结
+
+
-
Eino `compose.Graph` 编排四阶段智能体,支持质检重试(最多 3 次)与降级输出。
@@ -15,3 +17,5 @@ WebSocket 推送各阶段进度与质检信息。相同参数并发请求自动
-
两层风格架构(Project + Task Override)保证一致性。Docker Compose + Gitee CI/CD 零依赖部署。
+
+
diff --git a/decks/gen2D/pages/pipeline.md b/decks/gen2D/pages/pipeline.md
index 7e260a6..1d8d877 100644
--- a/decks/gen2D/pages/pipeline.md
+++ b/decks/gen2D/pages/pipeline.md
@@ -2,18 +2,26 @@
基于 Eino `compose.Graph` 编排的四阶段智能体协作管线
+
+
-
-合并工程风格 + 任务风格覆盖,生成三段式规范提示词。调用 Eino Chain 驱动 LLM 优化,无 Key 自动回退模板。
+合并工程风格 + 任务风格覆盖,生成三段式规范提示词。LLM 优化,无 Key 自动回退模板。
-
-调用 OpenAI 兼容的文生图 API(默认 Stability AI),根据优化后提示词生成素材。
+调用 OpenAI 兼容的文生图 API,根据优化后提示词生成素材。
--
-视觉模型自动质检,不合格触发重优化(最多 3 次)。通过后组装 Spritesheet + 元数据,上传七牛云 Kodo。
+
-
+视觉模型自动质检,不合格触发重优化(最多 3 次)。
-
-
+
-
+组装 Spritesheet + 元数据,上传七牛云 Kodo。
+
+
+
+
+
+
diff --git a/decks/gen2D/pages/problem.md b/decks/gen2D/pages/problem.md
index 0afd9d4..0f6e251 100644
--- a/decks/gen2D/pages/problem.md
+++ b/decks/gen2D/pages/problem.md
@@ -1,7 +1,9 @@
# 痛点:2D 游戏素材制作
+
+
-
-专业美术人员费用高,独立开发者难以负担。外包单张 50-500 元,迭代周期长,试错成本高。
+专业美术费用高,独立开发者难以负担。外包单张 50-500 元,迭代周期长。
-
@@ -9,9 +11,15 @@
-
-通用文生图模型缺乏游戏素材领域知识,无法理解"像素风"等术语,输出不可控,无质检重试。
+通用文生图模型缺乏游戏素材领域知识,无法理解"像素风"等术语,输出不可控。
-
+
+
+
核心诉求 :低门槛 · 风格一致 · 管线友好 · 质量可控
+
+
diff --git a/decks/gen2D/pages/prompt-agent.md b/decks/gen2D/pages/prompt-agent.md
index 78ed157..1069819 100644
--- a/decks/gen2D/pages/prompt-agent.md
+++ b/decks/gen2D/pages/prompt-agent.md
@@ -2,18 +2,22 @@
Eino Chain 驱动的智能提示词生成
+
+
-
-`finalStyle = merge(projectStyle, taskStyle)` — 工程风格为基底,任务风格逐键覆盖。自定义标签自动提取。
+`finalStyle = merge(projectStyle, taskStyle)` — 工程风格为基底,任务风格逐键覆盖。
-
-**主体描述**(用户输入)+ **风格约束**(美术风格、色调、线条)+ **技术规格**(尺寸、格式、透明背景)
+**【主题】** 画面主体与场景 + **【风格】** 艺术风格与视觉特征 + **【技术】** 分辨率、格式等参数
-
-调用 Eino Chain 发给 DeepSeek 润色。**无 API Key 自动回退模板**,失败时注入重试上下文。
+调用 Eino Chain 发给 DeepSeek 润色。无 API Key 自动回退模板,失败时注入重试上下文。
-
-
+
+
+
+
diff --git a/decks/gen2D/pages/ratelimit-lua.md b/decks/gen2D/pages/ratelimit-lua.md
new file mode 100644
index 0000000..aad333e
--- /dev/null
+++ b/decks/gen2D/pages/ratelimit-lua.md
@@ -0,0 +1,60 @@
+# 令牌桶 — Redis Lua 脚本
+
+原子操作,单次 Redis 往返
+
+
+
+```lua {1-2|4-8|10-14|all}
+local data = redis.call('HMGET', key, 'tokens', 'ts')
+local tokens = tonumber(data[1])
+local last_ts = tonumber(data[2])
+-- 首次访问,初始化满桶
+if tokens == nil then
+ tokens = burst
+ last_ts = now
+end
+-- 计算时间差,补充令牌
+local delta = now - last_ts
+if delta > 0 then
+ local refill = (delta * rate) / 1000
+ tokens = math.min(burst, tokens + refill)
+end
+```
+
+
+
+
+
+-
+整个令牌桶逻辑(读取 → 计算 → 扣减 → 写回)在 Redis 服务端原子执行,避免竞态条件。单次网络往返,性能最优。
+
+
+-
+**初始化**:首次访问设满桶令牌。**补充**:按时间差 × 速率补充,上限为 burst。**扣减**:请求到达时 tokens - 1,不足则拒绝。
+
+
+
+
+---
+
+# 限流中间件集成
+
+Gin 中间件 + 统一错误格式
+
+
-
+`func RateLimit(limiter Limiter, keyFunc func(c *gin.Context) string) gin.HandlerFunc` — 可配置的 key 提取函数,支持按用户ID、IP、端点等维度限流。
+
+
+
-
+
+- **用户级**:auth 路由组,key = userID,保护个人配额
+- **全局级**:`/generate` 端点,key = endpoint,保护总容量
+
+
+
+
-
+
+- 通过:设置 `X-RateLimit-Remaining` 头
+- 拒绝:HTTP 429 + `Retry-After` 头 + 统一 JSON 错误体
+
+
diff --git a/decks/gen2D/pages/ratelimit-overview.md b/decks/gen2D/pages/ratelimit-overview.md
new file mode 100644
index 0000000..8419d47
--- /dev/null
+++ b/decks/gen2D/pages/ratelimit-overview.md
@@ -0,0 +1,34 @@
+# 分布式限流 — 算法选型与架构
+
+保护 API 端点,防止资源滥用
+
+
+
+| 算法 | 优点 | 缺点 | 适用场景 |
+|------|------|------|----------|
+| 固定窗口计数器 | 实现简单 | 窗口边界突发 | 低精度场景 |
+| 滑动窗口 | 边界平滑 | 内存开销大 | 中等精度 |
+| 漏桶 | 严格平滑 | 无法应对突发 | 流量整形 |
+| **令牌桶** | **平滑 + 允许突发** | 实现稍复杂 | **API 限流** |
+
+
+
+
+
+-
+令牌按固定速率填充,请求消耗令牌。桶满时可应对短时突发流量,同时保持长期平均速率稳定。
+
+
+-
+**用户级**:per-user 维度,防止单用户滥用。**全局级**:per-endpoint 维度,保护后端服务总容量。两级独立配置,互不影响。
+
+
+-
+Redis 不可用时限流器自动放行(fail-open),保障核心业务不因限流组件故障而中断。
+
+
+
+
+
+
+
diff --git a/decks/gen2D/pages/roadmap.md b/decks/gen2D/pages/roadmap.md
index 7c5df1a..56d3d27 100644
--- a/decks/gen2D/pages/roadmap.md
+++ b/decks/gen2D/pages/roadmap.md
@@ -20,10 +20,10 @@
- WebSocket 实时进度推送
- 批量生成与队列调度
-- 文生图多模型适配(DALL-E、Midjourney)
+- 文生图多模型适配
- 素材版本管理与历史记录
- 分布式令牌桶限流(Redis + Lua)
-- 自定义协程池(NumCPU × 4 workers)
+- 自定义协程池
- RabbitMQ 消息队列解耦
- Prometheus 监控 + Grafana 看板
diff --git a/decks/gen2D/pages/solution.md b/decks/gen2D/pages/solution.md
index c21c729..6cdcbe6 100644
--- a/decks/gen2D/pages/solution.md
+++ b/decks/gen2D/pages/solution.md
@@ -6,12 +6,20 @@
--
-用文字描述素材需求,AI 自动生成。工程级风格预设保证同一项目素材风格统一。
+
-
+用文字描述素材需求,AI 自动生成。降低创作门槛。
--
-标准尺寸输出,适配 Unity / Godot。自动质检 + 重试(最多 3 次)+ 降级兜底。
+
-
+工程级风格预设保证同一项目素材风格统一。
+
+
+-
+标准尺寸输出,适配 Unity / Godot。
+
+
+-
+自动质检 + 重试(最多 3 次)+ 降级兜底。
diff --git a/decks/gen2D/pages/style-system.md b/decks/gen2D/pages/style-system.md
index bcc618b..3b3de96 100644
--- a/decks/gen2D/pages/style-system.md
+++ b/decks/gen2D/pages/style-system.md
@@ -2,8 +2,10 @@
保证一致性与灵活性的风格管理方案
+
+
-
-全局风格配置,以 kvPairs 存储(如 `artStyle=pixel`)。同一工程下所有素材自动继承,保证风格统一。
+全局风格配置,以 kvPairs 存储(如 `artStyle=pixel`)。同一工程下所有素材自动继承。
-
@@ -13,3 +15,10 @@
-
`finalStyle = merge(projectStyle, taskStyle)` — 工程风格为基底,任务风格逐键覆盖。自定义标签(`custom:` 前缀)自动提取注入提示词。
+
+
+
+
diff --git a/decks/gen2D/pages/tech-stack.md b/decks/gen2D/pages/tech-stack.md
index 8a8ccfe..4bacf23 100644
--- a/decks/gen2D/pages/tech-stack.md
+++ b/decks/gen2D/pages/tech-stack.md
@@ -36,3 +36,10 @@
+
+
diff --git a/decks/gen2D/public/async-task.svg b/decks/gen2D/public/async-task.svg
new file mode 100644
index 0000000..66f2b76
--- /dev/null
+++ b/decks/gen2D/public/async-task.svg
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Async Task Lifecycle
+
+
+
+ POST
+ /generate
+
+
+
+
+
+
+ Create Task
+ status = running
+ → DB insert
+
+
+
+
+ return taskId immediately
+
+
+
+ Background: goroutine
+
+
+
+
+
+
+ TaskQueue
+ FIFO
+ chan GenerateJob
+
+
+
+
+
+ jobs...
+
+
+
+
+
+
+ Pipeline Execution
+ 4-stage Eino pipeline
+ prompt → asset → quality → format
+
+
+
+
+
+ 5%
+
+ 25%
+
+ 60%
+
+ 80%
+
+ 100%
+
+
+
+
+
+
+ WebSocket Push
+ real-time progress updates
+
+
+
+
+
+
+ Client
+ ws:// .../progress
+
+
+
+
+
+
+
+
+
+
+ Save Assets
+ → disk / object store
+
+
+
+
+
+
+ Update DB (done)
+
+
+
+ status = done + assets
+
+
+
+
+ Sync flow
+
+ WebSocket push
+
+ Completion notify
+
+ Progress update
+
\ No newline at end of file
diff --git a/decks/gen2D/public/harness.svg b/decks/gen2D/public/harness.svg
new file mode 100644
index 0000000..0765518
--- /dev/null
+++ b/decks/gen2D/public/harness.svg
@@ -0,0 +1,69 @@
+
+
+ 一致性保障 — 全链路设计
+
+
+ 风格一致性
+
+ Project Style (基底)
+
+
+ mergeStyle()
+
+
+ Task Override (覆盖)
+
+
+ Final Style (统一风格输出)
+
+
+ 管线一致性
+
+ Graph 拓扑排序
+
+
+ State 隔离 (每次独立)
+
+
+ Pre/Post Handler
+
+
+ 质检重试 + 降级兜底
+
+
+ 数据一致性
+
+ SQLite ACID 事务
+
+
+ GORM 外键约束
+
+
+ CASCADE 级联删除
+
+
+ ID: prefix_base62 唯一
+
+
+ 部署一致性
+
+ Docker Compose 双容器
+
+
+ Gitee CI/CD 自动化
+
+
+ Viper 多层配置覆盖
+
+
+ 确定性构建 · 环境一致
+
+
+ 风格 → 管线 → 数据 → 部署:四层一致性保障,确保输出始终可控
+
+
+
+
+
+
+
diff --git a/decks/gen2D/public/pipeline-detail.svg b/decks/gen2D/public/pipeline-detail.svg
new file mode 100644
index 0000000..c030c53
--- /dev/null
+++ b/decks/gen2D/public/pipeline-detail.svg
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Pipeline Detail — 4-Stage Flow with Retry Logic
+
+
+
+
+ PipelineState
+ Shared state across all stages
+ prompt / asset / quality / result
+
+
+
+ START
+
+
+
+
+
+
+ PromptOptimizer
+ prompt_builder
+ string → Prompt
+ progress: 5-25%
+
+
+
+
+
+
+ AssetGenerator
+ asset_generator
+ Prompt → Image
+ progress: 25-60%
+
+
+
+
+
+
+ Quality
+ Supervisor
+
+
+ quality_supervisor
+ Image → QualityReport
+ progress: 60-80%
+
+
+
+ PASS
+
+
+
+ FormatAdapter
+ format_adapter 80-100%
+
+
+
+
+
+
+ END
+
+
+
+
+
+ FAIL: retry < 3
+
+
+
+
+ retry ≥ 3 (degraded)
+
+
+
+ Legend:
+
+ Normal flow
+
+ Pass / Success
+
+ Fail / Retry
+
+ Degraded fallback
+
+ Shared state
+
+
+
+
+
+
\ No newline at end of file
diff --git a/decks/gen2D/public/ratelimit.svg b/decks/gen2D/public/ratelimit.svg
new file mode 100644
index 0000000..1dfb85f
--- /dev/null
+++ b/decks/gen2D/public/ratelimit.svg
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Rate Limiting Architecture
+
+
+
+ Request
+ POST /generate
+
+
+
+
+
+
+ Gin Middleware
+ RateLimiter()
+ IP + Auth extraction
+
+
+
+ per-user
+
+
+
+ global
+
+
+
+ User-Level Limiter
+ key: userID
+ rate: 3 req/min
+ burst: 15
+
+
+
+ Global-Level Limiter
+ key: "generate"
+ rate: 20 req/min
+ burst: 50
+
+
+
+
+
+
+
+
+
+ Redis
+ Token Bucket
+ Lua Script
+ INCR + EXPIRE + EVAL
+ Atomic operation
+
+
+
+
+
+
+
+
+ → Handler
+
+
+
+ allow
+
+
+
+ HTTP 429
+ Too Many Requests
+
+
+
+ exceeded
+
+
+
+ Fail-Open
+ Redis unavailable → allow
+
+
+
+ error
+
+
+
+
+
+
+
+ Normal
+
+ Allow
+
+ Rate Exceeded
+
+ Fail-Open (Redis down)
+
\ No newline at end of file
diff --git a/decks/gen2D/slides.md b/decks/gen2D/slides.md
index bdb8ea8..061672d 100644
--- a/decks/gen2D/slides.md
+++ b/decks/gen2D/slides.md
@@ -22,6 +22,11 @@ AI 驱动的 2D 游戏素材生成工具
赛道 :七牛云 XEngineer 暑期实训营
+
+
---
src: ./pages/problem.md
---
@@ -53,23 +58,43 @@ src: ./pages/tech-stack.md
---
---
-section: '核心实现'
+section: '核心实现 — Eino 管线'
src: ./pages/eino-graph.md
---
---
+src: ./pages/eino-deep-dive.md
+---
+
+---
+section: '核心实现 — 提示词优化'
src: ./pages/prompt-agent.md
---
---
+section: '核心实现 — 异步任务'
src: ./pages/async-task.md
---
+---
+src: ./pages/async-deep-dive.md
+---
+
---
src: ./pages/dedup-ws.md
---
---
+section: '核心实现 — 分布式限流'
+src: ./pages/ratelimit-overview.md
+---
+
+---
+src: ./pages/ratelimit-lua.md
+---
+
+---
+section: '数据与部署'
src: ./pages/data-model.md
---
@@ -77,6 +102,11 @@ src: ./pages/data-model.md
src: ./pages/deployment.md
---
+---
+section: '一致性保障'
+src: ./pages/harness.md
+---
+
---
section: '总结'
src: ./pages/highlights.md