Mac语音输入折腾记

我算是个语音输入的重度爱好者。

在手机上写微信、回消息、甚至做笔记,我几乎都是用语音直接说完,让输入法把它转成文字,再稍微改一改发出去。在手机上要用小键盘打出格式完美的句子,实在太费时间了。但是迅飞很快,我一分钟可以说小几百字。

但问题来了:
我在电脑上写东西的时间,其实比手机上更多。于是我天真地想:既然语音输入在手机上这么好用,那我能不能在 Mac 上也全靠语音完成输入呢?

结果没想到——这是一场长达几个月的「语音输入折腾记」。


从搜狗到讯飞

我在 Mac 上最早用的是搜狗输入法。
它的语音输入功能倒也能用,只是时不时给你搞出点广告来。比如那种「XX主题上线啦」的弹窗广告。


我忍了几次,终于还是卸载了它。我知道选项里面可以关,但我干嘛不换一个不用让我去选项里面主动设置,就没有广告的呢。

接着换成了微信输入法。
嗯,微信输入法文字输入功能不错,词库还可以同步。但在 Mac 上的语音输入——还没有做。

好吧,那就只能请出老朋友:讯飞输入法。

不得不说,讯飞在语音识别方面依然是顶级的。中文识别准确率高,语气自然,连一些冷门人名都能识别得八九不离十。但问题也随之出现了:它的快捷键不能改。

默认快捷键用到了 Fn 键,而我外接的 Cherry 键盘根本没有 Fn。
所以,每次要启用语音输入,我得——鼠标 → 菜单栏 → 点一下麦克风图标。
这操作是如此的繁琐,以至于我后来快忘了这个功能了。


苹果原生语音输入法

折腾了一圈,我突然想起 ——「苹果不是自己带语音输入吗?」

在系统设置里一翻,果然,只要双击 Ctrl(或者其他),就能启动语音输入。


完全不用再做其他的设置。识别率还可以。输入模式上也很灵活,你甚至可以边说话边打字,它会自动切换两者的状态。支持比较长时间的持续输入也很受本人的好评。

唯一的问题:它听不懂程序员。

我试着对它说:

新建一个 SwiftUI 的 View,然后在 body 里 return 一个 VStack。

结果它愣是给我打成:

新建一个swift UI的we you,然后在body return一个may stack

作为对比,这是 Whisper Turbo 模型的返回:

新建一个Swift UI的View,然后在 Body 里,Return一个VStack。

感觉苹果的识别完全没有在技术性词汇上面进行训练 —— 这完全可以理解。但这让我在写技术文章和用语音来讲一些和代码相关的内容时非常痛苦。


遇见Handy

所以理想是丰满的,现实是骨感的。我前一段时间就一直用苹果的这个语音输入法,然后遇到单词就改为手工输入。至于效果嘛,差强人意 —— 又不是不能用。

直到最近,GitHub 上一个项目引起了我的注意—— Handy

这是一款完全开源的语音输入工具,最大的亮点是它用的不是云端语音识别,而是本地模型
你可以用自己的显卡、本地 CPU 去运行 Whisper、Whisper-Turbo 这样的语音识别模型。
这意味着:

  • 数据完全保存在本地,不用担心上传云端;
  • 不依赖网络,家里断网也能用;
  • 而且免费。

之前我就差点自己做了一个类似的东西,但后来忍住了没有做。
于是我立马安装进行试用。

结果:好消息是这个软件很不错,坏消息是它的中文不太好

Handy 默认推荐的模型根本不支持中文。
Whisper 的小模型难以识别我的川普。
要想识别得好,至少得用 Whisper Turbo 或 Large

但是 Large 这个模型太慢,说完话要等5-10秒,基本没法用。

好在我这台 Mac mini M4 跑 Turbo 还行,基本上我说完一句话,一秒内结果就出来了。
我一度兴奋地觉得,终于可以实现「全语音办公」了。

直到我发现——
它输出的中文段落句子之间没有标点符号。

对,你没听错。
它会把你十句话连成一行,然后你需要自己去添加标点,就像做完形填空一样。于是我只能一边说话,一边手动加逗号。


Fork一下

身为程序员,遇到这种情况当然不能忍。
于是我 Fork 了一份 Handy 的代码,手动加上了Whisper 模型本来就支持的初始提示词( Initial Prompt )选项。


从那之后,我几乎每天都在用 Handy 说话。
每天至少几百句,AI 聊天、写代码、做笔记,全靠它。
我甚至能明显感觉到思考效率的提升——思维不再被打字节奏打断,话语几乎直接流向了屏幕。

当然,这也得益于我一个人在家办公。
如果是在办公室,我估计早就被同事举报噪音污染了。

不过幸福总是短暂的。
在写正式文档时,Handy,更准确地说是 Whisper 的输出又暴露出一个问题:格式混乱且随机
最主要的表现是——满篇的半角逗号。让我想起了某个大模型的早期版本。
于是我继续动手,给它加了一系列正则表达式自动修正:

  • 把中文附近的半角逗号改成全角;
  • 中文与英文之间自动加空格;
  • 替换掉随机出现的半角问号。

几条正则下来,输出的内容终于看得顺眼多了。


Whisper 与小模型润色法

但在深入使用中我发现,Whisper 的引导提示词( Initial Prompt)其实很弱。
读了一下它的文档,发现其作用并不是「控制提示」,而更像是「提供上下文示例」。
在格式控制上其实不是太强。

于是我又动了个念头:
既然 Whisper 不行,那我能不能在它输出之后,再用一个小模型帮我润色一下?

比如把输出丢给一个轻量语言模型,让它帮我加标点、规范格式、甚至翻译。
想到这里,我又开始改代码了。不过这回没有选用比较激进的本地模型方案, 而是简单的加了一个远程接口来实现。

最终选用的是硅基流动(SiliconFlow)的 API,挂上一个 7B 的小模型。
开发上其实比较简单,只需要一条 HTTP 请求。



主要的时间消耗在细节上。我们首先将原始内容输入到输入框中,然后选中这些内容进行润色。润色完成后,再将原有的文字替换掉。这样看起来等待时间会短一些,而且比较自然。

最终这个方案出奇地好用:
语音识别 + 自动润色,几乎能一次出稿。
甚至可以用它来实时翻译,或者让它帮忙重新排版成 Markdown 格式。

唯一的问题是硅基流动的免费模型,偶尔会卡。
自此,语音输入法终于达到了我想要的体验水平。


数据真的很重要

当然,折腾的路从来不会一帆风顺。
Handy 有时候会「卡壳」——你说完话,它没反应。
结果一整段话凭空消失,History 里也找不到。
那种感觉,就像你写了半小时的论文突然没保存。
我只能叹气,然后重说一遍。

有一次我说了一分多钟的即兴想法,全丢。
于是我干脆加了个保险机制:
每次录音开始时,自动保存一份音频。
无论生成是否成功,都能在 History 上方找到「Latest Recording」。
万一出问题,可以手动再转录一遍。

这下,我终于可以放心地唠叨了。


键盘手太酸,鼠标更舒坦

接下来要解决的,就是「快捷键触发体验」。
Handy 默认是两个组合键——比如 Option + Space。
这意味着你要同时按下两个键再说话,还得稍微用点力。
长时间使用,手指有点酸。

我上官网一看,作者可能手指也酸,于是他自己搞了个硬件扩展:
叫 Handy Button


其实我开始是准备搞一个单键键盘,那种可以自定义快捷键的。打开淘宝,果然——20 块钱就能买个自定义热键按钮。不过仔细想想,一个大键盘,一个小键盘,切换起来有点麻烦。
 

看到这个图,于是灵光一闪:
「我也有鼠标呀。虽然不是只有一个按键的。」

我正在使用的是 29.9 的 inphic 鼠标,侧边有两个可编程键。

首先惊奇于这么便宜的鼠标居然支持自定义宏。
然后惊奇于它的自定义宏驱动不支持 Mac 系统。


然后我搜索了一番,找到了一个 Mac 下的免费开源的鼠标增强软件 Mac Mouse Fix ,它可以让鼠标按键触发任意组合键。 


我设置成:长按中键启动语音输入。侧边键不好发力,长按容易滑,最后还是选中键。

先说结果:理论上完美,实践上翻车。


因为 Mac Mouse Fix 模拟的是「按下→立刻释放」的行为,
而 Handy 需要「按下开始录音,松开结束录音」。
结果我一按,它刚开始录,就立刻结束了。
录音长度:0.00秒。

每次离完美总差那么一点点,只能再次祭出老办法:自己改代码


AI 编程时代的「自己动手」

这次我 Fork 了一份 Mac Mouse Fix 的源码,让 AI 帮我改。
我甚至不用完全看懂它的逻辑,只要告诉 AI:

请帮我把按钮长按的触发逻辑改成:按下时发送 KeyDown,松开时发送 KeyUp。

AI 一顿修改,五分钟后编译成功。
我一试—— 好像有戏。
长按开始录音,松开…… 为啥松开不自动结束?

……

三小时折腾后,终于实现了「鼠标触发语音输入」的终极形态。

此刻我坐在桌前,左手放在键盘上,右手握着鼠标。
只要轻轻一按中键,我就能开始说话。
再也不用伸手去找快捷键,也不用记复杂的组合。
这一刻,我甚至有点感动:
「人类的懒惰,果然是生产力的源泉。」


「专属软件时代」的来临

折腾完这一切,我回头看整个过程,突然有一种奇怪的感触。

在以前,像我这样的小众需求——「想用鼠标触发语音输入」——可能很难实现。
因为需求太细太特立独行,开发者往往不可能为了一个人去加功能。
可如今,我们只需要一点点耐心、加上 AI 的编程辅助,就能自己搞定。

AI 编程,让「个性软件」的时代提前到来了。
每个人都能拥有属于自己的专属版本
哪怕只是改个快捷键、调个逻辑、加个提示词,也变得轻而易举。

这正是开源软件的初衷——

「世界上没有完美的软件,但你可以把它改成你想要的样子。」

过去,这句话对非程序员来说是无法触及的喜马拉雅。
但现在,AI 让它变成了谈笑之间的梦想成真。


不必是专业开发者,也能通过自然语言描述,让 AI 写出功能。
唯一难的部分,只剩下「搭环境」和「测试」。

当然,现在能否完全通过 AI 来实现定制功能,说实话是要看运气的。
但是,这是一个开始,这一天正在逐渐到来。 
 

PS:
我修改后的 Handy 与 Mac Mouse Fix 版本都已经开源在 GitHub 上,有兴趣的朋友可以参考代码编译使用。

如果对文章内容有疑问或者有经验分享,请在评论中留言,我们会及时回复。
发表回复