生成优化.md 11 KB

AI语音应用 - 生成内容优化建议

生成时间:2026-04-06


1. 内容创作辅助

功能 说明 价值 优先级
AI文案助手 输入关键词,AI自动生成配音脚本 降低创作门槛 🔴 高
模板库 提供各类场景模板(广告旁白/有声书/课件/短视频) 快速上手 🔴 高
敏感词检测 生成前检测文本敏感词,避免违规 安全保障 🔴 高
多语言翻译+配音 输入中文 → 自动翻译 → 英文配音 出海场景 🟡 中

2. 内容质量提升

功能 说明 价值 优先级
背景音乐 生成的音频自动添加轻柔背景音乐 提升听感 🔴 高
音效库 提供转场、音效素材(新闻开场/搞笑音效) 内容丰富 🟡 中
多角色对话 输入对话文本,自动分配不同音色 有声剧/播客 🟡 中
情感调节 在语速/音调基础上,增加"开心/悲伤/激动"情感参数 更自然 🟡 中

3. 内容组织管理

功能 说明 价值 优先级
音频剪辑 生成后可裁剪、合并、调整音量 一站式服务 🔴 高
专辑分类 按项目/用途/客户分类管理 方便查找 🟡 中
标签系统 给音频打标签(广告/课件/有声书) 快速筛选 🟢 低
收藏夹 收藏喜欢的音频或模板 复用便捷 🟢 低

4. 内容分发

功能 说明 付费点 优先级
一键发布 生成后直接发布到喜马拉雅/抖音/视频号 平台分发 🟡 中
视频配音 上传视频,自动匹配音频 视频创作者 🟡 中
字幕生成 音频转字幕SRT文件 视频用户 🟡 中
定时发布 设置发布时间,自动发布 运营效率 🟢 低

5. 商业内容支持

功能 说明 目标客户 优先级
品牌音色定制 用品牌VI声音配音,保持一致性 企业客户 🟢 低
批量混音 上传文案+背景音乐,自动混音输出 内容工厂 🟡 中
API批量处理 提供接口,集成到现有系统 企业客户 🟢 低
白标服务 支持品牌定制贴牌 代理商 🟢 低

6. 内容质量检测

功能 说明 价值 优先级
试听预览 生成前试听1-2句demo 避免浪费额度 🔴 高
质量评分 生成后显示"流畅度/自然度"评分 用户参考 🟡 中
错别字检测 检测生成文本中的错别字 准确性 🟡 中
多版本对比 同一文本用不同音色/参数生成,对比选择 择优使用 🟡 中

7. 模板库场景分类

分类 模板示例
广告营销 产品介绍、活动促销、品牌宣传
知识付费 有声书、课件讲解、知识科普
短视频 抖音旁白、视频解说、种草文案
企业宣传 公司介绍、培训课件、年会致辞
日常生活 生日祝福、节日问候、婚礼致辞
新闻资讯 新闻播报、天气预报、体育解说

8. 开发优先级规划

第一阶段(快速上线)

  • 模板库(基础场景)
  • 背景音乐(内置几首)
  • 试听预览
  • 敏感词检测

第二阶段(体验提升)

  • AI文案助手
  • 音频剪辑
  • 情感调节
  • 字幕生成

第三阶段(差异化竞争)

  • 多角色对话
  • 视频配音
  • 品牌音色定制
  • 一键发布

9. 核心优化方向总结

┌─────────────────────────────────────────────────┐
│                   生成内容优化                    │
├─────────────┬─────────────┬─────────────────────┤
│   创作辅助    │   质量提升    │      分发能力        │
├─────────────┼─────────────┼─────────────────────┤
│ AI文案助手   │ 背景音乐     │ 视频配音            │
│ 模板库       │ 情感调节     │ 字幕生成            │
│ 敏感词检测   │ 质量评分     │ 一键发布            │
│ 多语言支持   │ 多版本对比   │ 定时发布            │
└─────────────┴─────────────┴─────────────────────┘

核心理念:从"单一配音工具"升级为"内容创作平台",覆盖创作→生成→加工→分发全链路。


10. 代码层面:文本内容生成 & TTS音频生成优化建议

分析时间:2026-05-16 分析范围:server/src/modules/book-generator/ 文本内容生成逻辑 + TTS 音频生成逻辑

10.1 高优先级(建议立即处理)

# 问题 严重程度 说明 状态
1 TTS 无供应商熔断/降级 🔴 严重 LLM 有 Provider Registry + 熔断器,但 generateAudio() 内部是否也有多供应商降级?需确认 tts.service.ts 实现 ⬜ 待处理
2 扣费与音频生成原子性 🔴 严重 consumeAudioMinutes 若失败,音频已生成但未扣费,导致配额泄露 ⬜ 待处理
3 全局 LLM 并发控制缺失 🟡 中等 多本书同时生成,各自的 AsyncPool(8) 互不感知,总计可能超过供应商 Rate Limit ⬜ 待处理

建议方案

① TTS 供应商降级(参考 LLM 的 Provider Registry 模式)

// 新建 src/services/tts/provider.registry.ts
// 为多 TTS 供应商(MiniMax、阿里云、Azure TTS)实现:
// - 多供应商注册
// - 熔断器保护
// - 自动降级切换

② 扣费原子性保障

// 建议修改 processTtsTask:
// 方案:先扣费,再标记任务完成(扣费失败则任务不标记完成)
try {
  await consumeAudioMinutes(userId, audioMinutes, description);
  await prisma.ttsTask.update({ where: { id: taskId }, data: { status: 'completed' } });
} catch (quotaErr) {
  // 扣费失败:保留音频文件,任务标记需人工处理
  await prisma.ttsTask.update({
    where: { id: taskId },
    data: { status: 'completed', errorMsg: `扣费失败: ${quotaErr.message}` }
  });
}

③ 全局 LLM 并发控制

// 新建 src/services/llm/concurrency-limiter.ts
import { Semaphore } from 'async-mutex';
const globalLLMSemaphore = new Semaphore(10); // 全局最多10路并发
export async function withLLMConcurrency<T>(fn: () => Promise<T>): Promise<T> {
  return globalLLMSemaphore.runExclusive(fn);
}

10.2 中优先级

# 问题 严重程度 说明 状态
4 无流式输出反馈 🟡 中等 callLLMWithTools 等待完整响应,长章节生成时用户无感知,可能触发前端超时 ⬜ 待处理
5 无内容语义缓存 🟡 中等 相同/相似提示词重复生成,浪费 LLM 额度;可引入语义缓存(相似度≥0.95 复用) ⬜ 待处理
6 TTS 参数未纳入去重哈希 🟡 中等 仅对 content 计算哈希,若用户更换 speed/pitch/voice,相同内容不会重新生成音频 ⬜ 待处理
7 无音频文件有效性校验 🟡 中等 生成后未校验音频文件是否可播放、时长是否合理 ⬜ 待处理
8 字数控制不精确 🟡 中等 LLM 不严格遵循 estimatedWords,当前仅靠 truncateAtBoundary 截断,可能破坏语义完整性 ⬜ 待处理

建议方案

④ 内容生成流式反馈

// generateSingleChapterContent 中应使用 callLLMStream 替代 callLLMWithMessages
// 通过 WebSocket 实时推送 token 到前端
for await (const chunk of callLLMStream(messages)) {
  pushProgressChunk(chunk); // 实时推送
}

⑤ TTS 参数纳入去重哈希

function computeTtsTaskHash(
  content: string,
  options: { voice: string; speed: number; pitch: number }
): string {
  const data = `${content}||${options.voice}||${options.speed}||${options.pitch}`;
  return crypto.createHash('sha256').update(data).digest('hex');
}

⑥ 音频文件校验

import { execFile } from 'child_process';
// 生成后校验音频时长和格式
async function validateAudioFile(filePath: string): Promise<{ valid: boolean; duration: number }> {
  return new Promise((resolve, reject) => {
    execFile(ffprobe, ['-v', 'error', '-show_entries', 'format=duration', '-of', 'json', filePath],
      (err, stdout) => {
        if (err) return resolve({ valid: false, duration: 0 });
        const duration = parseFloat(JSON.parse(stdout).format.duration);
        resolve({ valid: duration > 0, duration });
      });
  });
}

10.3 低优先级

# 问题 严重程度 说明 状态
9 TTS 任务无优先级 🟢 轻微 所有任务 FIFO,用户手动触发的紧急任务无法插队 ⬜ 待处理
10 并发数硬编码 🟢 轻微 tts-queue.tsmaxConcurrency=3 是硬编码,不同 TTS 供应商支持的最佳并发数不同 ⬜ 待处理
11 工具调用失败降级逻辑冗余 🟢 轻微 generateSingleChapterContent 中 try-catch 调用 callLLMWithTools 失败后降级,但 callLLMWithTools 内部已有模型切换逻辑 ⬜ 待处理
12 AudioScanner 超限无用户通知 🟢 轻微 MAX_RETRY_PER_DAY=5 达到上限直接标记 failed,未通知用户 ⬜ 待处理

建议方案

⑦ 任务优先级队列(高优先级)

// 在 ttsTask 表增加 priority 字段
// 认领时 orderBy: { priority: 'desc', createdAt: 'asc' }
enum TaskPriority {
  USER_MANUAL = 10,   // 用户手动触发
  SYSTEM_AUTO = 5,     // 系统自动生成
  BATCH_IMPORT = 1,    // 批量导入
}

⑧ 可配置并发数

// 将 maxConcurrency 移入配置文件 config.toml
[tts]
maxConcurrency = 3  # MiniMax 建议 3,阿里云建议 5

10.4 各模块评分总结

维度 评分 说明
架构设计 ⭐⭐⭐⭐ LangGraph + 策略模式 + DB队列设计合理
错误处理 ⭐⭐⭐ 有重试/回退/兜底,但TTS侧降级不如LLM侧完善
并发控制 ⭐⭐⭐ 有局部并发控制,缺全局限制
数据一致性 ⭐⭐ 扣费原子性、状态机竞态仍有风险
可观测性 ⭐⭐⭐ 日志较完善,缺结构化指标

10.5 行动清单(按优先级排序)

  • P0 确认 tts.service.ts 是否有多供应商降级,若无则实现
  • P0 修复 processTtsTask 中扣费原子性问题
  • P1 实现全局 LLM 并发控制器(Semaphore)
  • P1 generateSingleChapterContent 改用流式调用 + WebSocket 推送
  • P1 TTS 去重哈希增加 voice/speed/pitch 参数
  • P2 生成后增加音频文件有效性校验(ffprobe)
  • P2 ttsTask 表增加 priority 字段支持任务插队
  • P3 maxConcurrency 移入 config.toml 可配置