本文引用的文件
本故障排查文档专为AI有声书生成平台设计,重点解决AI内容生成和TTS语音合成过程中的常见问题。文档涵盖LangGraph工作流异常、LLM模型调用失败、TTS服务提供商连接问题、音色合成质量异常、生成进度卡死等场景,并提供断点分析、多供应商切换方案、模型参数调优建议和性能优化策略。
AI有声书生成平台采用模块化架构,主要分为以下核心模块:
graph TB
subgraph "AI生成模块"
BG[index.ts<br/>书籍生成器主入口]
LC[langgraph-controller.ts<br/>LangGraph控制器]
FT[fault-tolerance.ts<br/>容错层]
SM[stage-manager.ts<br/>阶段管理器]
GR[graph.ts<br/>状态定义]
end
subgraph "TTS合成模块"
TS[tts.service.ts<br/>TTS服务]
AP[aliyun.provider.ts<br/>阿里云TTS]
MP[minimax.provider.ts<br/>MiniMax TTS]
end
subgraph "基础设施"
LLM[index.ts<br/>LLM服务]
RL[rate-limiter.ts<br/>限流器]
QS[queue.service.ts<br/>队列服务]
LS[logger.service.ts<br/>日志服务]
SS[sentry.service.ts<br/>错误监控]
MC[models.json<br/>模型配置]
end
BG --> LC
LC --> FT
LC --> SM
LC --> GR
TS --> AP
TS --> MP
TS --> LLM
TS --> QS
LLM --> MC
RL --> LC
QS --> LC
LS --> BG
SS --> BG
图表来源
LangGraph书籍生成器采用策略模式,支持多种生成策略:
TTS服务支持三种供应商,具备自动切换能力:
章节来源
sequenceDiagram
participant Client as 客户端
participant Controller as LangGraph控制器
participant Generator as 生成器
participant LLM as LLM服务
participant TTS as TTS服务
participant Storage as 存储服务
Client->>Controller : POST /api/book-generator/langgraph/books
Controller->>Controller : 队列检查
alt 队列可用
Controller->>Generator : 加入队列任务
Controller-->>Client : 返回队列ID
else 队列不可用
Controller->>Generator : 同步执行
Controller-->>Client : 直接返回结果
end
Generator->>LLM : 调用AI生成大纲
LLM-->>Generator : 返回大纲数据
Generator->>LLM : 调用AI生成内容
LLM-->>Generator : 返回内容数据
loop 章节生成
Generator->>TTS : 语音合成请求
TTS->>TTS : 多供应商切换
alt MiniMax可用
TTS->>MiniMax : 异步任务创建
MiniMax-->>TTS : 返回任务ID
TTS->>MiniMax : 轮询任务状态
MiniMax-->>TTS : 返回音频文件
else 阿里云可用
TTS->>阿里云 : HTTP请求
阿里云-->>TTS : 返回音频URL
else 模拟服务
TTS->>TTS : 生成模拟音频
end
TTS->>Storage : 上传音频文件
Storage-->>TTS : 返回访问URL
TTS-->>Generator : 返回音频URL
end
Generator->>Storage : 保存章节音频
Storage-->>Generator : 确认保存
Generator-->>Controller : 更新生成进度
Controller-->>Client : 返回生成完成
图表来源
flowchart TD
Start([开始生成]) --> CheckQueue["检查队列状态"]
CheckQueue --> QueueAvailable{"队列可用?"}
QueueAvailable --> |是| AddQueue["加入队列"]
QueueAvailable --> |否| SyncExec["同步执行"]
AddQueue --> UpdateStatus["更新书籍状态"]
SyncExec --> UpdateStatus
UpdateStatus --> GenStage["进入大纲生成阶段"]
GenStage --> OutlineGen["生成章大纲"]
OutlineGen --> OutlineSuccess{"大纲生成成功?"}
OutlineSuccess --> |否| RetryOutline["重试大纲生成"]
OutlineSuccess --> |是| SectionGen["生成节大纲"]
RetryOutline --> OutlineRetry{"重试次数<3?"}
OutlineRetry --> |是| RetryOutline
OutlineRetry --> |否| FailOutline["大纲生成失败"]
SectionGen --> ContentGen["生成章节内容"]
ContentGen --> AudioGen["音频生成"]
AudioGen --> QualityCheck["音质检查"]
QualityCheck --> QualityPass{"音质合格?"}
QualityPass --> |是| Complete["生成完成"]
QualityPass --> |否| Regenerate["重新生成"]
Regenerate --> AudioGen
FailOutline --> Recovery["自动恢复"]
Recovery --> Complete
图表来源
阶段管理器确保状态转移的合法性:
stateDiagram-v2
[*] --> draft
draft --> outlining : 创建书籍
outlining --> outline_completed : 生成大纲
outline_completed --> content_generating : 生成内容
content_generating --> content_completed : 内容生成完成
content_completed --> audio_generating : 生成音频
audio_generating --> audio_completed : 音频生成完成
audio_completed --> video_generating : 生成视频
video_generating --> video_completed : 视频生成完成
content_generating --> failed : 生成失败
audio_generating --> failed : 生成失败
video_generating --> failed : 生成失败
failed --> content_generating : 失败重试
failed --> draft : 重新开始
图表来源
章节来源
flowchart TD
CallLLM[调用LLM] --> TryModel[尝试当前模型]
TryModel --> Success{调用成功?}
Success --> |是| ReturnResult[返回结果]
Success --> |否| CheckError{检查错误类型}
CheckError --> IsRateLimit{是否额度限制?}
IsRateLimit --> |是| SwitchModel[切换到下一个模型]
IsRateLimit --> |否| ThrowError[抛出错误]
SwitchModel --> ModelAvailable{还有可用模型?}
ModelAvailable --> |是| TryModel
ModelAvailable --> |否| ThrowError
ThrowError --> ReturnResult
图表来源
系统支持多供应商模型配置:
章节来源
sequenceDiagram
participant TTS as TTS服务
participant Provider as 供应商选择器
participant MiniMax as MiniMax
participant Aliyun as 阿里云
participant Mock as 模拟服务
TTS->>Provider : 获取TTS供应商
Provider->>Provider : 检查配置优先级
alt MiniMax可用
Provider->>MiniMax : 创建任务
MiniMax-->>Provider : 返回任务ID
Provider-->>TTS : 返回MiniMax实例
else 阿里云可用
Provider->>Aliyun : HTTP请求
Aliyun-->>Provider : 返回音频URL
Provider-->>TTS : 返回阿里云实例
else 模拟服务
Provider->>Mock : 生成模拟音频
Mock-->>Provider : 返回模拟文件
Provider-->>TTS : 返回模拟实例
end
TTS->>TTS : 处理音频文件
TTS->>TTS : 合并音频段
TTS->>TTS : 上传存储
TTS-->>调用方 : 返回音频URL
图表来源
| 供应商 | 模型支持 | 传输方式 | 适用场景 | 限制 |
|---|---|---|---|---|
| MiniMax | speech-2.8-hd | 异步轮询 | 长文本合成 | 5分钟超时限制 |
| 阿里云 | 多种TTS模型 | HTTP直连 | 实时需求 | 600字符限制 |
| 模拟服务 | 无 | 本地生成 | 开发调试 | 无实际音频 |
章节来源
flowchart TD
Start([音色质量异常]) --> CheckText["检查文本质量"]
CheckText --> TextQuality{"文本格式正确?"}
TextQuality --> |否| FixText["修正文本格式"]
TextQuality --> |是| CheckParams["检查音色参数"]
FixText --> CheckParams
CheckParams --> ParamRange{"参数在合理范围内?"}
ParamRange --> |否| AdjustParams["调整参数范围"]
ParamRange --> |是| CheckProvider["检查供应商状态"]
AdjustParams --> CheckProvider
CheckProvider --> ProviderOK{"供应商正常?"}
ProviderOK --> |否| SwitchProvider["切换供应商"]
ProviderOK --> |是| CheckModel["检查模型配置"]
SwitchProvider --> CheckModel
CheckModel --> ModelOK{"模型配置正确?"}
ModelOK --> |否| FixModel["修正模型配置"]
ModelOK --> |是| QualityOK{"音质仍然异常?"}
FixModel --> QualityOK
QualityOK --> |是| LogIssue["记录问题详情"]
QualityOK --> |否| Complete["问题解决"]
LogIssue --> Complete
图表来源
系统支持10种预设音色,每种音色都有对应的参数配置:
章节来源
graph TB
subgraph "AI生成依赖"
BG[index.ts] --> FT[fault-tolerance.ts]
BG --> SM[stage-manager.ts]
BG --> GR[graph.ts]
LC[langgraph-controller.ts] --> BG
LC --> FT
LC --> SM
LLM[llm/index.ts] --> LC
end
subgraph "TTS依赖"
TS[tts.service.ts] --> AP[aliyun.provider.ts]
TS --> MP[minimax.provider.ts]
TS --> LLM
TS --> QS[queue.service.ts]
end
subgraph "基础设施"
RL[rate-limiter.ts] --> LC
QS --> LC
LS[logger.service.ts] --> BG
SS[sentry.service.ts] --> BG
MC[models.json] --> LLM
end
FT --> LLM
SM --> BG
GR --> BG
图表来源
章节来源
系统实施多层次限流机制:
flowchart TD
Request[请求到达] --> GlobalRate[全局API限流]
GlobalRate --> LoginRate[登录接口限流]
LoginRate --> TTSRate[TTS生成限流]
TTSRate --> UploadRate[文件上传限流]
GlobalRate --> CheckGlobal{检查是否触发}
CheckGlobal --> |是| BlockGlobal[阻塞请求]
CheckGlobal --> |否| Proceed[继续处理]
BlockGlobal --> Wait[等待重试]
Wait --> GlobalRate
Proceed --> Next[下一限流]
图表来源
章节来源
症状:生成进度卡死,章节无法继续 排查步骤:
GET /api/book-generator/langgraph/books/:id/progress解决方案:
症状:AI生成内容异常或超时 排查步骤:
解决方案:
症状:音频生成失败或超时 排查步骤:
解决方案:
症状:音频质量差或音色不匹配 排查步骤:
解决方案:
flowchart TD
Start[AI调用开始] --> Attempt1[第1次尝试]
Attempt1 --> Success1{成功?}
Success1 --> |是| Return[返回结果]
Success1 --> |否| CheckError1{检查错误}
CheckError1 --> RateLimit1{额度限制?}
RateLimit1 --> |是| Wait1[等待2秒]
RateLimit1 --> |否| Fail1[调用失败]
Wait1 --> Attempt2[第2次尝试]
Attempt2 --> Success2{成功?}
Success2 --> |是| Return
Success2 --> |否| CheckError2{检查错误}
CheckError2 --> RateLimit2{额度限制?}
RateLimit2 --> |是| Wait2[等待4秒]
RateLimit2 --> |否| Fail2[调用失败]
Wait2 --> Attempt3[第3次尝试]
Attempt3 --> Success3{成功?}
Success3 --> |是| Return
Success3 --> |否| FinalFail[最终失败]
Fail1 --> FinalFail
Fail2 --> FinalFail
图表来源
章节来源
flowchart TD
Primary[主供应商] --> CheckPrimary{检查可用性}
CheckPrimary --> |可用| UsePrimary[使用主供应商]
CheckPrimary --> |不可用| Secondary[备选供应商]
Secondary --> CheckSecondary{检查可用性}
CheckSecondary --> |可用| UseSecondary[使用备选供应商]
CheckSecondary --> |不可用| Mock[模拟服务]
Mock --> UseMock[使用模拟服务]
UsePrimary --> MonitorPrimary{监控性能}
UseSecondary --> MonitorSecondary{监控性能}
MonitorPrimary --> |异常| SwitchSecondary[切换到备选]
MonitorSecondary --> |异常| SwitchMock[切换到模拟]
SwitchSecondary --> UseSecondary
SwitchMock --> UseMock
图表来源
当自动降级失败时,可通过以下方式人工干预:
章节来源
系统采用多层日志记录:
章节来源
本故障排查文档建立了完整的AI有声书生成平台问题诊断和解决体系。通过多层容错机制、智能供应商切换、完善的监控日志和详细的降级方案,能够有效应对各种异常情况。
关键要点:
建议运维团队定期检查以下指标:
通过这些措施,可以确保AI有声书生成平台的稳定运行和高质量服务体验。