语音输入输出
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 保证编译期类型安全