dsh-voice

DSH PLUGIN视觉与多模态

仓库 houzi5940/dsh-voice

视觉与多模态 L4 · 沙盒安装通过 安全审查:低风险 可信度:银 可安装插件
安装这个插件

dsh-voice 是 houzi5940 维护的 视觉与多模态 类 DSH 可安装插件, 仓库为 houzi5940/dsh-voice,许可证 MIT。 下面按「装什么、怎么装、验没验过、跑起来要注意什么」逐项列出。

一句话选型结论

按资料字段整理

dsh-voice 是视觉与多模态类的 DSH 可安装插件,验证等级 L4 · 沙盒安装通过,安全审查为低风险,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类视觉与多模态 收录类型可安装插件 验证等级L4 · 沙盒安装通过 安全审查低风险
验证等级 L4 L4 · 沙盒安装通过
GitHub 星标 0 复刻 0 · 未关闭 issue 0
最近更新 2026-10-23 创建于 2026-10-23
README 9.0 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add github:houzi5940/dsh-voice
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

视觉与多模态
字段来自项目仓库与公开索引,中文说明由本站标注

适用场景

通知

上游标签

asrdeepseek-harnessdsh-pluginspeechttsvoice

验证等级与安全审查

L4 · 沙盒安装通过
自动化流程结论,不是人工审核
验证等级L4 · 沙盒安装通过安装命令在隔离沙盒内真实执行成功,无依赖错误
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度银综合仓库活跃度与验证结果

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L4:在沙盒里真实装过,依赖能装上,不是纸面声明。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在视觉与多模态场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-voice当前 L4 · 沙盒安装通过 低风险 0 未标注 有
open-design L4 · 沙盒安装通过 低风险 10.0 万 未标注 有
awesome-gpt-image-2 L3 · 安装规范通过 低风险 3.4 万 未标注 无
PicGo L3 · 安装规范通过 低风险 2.7 万 未标注 无
iPolloWork L4 · 沙盒安装通过 低风险 6,775 未标注 有
modlens L5 · 运行验证通过 低风险 4,207 0.2.0-rc.2 等 13 个 有

仓库档案

视觉与多模态
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方houzi5940仓库 dsh-voice · 默认分支 main
分类视觉与多模态media
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言未标注仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue0 / 0 / 0收录时的数值,非实时
创建 / 更新2026-10-23 · 2026-10-23最后推送 2026-10-23
本站收录2026-10-30首次进入本站目录的时间

README 全文

9.0 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-voice

English | 简体中文

DeepSeek Harness(dsh)的全双工语音插件:说话 → 语音识别 → 模型流式回答 → 语音朗读,并且支持开口即打断(barge-in)。

说话 ──▶ SenseVoice 识别 ──▶ composer 草稿 / 提交 ──▶ 模型流式输出
│
◀── 浏览器 SSE 播放(MP3 + 字幕)◀── 分句 + Edge TTS 合成

特性

  • 三种说话方式:点按连续听写、长按发送键说话、长按快捷键说话。
  • 实时字幕:长按期间浮层里持续显示"已说的内容"预览,松手后显示识别中状态,直到最终文本落地。
  • 真正的语音打断:检测到用户开口的瞬间,本地播放停止、host 合成队列清空(连正在合成的那一句一起丢弃)、正在运行的轮次被取消;被打断的轮次不会补读半句话。
  • 回声消除:使用页面自身的 TTS 播放作为参考信号,运行 NLMS 自适应回声消除器,避免外放时把助手自己的声音误判成用户开口。浏览器原生 echoCancellation 仅在没有参考信号时兜底。
  • 中文原生 ASR:host 端使用 sherpa-onnx(Apache-2.0)运行 SenseVoice,原生输出简体中文,自带标点、ITN(数字/符号规范化)与 50+ 语种自动识别。
  • 不阻塞模型流:对 llm/stream 是无损 tap,每个 chunk 原样透传,分句与合成完全旁路进行。
  • 模型缓存与断点续传:模型文件通过 host 端缓存代理下载并落盘,支持 Range 与 .part 续传,也支持 HuggingFace 镜像。

环境要求

  • Node.js ≥ 22.19 或 ≥ 24(依赖 node:zlib 的 zstd API)
  • dsh 0.1.0-rc.6 或 0.2.x(插件的 @deepseek-ai/dsh-web peer 范围已覆盖两者)
  • 一个可用的 dsh web profile
  • 浏览器麦克风权限

安装

dsh plugin --profile web add
dsh --profile web

首次使用时,host 会按需下载 SenseVoice 模型(数百 MB)到本地缓存;也可以提前预热:

npm run prefetch          # 默认访问 http://127.0.0.1:3080,需 dsh 正在运行

使用

操作 行为
点按麦克风 连续听写,VAD(RMS 能量)在尾部静音处自动断句

朗读策略(tts.mode)在设置页选择:first 只播首句、paragraph 朗读首段(到第一个空行,流式判定)、all 整篇朗读、off 静音;仅影响播报,会话中的显示始终完整。
| 长按发送键(或麦克风) | 按住即录音,松开发送,上滑取消 |
| 长按 Ctrl(可配置 asr.hotkey) | 不离开键盘直接说话,松开 Ctrl 发送,Esc 取消 |

长按期间输入框上方会出现波形浮层:

  • 波形来自麦克风实时电平(每 ~64ms 一帧)。
  • 实时字幕是预览,不是最终结果;它不会写入草稿,松手后迟到的预览会被直接丢弃。
  • 松手后浮层进入"识别中…",直到最终识别结果返回才关闭;空结果或失败也会自动收尾,不会一直转圈。
  • 上滑超过 80px 进入取消态,松手即丢弃本次录音。

键盘方式有额外的安全设计:长按阈值 600ms(指针是 260ms),并且按住期间按下任何其他键都会作废本次录音,保证慢速 Ctrl+C 不会被当成语音;切换窗口(blur)也会取消,避免麦克风一直开着。

工作原理

输入:  麦克风 ──RMS 端点检测──▶ POST /asr(原始 f32 PCM)
│ 文本(SenseVoice,host 端)
▼
composer 草稿 ──提交──▶ 模型流 ──llm/stream tap──▶ SentenceSegmenter
│
浏览器 ◀── SSE /dsh-voice-api/stream ── TtsQueue(msedge-tts)◀──┘
(base64 MP3 帧 + 字幕文本)

打断:  语音前沿 ──▶ engine.skip() + POST /cancel(epoch +1)
+ session.cancel()(仅当该会话有运行中的轮次)

几个关键设计:

  • host / client 分工:识别在本机 host 完成,浏览器只负责采集、端点检测和 POST 原始 little-endian f32 PCM(16 kHz 单声道)。浏览器端不加载任何模型。
  • 分句:SentenceSegmenter 剥离 Markdown 后按中英文终止标点切句,遇到没有标点的长文本有安全阀;每个 chunk 仍然原样传给下游。
  • 合成队列:TtsQueue 按会话串行合成,cancel() 通过 epoch 机制同时丢弃排队中和正在合成的内容。
  • 增量预览:每次预览只上传"上次之后新增的音频"(用 x-dsh-session 关联),host 对每个会话只解码固定长度的滑动窗口(8s),所以长按再久,预览开销也不增长。超过 12s 停止预览。
  • 长按绕过 VAD:按住本身就是明确意图,所以按下到松开之间的所有音频都会保留;只有短于 250ms 的采集会被当作误触丢弃(时长在补尾垫之前测量)。

隐私边界:语音识别全部在本机 host 完成,音频不会上传到第三方;朗读使用微软 Edge TTS 在线合成(文本会发送到微软服务)。

配置

在 dsh 的 bundle patch 中配置:

- id: voice
name: '@haoku123/dsh-voice'
config:
basePath: /dsh-voice-api               # HTTP 路由前缀(/dsh-voice-api/config 始终可作为引导路径)
enabled: true                          # 关闭后不再挂接 llm/stream
voice: zh-CN-XiaoxiaoNeural            # Edge TTS 音色
cacheDir: ~/.cache/dsh-voice/models    # 模型磁盘缓存目录
asr:
model: csukuangfj/sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17
modelHost: https://huggingface.co    # 国内可改为 https://hf-mirror.com
language: auto                       # auto | zh | en | ja | ko | yue
useItn: true                         # 数字/符号规范化
autoSend: false                      # 点按模式下识别完是否自动提交
mode: toggle                         # toggle | hold
hotkey: Control                      # 键盘长按说话键;'' 表示禁用

hotkey 取 KeyboardEvent.key 的值,例如 Control、Alt、Meta、Shift、Space 或单个字母。

HTTP API

路由 用途
GET /dsh-voice-api/stream SSE;event: audio,帧格式 {sessionId, seq, text, audio(base64 MP3)}
POST /dsh-voice-api/asr 请求体为原始 little-endian f32 PCM;返回 {text}。带 x-dsh-session 时为增量预览
POST /dsh-voice-api/cancel {sessionId},清空该会话排队中与合成中的语音(epoch +1)
GET /dsh-voice-api/config 返回前端所需的运行时配置 {asr, basePath};该路径固定,自定义 basePath 时客户端仍能靠它发现真实前缀
GET /dsh-voice-api/hf/* HuggingFace 模型缓存代理(落盘到 cacheDir,支持 Range / 续传)
GET /dsh-voice-api/* 连通性探测:{ok, name, enabled}

模型缓存

模型下载统一走 /dsh-voice-api/hf 缓存代理:

  • 首次请求时从 asr.modelHost 拉取,同时镜像到 cacheDir(按 HF 仓库路径布局)。
  • 支持 HTTP Range;中断后从 .part 文件续传。
  • 之后的每次启动都直接读本地磁盘,不再联网。
  • 国内网络把 modelHost 改成 https://hf-mirror.com 即可。

开发

npm install          # sherpa-onnx 是运行时依赖,必须安装
npm run build        # esbuild:lib/index.js(host)+ lib/client.js(浏览器)
npm test             # host 测试 + client 组件测试
npm run test:host    # segmenter / bargein / bargein-semantics / integration
npm run test:client  # vitest + jsdom
node verify-client.mjs   # 校验 client bundle 的注册、exports、slots

改完源码后记得重新 npm run build:host 测试直接 import lib/*.js。

常见问题

麦克风没反应?
界面会区分"权限被拒绝 / 找不到设备 / 被其他程序占用"。权限问题请在浏览器地址栏的站点权限里放行麦克风。

识别很慢?
首次使用需要下载并加载模型,之后会明显变快。建议先 npm run prefetch,并确认 cacheDir 可写。

外放时助手会打断自己?
插件已经用 TTS 播放作为参考信号做 NLMS 回声消除。若仍有误触发,可降低系统音量,或关闭 noiseSuppression / autoGainControl 不友好的音频驱动;耳机效果最好。

Ctrl 热键与编辑器快捷键冲突?
把 asr.hotkey 改成 Alt、Space 等其他键,或设为 '' 关闭键盘模式,只保留发送键长按。

模型下载失败?
切换 asr.modelHost 为镜像源后重启 dsh;已下载的部分会从 .part 继续。

许可

MIT

第三方组件:

  • sherpa-onnx(Apache-2.0)与 SenseVoice 模型
  • msedge-tts(Edge TTS 在线合成)

常见问题

6 问
答案由本站依据条目字段整理,不引用上游原文
dsh-voice 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add github:houzi5940/dsh-voice` 即可。

dsh-voice 的验证等级是什么意思?

L4 · 沙盒安装通过。安装命令在隔离沙盒内真实执行成功,无依赖错误

dsh-voice 安全吗?

低风险。

dsh-voice 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-voice 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

同名或近似条目

8 条
不同作者的仓库分开列,请确认你要装的是哪一个
视觉与多模态
按星标排序,可作替代方案

open-design

open-design

L4 · 沙盒安装通过 10.0 万 星

awesome-gpt-image-2

awesome-gpt-image-2

GPT Image 2 / 2.5 提示词与案例库,530+ 个案例、20+ 套工业级模板与可复用 Skills,新增 2.5 同提示词对比

L3 · 安装规范通过 3.4 万 星

PicGo

PicGo

L3 · 安装规范通过 2.7 万 星

iPolloWork

iPolloWork

L4 · 沙盒安装通过 6,775 星

modlens

modlens

ModLens 是 DeepSeek Harness 的视觉插件,为纯文本模型外挂视觉能力,粘贴图片即得结构化 JSON 证据(OCR、版面

L5 · 运行验证通过 4,207 星

OpenBiliClaw

OpenBiliClaw

本地私有、开源的自进化跨平台 AI 内容发现 Agent:先理解你,再主动从 B站、小红书、抖音、YouTube、X、知乎、Reddit、微

L4 · 沙盒安装通过 3,398 星

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 —。