www_site/docs/phase-3-report.md

82 lines
5.5 KiB
Markdown
Raw Normal View History

# Phase 3 TTS 任务与额度闭环报告
2026-09-08 16:48:49 +00:00
日期2026-09-08
范围P3-01 至 P3-07
状态:任务持久化、额度冻结/释放、Worker、历史、真实音频回放和下载已部署并完成最小成功联调高级异常矩阵和上游异步/幂等能力仍待补充。
## 1. 已实现
- `002_tts.sql` 建立 `tts_voices`、`tts_tasks`、`audio_files`,并保留版本化迁移。
- 代码默认音色 `default` 作为旧工程提供的标识写入测试库;不代表完整真实音色清单。
- `POST /api/v1/tts/tasks` 支持文本长度、格式、语速、音色、幂等键、Plan 和额度校验。
- 任务先入库为 `queued` 并冻结额度,再由 API 进程内持久化 Worker 领取。
- 同一用户同一幂等键同请求返回原任务,不同请求返回冲突。
- Worker 调用固定配置的 `/v1/audio/speech`,不接受用户 URL支持 WAV/MP3 和 Bearer API Key 环境注入。
- 成功路径写入私有本地音频目录,登记 checksum 和文件元数据,冻结转消费。
- 失败路径写入错误码、释放冻结,并保留历史任务。
- `/api/v1/tts/tasks`、详情、音频播放和下载接口已实现资源归属检查。
- `/tts` 页面已接入真实任务、轮询、历史、回放和下载控件。
## 2. 真实测试
测试入口:`https://192.168.199.22/`,使用临时用户和最小文本 `测试`
| 项目 | 结果 |
| --- | --- |
| 任务创建 | `202`, 初始 `queued` |
| Worker 处理 | `failed`,错误码 `UPSTREAM_NOT_CONFIGURED` |
| 历史查询 | 返回 1 条任务 |
| 额度冻结前可用 | `10000` |
| 失败后可用 | `10000` |
| 失败后冻结 | `0` |
| 真实上游最小请求 | `401 Unauthorized` |
配置服务端凭据后重新联调:
| 项目 | 结果 |
| --- | --- |
| 上游精确路径 | `POST http://43.248.188.28:44480/v1/audio/speech` |
| 最小上游探测 | `200 audio/wav` |
| 业务任务创建 | `202` |
| Worker 最终状态 | `succeeded` |
| 回放接口 | `200`,返回音频字节 |
| 下载接口 | `200`,返回音频字节 |
| 历史查询 | `1` 条记录 |
| 额度 | `10000 -> 9998`,已用 `2`,冻结 `0` |
计量补测结果:服务端使用 NFC 规范化并将 `CRLF/CR` 统一为 `LF`,空白和标点计入;空白文本拒绝。隔离账户逐项提交结果为:中文 `2`、英文含空格 `3`、换行文本 `3`、emoji `2`、组合字符 `2`;空白文本返回 `422`。前端使用同一 NFC/换行口径展示计数。
并发和幂等补测:活动任务占用唯一并发槽时后续请求返回 `409 CONCURRENCY_LIMIT`;同用户同幂等键同请求返回同一任务;同键不同文本返回 `409`
成功音频路径已通过最小文本验证并发争用、Worker 重启、存储失败和上游超时矩阵仍需补测。
## 3. P3 工作包状态
| 编号 | 状态 | 说明 |
| --- | --- | --- |
| P3-01 | 已完成最小真实路径 | 模型、适配调用、默认音色和最小 WAV 联调已通过;完整音色资料待补 |
| P3-02 | 已完成负向/基础路径 | 幂等、校验、额度冻结已真实测试;并发争用测试待补 |
| P3-03 | 部分完成 | 持久化 Worker 已运行;任务租约、重启恢复和有限重试待加强验证 |
| P3-04 | 已完成最小真实路径 | 私有存储、checksum、成功消费和失败释放已验证 |
| P3-05 | 已完成最小真实路径 | 页面提交、轮询、成功音频和失败状态已验证 |
| P3-06 | 已完成最小真实路径 | 历史、资源归属、回放和下载已验证 |
| P3-07 | 部分完成 | 正常、上游未配置和成功路径已验证;并发争用、重启恢复、存储失败待补 |
## 4. 阻断项
- 旧工程没有真实音色语言清单;当前只保留代码默认 `default` 标识。
- 旧工程同步返回音频,没有 provider task ID、异步查询或幂等能力业务 Worker 不能假设上游可安全重试。
凭据补齐后,必须重新执行成功生成、音频校验、私有回放/下载、重复请求、上游超时、存储失败、Worker 重启和额度争用测试。凭据只进入服务器 `/etc/kaotings/api.env`,不进入 Git、前端构建或日志。
## 5. 部署边界和上线阻断
- 当前 3000/443 只由新网站 Web、API 和 Caddy 服务提供;未发现旧 Big-TTS Web 进程、容器、SQLite 数据库或监听端口。
- 当前未执行旧账户、历史、音频或配置迁移;测试机未发现旧运行数据。旧 Web 退役前仍需源端负责人提供备份证明和替代验收确认。
- 底层推理服务继续由新 API 调用,旧 Web 退役不停止上游。
- 测试音频目录为 `/home/flym/kaotings-audio`,是私有本地目录,不是已部署对象存储;容量限制、保留期、清理和备份恢复尚未完成。
- 当前上游为公网 HTTP正式上线前需要 HTTPS 或受控加密通道、来源限制和外部网络复测。
- Worker 已增加原子领取、5 分钟租约、过期 running 释放、迟到结果拒绝、一次性结算和启动孤立文件清理;并发 Worker 仍固定为 systemd 单进程,数据库锁为跨进程安全边界。
- 最终测试部署版本:`d9a491e`,迁移 `003_tts_leases.sql`、`004_v1_tts_minimum.sql` 已应用;最终真实任务复测为 `succeeded`,回放和下载均 `200`,额度 `10000 -> 9998`
- 当前新网站运行时不依赖旧 Big-TTS Web测试服务器未发现旧 SQLite、旧进程、旧容器或旧监听端口。旧工程账户/历史/音频/配置未迁移,退役前仍需旧系统负责人提供源端备份和替代验收确认。