Hugging Face 的 speech-to-speech 真正有趣的地方,不只是「本地 AI 語音聊天」這句話,而是它把即時語音 Agent 拆成一條清楚的工程管線:VAD 偵測你什麼時候開始和結束說話,STT 把語音轉成文字,LLM 產生回應,TTS 再把文字變回聲音。
這條路線的價值很直覺:如果你不想把麥克風聲音、私人對話、公司資料一路送到雲端,那就把語音 Agent 搬回自己的機器。代價也很明顯:你要處理 Python、FFmpeg、CUDA、模型下載、本地 LLM server、TTS 後端、瀏覽器端 WebSocket。這不是「安裝一個 App 就結束」的工具。
如果你之前看過 VoxelCPM 本地 TTS,這篇可以當成下一步:TTS 只是讓 AI 開口,speech-to-speech 則是把「聽、想、說」接成一個即時循環。
內容目錄
先講結論:它不是語音模型,而是一條可替換的語音 Agent 管線
huggingface/speech-to-speech 的 README 把架構講得很清楚:這是一條低延遲、模組化的 voice-agent pipeline,順序是 VAD → STT → LLM → TTS,並且透過 OpenAI Realtime-compatible WebSocket API 對外提供服務。
也就是說,你可以把支援 OpenAI Realtime 協議的 client 指到本機 server。
這個設計比單純做一個 demo 更有意思,因為每一段都能換。
STT 可以用 Parakeet、Whisper、Faster Whisper、MLX Whisper 或 Paraformer;LLM 可以接 OpenAI-compatible provider,也可以接 vLLM、llama.cpp、llama-server;TTS 可以用 Qwen3-TTS、Kokoro、Pocket TTS、ChatTTS 或 MMS TTS。
換句話說,它的重點不是某個模型最強,而是把語音 Agent 做成可插拔架構。
這和 OpenWork / OpenCode 工作台的方向有點像:真正可長期使用的 AI 工具,不應該只綁死在單一供應商或單一模型。
Speech-to-speech 和傳統語音翻譯有什麼差別?
Hugging Face Audio Course 裡對 speech-to-speech translation 的說明很適合拿來釐清概念。
傳統機器翻譯是文字到文字,speech-to-speech 則是語音到語音。最常見的做法是串接:先把語音轉成文字,再做翻譯或生成,最後合成語音。
它也提醒一個很重要的問題:管線越長,錯誤越會累積,延遲也越高。
ASR 認錯一個字,後面的 LLM 可能照著錯字理解;LLM 回答太長,TTS 就要等更久;TTS 聲音不自然,最後體驗還是會掉下來。
所以本地即時語音 Agent 的關鍵不是只看「能不能講話」,而是看四件事:
- 語音辨識是不是準,尤其是中文、口音、背景噪音。
- LLM 回應是不是夠快,不要讓人等到出戲。
- TTS 聲音是不是自然,長時間聽會不會疲勞。
- 整條管線的延遲是不是穩定,而不是偶爾順、偶爾卡。
官方預設路線:先跑起 realtime server
官方 quickstart 很短:
pip install speech-to-speech export OPENAI_API_KEY=... speech-to-speech
跑起來之後,server 會在本機開一個 OpenAI Realtime 相容端點,常見位置是:
ws://localhost:8765/v1/realtime
預設路線會用本地 STT、本地 TTS,再把 LLM 接到 OpenAI-compatible API。你如果想讓 LLM 也留在本機,可以用 llama.cpp 啟動本地模型 server,再把 `responses_api_base_url` 指到本機。
speech-to-speech \ --model_name "ggml-org/gemma-4-E4B-it-GGUF" \ --responses_api_base_url "http://127.0.0.1:8080/v1" \ --responses_api_api_key ""
這裡的重點是 OpenAI-compatible。只要你的本地 LLM server 能提供類似 OpenAI API 的介面,它就有機會接進來。這也是為什麼 Ollama 遠端連線和本地 OpenAI-compatible server 的設定很重要:語音只是入口,真正回答問題的是後面的 LLM。
Windows 實作路線:不是難,是零件很多
核心流程可以簡化成這樣:
- 裝 Python 3.11、Git、FFmpeg。
- 建立 `C:\s2s` 之類的資料夾,開 venv。
- 安裝 `speech-to-speech`。
- 用 llama.cpp 跑本地 Qwen 模型,開在 `http://127.0.0.1:8080/v1`。
- 啟動 speech-to-speech,把 STT 指到 Whisper、LLM 指到本地 server、TTS 指到 Qwen3-TTS。
- 開網頁 client,WebSocket 指到 `localhost:8765`。
這裡最容易踩坑的是 FFmpeg 和 winget。留言裡有人遇到 `winget` 找不到,這通常代表 Windows App Installer / winget 沒裝好,或 PowerShell 環境找不到它。這時候不要卡在同一條命令,可以改成手動下載 FFmpeg,或先修好 winget,再重新開 PowerShell。
架構表:每一段都可以替換,但每一段也都會出事
| 階段 | 作用 | 常見選擇 | 容易卡住的地方 |
|---|---|---|---|
| VAD | 判斷使用者何時開始/停止說話 | Silero VAD | 背景噪音、切句太早或太晚 |
| STT | 語音轉文字 | Parakeet、Whisper、Faster Whisper | 中文辨識、口音、GPU/CPU 速度 |
| LLM | 理解問題並產生回應 | OpenAI-compatible API、llama.cpp、vLLM、Ollama 類服務 | 延遲、上下文長度、模型能力 |
| TTS | 文字轉語音 | Qwen3-TTS、Kokoro、Pocket TTS、ChatTTS | 聲音自然度、CUDA wheel、中文品質 |
| Client | 麥克風輸入與播放 | Realtime WebSocket client、網頁呼吸球介面 | 瀏覽器權限、WebSocket 位置、服務啟動順序 |
這張表就是我對本地語音 Agent 的看法:模組化很香,但你不能只看成功 demo 任一段延遲太高、模型太大、依賴裝錯、WebSocket 指錯,都會讓整體體驗掉下來。
4GB 顯存、4090、CPU:期待值要分開看
如果你只是想體驗,本地小模型加 CPU/GPU 混跑可以試;如果你想每天使用,就要認真看顯卡、VRAM、記憶體、模型大小與量化格式。這部分可以搭配 AI 工作站顯卡選購那篇看,因為語音 Agent 不是只吃一個模型,而是一整條 pipeline。
本地部署值不值得?
安裝太複雜、Python 依賴一直重裝、免費雲端語音也能用、中文場景不一定比微信等現成工具舒服。
我會這樣判斷:
- 如果你只想偶爾語音聊天,雲端 App 更省事。
- 如果你在意隱私、離線、可控模型,本地 speech-to-speech 才有意義。
- 如果你要接自己的 Agent 或自動化流程,OpenAI Realtime 相容 API 很有價值。
- 如果你不想處理依賴,等整合包或 Docker / 一鍵腳本會比較舒服。
有留言建議做整合包,把 Python、虛擬環境、依賴、模型檔都打包好。這個方向很務實。語音 Agent 要走向一般使用者,最重要的可能不是模型再強一點,而是安裝流程少掉一半。
接進 Hermes、OpenWork 或自己的 Agent:語音只是入口
有人問如果部署在 Hermes 裡,是不是就不用打字了。方向是對的,但要分清楚:speech-to-speech 解決的是語音輸入與語音輸出,Agent 真正能不能工作,還要看後面的工具調用、上下文、記憶、權限與任務執行。
也就是說,語音不是 Agent 的全部,只是更自然的控制入口。你可以想像之後用語音叫本地 Agent 幫你查資料、改檔案、跑腳本、操作工作流,但這需要像 OpenWork 或 Hermes Agent 這類工作台或 runtime 來承接任務。
真正有用的組合會是:speech-to-speech 負責「聽和說」,Agent runtime 負責「做事」,本地 LLM / 工具 / MCP 負責「連到你的資料和系統」。語音只是讓人更容易下指令,不能替代完整的任務架構。
資源整理
- Hugging Face speech-to-speech GitHub:huggingface/speech-to-speech
- Hugging Face Audio Course:Speech-to-speech translation
- freedidi 部署筆記:本地部署即時 AI 語音對話
- Whisper 相關延伸:Whisper 開源語音辨識整理
本地即時語音 Agent 很香,但現在還偏工程師玩具
speech-to-speech 讓本地語音 Agent 的架構變得很清楚:你可以把 VAD、STT、LLM、TTS 串起來,對外提供 OpenAI Realtime 相容 API,再用網頁或其他 client 連進來。這條路很有想像空間,尤其適合隱私敏感、離線使用、機器人、客服、語言練習、自建 AI 助手。
但我不會把它包裝成人人都該裝。現階段它還需要處理太多環境問題,Windows 下尤其明顯。真正適合的人,是願意花時間把本地模型、音訊依賴、GPU、WebSocket 和 Agent runtime 串起來的人。
一句話總結:本地即時語音不是為了取代手機上的語音助手,而是為了把「能聽、能想、能說」這個入口,接到你自己的模型、資料和工作流上。這件事如果跑順,會比單純聊天更有價值。
FAQ
speech-to-speech 是什麼?
speech-to-speech 是 Hugging Face 的開源語音 Agent 管線,透過 VAD、STT、LLM、TTS 四個階段,把使用者語音轉成模型回應,再合成語音輸出。
它可以完全本地運行嗎?
可以,但需要把 STT、LLM、TTS 都換成本地後端,例如 Whisper、llama.cpp 或其他 OpenAI-compatible 本地 LLM server,以及 Qwen3-TTS 等本地語音合成模型。
為什麼不用雲端語音助手就好?
如果只是日常聊天,雲端語音助手更省事。本地方案的價值在於隱私、離線、可控模型、可接自有資料與 Agent 工作流。
近期留言