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:
+12
-15
@@ -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#文件存储)。
|
||||
|
||||
Reference in New Issue
Block a user