问题域/PD-282

语音输入输出

Voice I/O

TTS/STT 多提供者抽象层,支持云端和本地语音推理

子问题

1.TTS 提供者抽象与切换

2.STT 提供者抽象与切换

3.SSML 支持

4.音频格式转换

5.本地推理集成

6.LLM 输出 Markdown 清洗(代码块/表格/URL/标题去除)

7.云端 HTTP API 与本地 CLI 子进程的统一调用抽象

8.多渠道音频格式适配(Telegram Opus/浏览器 WebM/通用 MP3)

9.API 密钥安全保护与日志脱敏

各项目的解法1 solutions

Signals

横向对比

维度Moltis
提供者抽象Rust async trait 双轨(TtsProvider + SttProvider),编译期类型安全
云端/本地统一同一 trait 接口,云端走 reqwest HTTP,本地走 tokio Command 子进程
SSML 处理supports_ssml() 默认 false + 网关层统一 strip,ElevenLabs/Google 覆盖为 true
文本预处理sanitize_text_for_tts() 8 步管道清洗 Markdown,Cow<str> 零分配快速路径
音频格式AudioFormat 枚举统一 5 格式,支持 MIME/短名称/content-type 三向解析
密钥保护secrecy::Secret<String> 包装 API key,Debug 输出 [REDACTED]
配置模式扁平 struct 嵌入所有提供者配置,Provider ID 枚举支持别名解析
本地推理cli_utils 共享二进制查找 + 临时文件管理,Piper/whisper.cpp/sherpa-onnx 三引擎

最佳实践

1.provider-agnostic trait 设计便于扩展

2.本地推理降低延迟和成本

3.SSML 支持提升语音表现力

4.Cow<str> 零分配快速路径避免纯文本不必要的堆分配

5.cli_utils 共享模块统一本地二进制查找和临时文件管理

6.supports_ssml() 默认 false + 网关层统一 strip 避免重复逻辑

7.扁平配置 struct 替代 HashMap 保证编译期类型安全