语音输入插件:对着麦克风说话,识别后的文字作为普通聊天消息发送(本地模型或浏览器语音识别)。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:3274375092/dsh-voice
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
English | 中文
DeepSeek Harness 的语音输入插件:网页里点 🎤(或按快捷键)说话,识别文本作为普通消息提交进会话。纯输入,与 agent preset/人设完全解耦,任何模式下都只是"另一种输入法"。
特性
- 🎤 语音输入:麦克风按钮(平台设计系统 UI)+ 全局快捷键(默认 Ctrl+Space,可配)
- ⚡ 边说边识别:live-stream 部分识别实时回显,停麦 VAD 定稿提交(尾音补偿 0.6s,句尾不吞音)
- 🧠 双引擎自适应:host 原生(sherpa-onnx-node zipformer2 + silero VAD,离线、隐私)与浏览器在线(Web Speech,零依赖)自动探测降级
- 🔌 与 preset 解耦:不碰 persona/系统提示词,code/standard/minimal/自定义 preset 全通用
- 📦 可选模型:零配置开箱即用;想要原生一条
dsh-voice-models下载
安装
# 插件本体
dsh plugin --profile web add @nn12138/dsh-voice
# 可选: 离线原生识别(插件本体零依赖,不自动装该运行时)
dsh plugin --profile web add sherpa-onnx-node
dsh-voice-models # 一键下载模型(~100MB)→ ./dsh-voice-models
# 可选: 配置(编辑 ~/.dsh/profiles/web/cordis.patch.yml)
- id: voice
config:
modelDir: './dsh-voice-models' # 原生识别模型目录
hotkey: 'ctrl+space' # 全局快捷键
vadThreshold: 0.3 # 越低越不吞句首尾
tailPadSeconds: 0.6 # 尾音补偿时长
engine: auto # auto(默认) | native | browser
行内 config 由 host 半接收;engine / hotkey 会经 /voice.config loopback RPC 自动同步到浏览器半,无需另写 client 配置。auto 会先探测 host 原生能力:有模型用 native,无模型自动回退 Web Speech,保证零配置可用。修改配置后重启 dsh web。
dsh web # 输入框左侧 🎤 或 Ctrl+Space
详见 USAGE.md 与 INSTALL.md。
工作原理
浏览器采麦(自动重采样 16k)
→ PCM base64 分块(256ms)→ /voice RPC 通道(loopback)
→ host: silero VAD + zipformer2 流式解码
→ partial 逐块回传(边说边看)/ final 定稿(VAD 分段 + 0.6s 尾音补偿)
→ conversation 服务提交(与打字同路)
双引擎:host 判定生效引擎(配置 + 模型加载结果),客户端经 /voice.ping 消费;原生不可用自动降级浏览器 Web Speech。
开发
pnpm install --ignore-workspace # 独立依赖(不依赖 DSH monorepo;无安装期脚本)
pnpm --ignore-workspace test # 单测(含真实模型冒烟)
pnpm --ignore-workspace typecheck # 类型检查(对仓库内结构桩)
pnpm --ignore-workspace build # 构建(tsc host 半 + tsdown client 半)
pnpm --ignore-workspace verify:runtime # 按真实模块表规则加载产物,并驱动两半 apply()
pnpm --ignore-workspace verify:types # 对**真实** DSH 安装编译(需 DSH_PACKAGES_DIR)
pnpm --ignore-workspace verify:package # 发布包校验:无安装期脚本、产物完整、--ignore-scripts 可安装
构建只发生在发布方侧(prepack — npm pack/npm publish 时)与 CI 发布前;消费者从 registry 安装 @nn12138/dsh-voice 不会执行任何生命周期脚本,--ignore-scripts 安装依然完整可用(见 issue #2)。
跟随 DSH 升级
typecheck 跑的是 src/ambient.d.ts 里手写的结构桩 —— 这类桩在结构上就无法发现 DSH API 漂移(桩描述的是源码当前的假设,等于自己批改自己的卷子)。两个校验补上这个缺口:
verify:runtime(不需要 DSH 安装):复刻真实client-modules解析规则 —— 用线上平台模块表加载lib/client.js,再用贴近发布版 API 形状的 ctx 调用两半apply()。产物若 require 了平台不再 seed 的模块,会在这里失败,而不是在页面加载时悄悄挂掉。verify:types:排除src/ambient.d.ts编译src/,把每个 specifier 解析到某份 DSH 安装里的真实包:
DSH_PACKAGES_DIR=<dsh>/node_modules/@deepseek-ai pnpm --ignore-workspace verify:types
未设 DSH_PACKAGES_DIR 时它打印 skip 并以 0 退出,CI 无 DSH 检出也能保持绿。发布前请对着目标 DSH 版本跑一次。
真实模型烟测默认指向本机 voxelf assets,模型不存在时自动跳过;可用环境变量指到别处:
DSH_VOICE_MODEL_DIR(模型目录)/ DSH_VOICE_TEST_WAV(测试 wav)/ DSH_VOICE_DOWNLOADED_MODELS(下载模型目录)。
结构:src/index.ts(host 半)/ src/client/(浏览器半)/ src/core/(识别核心)/ tools/(线协议冒烟 + 模型下载)。
License
MIT
链接
同类插件
Yuuyuko-uu/dsh-tts-bridge★ 250
用 DeepSeek 网页端自带的朗读,把 DSH 里的对话念出来,靠一个小浏览器扩展驱动。
Fishsb/dsh-voice-prompt-enhancer★ 125
把输入框草稿改写为更清晰、结构化的提示词(5 模式·模型回退链·可选多轮记忆),并为 DSH 语音输入加上说完自动停、热键与口水词清理;识别仍由官方 speechToText 提供,插件不自带引擎。
PolinniZhong/dsh-omi-voice★ 75
DeepSeek Harness 对话内朗读:点一下即可朗读、暂停、继续 AI 回复,豆包 TTS 自然音色(BYOK),只读最终回答并过滤代码、表格与图形,本地引擎,插件零 Key。
1624318455/dsh-plugin-tts★ 57
用免费 Edge TTS 或你自己的 RVC 音色朗读 AI 回复:消息朗读与自动朗读、长文自适应分块渐进播放(无缝衔接)、音色包仓库一键安装、便携 RVC 运行时。
ppy-web/dsh-plugin-xiaomi-mimo-tts★ 57
为 DSH 提供小米 MiMo、豆包、Breeze 和浏览器语音,支持接入外部供应商与本地模型、文本过滤、实时流式朗读、音频下载、音效、桌宠及 QQ Bot、AI Passport 联动。
beiyege-01/dsh-voice-ai-girlfriend-plugin★ 55
Web UI 语音 AI 女友:FunASR 麦克风语音输入、Qwen3-TTS 语音回复、数字人动画窗、QQ 双向聊天(文本/语音/图片推送,经 NapCat)。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。