[控场AI]
· 6 分钟阅读· 3,274 字

WisprGemma:纯浏览器本地语音输入,数据不上云

WisprGemma:纯浏览器本地语音输入,数据不上云

一个开发者对语音输入的隐私焦虑

语音听写(Dictation)正在成为越来越多知识工作者的高效习惯——按住一个键说话,就能得到润色后的文字。Wispr Flow 是这个赛道的明星产品,但它有两个让人不舒服的地方:它是订阅制的,而且你说的每一个字都会经过它的服务器。

一位 Reddit 开发者(GitHub 用户 Arindam200)决定用一个 sprint 的时间做出自己的替代品,取名 WisprGemma。它的核心卖点非常明确:一切都在你自己的机器上运行,语音永远不会离开你的笔记本。

WisprGemma 项目介绍

单模型单次推理:极简架构设计

WisprGemma 最值得关注的技术选择,是它只用一个 Gemma 模型(E2B 版本)在单次推理中完成全部工作——语音识别、文本清理和重写改写,一气呵成。

Gemma 是 Google DeepMind 于 2024 年发布的开放权重模型系列,其 E2B(End-to-End Backbone)变体具备原生音频理解能力,可直接处理音频频谱特征而无需独立的语音识别模块。这与传统的 Whisper+LLM 管线有本质区别:后者将语音识别(ASR)和自然语言处理(NLP)视为两个独立任务,而 Gemma 多模态版本将两者统一在同一个 Transformer 架构中,共享注意力机制和语义表示空间,从而在推理效率和语义一致性上都更具优势。

这与传统语音管线形成鲜明对比。常见方案会用 Whisper 做语音转文字,再叠加一个大语言模型做后处理润色,至少两个模型串联。而 WisprGemma 直接利用 Gemma 的多模态能力,把音频输入和文本生成统一到单个模型里。

更巧妙的是,不同功能模式本质上只是给同一个模型换了不同的提示词(Prompt):

  • 清洁听写:去除口头填充词、修正标点,甚至能把你说的"另起一段"真正转成分段,而不是把这四个字直接转录出来;
  • 逐字转录:完全保留原始内容,不做任何清理;
  • 邮件润色:把口述内容改写成可直接发送的正式邮件;
  • 任意语言转英文:用任何语言输入,输出英文文本;
  • 自定义风格(仅扩展版):输入一行指令,如"正式语气、短句"。

"一个模型 + 多个提示词"的设计,大幅降低了工程复杂度,也使整个应用得以运行在浏览器中。

完全跑在浏览器里:WebGPU + Transformers.js

整个应用运行在 Chrome 标签页中,基于 WebGPU 和 Transformers.js,无需任何后端。开发者提供了两种形态:

  • Web 应用:直接在网页里使用;
  • Chrome 扩展:作者自己每天使用的版本,带侧边栏、用 Option 键实现"按住说话"(Push-to-Talk),并能将识别结果直接插入当前聚焦的输入框。

WebGPU 是 W3C 于 2023 年正式推出的新一代 Web 图形与计算 API,是 WebGL 的继任者。与 WebGL 主要面向图形渲染不同,WebGPU 提供了通用计算着色器(Compute Shader)支持,使浏览器能够直接调度 GPU 并行计算能力用于矩阵乘法等深度学习推理操作。Chrome 113+ 开始默认启用 WebGPU,这使得大规模神经网络推理在浏览器中首次成为现实,也是 WisprGemma 能够在无后端环境中运行 3.5GB 量级模型的根本前提。

Transformers.js 则是 Hugging Face 开发的 JavaScript 版 Transformers 库,其底层依赖 ONNX Runtime Web 进行模型推理。ONNX(Open Neural Network Exchange)格式允许将 PyTorch 或 TensorFlow 训练的模型导出为跨平台中间表示,再通过 WebAssembly 或 WebGPU 后端在浏览器中运行,支持自动模型分片下载和量化压缩以适应 Web 环境的带宽与内存约束。

模型下载完成后,应用完全离线可用。作者特别指出,可以打开 DevTools 自行验证——听写过程中没有任何外发请求,你的声音不会离开设备。这正是它对标 Wispr Flow 时最核心的差异化优势。

真正的难点:不在模型,而在"让它跑起来"

作者坦言:"模型本身是最简单的部分,真正花时间的是让它成功加载和运行。"这段踩坑经历,对任何想做浏览器端 AI 应用的开发者都极具参考价值。

加载与体验问题

首先,Gemma 在 Transformers.js 里的支持当时还很新,最初几次尝试直接失败,锁定正确版本号后才跑通。其次,首次加载需要下载约 3.5GB 的模型权重并推送到 GPU,期间界面看起来像卡死了——为此不得不加入真实的进度提示,避免用户误以为程序崩溃。

Chrome 扩展的重重限制

Manifest V3(MV3)的安全策略成了最大阻碍。MV3 是 Google 自 2022 年起强制推行的扩展安全架构升级,其核心目标是限制扩展的过度权限,防止恶意代码注入。MV3 最显著的约束包括:禁止远程代码执行、限制 blob URL 的使用范围、以及强化内容安全策略(CSP)。这些限制对浏览器端 AI 应用的开发造成了相当大的工程障碍,因为 Transformers.js 通常依赖动态脚本加载机制来初始化 ONNX Runtime WebAssembly 后端:

  • 禁止从 CDN 加载任何内容,也禁止 Transformers.js 用来启动 ONNX Runtime 的 blob URL。解决办法是将整个库和 WASM 二进制文件直接打包(Vendoring)进扩展,并绕过相关机制让库正常工作;
  • 浏览器的 Cache API 拒绝缓存来自 chrome-extension:// 的资源,导致模型看起来每次都要重新下载 3.5GB,需要另写一套变通方案。

那个令人难忘的静默 Bug

作者印象最深的是一个"Push-to-Talk 看起来完全失效、却没有任何报错"的问题。原因是他把 pointerdown 事件直接接入了处理函数,导致事件对象本身被当成 Tab ID 传了进去——每次听写都被静默发往一个根本不存在的标签页。"这种 Bug 最要命,所有环节都报告成功,实际却什么都没发生。"

对本地化 AI 应用的启示

WisprGemma 是一个有力的信号:随着小尺寸多模态模型与 WebGPU 的成熟,越来越多原本依赖云端的 AI 功能,正在变得可以完全在客户端运行。

这对隐私敏感场景尤其重要——语音、医疗、法律等数据无需上传服务器即可完成处理,同时也省去了订阅费用和后端运维成本。端侧推理(On-device Inference)的兴起,本质上是模型压缩技术(量化、剪枝、蒸馏)与硬件加速接口(WebGPU、CoreML、NNAPI)共同演进的结果,WisprGemma 恰好站在这两条技术曲线的交汇点上。当然,3.5GB 的首次下载量、对 Chrome/Edge 121+ 及 WebGPU 的硬性要求,仍是普通用户面临的现实门槛。

项目已在 GitHub 开源(Arindam200/WisprGemma),作者特别希望收集不同硬件上运行多模态模型的加载时间反馈。对于关注端侧 AI 的开发者来说,这是一个值得深入研究的实战样本——它证明了单模型、无后端、纯浏览器的本地语音工作流在今天已切实可行。

核心要点

#本地语音输入#WisprGemma#WebGPU 语音识别#浏览器端 AI#Gemma 多模态#Transformers.js#隐私语音听写#端侧 AI 应用
分享:

相关推荐