Local AI · DGX Spark

AI 英語口說對話

開口就能練口說,AI 用接近真人的速度接話。
全程地端語音對話,不必打字,也不必等雲端。

2026 Whisper + Qwen3-TTS 100% 地端
AI 英語口說對話 實際介面

實際介面・Playwright 實機截圖

為什麼要自己蓋一個

想練英文口說,找真人陪練不好約時間,雲端語音助理又常常延遲明顯、還要顧慮語音資料的隱私。有沒有可能開口就聊,不用等?

在 DGX Spark 上把語音辨識、對話模型、語音合成串成一條全地端的 speech-to-speech 管線,講中文英文都行,開口就能對話。

難的是延遲:語音對話等超過一兩秒就不自然,每一段都得壓到接近真人的反應速度。

原理:一句話的旅程

從開口說話到聽到 AI 回覆,中間發生五件事。

01

麥克風即時串流

瀏覽器用 WebSocket 把聲音即時串流出去,不必等整段錄完才送出。

02

VAD 斷句

偵測到約 750ms 靜音才判定一句話講完——這個門檻經過調校,太短會截斷自然停頓,太長會讓人乾等。

03

本地 STT 辨識

Whisper large-v3-turbo 中英文自動辨識;串流中間的片段只當即時字幕顯示,等真正的 final 結果出來才送進下一步,避免 AI 搶著回半句話。

04

本地 LLM 對話

對話模型關閉 thinking 以壓低延遲,選模型時也以延遲優先,目前接的模型回應約 0.46 秒。

05

本地 TTS 念出回覆

Qwen3-TTS-12Hz-1.7B 把回覆念出來,同時前端顯示逐字稿,從開口到聽到第一個聲音約 4.25 秒。

原理深掘:即時 speech-to-speech 延遲鏈

語音對話只要每個環節各拖一點延遲,加總起來就會失去「像真人對話」的手感。以下是實際跑的事件流與延遲鏈路。

麥克風擷取

downsample → 16kHz Int16

input_audio_buffer.append
WebSocket 即時串流

瀏覽器

Server VAD

turn_detection: server_vad

斷句等待可調 0.4–2.5 秒
session.update 即時生效不斷線

GB10

Whisper large-v3-turbo

語音辨識

中間 delta 僅供字幕
.completed 才視為 final

GB10

對話 LLM

QWEN2.5:7B・thinking 關閉

回應約 0.46 秒

GB10

Qwen3-TTS 合成

語音回覆

首個聲音約 4.25 秒
response.output_audio.delta 串流

GB10

AudioContext 排程播放

支援 barge-in

使用者開口即 stopPlayback
可隨時中斷搶話

瀏覽器

延遲預算

VAD 斷句等待 0.4–2.5 秒(可調)→ Whisper large-v3-turbo 辨識 → LLM 回應 ~0.46 秒 → Qwen3-TTS 首音 ~4.25 秒
模型棧:QWEN2.5:7B・QWEN3-ASR-1.7B・QWEN3-TTS・中英雙語
中途辨識片段只進字幕、確定的 final 逐字稿才送進 LLM,避免對話對著半句話搶答

0.46s

LLM 回應時間

4.25s

首個回覆語音出聲時間

750ms

VAD 靜音斷句門檻

關鍵設計決策

全程本地 GPU,不經雲端

語音辨識、對話、語音合成都在自家 GPU 上跑,講話內容不會上傳到第三方服務。

HTTPS 全鏈路

瀏覽器麥克風需要 secure context 才能啟用,所以從前端到反向代理整條路徑都是 TLS。

修正 speculative transcription

串流辨識中途的片段只當字幕用,等 final 結果才送進 LLM,避免 AI 對還沒講完的句子搶答。

延遲優先選模型

對話模型的挑選以回應速度為主要標準,換到目前這顆後,回應時間壓到約 0.46 秒。

技術架構

Frontend

呼吸光球隨音量律動
WebSocket 即時串流
手機優先介面

VAD

瀏覽器端偵測
750ms 靜音判定斷句
避免截斷自然停頓

STT

Whisper large-v3-turbo
中英文自動辨識
final 結果才送進 LLM

LLM + TTS

本地對話模型(關閉 thinking)
Qwen3-TTS-12Hz-1.7B 語音合成
speech-to-speech 框架整合

線上工具已上鎖(Basic Auth)・本頁分享架構與設計