speech-to-speech 如何用 Parakeet TDT 开启实时流式转录?
【免费下载链接】speech-to-speechBuild voice agents with open-source models项目地址: https://gitcode.com/GitHub_Trending/sp/speech-to-speech
speech-to-speech 是一条 VAD -> STT -> LLM -> TTS 的实时语音管线,其中 Parakeet TDT 是默认的本地 STT 后端,支持 25 种欧洲语言,并能在用户说话过程中持续输出逐句的部分转录(live transcription),而不必等到整句说完。本文的目标很明确:安装项目、启动一个以 Parakeet TDT 做 STT 的 Realtime 服务,并让实时流式转录按你指定的节奏更新。
前提条件来自 README:
- Python 3.10+;
- Parakeet TDT 后端按平台自动选择:macOS(MPS)走 MLX,加载
mlx-community/parakeet-tdt-0.6b-v3;CUDA / CPU 走 nano-parakeet(纯 PyTorch),加载nvidia/parakeet-tdt-0.6b-v3,两者都包含在默认安装里; - 默认 LLM 走 OpenAI Responses API,需要先有一个可用的 API Key(或改指其他 OpenAI 兼容端点,见下文)。
安装
pip install speech-to-speech默认安装已覆盖标准 Realtime 路径:Parakeet TDT(STT)、OpenAI 兼容 API(LLM)、Qwen3-TTS(TTS)以及 local audio 和 realtime server 两种模式。macOS 与非 macOS 的依赖会通过pyproject.toml里的平台标记自动解析,不需要单独安装 Parakeet 相关组件。
启动服务并开启实时流式转录
先在环境变量里备好 LLM 的 Key,然后启动服务:
export OPENAI_API_KEY=... speech-to-speech serve --stt parakeet-tdt --enable_live_transcription各参数的作用与取值依据 Parakeet TDT 参数类:
--stt parakeet-tdt:选择 Parakeet TDT 作为 STT。这本来就是serve的默认选择,README 给出的完整默认等价命令中 STT 项就是--stt parakeet-tdt;--enable_live_transcription:用户说话时持续显示/输出部分转录,帮助文本注明它"works with parakeet-tdt",默认值即为true——显式写出是为了确认配置,也方便按下一节调整节奏;- 设备与精度:
--parakeet_tdt_device取auto/cuda/mps/cpu,默认auto(macOS 用 MPS,否则 CUDA 可用则用 CUDA,否则回退 CPU);--parakeet_tdt_compute_type取float16(默认)或float32。不指定模型名时按设备选默认模型,也可以用--parakeet_tdt_model_name显式指定。
如果想控制部分转录的更新频率,按 STT 文档 的示例把刷新间隔从默认 0.5 秒调成 0.25 秒:
speech-to-speech serve --stt parakeet-tdt \ --enable_live_transcription \ --live_transcription_update_interval 0.25--live_transcription_update_interval的单位是秒,默认 0.5。还有一个相关开关--live_transcription_min_silence_ms(默认 500 ms),它定义开启 live transcription 时判定"停止说话"所需的最短静音时长。
服务启动后监听ws://localhost:8765/v1/realtime,默认绑定127.0.0.1;要对外暴露需显式传--host 0.0.0.0。
没有 OPENAI_API_KEY 时怎么连 LLM
STT 本地运行不依赖远程服务,但管线默认 LLM 走远程 API。文档给出的替代连法都可以搭配--stt parakeet-tdt使用,例如指向 HF Inference Providers:
speech-to-speech serve \ --stt parakeet-tdt \ --llm_backend responses-api \ --tts qwen3 \ --model_name "Qwen/Qwen3.5-9B:together" \ --responses_api_base_url "https://router.huggingface.co/v1" \ --responses_api_api_key "$HF_TOKEN" \ --responses_api_stream \ --enable_live_transcription也可以指到本机 llama.cpp / vLLM 服务器,或使用 Apple Silicon 上的--llm_backend mlx-lm,具体组合见 README 的 LLM Backends 一节。
验证转录是否真的在流式输出
三条由文档给出的验证路径,由轻到重:
连通性冒烟测试(demo 文档):
websocat ws://localhost:8765/v1/realtime # -> you should get a session.created event back immediately连接后立即收到
session.created事件,说明服务在监听且协议握手正常。这一步只验证链路,不验证转录内容。直接对话:在第二个终端运行打包好的麦克风/扬声器客户端:
speech-to-speech talk --url ws://127.0.0.1:8765/v1/realtime或者一条命令把服务和客户端合在一起跑:
speech-to-speech local。说话时,服务终端会逐行刷出部分转录——Parakeet handler 在终端上以Live: ...前缀渲染固定部分与正在生成的活动部分;一句说完后,最终文本以USER: <文本>打印,并附Language: <语言代码>。客户端侧事件:Realtime 协议的下行事件集中包含 streaming transcription——Realtime API 文档 的事件矩阵把"streaming transcription"列为服务端向客户端推送的事件之一,官方 OpenAI SDK 的
realtime.connect()客户端(见 README 的 Python 示例)即可逐事件接收。
语言选择与已知限制
固定语言:用
--parakeet_tdt_language指定目标语言,例如德语:speech-to-speech serve --stt parakeet-tdt --parakeet_tdt_language de自动检测:不指定语言时,模型逐句自动检测。检测逻辑在 handler 源码 中有明确边界:过短语句(少于 20 个字符)不做语言判定,且检测结果若不在支持列表内会沿用上一句的语言,避免误判。
支持范围:Parakeet TDT v3 只覆盖 25 种欧洲语言(
en、de、fr、es、it、pt、nl、pl、ru、uk、cs、sk、hu、ro、bg、hr、sl、sr、da、no、sv、fi、et、lv、lt)。需要中文、日语、韩语等更宽覆盖时,STT 文档 列出的是whisper、faster-whisper等后端,或走 OpenAI 兼容/v1/audio/transcriptions端点,这已超出本文的 Parakeet 场景。CUDA 回退:显式要求
--parakeet_tdt_device cuda但环境里没有可用 CUDA 时,handler 会打印告警并回退到 CPU。离线运行:先把目标配置在线跑一遍让模型与管线资源缓存到本地,之后可以用
HF_HUB_OFFLINE=1启动服务防止访问 Hugging Face Hub,见 README 的 Offline Operation 一节。
服务跑起来、talk里说话能在终端看到Live:前缀的部分转录逐段刷新、说完后收到USER:最终文本,就说明 Parakeet TDT 的实时流式转录已经按预期工作。
【免费下载链接】speech-to-speechBuild voice agents with open-source models项目地址: https://gitcode.com/GitHub_Trending/sp/speech-to-speech
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考