🪣

6. Open WebUI 对接语音识别

💡
  • 说话 (语音转文字 Speech-to-Text): 你的声音 → 麦克风 → OpenWebUI → Azure Speech (STT) → 转换成文字 ("Hello, can you talk with me?")。
  • AI 思考 (大语言模型 Large Language Model): 文字 → 指定的 gpt-4.1 模型→ 产生回复的文字 ("Hello! Yes, I can talk with you. 😊...")。
  • AI 开口 (文字转语音 Text-to-Speech): 回复的文字 → OpenWebUI → Azure Speech (TTS) → 文字转语言 → 播放出来。
notion image
notion image
notion image
 
当然也可以写入环境变量,这样每次重建时无需到UI界面手动连接

失败经验:

  1. 配置优先级误判:Open WebUI 会把之前在 UI / API 保存过的 audio 配置持久化到 SQLite;启动时优先读取数据库而不是当前容器环境变量,导致修改 .env 没效果
  1. 误以为“override 代码没生效”是主因,实际即便 override 生效也被数据库里已经加载进内存的值覆盖。
阶段
操作
结果
A
改环境变量,仍报 500
DB 旧值覆盖
B
编写/挂载 audio.py 强制 azure
日志仍显示 transformers 分支,override 日志缺失
C
增加更多日志 & 强制 engine
仍被数据库加载值盖掉
D
识别必须删除 DB audio 键
多次脚本/SQL 失败
E
解决 PowerShell 写文件问题,落地“动态清理”脚本
成功找到含 key 列的表并删除匹配行
F
重启容器
不再出现 “loaded from the latest database entry”,Azure 语音正常工作(实时对话成功)

最终成功的关键修改:

1. 使用独立 Python 文件(非 inline)+ sqlite3 标准库列举所有表,动态检查含 key 列的表。 2. 构造通配删除:DELETE FROM <table> WHERE key LIKE 'AUDIO_TTS_%' OR key LIKE 'AUDIO_STT_%'. 3. 确认删除数量,提交事务 (con.commit()),再做剩余验证查询。 4. 重启服务后确认日志不再出现 “loaded from the latest database entry”,说明 env 接管。 5. Region + 语音参数在环境变量中保持无空格(或在代码里 sanitized),Azure 接口正常返回。
 

若以后再出现“环境变量失效”可用的排查模板:

1. 列出 DB 所有表:SELECT name FROM sqlite_master WHERE type='table'; 2. 找含 key 列的表;查询:SELECT key,value FROM <t> WHERE key LIKE 'AUDIO_%' LIMIT 20; 3. 如果有匹配且你不想要它们:DELETE + 重启。 4. 重启后看日志:仍出现则说明删除没提交或写到了别的 DB(路径检查)。