Applied ML
nobook
手機當錄音端、自己的筆電當推論伺服器,課堂上即時產出逐字稿、段落摘要與能直接照抄的手抄版筆記。ASR 與 LLM 全部在一張 8GB 顯卡上輪流執行,不呼叫任何雲端 API,錄音與逐字稿不離開自己的機器。
角色:獨立開發、已用於真實課堂技術主軸:本地 ASR + LLM · VRAM 資源管理平台:手機 PWA + 筆電 GPU(Tailscale)
重點
+
約 1 秒出字
說完一句,逐字稿中位數 0.88 秒出現(P95 1.66 秒)
+
8GB 塞下兩種模型
Breeze-ASR-25 + Qwen3 4B / 8B 輪流共用顯卡
+
術語表 +46.4%
課程術語當 initial_prompt,真實錄音正確率大幅提升
+
閘門式驗收
G0–G4 閘門與 109 項自檢全數通過
↑ 點任一張卡片看它怎麼做到的
為什麼做這個
有些課要邊聽邊在紙上寫筆記,一下課就得交。我需要的不是「課後產一份漂亮的整理」,而是課還在上的時候,就有一份能直接照著抄、而且抄得完的東西。
市面上的轉錄服務大多要把錄音上傳雲端,我不想讓整學期的上課錄音離開自己的電腦。手邊剛好有一台 RTX 4060 筆電,於是決定把 ASR 和 LLM 都搬到本地,挑戰在 8GB 顯卡上把即時轉錄和摘要同時跑起來。
功能總覽
關鍵技術決策
資源衝突時,永遠犧牲摘要保逐字稿
逐字稿是核心、摘要是加值。ASR 推論前先檢查 VRAM 餘量,不足就推入延遲佇列而不是直接 OOM;真的遇到 CUDA OOM 時先卸載摘要模型再重試 ASR。llama-server 掛掉或磁碟寫入失敗,都不會中斷逐字稿。
取捨
摘要可能晚一點或暫時降級,但上課內容一句都不會漏。
系統架構
手機 / 平板(PWA,錄音端)
↓ WebSocket over Tailscale
筆電(FastAPI 推論伺服器)
├─ 音訊管線:ring buffer → silero-vad 切段 → ASR 佇列
├─ ASR:faster-whisper(Breeze-ASR-25, int8_float16)
├─ 摘要:llama-server 子行程(Qwen3 4B 課中 / 8B 課後)
│ └─ VRAM 監控、OOM 時卸載摘要模型保 ASR
├─ 後處理:術語近似音修正、接地檢查
└─ 儲存與匯出:SQLite · Markdown · Word(.docx)
技術棧
PythonFastAPIWebSocketfaster-whisper / CTranslate2silero-vadllama.cppQwen3SQLiteTailscalePWA