S2S与GPT-4o:开源语音AI流水线选型拆解
【免费下载链接】speech-to-speechBuild voice agents with open-source models项目地址: https://gitcode.com/GitHub_Trending/sp/speech-to-speech
语音对话走云端 Realtime API,每次请求都计费,录音留在厂商服务器。Hugging Face 开源项目 speech-to-speech(后文简称 S2S)把语音 agent 拆成 VAD、STT、LLM、TTS 四个独立进程。每站可换模型,整套能全本地跑,接口兼容 OpenAI Realtime 事件集。
开源语音AI项目定位:S2S 是什么,不是什么
speech-to-speech 是级联管道,不是单一模型。语音活动检测、识别、语言模型、合成是四个独立进程,各自一个线程,数据靠队列流动。它也不是端到端:LLM 槽位只收文本,音频的进出由另外三站完成。默认组合是本地 Parakeet TDT 识别、云端 OpenAI 语言模型、本地 Qwen3-TTS 出声。与 GPT-4o Realtime API 的差异在机制层:后者把整条链路封在一个闭源模型里,对外只暴露参数;这条管道把每一站做成可单独替换的进程,协议层说的还是同一套 Realtime 事件。对客户端来说,S2S 就是一个换了地址的 Realtime 端点,OpenAI Agents SDK 的原生 WebSocket 与 WebRTC 传输都经过测试,连接代码不用改。
VAD-STT-LLM-TWS 四段管道:数据流经的工位
数据路径很直:客户端以 base64 送 PCM,服务端重采样到 16 kHz、按 512 采样分块,然后过四个工位。整条链路跑在 FastAPI 服务里,每个会话独占一个队列化的管线单元。
工位一:语音活动检测。PCM 块进入 Silero VAD v5,判定说话起止与轮次。Smart Turn v3.2 按内容与韵律复核断句,减少句中停顿被当成说完。src/speech_to_speech/VAD/
工位二:语音转文本。完整语音段送识别后端,转写写入对话上下文。开启增量转写后,说话过程中即有部分内容流出。src/speech_to_speech/STT/
工位三:语言模型。LLM 流式产出回复与工具调用,经统一后处理器按序入队给 TTS,音频不抢文本。src/speech_to_speech/LLM/
工位四:文本转语音。TTS 合成 16 kHz PCM,以 delta 事件流回客户端。用户开口即打断:生成计数器使旧响应失效,立刻回到监听。src/speech_to_speech/TTS/
模型替换自由度:每站能换哪些人
重点不在清单长度,而在每站都能单独换人:
| 环节 | 可选模型 | 适用场景 |
|---|---|---|
| VAD | Silero VAD v5 + Smart Turn(内置) | 轮次判定、打断复核 |
| STT | Parakeet TDT(默认) | 25 种欧洲语言,低延迟默认项 |
| STT | Whisper / Faster Whisper / MLX 系列 | 多语言,Apple Silicon 专用 |
| STT | Paraformer(FunASR) | 中文场景 |
| STT | OpenAI 兼容端点 | 识别指向自建 vLLM 或云端转录 |
| LLM | responses-api / chat-completions | OpenAI、HF Inference、OpenRouter、vLLM、llama.cpp |
| LLM | transformers / mlx-lm 进程内 | 全本地,不碰外网 |
| TTS | Qwen3-TTS(默认) | 多语言默认项 |
| TTS | Kokoro / Pocket / ChatTTS / OmniVoice / MMS | 声音克隆、CPU 低成本、中英等 |
选择靠三个旗标:--stt、--llm_backend、--tts。--language auto时 STT 逐句检测语言并转交 LLM。语言覆盖取决于 STT 与 TTS 的组合,而非管道本身。STT 指向独立转录服务(vLLM 挂 Qwen3-ASR、OpenAI 转录)的用法见 OpenAI 兼容 STT 文档。
部署路径:容器化、服务器-客户端、纯本地
容器化。docker compose up起两个容器:llama.cpp 在 8080 端口提供 Gemma 4,Realtime 服务占 8765,都预留 GPU,模型缓存挂到本地目录,重启不重新下载。配置见 docker-compose.yml。
服务器-客户端。服务端跑serve,客户端用talk接/v1/realtime的 WebSocket 或 WebRTC;WebRTC 走 Opus 媒体轨,JSON 事件走数据通道。默认只绑 127.0.0.1,--host 0.0.0.0才对外。
纯本地。local一条命令把服务端与麦克风客户端合成一个进程。LLM 指向 llama.cpp,权重缓存后设HF_HUB_OFFLINE=1即可离线运行。
成本·隐私·可控性:与 GPT-4o 的对比表
| 维度 | S2S(开源语音AI) | GPT-4o Realtime(商业) |
|---|---|---|
| API 费用 | 本地免费;LLM 指云端仍按次计费 | 按请求计量 |
| 数据归属 | 全本地时录音不出机器 | 音频进厂商云端 |
| 定制深度 | 任一站可换,工具与提示词可改 | 只调 API 暴露的参数 |
S2S 的 LLM 槽位支持三种接法:本地推理、自建 vLLM/llama.cpp、商业 API,费用曲线可调。全本地时按次计费归零;STT/TTS 留本地、LLM 走云端,音频部分不出内网。另开--enable_llm_proxy后,服务端把配置的 LLM 原样转发成 OpenAI 兼容端点,摘要、标题等旁路任务与语音会话并行,互不占用。
谁该选 S2S,谁该绕道
适合:
- 音频不出内网是硬需求:金融、医疗、现场机器人
- 做语音 agent 产品:这条管道已是数千台 Reachy Mini 机器人的生产对话后端
- 多硬件混布:CUDA、Apple Silicon、CPU 各有后端
- 存量 OpenAI Realtime 客户端要迁自托管:只换端点
不适合:
- 没 GPU 也没预算,想五分钟看到效果:商业 API 即插即用
- 需要完整的 OpenAI Realtime 功能面:S2S 只实现核心 GA 事件集,README 写明不承诺完全等价
- 团队没有依赖治理精力:每个后端是独立 extra,存在已知版本冲突,如 DeepFilterNet 与 Pocket TTS 的 numpy 冲突
尾声:级联架构的下一步
端到端语音模型在快速演进,级联管线没有因此失去位置。两者不互斥,区别在链路从哪一刀切。S2S 的 LLM 槽位能直接接端到端音频模型:--stt none跳过识别站,VAD 完成的音频段直接送模型。今天跑开源链路,明天换端到端新模型,客户端的 Realtime 代码不用动。商业端点兼容层会持续压低迁移成本,自托管的竞争力将更多来自硬件与数据边界,而不是功能差距。对做语音产品的团队,可替换性比单模型更实在。
【免费下载链接】speech-to-speechBuild voice agents with open-source models项目地址: https://gitcode.com/GitHub_Trending/sp/speech-to-speech
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考