日期: 2026-08-19 状态: 设计审批中 范围: cfc-langgraph(新增)+ cfc-frontend(改造)
小程序现有 diet/exercise/sleep 三个语音打卡页已实现录音功能(mp3 格式,uni.getRecorderManager),但录音仅上传保存,未做文字转写。本次新增 STT 能力,覆盖两个场景:
| 项目 | 选型 | 理由 |
|---|---|---|
| STT 引擎 | faster-whisper 1.2.1 | 轻量(base 140MB),中文识别准确,Python 原生支持 |
| 模型 | whisper-base(Systran/faster-whisper-base) | 中英混合识别,CPU 可用,内存 ~256MB(含模型) |
| 模型下载源 | hf-mirror.com | 国内可访问,避免直连 HuggingFace 超时 |
| 音频格式 | mp3(16kHz mono,WAV float32 内部处理) | 小程序录音输出 mp3,av 库解码 |
| 部署方式 | 模型随镜像构建时缓存至 .cache/,无需运行时下载 |
避免容器启动慢 |
[小程序] mp3 录音
│
▼
[langgraph] POST /api/v1/audio/transcribe
│ body: multipart/form-data (file=audio.mp3)
▼
[faster-whisper base] → 转写文字(中文/英文自动检测)
│
▼
{ text: "转写结果", language: "zh", duration: 3.2 }
服务启动流程:
app/main.py → 初始化 WhisperModel('base') 缓存至全局变量/api/v1/audio/transcribe → 读取 mp3 → av 解码 → faster-whisper 转写 → 返回 JSON模型缓存策略:
COPY 前用 hf-mirror.com 预下载模型到 /root/.cache/huggingface/hub/models--Systran--faster-whisper-base/POST /api/v1/audio/transcribe
Request:
Content-Type: multipart/form-data
file: audio.mp3 (≤30s,≤5MB)
Response:
{
"code": 200,
"message": "ok",
"data": {
"text": "今天早餐吃了鸡蛋和牛奶",
"language": "zh",
"language_probability": 0.98,
"duration": 3.2
}
}
错误处理:
400500,message 含原因413现有流程:录音 → 上传 mp3 → 保存 voicePath → 提交打卡
新增流程:录音 → 调 STT 转写 → 上传 mp3 + 保存 voiceText → 提交打卡
改动点:
recorderManager.onStop 回调中新增:调 /api/v1/audio/transcribe 获取文字voiceText 字段(隐藏,用于后端存储)voiceText(DietCheckinDTO 增加 voiceText: Optional[str])在聊天输入框旁新增 🎙️ 按钮,按住录音,松手转写,文字填入输入框。
改动点:
uni.getRecorderManager)this.inputTextDietCheckinDTO / ExerciseCheckinDTO / SleepCheckinDTO 增加字段:
private String voiceText; // 语音转写文字
GrowthRecordService 新增字段映射(若统一用 GrowthRecordDTO 则一并增加)。
打卡页表单增加 voiceText 字段,提交时携带。
cfc-langgraph/requirements.txt 新增:
faster-whisper==1.2.1
av==18.1.0
cfc-langgraph/Dockerfile 新增模型缓存步骤:
# 预下载 whisper base 模型(避免启动时慢下载)
RUN HF_ENDPOINT=https://hf-mirror.com \
pip install faster-whisper==1.2.1 av==18.1.0 && \
python3 -c "from faster_whisper import WhisperModel; WhisperModel('base', device='cpu', compute_type='int8')"
cfc-langgraph/.env.production 无需新增(模型参数硬编码,不配置)。
| 风险 | 缓解 |
|---|---|
| 容器启动慢(模型加载 95s) | healthcheck 初始 delay 延长至 120s |
| CPU 资源不足(base 模型内存 ~256MB) | 确认服务器 ≥512MB 内存可用 |
| 转写准确率问题(background noise) | 后续可换 medium 模型,本次 base 够用 |
| 音频格式兼容(mp3 vs wav) | av 库自动处理多格式 |