Local AI · DGX Spark

AI 聽寫潤飾

按住說話,放開就是整理好的文字——或直接幫你翻譯。
本地 STT + LLM 潤飾,中英夾雜也聽得懂,輸出永遠是繁體。

2026 Qwen3-ASR + LLM 100% 地端
AI 聽寫潤飾/翻譯 實際介面

實際介面・Playwright 實機截圖

為什麼要自己蓋一個

口述打字常常是「呃、那個、禮拜三……不對,是禮拜四」的流水帳,逐字稿能用,但不通順、還帶著講話中途改口的痕跡。丟給雲端做語音轉文字或翻譯,又得多繞一手隱私。

DGX Spark 上把本地語音辨識和 LLM 接起來,錄音當下就在地端把口說整理成通順文字,不用等雲端服務。

難的是拿捏:潤到通順,但不能改掉原意,還要接得住講到一半改口、中英文夾雜的狀況。

原理:一段話的旅程

從按下麥克風到一段可編輯文字,中間發生五件事。

01

麥克風收音

按住主按鈕開始說話,鬆開結束這段錄音,不需要額外按停止鍵。

02

瀏覽器端 VAD 斷句

偵測到 550ms 靜音就自動切一段,單段錄音上限 7 秒,純靜音的片段直接丟棄、不送出去。

03

本地 STT 轉文字

Qwen3-ASR-1.7B 直接輸出繁體逐字稿並累積成原始逐字稿,取代了早期跑在 CPU 上的 whisper 方案。

04

本地 LLM 潤飾/翻譯

依使用者選擇的模式,把整份逐字稿重新潤飾成通順文字,或整段翻譯。每次都是「整份重潤」,所以講到一半改口(「禮拜三……不對,禮拜四」)也能被自動修正;輸出走 SSE 串流逐 token 吐字。

05

靜默微調呈現

背景重潤完成後,畫面只 diff 替換真正變動的地方並淡色一閃,不會整段畫面重刷,閱讀不被打斷;結果是 contenteditable,可以直接編輯、複製。

原理深掘:VAD 斷句與整份重潤迴圈

聽寫本身不難,難的是在雜訊、口誤、中英夾雜之間,用最短延遲產出一份乾淨、還會自我修正的文字。以下是工具實際跑的 VAD 與重潤規則(TL_* 是程式碼裡的規則命名)。

麥克風 RMS 取樣

能量式 VAD(50ms tick)

noiseFloor 自適應 floor×3
範圍 0.012–0.09

瀏覽器

VAD 斷句

靜音即切段

連續靜音 550ms 切段
260–7000ms・峰值<0.03 丟棄

瀏覽器

Qwen3-ASR-1.7B

語音辨識(GPU)

中英 code-switch
OpenCC s2twp → 繁體

GB10

rawText 累積

依序合併

sequence queue 防亂序
依 idx 補位排隊

瀏覽器

整份重潤 LLM

qwythos:9b・/no_think

debounce 350ms
max_tokens=clamp(len×2.2,160,3072)

GB10

SSE → diff patch

靜默微調

AbortController 中斷舊請求
只替換有變區段

瀏覽器

三條自我修正規則

TL_CORR 自我修正:「不對/應該是/I mean」回頭套用最終版
TL_NOISE 防幻聽:丟棄書名/歌名/外語片段等無關雜訊
TL_TRAD 強制繁體:輸出一律收斂為繁體(台灣用語)

實測數據

8.7 秒中英混講 → 辨識約 1.2 秒(GPU)
9B 串流潤飾約 22 tok/s
對照組 faster-whisper small(CPU) 同句誤判為德語
Playwright 假麥克風全鏈路自動化驗證

550ms

VAD 靜音斷句門檻

~1s

停頓後出字延遲

108px

主按鈕尺寸(拇指友善)

關鍵設計決策

整份重潤,而非逐句修正

每次潤飾都重新看過整段逐字稿,使用者講話中途改口也能被自動修正過來,而不是卡在第一次講的版本。

靜默微調 UI

背景重潤後只 diff 替換變動的區塊並淡色一閃,不整段重刷畫面,閱讀體感更穩定,不會一直被打斷。

雙重防幻聽

客戶端先用音量峰值門檻擋掉太小聲或雜訊片段,LLM 再用規則丟棄明顯無關的內容,兩層一起防止聽寫「無中生有」。

強制輸出繁體

不管辨識或潤飾用了什麼模型,最終輸出統一收斂成繁體中文,不用使用者再手動轉換。

技術架構

Frontend

PTT 按住說話
滑動切換潤飾/翻譯
contenteditable 可直接編輯

VAD

瀏覽器端斷句
550ms 靜音切句
單段上限 7 秒

STT

Qwen3-ASR-1.7B
直接輸出繁體
取代早期 CPU whisper 方案

LLM

本地模型潤飾/翻譯
SSE 串流逐 token 輸出
整份重潤保留最新意圖

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