# AI与TTS故障排查 **本文引用的文件** - [index.ts](file://server/src/modules/book-generator/index.ts) - [langgraph-controller.ts](file://server/src/modules/book-generator/langgraph-controller.ts) - [graph.ts](file://server/src/modules/book-generator/graph.ts) - [fault-tolerance.ts](file://server/src/modules/book-generator/fault-tolerance.ts) - [stage-manager.ts](file://server/src/modules/book-generator/stage-manager.ts) - [tts.service.ts](file://server/src/modules/tts/tts.service.ts) - [aliyun.provider.ts](file://server/src/modules/tts/aliyun.provider.ts) - [minimax.provider.ts](file://server/src/modules/tts/minimax.provider.ts) - [index.ts](file://server/src/services/llm/index.ts) - [rate-limiter.ts](file://server/src/middleware/rate-limiter.ts) - [queue.service.ts](file://server/src/services/queue.service.ts) - [logger.service.ts](file://server/src/services/logger.service.ts) - [sentry.service.ts](file://server/src/services/sentry.service.ts) - [models.json](file://server/src/config/models.json) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构概览](#架构概览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考虑](#性能考虑) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) ## 简介 本故障排查文档专为AI有声书生成平台设计,重点解决AI内容生成和TTS语音合成过程中的常见问题。文档涵盖LangGraph工作流异常、LLM模型调用失败、TTS服务提供商连接问题、音色合成质量异常、生成进度卡死等场景,并提供断点分析、多供应商切换方案、模型参数调优建议和性能优化策略。 ## 项目结构 AI有声书生成平台采用模块化架构,主要分为以下核心模块: ```mermaid graph TB subgraph "AI生成模块" BG[index.ts
书籍生成器主入口] LC[langgraph-controller.ts
LangGraph控制器] FT[fault-tolerance.ts
容错层] SM[stage-manager.ts
阶段管理器] GR[graph.ts
状态定义] end subgraph "TTS合成模块" TS[tts.service.ts
TTS服务] AP[aliyun.provider.ts
阿里云TTS] MP[minimax.provider.ts
MiniMax TTS] end subgraph "基础设施" LLM[index.ts
LLM服务] RL[rate-limiter.ts
限流器] QS[queue.service.ts
队列服务] LS[logger.service.ts
日志服务] SS[sentry.service.ts
错误监控] MC[models.json
模型配置] 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 ``` **图表来源** - [index.ts:1-104](file://server/src/modules/book-generator/index.ts#L1-L104) - [langgraph-controller.ts:1-800](file://server/src/modules/book-generator/langgraph-controller.ts#L1-L800) - [tts.service.ts:1-715](file://server/src/modules/tts/tts.service.ts#L1-L715) ## 核心组件 ### LangGraph书籍生成器 LangGraph书籍生成器采用策略模式,支持多种生成策略: - **串行策略**:传统顺序生成 - **一步大纲+并行内容**:推荐方案 - **逐章内聚**:终极方案 ### TTS多供应商架构 TTS服务支持三种供应商,具备自动切换能力: - **MiniMax**:异步长文本语音合成,支持speech-2.8-hd模型 - **阿里云百炼**:HTTP接口,支持实时模式 - **模拟服务**:开发调试用 ### 容错与监控体系 - AI调用重试机制(3次重试+指数退避) - 节点级超时控制(10-45分钟不等) - 进度监控(最长空闲10分钟) - 自动恢复机制 **章节来源** - [index.ts:1-104](file://server/src/modules/book-generator/index.ts#L1-L104) - [tts.service.ts:1-715](file://server/src/modules/tts/tts.service.ts#L1-L715) - [fault-tolerance.ts:1-387](file://server/src/modules/book-generator/fault-tolerance.ts#L1-L387) ## 架构概览 ```mermaid 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 : 返回生成完成 ``` **图表来源** - [langgraph-controller.ts:383-530](file://server/src/modules/book-generator/langgraph-controller.ts#L383-L530) - [tts.service.ts:200-542](file://server/src/modules/tts/tts.service.ts#L200-L542) ## 详细组件分析 ### LangGraph工作流异常排查 #### 断点分析流程 ```mermaid 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 ``` **图表来源** - [fault-tolerance.ts:68-123](file://server/src/modules/book-generator/fault-tolerance.ts#L68-L123) - [stage-manager.ts:158-198](file://server/src/modules/book-generator/stage-manager.ts#L158-L198) #### 阶段管理器 阶段管理器确保状态转移的合法性: ```mermaid 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 : 重新开始 ``` **图表来源** - [stage-manager.ts:13-67](file://server/src/modules/book-generator/stage-manager.ts#L13-L67) **章节来源** - [langgraph-controller.ts:383-530](file://server/src/modules/book-generator/langgraph-controller.ts#L383-L530) - [fault-tolerance.ts:188-261](file://server/src/modules/book-generator/fault-tolerance.ts#L188-L261) - [stage-manager.ts:100-147](file://server/src/modules/book-generator/stage-manager.ts#L100-L147) ### LLM模型调用失败排查 #### 模型自动切换机制 ```mermaid 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 ``` **图表来源** - [index.ts:129-201](file://server/src/services/llm/index.ts#L129-L201) #### 模型配置管理 系统支持多供应商模型配置: - **阿里云百炼**:支持多种Qwen模型 - **MiniMax**:支持文本生成和语音合成 - **火山引擎**:支持多种推理模型 **章节来源** - [index.ts:1-362](file://server/src/services/llm/index.ts#L1-L362) - [models.json:1-186](file://server/src/config/models.json#L1-L186) ### TTS服务提供商连接问题排查 #### 多供应商切换流程 ```mermaid 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 ``` **图表来源** - [tts.service.ts:163-190](file://server/src/modules/tts/tts.service.ts#L163-L190) - [minimax.provider.ts:237-278](file://server/src/modules/tts/minimax.provider.ts#L237-L278) - [aliyun.provider.ts:21-150](file://server/src/modules/tts/aliyun.provider.ts#L21-L150) #### 供应商特性对比 | 供应商 | 模型支持 | 传输方式 | 适用场景 | 限制 | |--------|----------|----------|----------|------| | MiniMax | speech-2.8-hd | 异步轮询 | 长文本合成 | 5分钟超时限制 | | 阿里云 | 多种TTS模型 | HTTP直连 | 实时需求 | 600字符限制 | | 模拟服务 | 无 | 本地生成 | 开发调试 | 无实际音频 | **章节来源** - [tts.service.ts:1-715](file://server/src/modules/tts/tts.service.ts#L1-L715) - [minimax.provider.ts:1-280](file://server/src/modules/tts/minimax.provider.ts#L1-L280) - [aliyun.provider.ts:1-152](file://server/src/modules/tts/aliyun.provider.ts#L1-L152) ### 音色合成质量异常排查 #### 音色参数调优 ```mermaid 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 ``` **图表来源** - [tts.service.ts:604-635](file://server/src/modules/tts/tts.service.ts#L604-L635) #### 音色映射表 系统支持10种预设音色,每种音色都有对应的参数配置: - **女性音色**:Cherry、Serena、Chelsie、Momo、Vivian、Maia - **男性音色**:Ethan、Moon、Kai、Nofish **章节来源** - [tts.service.ts:24-55](file://server/src/modules/tts/tts.service.ts#L24-L55) ## 依赖关系分析 ```mermaid 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 ``` **图表来源** - [index.ts:17-20](file://server/src/modules/book-generator/index.ts#L17-L20) - [tts.service.ts:7-14](file://server/src/modules/tts/tts.service.ts#L7-L14) **章节来源** - [index.ts:1-104](file://server/src/modules/book-generator/index.ts#L1-L104) - [tts.service.ts:1-715](file://server/src/modules/tts/tts.service.ts#L1-L715) ## 性能考虑 ### 限流策略 系统实施多层次限流机制: ```mermaid flowchart TD Request[请求到达] --> GlobalRate[全局API限流] GlobalRate --> LoginRate[登录接口限流] LoginRate --> TTSRate[TTS生成限流] TTSRate --> UploadRate[文件上传限流] GlobalRate --> CheckGlobal{检查是否触发} CheckGlobal --> |是| BlockGlobal[阻塞请求] CheckGlobal --> |否| Proceed[继续处理] BlockGlobal --> Wait[等待重试] Wait --> GlobalRate Proceed --> Next[下一限流] ``` **图表来源** - [rate-limiter.ts:49-120](file://server/src/middleware/rate-limiter.ts#L49-L120) ### 队列优化 - **Redis队列**:生产环境使用,支持持久化和分布式 - **内存队列**:Redis不可用时的降级方案 - **超时控制**:书籍生成2小时,音频生成5分钟 **章节来源** - [rate-limiter.ts:1-120](file://server/src/middleware/rate-limiter.ts#L1-L120) - [queue.service.ts:1-347](file://server/src/services/queue.service.ts#L1-L347) ## 故障排查指南 ### 常见问题诊断流程 #### 1. LangGraph工作流异常 **症状**:生成进度卡死,章节无法继续 **排查步骤**: 1. 检查队列状态:`GET /api/book-generator/langgraph/books/:id/progress` 2. 查看容错日志:检查AI调用重试记录 3. 验证阶段转移:确认状态机是否正常 4. 监控进度:检查10分钟空闲告警 **解决方案**: - 重启队列处理器 - 清理僵尸任务 - 手动触发自动恢复 #### 2. LLM模型调用失败 **症状**:AI生成内容异常或超时 **排查步骤**: 1. 检查模型配置:验证API Key和基础URL 2. 查看错误类型:区分额度限制和服务器错误 3. 监控重试机制:确认3次重试是否生效 4. 验证模型切换:检查备用模型是否可用 **解决方案**: - 补充API配额 - 调整温度参数 - 切换到备用模型 - 优化提示词格式 #### 3. TTS服务提供商连接问题 **症状**:音频生成失败或超时 **排查步骤**: 1. 检查供应商配置:验证API Key和模型设置 2. 监控重试机制:确认指数退避是否正常 3. 验证文本分段:检查600字符限制 4. 查看存储状态:确认文件上传成功 **解决方案**: - 切换到可用供应商 - 调整并发参数 - 优化文本格式 - 检查网络连接 #### 4. 音色合成质量异常 **症状**:音频质量差或音色不匹配 **排查步骤**: 1. 检查音色参数:速度、音调、音量设置 2. 验证文本格式:特殊字符和标点符号 3. 测试不同音色:对比效果差异 4. 查看音频时长:确认LRC歌词生成 **解决方案**: - 调整音色参数范围 - 修正文本格式 - 更换合适音色 - 优化分段策略 ### 错误重试机制 #### AI调用重试策略 ```mermaid 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 ``` **图表来源** - [fault-tolerance.ts:68-123](file://server/src/modules/book-generator/fault-tolerance.ts#L68-L123) #### TTS供应商重试策略 - **MiniMax**:429状态码和5xx错误自动重试 - **阿里云**:429状态码和5xx错误自动重试 - **指数退避**:2秒、4秒、8秒等待时间 **章节来源** - [fault-tolerance.ts:68-123](file://server/src/modules/book-generator/fault-tolerance.ts#L68-L123) - [minimax.provider.ts:247-278](file://server/src/modules/tts/minimax.provider.ts#L247-L278) - [aliyun.provider.ts:125-145](file://server/src/modules/tts/aliyun.provider.ts#L125-L145) ### 降级方案 #### 自动降级流程 ```mermaid 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 ``` **图表来源** - [tts.service.ts:163-190](file://server/src/modules/tts/tts.service.ts#L163-L190) #### 人工干预降级 当自动降级失败时,可通过以下方式人工干预: 1. 修改供应商优先级 2. 调整重试参数 3. 切换到备用配置 4. 手动触发恢复 **章节来源** - [tts.service.ts:304-314](file://server/src/modules/tts/tts.service.ts#L304-L314) ### 监控与日志 #### 日志记录策略 系统采用多层日志记录: - **AI请求日志**:详细记录LLM调用参数 - **TTS处理日志**:记录音频生成过程 - **错误日志**:捕获异常堆栈信息 - **HTTP请求日志**:监控API调用情况 #### 错误监控 - **Sentry集成**:生产环境错误监控 - **Redis健康检查**:队列服务可用性监控 - **进度监控**:生成任务状态跟踪 - **性能指标**:响应时间和吞吐量统计 **章节来源** - [logger.service.ts:1-114](file://server/src/services/logger.service.ts#L1-L114) - [sentry.service.ts:1-113](file://server/src/services/sentry.service.ts#L1-L113) ## 结论 本故障排查文档建立了完整的AI有声书生成平台问题诊断和解决体系。通过多层容错机制、智能供应商切换、完善的监控日志和详细的降级方案,能够有效应对各种异常情况。 关键要点: 1. **预防为主**:通过限流、超时控制和重试机制减少故障发生 2. **快速恢复**:自动降级和手动干预相结合确保服务连续性 3. **可观测性**:全面的日志记录和错误监控便于问题定位 4. **持续优化**:基于监控数据不断优化配置和参数 建议运维团队定期检查以下指标: - 队列积压情况 - 供应商可用性比率 - AI调用成功率 - TTS生成时延 - 错误率趋势 通过这些措施,可以确保AI有声书生成平台的稳定运行和高质量服务体验。