AI 音频生成流水线:异步任务要有进度和取消
AI 音频生成流水线:异步任务要有进度和取消
一、音频生成不是一次 HTTP 请求
AI 音频生成通常包含文本解析、风格选择、旋律生成、伴奏生成、混音、导出和审核。整个过程可能持续几十秒甚至几分钟。如果用一个同步 HTTP 请求硬扛,用户体验和服务稳定性都会很差。
更合理的方式,是把音频生成设计成异步流水线。
二、先拆任务阶段
flowchart TD A[提交创作请求] --> B[生成任务] B --> C[文本与风格解析] C --> D[模型生成] D --> E[混音导出] E --> F[内容审核] F --> G[结果通知]每个阶段都要有状态、耗时、错误码和重试策略。用户不需要知道所有内部细节,但需要知道任务是否还在处理。
audio_job_states: - queued - generating - mixing - reviewing - completed - failed - cancelled状态越清楚,前端展示和后端恢复越简单。
三、任务要支持取消
type AudioJob = { id: string status: string progress: number cancelRequested: boolean }用户发现参数填错,应该能取消任务。取消不是简单删记录,而是要通知正在运行的 worker 停止后续阶段,并清理临时文件。
如果模型调用不能中断,也至少要阻止后续混音、审核和通知,避免继续消耗资源。
四、进度要诚实
进度条最怕假。前 90% 很快,最后 10% 卡很久,会让用户更焦虑。可以按阶段展示,而不是伪装成精确百分比。
progress_display: mode: stage_based show_estimated_time: true show_cancel_button: true估算时间要基于历史任务。不同音频长度、模型、队列水位都会影响耗时。固定写“预计 1 分钟”很容易失信。
还要处理失败恢复。某些阶段失败可以重试,比如临时导出失败;某些失败需要用户改参数,比如输入违规。错误反馈要能指导用户下一步。
最后,生成结果要有过期策略。音频文件可能很大,不适合永久保存。任务完成后保留多久、用户下载后是否清理,都要提前定义。
任务队列还要做优先级。短音频预览、正式导出、批量生成、失败重试的优先级不同。预览任务应该更快返回,批量任务可以排队。全部混在一个队列里,用户会觉得系统忽快忽慢。
audio_queue_policy: preview: priority: high max_wait_seconds: 10 batch_export: priority: low max_wait_minutes: 30还要记录中间产物。某些阶段失败时,如果前一阶段结果可复用,就不必从头生成。比如旋律已经生成,混音失败后可以只重跑混音。这样既省成本,也能减少用户等待。
最后,审核阶段要有明确策略。版权风险、敏感内容、低质量输出分别对应不同处理:拒绝、人工复核或要求重新生成。不要把所有失败都显示成“生成失败”。
流水线还要记录成本。每个阶段消耗了多少模型调用、GPU 时间、存储空间和人工审核时间,都应该能统计。音频生成如果没有成本账本,很容易出现用户很喜欢、平台越用越亏的情况。
audio_cost_accounting: track_model_seconds: true track_storage_mb: true track_review_minutes: true五、总结
AI 音频生成流水线要异步化,拆分任务阶段,支持进度展示、取消、重试、失败反馈和结果清理。
生成过程越长,越不能伪装成普通请求。异步任务设计好,用户才愿意等。
