前幾天,我分別完成了 STT、TTS 和 Voice Cloning。
不過到這個階段,它們其實都還只是獨立的模組:
STT:把語音轉成文字
LLM:根據文字產生回答
TTS:把文字轉成語音
如果要做一個真正可以互動的 AI Companion,就不能只停留在單一模組測試。
所以 Day 05 的目標很直接:
第一次把 STT、LLM、TTS 串成完整的語音對話流程。
今天先做最基本的 Turn-based 語音流程:
Microphone
↓
VAD
↓
Speech End
↓
Final STT
↓
LLM
↓
TTS
↓
Playback
使用者開始說話後,由 VAD(Voice Activity Detection)判斷目前是否有人聲。
當系統偵測到連續一段時間沒有語音,就把這個時間點視為:
Speech End
接著將這段完整語音送進 STT,取得最終辨識結果。
例如我說:
今天有點累。
STT 辨識完成後,把文字交給 LLM。
LLM 可能回覆:
今天事情很多嗎?要不要先休息一下?
最後再把文字送進 TTS,合成語音並播放。
到這裡,AI Companion 終於可以完成第一輪真正的語音互動。
Day 02 做 Rolling Transcription 時,其實已經可以在說話過程中不斷取得 Partial Result。
例如:
我今天
我今天晚上
我今天晚上想出去
我今天晚上想出去散步
雖然看起來很即時,但 Partial Result 還可能持續修改。
如果太早把:
我今天晚上
直接送進 LLM,過一下又送:
我今天晚上想出去散步
LLM 就可能重複回答,甚至誤解真正的意思。
因此 Day 05 我先選擇比較穩定的方式:
Rolling Partial
→ 即時顯示
Final STT
→ 送進 LLM
也就是等使用者真的說完,再進入下一個階段。
目前雖然還不是最快,但可以先把整條 Pipeline 跑穩。
取得 Final STT 後,下一步就是交給 LLM。
在語音對話裡,我開始發現模型選擇不能只看「回答能力」,還要考慮:
回覆速度
中文能力
API 延遲
穩定性
成本
因為文字 Chatbot 慢個幾秒還算可以接受,但語音對話如果沉默太久,等待感會非常明顯。
這一版我使用 Groq 執行 LLM,實測完整回覆大約落在:
0.48 ~ 0.71 秒
至少在目前的 Pipeline 中,LLM 並不是唯一的延遲來源。
LLM 產生回答後,再把文字交給 TTS:
LLM Response
↓
TTS
↓
Audio
↓
Playback
Day 05 我暫時沒有急著把 Voice Cloning 接進每一次回答。
目前更重要的是先確認:
整條語音流程能不能穩定完成。
因此先使用前面已經測試過的固定 TTS,之後再替換成 Voice Cloning。
當三個模組真正串起來之後,我馬上遇到新的問題:
每個模組單獨看起來都不慢,但整體對話還是有明顯等待感。
因此我開始拆開量測:
Final STT Latency
LLM Latency
TTS Latency
但對使用者來說,更重要的其實是:
Speech End → First Audio
也就是:
我講完一句話後,要等多久才第一次聽到 AI 的聲音?
假設:
STT:0.8 秒
LLM:0.6 秒
TTS:1.2 秒
如果整個流程都是 Sequential:
Speech End
↓
等待 STT
↓
等待 LLM
↓
等待 TTS
↓
開始播放
那總等待時間就可能接近:
0.8 + 0.6 + 1.2 = 2.6 秒
這也讓我發現,語音 AI 的延遲問題不一定是某一個模型特別慢,而可能是整個 Pipeline 的處理方式造成的。
目前 LLM 使用的是雲端 API。
但這個 AI Companion 未來會處理高齡與健康相關對話,例如:
睡眠
飲食
服藥
身體不適
生活習慣
因此除了速度之外,也需要開始思考:
哪些資料可以送上雲端?
哪些資訊應該留在本機?
對話是否需要保存?
健康相關內容要保存到什麼程度?
這些問題目前還沒有完全解決,但之後設計 Memory 與 Health Memory 時會持續處理。
今天最大的問題不是「能不能對話」,而是:
怎麼讓對話不要一直等待?
目前流程是:
使用者講完
↓
STT 完成
↓
LLM 完成
↓
TTS 完成
↓
開始播放
每一層都必須等上一層結束。
也因此出現幾個問題:
VAD 靜音多久才算 Speech End?
LLM 一定要完整生成後才能給 TTS 嗎?
TTS 一定要全部生成完才能播放嗎?
使用者能不能在 AI 說話時插話?
這些問題最後都指向同一個方向:
Streaming。
Day 05 最重要的成果不是換了什麼新模型,而是第一次讓整個 AI Companion 真正串起來:
Microphone
↓
VAD
↓
Final STT
↓
LLM
↓
TTS
↓
Playback
也就是:
AI Companion 第一次真正完成「聽到我說話 → 理解內容 → 用聲音回答我」。
目前它已經可以說話了。
下一步,就是想辦法讓它回得更快、更自然。