这轮更新,我更关心的不是换了哪个识别模型,而是识别结束以后,文字还会不会走错路。
跟 八月那篇工程取舍 相比,大模型(LLM)后处理、粘贴方式和输入上下文的销毁处理都变了。旧文里的“LLM 彻底关死”和“粘贴三层兜底”,已经不能当作现状。
证据截至 2026-10-23。公开仓库是 CongliangK/ibus-voice-ime。默认分支 main 的 HEAD 为 40c8d40,提交于 10 月 17 日。
查询时没有公开 GitHub Release。最新合入的 PR #7 是卸载测试的缓存隔离修复,不是一次新模型发布。
LLM 可以打开了,但原文要有独立出口
现在的选择不是全面放开润色,而是让你主动配置云端服务。
enabled() 已不再硬编码返回假值:它先看有效云端配置里的 enabled,没有配置才看旧环境开关。启动脚本 仍把本地旧路径的两个开关置零,所以只看脚本,会误以为 LLM 还是不能用。
正常听写先做规则清理和繁简转换,再按配置决定是否请求 LLM。默认少于 50 个字符就跳过;请求出错时,回退到进入 LLM 前的规整文本。模型输出还会再过一次繁简转换,避免润色把字形方向改回去。
这里要把两种“兜底”分开。网络失败可以回退,模型成功返回、却改错意思,并不等于能自动纠正。当前默认路径直接采用单条模型结果,不是每次都生成多候选再重排。启用云端润色,也意味着这段文字会发给你选定的服务。
Ctrl+Alt+B 因此不是普通热键的别名。它把 skip_llm=True 带进链路,长文本也不调用 LLM;使用火山识别后端时,还会关闭那一轮的云端语义平滑。不过“原文”仍经过确定性清理和繁简转换,不是逐字不动的录音抄本。
原文热键也不等于离线模式。识别仍走你选的 ASR(语音识别)后端;如果选的是云端,音频照样需要上传。跳过 LLM 只减少后处理,不会自动改变识别渠道。
我这轮没有做模型对比,也不沿用旧文关于“多大参数规模才可靠”的判断。能从代码确认的是选择权和失败路径,不是哪家模型永远不会改错。
粘贴少做一点,反而更接近语音链路
旧文把切换输入源和虚拟按键当作退路。现在,这两层已经被撤掉了。
仓库的八月粘贴复盘记录了另一种故障:在当时的 Fedora 44、GNOME Wayland 环境里,新建 wl-paste 客户端会触发输入上下文的焦点抖动。引擎调用 commit_text 没报错,文字却没有进入输入框。继续加“切走再切回”的恢复动作,反而会扰乱实例绑定。
当前读取顺序是 xclip → wl-paste → GTK → xsel。在 Wayland 会话里,有 DISPLAY 时先借 XWayland 读取,没有就跳过 xclip。助手把文本准备好,经进程间通信交给引擎,再复用语音结果的延迟提交路径。旧的输入源来回切换和 uinput 虚拟键盘实现已删除。
我更想留下的是排查方法:先比较剪贴板、暂存文件和引擎收到的内容指纹,再旁路观察总线上的 CommitText 信号,最后确认目标输入框。“拿到了文本”“调用了提交”“真的上屏”,不是同一件事。
这也不是所有 Wayland 桌面的通解。没有 XWayland 时会回退,但回退存在不代表旧问题不会重现;仓库的排查结论不能直接外推到其他桌面。
录音有主人,输入框消失也得收尾
语音热键按一次开始、再按一次停止,看上去很简单。但 IBus 这个输入法框架会为不同输入上下文创建引擎实例。焦点一变,第二次按键可能落到另一个实例上:它以为要开始录音,旧录音却还没停。
现在用进程级 _VOICE_OWNER 记录谁持有录音,其他实例收到热键先转交给它。IPC 分发也优先挑连接仍存活的实例,而不是盲信最后一次焦点记录。
10 月 16 日合入的 PR #4 又补上了销毁清理。先标记 _destroyed、递增任务编号,再释放所有权、移除计时器、取消录音、销毁浮窗。后台识别稍后才返回,也不能向已经消失的上下文继续提交。
下面是当前回调检查的源码节选,省略了行尾注释:
def _voice_callback(self, token: int, callback, *args) -> bool:
if (getattr(self, "_destroyed", False)
or token != getattr(self, "_voice_generation", 0) or not self._voice_busy):
return False
callback(*args)
return False这个编号用来认出迟到的结果,不是强制杀掉后台线程。还有一个容易误伤的情况:文字已经识别成功,只是在等延迟上屏。只要实例还活着,开始下一轮录音不该把这段文字丢掉。新增测试专门覆盖了这个区别。
代价也还在。为绕开已记录的 librime 拼音内核析构崩溃,代码保留了已销毁实例的强引用,避免垃圾回收触发那条路径。这是用进程内存占用换取稳定性的保守绕行,不是把资源问题全部解决了。
我验证到了哪里
这轮我在 Fedora 44、Python 3.14.8 下跑了 13 个针对性测试,全部通过。它们用替身模拟 IBus、GLib 和音频,覆盖销毁、迟到回调与原文绕过 LLM;我没有重新做麦克风、GPU 或桌面端到端验收。
安装也请以当前 README 为准:现在首推远程引导安装,也保留手动向导、仅键盘、云端和预演选项。我没有执行这些安装流程。README 列出的完整验证环境仍是 Fedora 44 Workstation、GNOME Wayland 那一套,不能据此承诺 Ubuntu、KDE 或其他组合都能用。
对我来说,这几处更新比多列几个识别后端更值得讲。识别出文字只是前半程;后半程还得守住是否改写的选择、对象的存活状态,以及真正提交的时机。