本文档引用的文件
本调试技巧文档面向AI有声书生成平台的前端、后端、数据库、AI服务与媒体处理链路,提供系统化的调试方法论与实操步骤,涵盖:
该平台采用前后端分离架构,前端基于 uniapp + Vue 3 + TypeScript,后端基于 Node.js + Koa,使用 FFmpeg 进行媒体处理,并通过多供应商 TTS 与 LLM 提供 AI 能力。
graph TB
subgraph "前端(uniapp)"
UI["页面与组件<br/>store/页面/工具"]
Utils["工具函数<br/>request.ts/debug.ts"]
end
subgraph "后端(Node.js/Koa)"
API["路由与控制器<br/>langgraph-controller.ts"]
Services["业务服务<br/>tts.service.ts<br/>video-generator.service.ts"]
LLM["LLM适配层<br/>llm/index.ts"]
Media["媒体处理<br/>ffmpeg.processor.ts"]
Logger["日志与错误<br/>logger.service.ts<br/>errorHandler.ts"]
end
subgraph "基础设施"
DB["数据库<br/>Prisma/MongoDB"]
Storage["对象存储/OSS"]
Providers["TTS/LLM提供商"]
end
UI --> Utils
Utils --> API
API --> Services
Services --> LLM
Services --> Media
Services --> DB
Services --> Storage
API --> Logger
LLM --> Providers
图表来源
章节来源
章节来源
下图展示从前端到后端、AI与媒体处理的关键交互路径,以及日志与错误处理贯穿全链路。
sequenceDiagram
participant FE as "前端页面"
participant Req as "请求封装<br/>request.ts"
participant Ctrl as "控制器<br/>langgraph-controller.ts"
participant Svc as "业务服务<br/>tts.service.ts / video-generator.service.ts"
participant LLM as "LLM适配<br/>llm/index.ts"
participant Media as "FFmpeg处理器<br/>ffmpeg.processor.ts"
participant Log as "日志中间件<br/>logger.service.ts"
FE->>Req : 发起API请求
Req->>Ctrl : 调用后端路由
Ctrl->>Svc : 触发业务逻辑
Svc->>LLM : LLM调用/工具调用
LLM-->>Svc : 返回文本/工具结果
Svc->>Media : 媒体处理(合并/转换/裁剪)
Media-->>Svc : 返回处理结果
Ctrl-->>Req : 统一响应格式
Req-->>FE : 展示结果/错误
Ctrl->>Log : 记录HTTP请求日志
图表来源
App 端兼容性:
遵循 app-troubleshooting.md 的条件编译与替代方案,避免直接使用 H5 特有 API。
flowchart TD
Start(["页面初始化"]) --> InitDebug["initDebug()<br/>注册页面/导航拦截器"]
InitDebug --> PageShow["onShow()<br/>输出页面路径与参数"]
PageShow --> Request["发起请求 request()"]
Request --> DebugReq["debugApiRequest()<br/>记录请求"]
Request --> Resp{"响应成功?"}
Resp --> |是| DebugResp["debugApiResponse()<br/>记录状态/耗时/数据"]
Resp --> |否| DebugErr["debugApiError()<br/>记录错误/耗时"]
DebugResp --> End(["完成"])
DebugErr --> End
图表来源
章节来源
错误追踪:
自定义 AppError/UnauthorizedError/ForbiddenError/NotFoundError/BadRequestError/QuotaExceededError,便于前端识别与提示。
sequenceDiagram
participant C as "客户端"
participant M as "中间件<br/>errorHandler.ts"
participant L as "日志<br/>logger.service.ts"
participant S as "业务逻辑"
C->>M : 发起请求
M->>S : 调用业务
S-->>M : 抛出异常
M-->>C : 统一错误响应(code,status)
M->>L : 记录错误日志(stack,meta)
图表来源
章节来源
[本节为通用指导,不直接分析具体文件]
模型输出分析:
在 LLM 适配层打印消息摘要与响应片段,结合业务校验(如 JSON 解析、关键词匹配)进行降级处理。
sequenceDiagram
participant Ctrl as "控制器<br/>langgraph-controller.ts"
participant LLM as "LLM适配<br/>llm/index.ts"
participant Svc as "业务服务<br/>tts.service.ts"
participant DB as "数据库"
Ctrl->>LLM : callLLMWithMessages(书籍类型/难度推荐)
LLM-->>Ctrl : 返回JSON/文本
Ctrl->>Svc : 触发生成(队列/同步)
Svc->>DB : 更新书籍/章节状态
Svc-->>Ctrl : 返回生成结果
图表来源
章节来源
视频生成:
video-generator.service.ts 从章节音频与图片生成视频,支持带/不带背景音乐;失败时更新项目状态并推送 WebSocket 事件。
flowchart TD
A["输入URL数组"] --> D["downloadFile()<br/>远程下载到本地"]
D --> L["生成文件列表list.txt"]
L --> M["ffmpeg 合并音频"]
M --> U["上传到存储"]
U --> R["返回最终URL"]
D -.-> C["cleanupTempFiles()<br/>清理临时文件"]
M -.-> C
U -.-> C
图表来源
章节来源
章节来源
媒体处理依赖 FFmpeg 与存储服务,具备远程下载与上传能力。
graph LR
FE["前端<br/>request.ts/debug.ts"] --> API["后端路由<br/>langgraph-controller.ts"]
API --> SVC["业务服务<br/>tts.service.ts<br/>video-generator.service.ts"]
SVC --> LLM["LLM适配<br/>llm/index.ts"]
SVC --> MEDIA["FFmpeg处理器<br/>ffmpeg.processor.ts"]
API --> LOG["日志中间件<br/>logger.service.ts"]
API --> ERR["错误中间件<br/>errorHandler.ts"]
图表来源
[本节为通用指导,不直接分析具体文件]
章节来源
通过统一的日志与错误处理、完善的前端调试工具、可切换的 AI 与媒体处理链路,以及针对 App 端的兼容性与性能优化,本平台能够高效定位与解决各类问题。建议在开发与生产环境中持续完善监控与告警,形成闭环的调试与运维体系。
[本节为总结,不直接分析具体文件]
章节来源