dsh-voice-input:在 DSH Web 对话里本地离线语音转文字

前言

在 DeepSeek Harness(DSH)里写提示词,多数时候还是键盘。长句、口述需求或边走边想时,切到别的听写工具再粘回来,既打断节奏,也常把「要不要把音频发到云端」当成额外顾虑。社区插件 dsh-voice-input(维护者 moazzamak,分类:模型推理)面向 Web GUI 的对话输入框(composer):在工具栏增加麦克风按钮,在浏览器里录音,把音频交给本机 DSH 进程,用 faster-whisper(CPU 默认)或 whisper.cpp / Vulkan(可选 GPU 引擎)在本机解码,识别结果追加到当前草稿;不会替你按 Enter 发送。音频不上传第三方 STT 服务,识别与可选的「润色」都在你自己的环境里完成。

这是什么

一句话:DSH composer 的离线本地语音转文字——点麦克风、说话、再点停止,文本写入草稿,你可改错词后再发送。

核心功能

本地录音与识别

麦克风按钮出现在 composer 工具行、模型选择器左侧。流程:Idle 灰麦克风 → Recording(红停止块、电平条、m:ss 计时)→ Transcribing → 文本以空格分隔追加到已有草稿内容,不会自动发送。

音频在浏览器录制,POST 到本机 harness 进程解码;模型加载一次并保持 warm,后续录音 mainly 只做 decode。README 在 Ryzen 7 7800X3D、base.en、warm 状态下测得:CPU 引擎约 0.4 s/段,GPU 引擎约 0.1 s/段;改版前每次重载模型约 10 s。

边说边出字(CPU 引擎)

录音期间约每秒交出一段音频;VAD 根据麦克风噪声底判断停顿,每次停顿解码已录部分并重写草稿,光标处脉冲提示下一词位置。停止后再对整段重跑识别并替换为最终稿,纠正 live 阶段的误听。切分依赖静音而非固定时长,避免在半词处截断导致识别「补全」假词。

输入过程中打字不被阻塞:你正在打的字保留,live 文本插在其后。

双引擎

CPU(默认) GPU(whisper.cpp)
解码 faster-whisper / CTranslate2 whisper.cpp
加速 有 NVIDIA 时用 CUDA Vulkan(AMD、Intel、NVIDIA)
warm 延迟(base.en) ~0.4 s ~0.1 s
首次 ~0.7 s 载模 1.7–3.3 s(Vulkan pipeline 编译)
进行中文字 渐进显示 就绪后一次更新
GPU 常驻 无 每引擎约 418 MB 模型副本

默认 CPU:已 sub-second warm、渐进出字、不累积 GPU 状态。bundled whisper.cpp 主要为 CTranslate2 仅 CUDA、AMD 等在 Windows 上难用 的场景;配置行可设 backend: auto 或 ggml 强制走 GGML 引擎。

电平条与无声提示

14 条电平来自与录音同流的 AnalyserNode,用于区分「真在录」和「麦克风被静音」;Analyser 不接扬声器输出,避免反馈。约 1.5 s 无声时电平变暗并提示 no sound — check your microphone。

Cleanup(润色) pass

识别完成后,可把文稿交给当前部署已选的路由模型做轻量清理:去 filler(um、uh、like 等)、合并口吃、加标点、修明显误听;禁止改义、翻译或改标识符/术语。完成后按钮旁有 cleaned up 标记。

失败保护:清理报错/超时/空结果、长度变化小于一半或大于 1.8×(像模型在「答题」而非清理)、无法解析路由时,保留 Whisper 原文并写 host 日志。可 polish: off 关闭,或用 polishProvider + polishModel 指定便宜路由;工具 voice_transcribe 支持单次 polish: false。默认 polish: conservative 且 polishReasoning: off,避免继承高 reasoning 导致长时间无草稿增量。

环境与要求

  • 带 Web GUI 的 DSH 安装(web profile)。
  • Python 3.9+ 在 PATH(Windows 用 python,其它系统 python3),用于一次性引擎 setup。
  • uv 可选;有则用,无则 pip。
  • Chromium 系或 Firefox,支持麦克风。
  • 仅 GPU 引擎:Vulkan GPU + Windows 自带 whisper.cpp Vulkan 构建;首次 GGML 模型约 142 MB 下载。

Node >=20(package.json engines)。

安装与启用

安装命令须与 README 一致,且 dsh plugin 的 profile 与启动 DSH 时用的 profile 相同(dsh web 固定对应 web profile,不存在 dsh web --profile other)。

1、把插件装进 web profile:

dsh plugin --profile web add github:moazzamak/dsh-voice-input

2、在本机构建引擎一次(在已安装包内建 venv 并预拉默认模型):

python "$HOME/.dsh/profiles/web/node_modules/dsh-voice-input/python/setup.py"

Windows(PowerShell)路径示例:

dsh plugin --profile web add github:moazzamak/dsh-voice-input
python "$env:USERPROFILE\.dsh\profiles\web\node_modules\dsh-voice-input\python\setup.py"

3、重启 DSH。

其它安装方式(README):仓库内 pnpm pack 后 dsh plugin --profile web add ./dsh-voice-input-0.1.0.tgz;本地路径 add /path/to/dsh-voice-input;若发布到 npm 则 add dsh-voice-input。git 安装时 pnpm ≥10 对本包无需允许 prepare(无构建步骤)。

典型用法(Web GUI)

  1. 打开 DSH Web composer,确认麦克风权限。
  2. 点灰色麦克风开始;对着麦说话,观察电平条是否在动。
  3. 再点停止;等待 transcribing…,草稿末尾出现识别文本(及可能的 cleanup)。
  4. 自行改错词或补全,按 Enter 发送——插件不会代发。

失败时按钮旁显示红色信息(权限拒绝、无语音、引擎错误等)。

适用场景与注意

适合:希望在 DSH 对话里口述需求、又不想把语音交给云端 STT;本机有足够 CPU/GPU 跑 Whisper;已使用 web profile 的日常开发。

注意:

  • 插件随 当前 DSH 进程权限 运行,Python 引擎与模型文件落在 profile 下的 node_modules/dsh-voice-input;安装前请阅读 源码与 MIT 许可证。
  • Cleanup 依赖部署里可用的模型路由;离线或无路由时仍应有 Whisper 原文。
  • GPU 引擎主要在 Windows + Vulkan 路径上由维护者 bundled;Linux 等环境以 README 当时说明为准,默认 CPU 通常即可用。
  • SkillHub 等社区目录与 DeepSeek / 幻方无官方从属关系,插件来自社区维护者,非「官方应用商店」条目。

结尾

dsh-voice-input 把 composer 里的语音输入收进「浏览器录、本机解、草稿里改、自己发」的闭环:默认 faster-whisper 渐进出字,可选 whisper.cpp 照顾非 CUDA 的 GPU;可选 cleanup 在不动语义的前提下收口语杂质。若你在 DSH Web 里常写长提示,值得按官方命令装一次并跑通 setup.py。

  • 目录页:https://www.skillhub.cn/plugins/moazzamak/dsh-voice-input
  • GitHub:https://github.com/moazzamak/dsh-voice-input
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye