docs: 交叉检查修复文档疏漏与不一致

- 修复 api.md 修改密码接口混入注册场景的 409 错误
- 补充 api.md WebSocket 示例缺失的 quality_supervisor running 消息
- 补充 api.md 注册接口格式校验错误响应、缓存接口详细说明
- 补充 frontend.md Task 接口缺失的 error 字段
- 补充 frontend.md 错误处理章节(API 错误、WebSocket 断连、加载状态)
- frontend.md 风格键表改为引用 style-keys.md,消除重复
- async-tasks.md 去重/文件存储改为引用 database.md,消除重复
- backend.md ER 图改为引用 database.md,消除重复
- 补充 backend.md 目录结构中缺失的 auth/project handler 和 user model
- 补充 backend.md 缓存层设计说明
- 补充 database.md GEN2D_SERVER_PORT 环境变量和迁移文件归属说明
- 补充 multi-agent-pipeline.md 到 backend.md 和 async-tasks.md 的交叉引用
- 补充 async-tasks.md 超时控制说明
This commit is contained in:
2026-05-24 10:47:00 +08:00
parent 5a6bcaffaf
commit f4c1a10403
6 changed files with 102 additions and 37 deletions
+12 -15
View File
@@ -109,6 +109,16 @@ func (s *TaskService) StartWorkers(n int) {
| 队列容量 | 100 | 内存 channel 缓冲大小 |
| Worker 数 | 3 | 并发执行任务数 |
### 超时控制
每个任务的 `processTask` 执行设置超时上下文(默认 10 分钟),超时后:
1. 取消正在执行的管线节点(如 AI 推理调用)
2. 更新 `task.status = failed`,`task.error = "任务执行超时"`
3. Worker 释放,继续处理下一个任务
避免长时间卡住的任务永久占用 Worker。
## 管线阶段与进度
每个阶段对应 Eino Graph 的一个节点,执行过程中更新 `task.stage` 和 `task.progress`:
@@ -173,21 +183,8 @@ ws://host/api/v1/tasks/:taskId/ws?token=<jwt>
## 去重
相同 `prompt + assetType + params` 的并发请求,通过应用层去重避免重复生成:
1. 计算 `hash(prompt + assetType + params)` 作为去重键
2. `sync.Map` 中查找:若存在且任务仍在运行中,直接返回已有 taskId
3. 任务完成或失败后从内存中清除
去重范围为当前实例内存,不跨实例共享。相同输入在不同时间点允许重新生成。
去重策略详见 [数据存储 — 去重策略](database.md#去重策略)。相同输入的并发请求直接返回已有 taskId,任务完成后从内存清除。
## 文件存储
任务完成后,FormatAdapter 将素材上传至 OSS:
- **开发环境**:写入本地 `data/` 目录,通过 Gin 静态文件服务访问
- **生产环境**:上传至 OSS 存储桶,`asset.url` 存储完整 CDN URL
OSS Key 结构:`users/{userId}/projects/{projectId}/tasks/{taskId}/output/`
素材持久化保存,随工程生命周期管理,删除工程时级联删除 OSS 文件。
任务完成后,FormatAdapter 将素材上传至 OSS。素材文件的存储结构与访问方式详见 [数据存储 — 文件存储](database.md#文件存储)。