跳转至

听写流程程序 — 本地跨平台流程听写

规范,2026-07-16。研究输入:一份多智能体产品格局研究、仓库内能力图谱,以及本地 ASR 可行性评估。在关键论证处,来源均以内联方式注明。

为什么

向 AI 智能体口述提示词正成为一种快速增长的文字输入工作负载,而精致的现成方案仍然以云端优先,Linux 支持也参差不齐。VoiceStudio 已经掌握了最难的部分:紧凑的采集胶囊、全局热键、sherpa-onnx 流式 WS、以 Whisper Tiny int8 作为随附的跨平台默认模型、恢复剪贴板的粘贴,以及本地 LLM 精修。本地、跨平台、私密的流程听写体验是可以实现的,也是具有战略差异化的——切入点正是 本地 + Linux/Wayland + 智能体提示词。

当前状态(已在仓库内验证)

组件:胶囊 webview + tauri-plugin-global-shortcut(CmdOrCtrl+Shift+Space,切换/按住)在 macOS、Windows 和 X11 上生效;在 Wayland 上通过 GlobalShortcuts 桌面门户;另加浏览器模式的键盘回退方案。getUserMedia → 16 kHz 原始 PCM WS /ws/transcribe;原生会话会在胶囊出现前捕获目标窗口,按代次还原未被改动的剪贴板,重新激活 macOS/Windows/X11 目标,并在 Wayland 上使用诚实的复制回退方案——除非显式启用了当前焦点插入。后端:7 个 sherpa 模型(默认 Whisper Tiny)、流式路径(zipformer/paraformer)+ 分块离线路径(0.8 秒局部结果节奏、RMS 静音门限)、共享的语音证据模型降级与仅安装模型的 ASR 回退、对最终结果执行 text_polish、可选 LLM 精修(Ollama/LM Studio,≤4 秒墙钟时间)。缺口:没有真正的 VAD、没有词典/热词、没有按应用区分的格式化配置、没有命令语法、没有语言选择器;模型选择器把模型大小低估了约 4 倍。

项目阶段

每个阶段的要求:跨平台默认能力对齐(处处使用 CPU int8;允许平台特定的实现)、完全本地化、所有字符串 i18n、先失败后通过的测试、文档与代码在同一 PR 中。

阶段 0——诚实与低成本速赢(数小时)

  • 修复 sherpa_dictation.py 中的 size_gb 元数据(Parakeet 此前标为 0.17–0.18 GB;真实 int8 约为磁盘 0.67 GB / 内存约 1.2 GB——onnxruntime arena,sherpa-onnx #2626)。在模型选择器中同时显示磁盘和预期内存占用。
  • 线程数 2→4,用于 0.6B 模型(OMNIVOICE_SHERPA_ASR_THREADS 仍是覆盖项);2 线程在较老的 x64 上 RTF 约 0.33——余量很薄。

阶段 1——手感:真正的 VAD + 真流式 Parakeet(核心诉求)

  • 在 _run_sherpa_offline(capture_ws.py)中用 silero-VAD v5 替换 RMS 门限:在 VAD 的语音结束事件(最短静音约 0.35 秒)触发提交解码,带约 0.2 秒预卷;仅在 VAD 判定为语音期间解码局部结果 → 最终结果在停顿后 约 0.4–0.7 秒(现在是约 1.4 秒),空闲时零 CPU 消耗,在风扇噪声/音乐下依然稳健。Silero 采用 MIT 许可且已包含在 sherpa-onnx 内——不新增依赖。(ten-vad 也存在,但其修改版 Apache 许可证需要审查;不作为默认。)
  • 添加真流式 Parakeet 模型——不改变依赖(仓库锁定 sherpa-onnx>=1.13.3):

  • nemotron-speech-streaming-en-0.6b int8,160 ms 分块(推荐英语):逐词局部结果跟随语音约 200–400 ms,最终结果约 0.5–0.7 秒,自带标点。现有 _run_sherpa_streaming 即可处理——只需新增 _MODELS 条目和配置。

  • Nemotron-3.5-ASR-Streaming-0.6B int8,320 ms(可选多语言,40 个区域设置)。
  • 许可证说明:NVIDIA Open Model License / OpenMDW-1.1(允许再分发;需记录在文档——与 CC-BY Parakeet 不同)。

  • 胶囊局部结果 UX:将现有的实时局部文本置灰,打磨成 Claude-Code/Aqua 模式——胶囊中显示流式预览,只在最终结果时插入目标应用。

  • 内存缓解措施:诚实的标签(阶段 0)、现有的空闲卸载(#1104)、zipformer-20M 低内存回退仍然是一等公民。

阶段 2——个人词典与技术词汇(杠杆率最高)

Parakeet 真正的一个弱点是 OOV 技术术语——而词典正是 Wispr 最受欢迎的功能;目前没有 OSS 应用提供完整版本。

  • 确定性替换引擎(STT 后处理、大小写感知、引擎无关):用户词条 + 修正(“omni voice”→“VoiceStudio”,“cube control”→“kubectl”)。设置 → Dictation UI;存储在偏好设置中;在精修/细化之前应用。
  • 离线 Parakeet 的可选热词偏置:sherpa-onnx modified_beam_search + 热词文件(上游 PR #3077,≥v1.12.24)。严格可选——贪心搜索仍是默认,因为已知 TDT 束搜索有约 20% 的幻觉 bug(#3267);用静音和短视频片段做回归测试;待上游修复后再切换为默认。(流式 Nemotron 热词尚未合入上游——#3572。)
  • 精修保真度:扩展提示词,加入逐字片段保护(代码标识符、路径、引用的错误文本保持原样),并默认“转写,不要改写”——过度改写是 Wispr 最常被抱怨的准确性问题。
  • 延伸目标(v2):从用户在胶囊中的修正自动学习词典候选词。

阶段 3——模式:按应用格式化 + 智能体提示词

  • 前台应用检测(Tauri 各操作系统实现)→ 格式化配置:终端/IDE(不加句尾句号、不自动大写、不使用智能引号——如今始终开启的 text_polish 会在终端注入句尾句号,这实际上是有害的)、聊天(随意风格,不加句尾句号)、散文(当前行为)。默认配置映射 + 用户按应用覆盖。浏览器/Docker 模式:在胶囊中手动切换配置(对等性:功能处处可用,桌面端以检测增强)。
  • 智能体提示词模式:基于术语表的识别(阶段 2 的机制)、终端安全插入、可选的自动提交(Enter)并带字数护栏(Claude Code 的模式),以及“粘贴最近一次转写”的热键。
  • 在胶囊/面板中提供语言选择器,供多模型用户使用(目前语言是绑定模型的)。

阶段 4——插入可靠性与 Wayland(在 Linux 上击败所有人)

  • 可靠性工程(那 20% 枯燥但显得专业的部分;Wispr 会重试 5 次):粘贴时带退避的重试、转写文本保留在剪贴板并在失败时给出 toast 提示、拒绝密码字段、Windows 提权窗口检测。
  • Wayland 插入链,替换 Linux 上裸露的 enigo:wtype→dotool→ydotool→wl-copy+notify 回退;为 GNOME 评估 IBus/Fcitx5 输入法提交路径(质量最高,但主流方案中没人提供);libei/RemoteDesktop-portal 作为前瞻押注。可靠的本地 Linux 插入就是护城河。

阶段 5 — 命令模式(主打功能,本地独有的差异化优势)

第二个热键 → 对选中文本说出指令 → 本地 LLM 重写 → 明确点击 Apply。Wispr 对此收费;我们的方案是本地且免费的。需要有已配置的 LLM;否则隐藏(沿用现有的 llm_ready 管道)。

阶段 6 — 文档、基准测试与评估

  • docs/features/dictation.md(目前不存在)— 模式、模型、延迟预期、词典、各 OS 的插入说明。
  • 延迟在产品内可见(从松开到粘贴的毫秒数,显示在胶囊的完成状态中)——让速度成为看得见的特性。
  • 扩展 tests/probe/dictation 评估:延迟预算、VAD 结束判定、词典命中率、终端配置文件不追加末尾句号。

模型推荐矩阵

使用场景 模型 部分结果 停顿后的最终结果 磁盘 / 内存
英语,体验最佳 nemotron-streaming-en 160 ms(新增,阶段 1) 200–400 ms 约 0.5–0.7 s 0.66 GB / 约 1.2 GB
欧洲语言(自愿开启) parakeet-tdt-v3 + silero-VAD(升级路径) 0.8 秒节奏 约 0.4–0.7 s 0.67 GB / 约 1.2 GB
多语言流式(自愿开启) Nemotron-3.5 320 ms(新增) 约 400 ms 约 0.7 s 0.68 GB / 约 1.2 GB
低内存 zipformer-20M(现有) 约 100 ms 约 0.6 s 0.13 GB / 约 0.3 GB
多语言默认 / CJK whisper-tiny(现有;可考虑 small) 不适用 数秒 0.104 GB

主要风险

  1. 8 GB 机器上的内存占用(约 1.2 GB) — 选择器标签如实标注、空闲时卸载、zipformer 回退、在 8 GB Windows 上测试。
  2. TDT 束搜索缺陷(#3267) 阻塞热词功能 — 在上游修复前仅作为自愿开启功能。
  3. 旧 CPU 的 RTF 余量 — 提升线程数 + 首次加载时自动基准测试,若 RTF > 0.8 则回退到 zipformer。
  4. Wayland 碎片化 — 带逐项技术检测的回退链;以 wl-copy+notify 作为保底方案。
  5. 范围蔓延 — 各阶段可独立交付;每个阶段都落在现有设置界面之后;任何阶段都不会阻塞其他阶段。

明确的非目标

Token 级别的语音编程(Talon/Cursorless 语法)— 需要数月的学习曲线,已有成熟生态;我们的编程方案是 agent-prompting。任何形式的云端 ASR。始终开启的开放麦克风。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 om/VoiceStudio