Skip to main content

我花 2800 上完保哥的語音輸入課,最後決定自己 fork 一個

Opass
A life well lived

過去半年我陸續試了幾個語音輸入工具,想理解「語音輸入到底能不能勝任我的日常工作流程」。一開始試了當時很紅的 Typeless,後來爆出隱私問題卸載了;換成 GPL 開源的 VoiceInk,用一陣子覺得有些使用體驗的卡點沒解掉、沒買;再來花 2800 上了保哥的 ZeroType 課程,想看看業界對這件事的最新答案。

結果上完課之後,我反而做了一個跟課堂上多數人都相反的決定 — fork VoiceInk 自己改。

這篇文章想分享我為什麼最後選擇這條路,以及為什麼我認為,如果你是工程師、在 AI 時代,能 fork 就應該 fork

一、Typeless:好用,但不夠安心

我接觸的第一個語音輸入工具是 Typeless。它的辨識精度跟反應速度確實很優秀,當時我用得蠻開心。月費 12 美金、號稱「on-device」處理、免費試用每週 8000 字。對於一個第一次嘗試語音輸入的人來說,門檻很低。

但用一陣子之後我注意到 Typeless 自己的 privacy policy 寫了:「Your voice data and contextual information are processed in real time on our cloud servers」 — 也就是音檔會送雲端處理,跟 marketing 給人的「on-device」印象不一致。所謂的 on-device 只是指轉錄歷史存本機,不是音檔不離開機器。

社群上也有人做了更深的調查(例如 X 上 @medmuspg 的逆向工程分析、提到 AWS us-east-2 routing 跟 Accessibility 過度蒐集;以及「背後是中國團隊」之類的傳聞),但這些細節我沒能完整獨立 verify、也不是我關心的重點。對我來說,光是「轉錄歷史本機 ≠ 音檔本機」這個 framing 落差就足夠把信任收回。

對於閉源工具,「我相信開發者」這句話本質上是無法驗證的 — Typeless 的開發者可能完全誠實,但他可以隨時透過下一次 update 改變行為,而你沒有任何方法事先知道。

二、VoiceInk:開源,但有些粗糙

我接著找了一些開源的替代品,最後選了 VoiceInk

吸引我的點:

  • GPL v3 授權,所有 source code 都可以看,所有改動都會繼續保持開源。
  • 買斷制 25 美金,沒有訂閱。我不想為了 dictation 每個月付固定費用。
  • 內建用 whisper.cpp 在本機跑 Whisper 模型,audio 不需要上雲端。
  • 原生 macOS SwiftUI,跟系統整合得很好。

但用了一陣子,我發現兩個讓人不舒服的問題:

第一,AI Enhancement 一次只能套用一個模式。VoiceInk 用 Cmd+N 在不同 Custom Prompt 之間切換 — 你可以建很多模式(email 風格、chat 風格、繁中強制等等),但每次錄音只能套其中一個。換句話說,你沒辦法設一條「任何模式都要遵守的底線規則」(例如「永遠輸出繁體中文」),每個 prompt 都得自己重寫一遍這個底線。對於想要「baseline + 不同 style」這種正交組合的使用者來說,這個架構直接卡死你。

第二,AI Enhancement 啟用時有個我看不見的隱私洞。當你啟用 Enhancement 而且給了 macOS Accessibility 權限,VoiceInk 會把你當下選取的文字、剪貼簿內容、Screen OCR 結果一起夾帶送到雲端 LLM — 沒有任何 preview,沒有任何 toggle,沒有任何 per-utterance 確認。我必須讀 source code 才能知道這件事在發生。

我試用到期之後,最終沒有付那 25 美金。倒不是錢的問題 — 是這兩個痛點讓我覺得,付完錢還是沒解掉我真正在意的事。

三、保哥 2800 元的 ZeroType 課:學到的不是工具本身

接著我注意到台灣 .NET 圈的 保哥(Will Huang) 開了一門新課程:「軟體語音化輸入實戰」,搭配他自己開發的工具 ZeroType。保哥是 Microsoft MVP 連續 18 度、台灣技術社群知名講師,他開課我蠻好奇他怎麼設計這套東西,就花了 2800 報名。

課程現場觀察

報名前我預期會有幾百人,課堂當天的 Zoom 房大約 300 多人在線;但對照當下的報名序號推估,最終總報名人數估計破千是合理的。粗估營收:

2800 元 × ~1000 人 ≈ 280 萬+ 台幣

純粹從變現的角度,這門課真的非常成功。但更值得觀察的是課群結構 — 大概一半以上的人不是工程師背景。有些人甚至不太會自己設定 API key 貼到軟體裡。

換句話說,這門課的本質是一場「AI 資訊差科普」,把工程師圈已經熟悉的工具流程 — Whisper 轉錄 + LLM enhancement + 不同 prompt 切換 — 包裝給對效率工具還陌生的受眾。

不過保哥的教學功力與個人品牌是這套商品化能成功的關鍵,我在課堂上看到幾件事讓我印象深刻:

  • 對學員問題很有耐心,遇到沒辦法簡單 1-on-1 處理的問題,他會邀請學員開公開直播、由他遠端操作學員的電腦、過程錄影 — 同一個問題只需要解決一次,後來人看影片回放就好。這是個我覺得很聰明的教學技巧。
  • 對模型費用做了深入研究,例如他提到 Groq 線上 Whisper 一小時 audio 成本只要台幣一兩塊,建議學員別省這種錢直接走雲端。
  • 課程內容甚至教你怎麼整合聯發科的 Breeze 台語模型做台語輸入 — 這對台灣使用者是個實用 plus。

這些都是 2800 元之外的額外收穫。能把一套技能這樣商品化、累積課程跟個人品牌、並且賣得出去,是真本事。同時也讓我感受到 — AI 工具的資訊差在大眾市場真的非常嚴重,這是為什麼會有上千個人願意付 2800 元來補這個差距。

ZeroType 的設計

保哥的 ZeroType 架構大致是這樣:

  1. 第一階段:語音辨識。用 Whisper 把語音轉文字。
  2. 第二階段:AI Enhancement。把轉錄結果丟給 LLM,套用不同 system prompt 做後處理。
  3. 手動模式切換。用 Option+1 / Option+2 / Option+3 切到不同 prompt 預設 — 例如「正式化」「輕鬆化」「翻譯成英文」「翻譯成印尼文」等等。
  4. 指令模式。可以對著電腦講「打開 YouTube」「打開電商平台搜尋某商品」之類,由 ZeroType 解析後執行。

身為一個工程師,看完之後我認同第 1-3 點 — 兩階段 + 模式切換的架構是合理的設計,跟我自己的想法一致。

第 4 點我不認同,而且整套設計有兩個讓我更深層不舒服的問題。

我不認同的三件事

① 封閉原始碼

保哥在 Facebook 公開說過:ZeroType「轉錄的所有資料都是原廠直送到你指定的 AI 提供商,沒有中間伺服器」 — 也就是 BYOK 架構,你自己帶 API key,資料不過保哥的 server。

這個 architecture choice 我認可,比 Wispr Flow 那種統一過自家 cloud 的做法好得多。但這個 claim 我無法 audit。你可以宣稱不過 server,但實際上有沒有?要靠抓 traffic 才能驗。

我能理解閉源是刻意的商業選擇 — 如果工具 open source,課程就失去了獨家賣點,這套「課程 + 工具」的商業模式本身就無法成立。對保哥來說這個決定完全合理。但對工程師使用者來說,這個 trade-off 的代價就是 audit 能力的喪失 — 我必須建立在「保哥這個人值得信任」這個前提上才能用,而這個前提,跟我前面卸載 Typeless 時面對的同類問題沒有本質差別,只是換了一個信任對象。

開源代表「不需要信任任何一個個人 — 只要信任 source code 跟 build 過程」。閉源永遠回到「信任這個開發者」。

② Clipboard 默默被送進 LLM

課程中我注意到,ZeroType 在送 LLM enhance 的時候,會把當下的 clipboard 內容一起 inline 進去。送 clipboard 進 LLM 這個 design 本身我沒意見 — 確實能提供更多 context 讓 LLM 輸出更貼合使用者意圖。

我反對的是這件事完全不透明:沒有 UI preview、沒有 per-utterance 確認、沒有 toggle 可以關。你的 clipboard 裡那個剛複製的 API key、剛剪下的密碼、那段 private message — 在你完全沒意識到的情況下,跟著 transcript 一起送進 LLM。跟 VoiceInk 那個隱私洞是完全同個 pattern;發送對象從「VoiceInk 配的 LLM」換成「使用者自己指定的 LLM」,但「使用者看不到正要送什麼出去」這件事沒變。

③ 命令中心應保守設計、不要讓 LLM 全面接手

保哥的指令模式(語音版 Alfred / Raycast)我覺得方向上是個值得謹慎處理的設計決定。

語音觸發一些命令本身沒有問題 — 講「打開 Chrome」「打開 YouTube」這種 deterministic mapping 確實方便、有實用價值。但我認為這個能力應該盡量保守設計、避免讓 LLM 模型自由地完整接手命令執行。理由有兩點:

  • macOS 上已經有 RaycastAlfred 作為 keyboard-driven 命令中心 — 它們是熟成、設計周密、社群驗證充足的方案。沒有必要在語音工具裡重造輪子。
  • 在語音輸入工具裡額外再做一層命令執行能力,等於在另一個程式裡開一個新的資安風險入口。LLM-driven 的命令執行特別危險 — 輸入是非結構化自然語言、LLM 的決策過程不可預測、再加上 prompt injection 的可能性,這個攻擊面比 Raycast 那種 deterministic keyword-driven 的方式大得多。

最理想的設計是:語音輸入工具暴露少數高度受控的命令、複雜命令路由給專門的命令中心 — 透過 macOS 既有的 keyboard shortcut / URL scheme 機制鬆耦合,比把所有能力塞進一個 LLM-driven endpoint 都更有彈性、更安全。

課程價值 vs 成本

老實講上完保哥的課我有學到東西 — 兩階段架構的合理性、Groq 的 Whisper 線上模型成本確實便宜(一小時 audio 大概台幣一兩塊)、Windows 跟 macOS 在拿不拿得到 active app context 上的差異。對非工程師受眾,2800 元換到「我知道我可以用語音工具加速我的工作」這個 mental model,可能是值得的

但對工程師來說呢?我覺得 2800 是去買「別人怎麼用語音工具」這個資訊。可是我們本來就懂這套工具鏈 — 那花這 2800,相對於花 0 元 fork 一個開源專案直接照自己需求改,前者反而是更慢、更受限的路徑

四、自己做:Fork VoiceInk → VoiceTwInk

上完保哥的課結束後,我做了一個決定:fork VoiceInk 自己改。

為什麼選 VoiceInk fork、而不是其他工具

我重新盤點了一遍市面上的選項,從「我能不能 fork 它」這個角度篩:

工具License音訊處理原生 macOS可 fork?
VoiceInkGPL v3本機 whisper.cpp + 可選雲端SwiftUI ✓
HandyMIT完全本機Tauri / Rust ✗
SuperWhisper閉源本機 + 可選雲端 LLM
MacWhisper閉源本機
Aiko閉源本機
Wispr Flow閉源雲端mixed
Typeless閉源雲端(號稱本機)
ZeroType閉源雲端 (BYOK)

開源這條 filter 一拉,市場上只剩 VoiceInkHandy

Handy 走 Tauri + Rust + webview,主打跨平台。但 macOS 上的語音輸入是個會跟 OS 深度整合(CGEventTap、Accessibility、NSPanel)的場景 — Tauri 的 webview 包 native UI 體感上不會有 SwiftUI 自然。每天用 50 次以上的 daily-driver 工具,「對」的感覺重要。

所以 VoiceInk 變成唯一候選。我也試想過從頭寫,但很快放棄 — 完全自己做有太多坑要踩、像是各種鍵盤輸入攔截的問題,就算有 AI 也不夠快。我的目標是使用語音輸入工具,不是去當 macOS systems programmer。Fork 一個成熟的 codebase、改 5% 滿足我的 niche,比從零處理 CGEventTap、Accessibility 行為、NSPanel lifecycle 划算太多。

我加了三個改進

Fork 完之後我陸續加了三個 feature。每一個都是市面上現成工具沒能滿足的痛點。

① Privacy HUD — 看見每一個送出的 byte

Privacy HUD 浮在 macOS Notch recorder 旁邊,顯示送雲端 LLM 的 clipboard 內容、screen context、time 等欄位 — 黃底代表雲端 destination

錄音的時候,HUD 即時顯示所有正要送 LLM 的 context 欄位 — selected text、clipboard、screen OCR、custom vocabulary、time context — 各有 visual marker,背景顏色綠 = 本地、黃 = 雲端。錄音中按 ESC 可以全部取消、什麼都不會送出去。

這直接解掉前面 Typeless、VoiceInk、ZeroType 共同的痛點 — 你看得到,你才能信任。

② Simulate Typing Mode — 解 Claude Code CLI 的 [Pasted text] 摺疊

如果一次對 Claude Code CLI 大量地講話下指令,Claude CC 對大段 paste 會自動收摺成 [Pasted text +N lines] symbol,沒辦法 inline 編輯。這也是我過去很難把 VoiceInk 用在 Claude Code 上的原因。

VoiceTwInk 加了一個 toggle:開啟後不走貼上、改用 CGEventKeyboardSetUnicodeString 逐字模擬鍵盤輸入(順帶繞過注音輸入法的攔截)。同時強制關掉 AutoSend、把 LLM 輸出裡的 \n 轉成 Shift+Return — 段落保留、不會中途送出。

③ 繁體中文支援

Whisper 預設輸出簡中。直觀的修法是傳 zh-TW seed prompt 偏置 — 我做了。但實測發現一個意外副作用:這個 seed prompt 強到會把純英文 audio 翻譯成中文。我用 curl 對 Groq Whisper API 跑了 4 個 condition 的 spike 才釐清這件事。

最後的解:在 enhancement layer 加一條 [CRITICAL LANGUAGE RULE] 強制 LLM 輸出繁中。日常設定建議是 Auto-detect 語言 + Enhancement 開啟 — Whisper 端不夾 seed prompt(避開翻譯副作用)、enhancement 端把任何簡中輸出救回繁中。

整個 fork 的所有改動 + design 細節 + 隱私 audit 都在 VoiceTwInk repoFORK-CHANGES.md

五、為什麼 AI 時代你應該 fork

過去 fork 一個別人寫好的軟體成本很高 — 你要先 spend 一兩個禮拜熟悉 codebase,搞懂它的架構、命名習慣、所有 abstraction 的設計意圖。對於 daily-driver 工具來說這個 upfront cost 通常勸退人 — 不如花錢買現成的就好。

但 AI 改變了這個 cost equation

Claude Code / Codex 這類 coding agent 的協助下,你 fork 一個專案、丟給它「我想加 X feature」、它會自己讀懂 codebase、找到適當的注入點、寫出 patch、跑測試。上面提的這三個 feature,從「想到需求」到「程式碼 commit、build、自己 dogfood」全部做完,前後不到兩天。

這個 cost collapse 重新定義了「Build vs Buy」的 framework。過去這是個二元選擇:要嘛買現成(成本低、彈性零),要嘛從零做(成本高、彈性滿)。今天多了第三條路:

Fork:站在巨人肩上、只改你 niche 的那 5%、保留 95% 上游的成熟功能。

對工程師來說,這條路在 AI 時代很有威力:

  • 隱私 posture:你能審計每一行送出去的 code、每一個 network call
  • 客製能力:任何上游不接受的 PR,你都可以自己 patch 進 fork
  • 長期成本:相比月費訂閱、相比一次性買斷後上游決定不更新你的痛點功能,fork 的長期成本更可控
  • 手感主權:你決定鍵盤快捷鍵、決定 UI 行為、決定哪些 feature 該留哪些該關 — 不需要遷就 upstream 對 broad audience 的取捨

當然,fork 不是萬靈丹。你接手 upstream 維護的責任 — 每次 git merge upstream/main 都得 review 衝突、安全修補要主動 backport、新的 macOS 版本來了要自己處理 deprecation。對於非 daily-driver 的工具,這個 trade-off 不划算 — 還是買現成或直接用上游。但對於每天用幾十次的核心工具,這個 trade 是值得的,因為這個 trade 換來的是工具的長期主權。

回到語音輸入。對保哥那 1000 個非工程師學員來說,2800 換到「我知道我可以用語音工具」這個 mental model 是值得的 — 他們本來也沒法自己 fork 改。但對於有開發能力的工程師,付 2800 是在用真金白銀去買「資訊差」 — 而你本來就應該不缺這個資訊差。

如果你是工程師,且每天會大量用某個語音輸入工具:fork VoiceInk、用 Claude Code 把它改成你想要的樣子。GitHub 上 25 USD 你不用付,2800 課程費你不用報,你只需要花一個週末熟悉 codebase + 改你最在意的那條痛點。

結語

我這個 VoiceTwInk fork 仍然在演化。Privacy HUD 已經 ship,Simulate Typing Mode 解掉 Claude Code 的痛,繁中問題基本解決 — 但還有 backlog 等著做(per-Power-Mode 語言切換、Action Mode tool calling 的設計探索、etc.)。整個專案沒有 release schedule、沒有 user support、沒有商業模式,純粹是我的 daily driver。

這聽起來不像個「產品」,但它是個對我有用的工具。對工程師來說,這兩件事的差別其實沒那麼大 — 你只需要照顧好一個使用者,就是你自己。

軟體擁有權在 AI 時代發生了根本變化。過去是「買或做」的二元選擇,今天 AI 把 fork 的成本壓到了一個全新的 sweet spot。對於日常生產力工具,「能 fork 就 fork」不再是炫技、不再是 hardcore 工程師的奢侈品 — 它變成一個務實、可重複、可推薦給其他工程師的選項。

而對於不透明的工具市場、無法驗證的隱私聲明、被閉源廠商鎖死的 feature roadmap — fork 是面對這些限制時,工程師唯一可以拿回主動權的方式。