OpenWhispr ONNX 工作进程设计:语音听写应用为何要把原生推理崩溃隔离出去
OpenWhispr ONNX 工作进程设计语音听写应用为何要把原生推理崩溃隔离出去【免费下载链接】openwhisprVoice-to-text dictation app with local (Nvidia Parakeet/Whisper) and cloud models (BYOK). Privacy-first and available cross-platform.项目地址: https://gitcode.com/GitHub_Trending/op/openwhisprOpenWhispr 是一款开源、隐私优先的语音输入听写应用支持本地模型NVIDIA Parakeet / Whisper与云端模型BYOK覆盖 macOS、Windows 和 Linux。它的语义搜索和说话人分离都依赖 ONNX Runtime 这个 C 原生推理引擎。本文带你看看 OpenWhispr 的 ONNX 工作进程设计为什么要把原生推理崩溃隔离出去以及这套 Electron utilityProcess 隔离 自动复活机制是如何让语音输入应用摔不倒的。为什么本地推理引擎容易摔OpenWhispr 的两项 AI 能力跑在原生模块onnxruntime-node上语义搜索用all-MiniLM-L6-v2小模型把笔记转成向量实现按意思搜笔记逻辑在 localEmbeddings.js️说话人分离用 3D-Speaker 声纹模型给会议里的每个人打标签逻辑在 speakerEmbeddings.js问题在于原生代码的崩溃是 JS 层面兜不住的。像 ORT 的bad_alloc、GPU 驱动异常这类崩溃直接杀死的是加载了它的那个进程。如果模型直接跑在主进程里一次崩溃 整个应用闪退正在录制的会议、全局快捷键、未保存的笔记全部丢失。对一款以隐私优先、本地推理为卖点的语音输入工具来说这不可接受。核心设计用独立工作进程关进笼子OpenWhispr 的解法是 Electron 的utilityProcess——一个与主进程完全隔离的子进程主进程 (main.js) └─ OnnxWorkerClient (懒加载客户端) └─ utilityProcess.fork → onnxWorker.js 独立进程 ├─ 加载 onnxruntime-node ├─ 文本向量 (text.embed) └─ 声纹向量 (speaker.extract)关键约束写在 onnxWorkerClient.js防护策略具体数值作用内存上限--max-old-space-size512推理内存泄漏不会拖垮整机单次请求超时30 秒卡死的推理不会永久占住队列队列上限1000 个请求过载时丢弃最旧请求并报错复活退避1s → 30s最多 5 次避免崩溃—重启—崩溃死循环工作进程本体在 onnxWorker.js它内部自己捕获uncaughtException把堆栈写进日志文件再退出保证每次崩溃都有迹可循见 onnxWorker.js#L369-L378。崩溃发生时三步自愈流程当工作进程意外退出onnxWorkerClient.js#L147-L166 会执行一套固定动作拒绝在途请求——所有等待中的推理调用立即收到WorkerCrashedError主进程不会傻等指数退避复活——按 1s、2s、4s… 递增的间隔重新 fork 一个新工作进程模型会在下次用到时重新加载熔断保护——连续崩溃超过 5 次就停止复活gaveUp避免反复重启耗尽系统资源同时把语义搜索自动降级回关键词匹配。对用户来说的实际效果是即便声纹模型在某段音频上崩了你听到的只是这一条说话人标注没出来而不是整个语音输入应用消失。这正是故障隔离的价值把最脆弱的原生依赖关进可牺牲、可重启的小进程里。几个值得抄走的工程细节懒加载工作进程不会在启动时创建直到第一次用到语义搜索或说话人识别才 fork冷启动零额外开销随应用优雅退出主进程退出时通过 sidecar 注册表统一停止它见 main.js#L574-L575不留孤儿进程独立日志所有推理事件以 JSON 行写入onnx-worker.log排查崩溃不用翻系统日志。相关文件速查文件职责src/workers/onnxWorker.js工作进程本体fbank 特征、声纹/文本推理src/helpers/onnxWorkerClient.js客户端fork、超时、队列、崩溃复活src/helpers/localEmbeddings.js笔记语义向量走 ONNX 工作进程src/helpers/speakerEmbeddings.js会议说话人声纹走 ONNX 工作进程一句话总结OpenWhispr 把会摔的原生推理关进了一个 512MB 内存、可随时重启的 ONNX 工作进程里。对新手开发者而言这是一个可直接借鉴的范式——凡是会调用 C/原生库的桌面应用都值得给它一个可牺牲的进程边界。【免费下载链接】openwhisprVoice-to-text dictation app with local (Nvidia Parakeet/Whisper) and cloud models (BYOK). Privacy-first and available cross-platform.项目地址: https://gitcode.com/GitHub_Trending/op/openwhispr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考