Open Voice Input Linux v0.1.0-alpha.7
Pre-releaseOpen Voice Input Linux v0.1.0-alpha.7
面向 Ubuntu / IBus 用户的公开技术预览:按下自选快捷键说话,识别文字通过 IBus 直接出现在当前光标;主路径不读取剪贴板、不发送
Ctrl+V,也不模拟逐字输入。
alpha.7 聚焦两件事:可靠地装配火山 ASR 2.0 的二遍终稿,并增加一个明确可选、完全本机、删除式的“清爽表达”终稿模式。忠实转写仍是默认;本版本没有增加 LLM、额外网络请求、录音启动等待或新的云端费用。它仍是 alpha,不是稳定版、生产就绪声明或“支持所有 Linux”的承诺。
这次更新
- 按官方结构装配二遍终稿:客户端现在使用火山响应中带时间区间的
result.utterances[]装配文本。definite=true的权威二遍分句会替换同一或重叠区间的首遍草稿,并跨后续响应帧保留;重复的 full 帧按时间槽去重,新的二遍区间可以安全覆盖边界变化,后续独立分句不会丢掉更早已完成的内容。 - 终止帧不再清空安全结果:连接级 final 即使不携带新文本,也会冻结此前安全装配的终稿;在没有更新二遍尾句时,最后一个已显示但尚未
definite的尾句仍会保留。总装配继续受 4,096 codepoints / 16 KiB 上限约束,超限会安全失败。 - 区分
full/single的畸形响应:一个 advertisedutterances列表只要有任一成员缺少文本、布尔definite或整数时间区间,该帧的结构化区间就全部拒绝,不会半截污染已保留状态。在已验证的result_type=full下,可使用同帧非空、累计的result.text作为兼容 fallback;若为空则保留上一安全装配。在result_type=single下,result.text只代表当前句,缺失区间时无法安全拼接,因此该帧触发不含正文的协议错误,也不会伪装成成功 final。初始化时会拒绝其他 result type。 - 忠实转写仍是默认:缺失
output-style.json时继续原样提交权威 provider final,升级不会静默改变用户输出。模式在每条听写开始时冻结,录音过程中保存设置只影响下一条。 - 清爽表达是明确 opt-in:实时 partial 永远保持 provider 原样;仅在权威终稿到达后,使用本机、确定性、有界的删除规则,移除高置信的独立迟疑词和相邻的精确重复/自我重启片段。
- 没有 LLM、额外网络或隐式改写:清理不会调用 LLM,不发起额外网络请求,不插入新词,不改变术语、数字、大小写或句式,也不会做全局标点标准化;只可能与目标口头词一并删除紧邻分隔符。异常、超长、超过 64 次删除、结果不可重放或会删掉全部词汇内容时,直接回退为原始 provider final,不中断输入。
- 原文、交付结果和人工标签分开:数据留存开启时,新
record.json使用 schema v3。原始provider_final仍是teacher-unreviewed伪标签,spoken_verbatim/preferred_output仍为null / unreviewed;实际插入文本单独记录为machine-derived-unreviewed的delivery,包括模式、processor/version、处理 outcome,以及可从原始坐标精确重放的删除项。已有 v1/v2 记录不会重写。 - usage v2 按实际交付统计:不含正文的
usage/<utterance_id>.json明确统计实际插入文本的字符数;首页继续读取 schema-v1 摘要并保持它原来的 raw-provider 计数语义。 - 避免把机器删词误学成 ASR 纠错:若清爽表达实际改变了提交文本,本条会立即消费自动观察并记录
postprocessed-output-not-safe-for-asr-learning,不会运行 adaptive extraction。若清理未改变文本或安全回退为 raw,原有自动观察行为不变。 - 显式复核始终以原始识别为准:
--review-last把原始 provider final 与实际 delivery 分开显示;原文只读,逐字复核编辑始终从 raw provider text 开始,delivery 只作为只读参考,不会成为纠错来源。 - 清理审计与旧 review 兼容:相邻但不同类型/原因的删除会保留为各自独立的可重放审计项,不会被错误当成重叠而丢弃;alpha.7 设置端仍接受不含
delivered_text的 alpha.6 review 响应,并安全地把 provider 原文作为只读 delivery fallback。 - 设置帮助立即返回:
open-voice-input-settings -h/--help现在会在注册GtkApplication前打印帮助并退出,不打开窗口,也不等待 GTK 应用生命周期;这同时让无桌面环境的 Debian package smoke 可确定结束。
清爽表达的保守边界
“清爽表达”不是完整的生成式润色器。它只处理当前规则能高置信判断的独立口头停顿和相邻精确重复,不会广泛改写表达、重排句子、猜测语义、替换专业词汇,也不保证删除每一个“就是、然后、其实”等词——这些词在不同上下文中可能承担真实语义。这个保守性是为了避免为了“像润色”而改变用户本意。
火山自身的 DDC / 二遍识别仍先于本地清理运行;本地清理只处理权威 final。它不会改善原始声学识别、修复削波音频或替代个人词表/纠错对。专业术语错误仍应通过显式词表、手工纠错或基于 raw provider final 的逐字复核处理。
数据留存与隐私边界
数据采集仍然默认关闭。明确开启后,一次成功且被当前 IBus 上下文接受的听写可以保存:
utterances/<id>/audio.wav:精确捕获的 16 kHz 单声道 WAV;utterances/<id>/record.json:schema v1/v2/v3 不可变记录;usage/<id>.json:不含转写正文的统计摘要;feedback/<id>/<event_id>.json:append-only 的有界纠错决定。
delivery 是机器生成、未经人工复核的实际插入结果,不是 gold label。清理发生删除时,schema v3 保存的是可审计、可重放的删除坐标和原片段,不把清理结果冒充用户“实际说出”的逐字文本。首页只读取 usage 摘要,不打开音频或 record.json 正文。
output-style.json 使用已有用户私有目录:目录 0700、文件 0600、严格有界 schema 与原子写入。卸载会保留它;公开 preview / Debian 产物门禁会拒绝打包用户的 output-style.json 和 interaction.json。
本版本仍然没有应用自带的 Orange 登录/挂载、resumable transfer、Google Drive 上传器、应用层静态加密、数据集审核/删除 UI、模型训练/微调/蒸馏或断线 fallback spool。用户自行挂载的 SSHFS/Orange/POSIX 文件系统仍是独立存储信任边界。
在线 ASR 与现有支持边界
- 火山 BigModel ASR 2.0 仍是默认且唯一在维护者机器上用真实 Key 实机验收的后端。
- Qwen 实时 ASR 与 OpenAI 批量转写有 fake-transport 协议测试,但没有真实用户 Key 验收;MiniMax 仍是不可选择的计划项。
- 所有可运行云端后端均为 BYOK;没有本地/完全离线 ASR,也没有模型训练流水线。
- 明确打包目标仍是 Ubuntu 24.04 x86_64 + IBus + CPython 3.12;代表性应用、真实设备和其他发行版覆盖仍在扩展。
- 自动同输入框学习仍依赖应用提供可信 IBus surrounding text;Chromium/Electron 需要显式使用十分钟内存窗口中的
--review-last。 - 清爽表达只改变最终提交文本,不改变 live partial、录音、发送给 ASR 的 PCM、麦克风选择、输入增益或启动时延。
因此本版本适合作为明确标注的社区 alpha 测试,不应据此宣称广泛 Linux 支持、完整生成式润色、完全离线或生产就绪。
安装与升级
目标环境是 Ubuntu 24.04 x86_64 + IBus。下载本 Release 的 .deb 后运行:
sudo apt install ./open-voice-input-linux_*_amd64.deb然后从应用菜单打开 Open Voice Input Linux,或运行:
open-voice-input-settings在“云端识别”页可以选择“忠实转写”或“清爽表达”。忠实转写默认开启;保存后从下一条听写生效。卸载/升级会保留用户私有 Key、词表、纠错账本、输出方式、麦克风策略、留存选择与外部 dataset。
验证与供应链信息
- Release URL: v0.1.0-alpha.7
- Source commit:
6cb5dfcb6ed41023ca5c45eb1e3880118a95d56d - Pull request: #23
- Signed annotated tag:
v0.1.0-alpha.7— GitHub verification:valid - Exact-main CI: run 33548249666
- CI transparency: an earlier PR revision exposed a pre-existing near-20-second GTK application-lifecycle wait in the packaged settings
--helpsmoke. The CLI now handles help before registeringGtkApplication; the final PR head and the exact-main push both completed the package lifecycle. The release assets below come only from the successful exact-main push. - Required checks:
security✅ ·engine✅ ·voice✅ ·preview-bundle✅ - CI artifact ID:
9816381569 - CI artifact ZIP SHA256:
b38458dd8b62a141ac4f1c5e53b63caccb5c21122c86aa6c44a5205c70be65bb - Preview archive:
openVoiceInput_linux-preview-6cb5dfcb6ed4-ubuntu-24.04-x86_64-py3.12.tar.gz - Preview archive SHA256:
52eb01d3cdf3daae5dc3e5862529b52ed7b94eab25e2203470e71d2bdaab2843 - Debian package:
open-voice-input-linux_0.1.0-alpha7-1_amd64.deb - Debian package SHA256:
b3c1fb0b5ffe061f8ae6296268210020c0534b2ab92b0813e9b3e8719e02b99f - Debian package size / Installed-Size:
463668 bytes / 3080 KiB - Preview SBOM serial:
urn:uuid:bc5dfc55-db03-51ba-84da-a642717feca1- Scope: project wheel + hash-locked runtime wheelhouse
- Package SBOM serial:
urn:uuid:671af2fe-ea5e-5eb4-9d04-8da48c0b0e9a- Scope: packaged application/source commit + four bundled Python runtime wheels
- Immutable release:
enabled; GitHub locks this release on publication after draft-asset verification
English summary
Open Voice Input Linux v0.1.0-alpha.7 now assembles Volcengine ASR 2.0 finals from the documented, timestamped result.utterances[] structure. Authoritative definite=true second-pass segments replace overlapping first-pass hypotheses and persist across later frames; repeated cumulative full frames are deduplicated, a terminal frame with no new text freezes the last safe assembly, and a trailing non-definite sentence is retained when no newer second-pass tail exists. Assembly remains bounded to 4,096 codepoints / 16 KiB.
Structured utterance parsing is all-or-nothing per frame. If any advertised utterance lacks text, Boolean definite, or integer timing, none of that frame's intervals enter retained state. In validated result_type=full mode, a non-empty cumulative result.text remains a compatibility fallback; in single mode it cannot be safely joined without timing, so the malformed frame produces a content-free protocol error rather than a false final. Other result types are rejected at initialization.
Faithful delivery remains the default whenever the new private output-style.json is absent. Users may explicitly opt into clean delivery: live partials stay raw, and only the authoritative final passes through a bounded, deterministic, local deletion-only processor for high-confidence standalone hesitations and adjacent exact/self-restart repetitions. It makes no LLM call or extra network request, inserts no words, does not rewrite terminology, numbers, case, or sentence structure, and safely falls back to the raw provider final on exceptions, limits, non-replayable edits, or deletion of all lexical content. This conservative cleanup is not a generative polishing model and intentionally does not remove every potentially meaningful discourse word.
Opted-in record.json advances to schema v3 while preserving raw provider_final as a teacher-unreviewed pseudo-label and null human-review labels. Actual inserted text is stored separately as machine-derived-unreviewed delivery metadata with replayable original-coordinate deletions. Usage schema v2 counts delivered characters while retaining schema-v1 reader semantics; existing record v1/v2 files are never rewritten. If clean delivery changes committed text, automatic adaptive extraction is skipped with postprocessed-output-not-safe-for-asr-learning; unchanged or raw-fallback output keeps existing observation behavior. Explicit review always starts from raw provider text, with delivered text shown read-only.
Collection remains off by default. There is no added startup quality gate, recording delay, audio filtering, gain change, local/offline ASR, application-owned Orange/Google Drive transport, dataset review/deletion UI, or training pipeline. Volcengine remains the only real-key-validated backend on the maintainer workstation; Qwen/OpenAI retain fake-transport-only claims and MiniMax remains planned. The package target remains Ubuntu 24.04 x86_64 + IBus, and broader physical-device/provider/application coverage is still incomplete.