- 说话 (语音转文字 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) → 文字转语言 → 播放出来。
Power Up Your Open WebUI with Azure AI Speech: Quick STT & TTS Integration | Microsoft Community Hub
当然也可以写入环境变量,这样每次重建时无需到UI界面手动连接
失败经验:
- 配置优先级误判:Open WebUI 会把之前在 UI / API 保存过的 audio 配置持久化到 SQLite;启动时优先读取数据库而不是当前容器环境变量,导致修改 .env 没效果
- 误以为“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(路径检查)。