DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Koein — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
K

dsh-koein

Koein

DeepSeek Harness 的唤醒词语音输入:始终运行的低功耗关键词检测器唤醒代理,然后本地 ASR 将你接下来所说的话转换为已提交的消息。无需 API 密钥、无需云服务、无需打字。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:Miyamiz39/dsh-koein#62cc27461909e198f7adf28827e01cf42fd2afd4
README兼容性版本

兼容性与来源证明

Koein 以 dsh-koein 发布,当前版本为 0.1.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/9/9

版本

0.1.0stable
2026/9/9

相关插件

正在加载相关插件…

最新版
0.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/9/9
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 integrations-communication 分类下经过校验的插件。

Im@xmanrui/dsh-im将十一种 IM 渠道和一个公网 AI Office 接入本地 DeepSeek Harness。Pocketdsh-pocket把 DeepSeek Harness 装进你的口袋:一个包、一个设置页,手机扫码即同步访问电脑上的 DSH(局域网 + 公网,实时同屏)。DSCODE@toddzheng024/dscode-bundle完整的 DeepSeek 编码代理,支持持久化 shell、Ultra 协作和自动权限审查。Acp App@deepseek-ai/dsh-acp-appdsh ACP 配置文件包:基于 dsh-base 的仅限自动化的 JSON-RPC stdio 和进程生命周期管理

README

dsh-koein 🎙️

こえインプット — 用说的,别用敲的。

语音输入插件,为 DeepSeek Harness 而做:说唤醒词唤醒,或者点一下麦克风直接开口。收音、识别全在本机完成,识别结果填进输入框,你确认后再发。

关键词:语音唤醒 · wake word · keyword spotting · 本地 ASR · offline speech-to-text · 无 API Key

音频不出本机,不需要 API Key,不需要联网,也不占用输入法——唤醒之后直接说,说完自动出字。

你说:小鲸小鲸    →  提示音  →  你说:帮我把 build 脚本里的端口改成 8080  →  自动发送
      ↑ KWS 常驻监听            ↑ ASR 只在这一段工作

它和别的语音插件有什么不同

这个插件本身就是完整的语音输入——本地流式 ASR、边说边出字幕、说完自动发送,不依赖输入法,也不需要再装别的语音插件。区别在于入口:常见的语音插件要你先点按钮或按热键进入麦克风,它则用一个唤醒词把整条链路点着。

常见语音输入插件dsh-koein
进入方式点麦克风按钮 / 按热键说唤醒词,或点一下麦克风直接说
常驻成本不常驻(进入才开 ASR)常驻 KWS,实测解码速度约 50 倍实时(8 秒音频约 150ms)
唤醒判定整段 ASR 后匹配文本真正的关键词检测(open-vocabulary KWS),ASR 全程不参与
唤醒词固定或需改代码任意中文短语,按模型词表自动切分 token
识别视插件而定本地流式 ASR,边说边出字幕

一句话:它把语音输入从"要点一下"变成"说一句"。唤醒之后不用再碰键鼠,也不用去找输入法。

工作原理

一条音频流,两个引擎,用唤醒事件切换:

浏览器麦克风 ──16kHz PCM──▶ 宿主进程(不含原生代码)
                              │  WebSocket ↔ IPC 转发
                              ▼
                          语音引擎子进程(fork)
                              ├── listening: KWS(3.3M 中文模型,常驻)
                              │        命中唤醒词 ──▶ 提示音 + 状态切换
                              └── awake:     ASR(14M 中文流式模型)
                                       端点检测(能量 RMS + 静音挂起)
                                       识别完成 ──▶ 注入会话
  • KWS(sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01,int8 编码器 4.8 MB):开放式词表,不重训模型就能换唤醒词。
  • ASR(sherpa-onnx-streaming-zipformer-zh-14M-2023-02-23,int8 约 24 MB):流式输出,界面上能看到实时字幕。
  • 端点检测:唤醒词已经告诉你用户在说话了,所以不需要再挂一个 VAD 模型——用 RMS 能量 + 静音挂起就够,少一次推理。

唤醒词之后紧跟着说指令也可以("小鲸小鲸,打开配置文件"):唤醒时会把 150ms 预滚音频喂给 ASR,避免吃掉第一个音素。

为什么语音引擎跑在独立子进程里

这不是洁癖,是必需的。sherpa-onnx-node 自带 onnxruntime.dll 1.27(ORT API 27),而同一 profile 里的记忆插件 dsh-mihaji 通过 @huggingface/transformers 自带 onnxruntime.dll 1.21(API ≤ 21)。Windows 在进程内按 DLL 名解析依赖,谁先加载谁生效:

The requested API version [27] is not available, only API versions [1, 21] are supported.
exit code -1073741819   ← 0xC0000005 访问违例,整个宿主进程崩溃

把引擎放进 fork() 出来的子进程,同时解决两件事:

  1. DLL 命名空间隔离——子进程只加载 sherpa 自己的 ORT,冲突不存在。
  2. 崩溃隔离——原生 addon 再怎么崩,也只是子进程退出;宿主照常运行,界面收到报错,下一次点麦克风自动重启子进程。

test/isolation.test.mjs 静态遍历 src/index.js 的 import 图,断言宿主半永远不导入 sherpa-onnx-node,并真的 SIGKILL 掉子进程验证宿主存活与自动重启。

代价:首次点麦克风要等约 2 秒加载模型(按钮显示"连接中…"),这期间说的唤醒词会被丢弃。

安装

1. 下载模型(约 103 MB,一次性)

cd <插件目录>
node tools/download-models.mjs

默认落到 $DSH_HOME/koein-models。也可以指定目录:

node tools/download-models.mjs D:/models
# 然后配置 modelDir: D:/models

2. 装进 profile

dsh plugin --profile web add <本目录或 npm/git 包名>

dsh plugin add 会自动把包加进该 profile 的 dsh.profile.bundles,并套用它自带的 cordis.patch.yml。

3. 重启

dsh web

插件是 bundle 行,必须重启才生效。

装好后:发送按钮左边会出现一个麦克风图标,它就是全部的语音控制。

一个按钮,两种说话方式

手势作用
单击开/关「直接说话」——不用唤醒词,点开就直接说
右键单击开/关「唤醒词监听」——说唤醒词即可开口

颜色就是状态,不需要额外的指示条:

颜色含义
灰未激活
蓝已激活,在等你说话(等唤醒词 / 听写待命)
绿正在收音识别
红出错,鼠标悬停看原因

两种模式共用一条音频流,所以听写开着时唤醒词监听自动让位。识别出来的文字默认只填进输入框,不直接发送——你看一眼再按回车。想让它说完就发,把 autoSend 改成 true。

"设置 → 语音唤醒"里能看到模型状态和当前生效的唤醒词。

配置

在 $DSH_HOME/profiles/web/cordis.patch.yml 里覆盖(patch 是 whole-replace 语义,要写全字段):

- id: koein
  config:
    wakeWords:
      - 你好小鲸
      - 小鲸小鲸
    autoSend: false
    injectMode: composer
字段默认说明
wakeWords['你好小鲸','小鲸小鲸']唤醒词,可任意中文短语
keywordsFile''已有的 sherpa-onnx keywords.txt;非空则忽略 wakeWords
keywordsScore1.0关键词增强分数,漏检多就调大
keywordsThreshold0.25触发阈值,误唤醒多就调大
numTrailingBlanks1关键词后空白帧数,唤醒词含重叠 token 时调大(如 8)
modelDir$DSH_HOME/koein-models模型根目录
numThreads2两个引擎各自的推理线程数
autoSendfalse识别完直接发送;默认 false 只填进输入框,由你确认后发送
injectModecomposercomposer = 走输入框正常提交;agent = 宿主直接以用户消息注入会话(后台标签页也能用)
silenceMs800说完静音多久判定句子结束
onsetTimeoutMs4000唤醒后等开口的最长时间
maxUtteranceMs20000单句最长时长
minUtteranceMs300更短的语音丢弃(多半是噪声)
energyThreshold0.012语音起始能量阈值(RMS),环境噪声大就调大
stayAwakeMs0一句话结束后继续聆听的时长,便于连续追问;0 = 每次都要说唤醒词

调唤醒词

唤醒词质量取决于你的声音、麦克风和房间——这是唯一无法用官方测试音频验证的东西。录一段自己念唤醒词的 16kHz 单声道 WAV,然后:

node tools/probe-wake-word.mjs "你好小鲸" 我的录音.wav
# 调参重试
node tools/probe-wake-word.mjs "你好小鲸" 我的录音.wav 2.0 0.15

它会告诉你是否命中、在第几秒命中,方便对着调 keywordsScore / keywordsThreshold。

选词建议:3–4 个音节、声母区分度高、日常对话里不容易顺口说出来。你好小鲸、小鲸小鲸 都不错;单音节词(如"鲸")误唤醒率会高很多。

排错

现象处理
设置页显示"模型缺失"跑 node tools/download-models.mjs,或检查 modelDir
唤醒词在设置页显示"不可用"该短语无法用模型词表表示(如含 emoji),换一个说法
一直误唤醒调大 keywordsThreshold(如 0.4),或换更长的唤醒词
喊了没反应用 tools/probe-wake-word.mjs 确认能命中;调低 keywordsThreshold
唤醒后不出字调大 silenceMs(说话停顿多)或调低 energyThreshold
切到别的会话后发错地方injectMode: composer 跟随当前会话;跨会话请用 agent 模式
浏览器不给麦克风页面必须走 https:// 或 localhost,且需要麦克风权限

隐私

  • 音频只在本机进程内从浏览器流到 DSH 宿主,不经过任何网络服务。
  • 唤醒和识别都是本机 sherpa-onnx 推理,无 API Key、无云调用。
  • KWS 全程运行;ASR 只在唤醒之后的那一段音频上运行。
  • 录音不落盘。

开发

npm test        # 4 个测试文件
测试覆盖
test/isolation.test.mjs宿主 import 图不含原生 addon;SIGKILL 引擎子进程后宿主存活并自动重启
test/keywords.test.mjs中文→token 切分与官方 test_keywords.txt 逐行完全一致
test/pipeline.test.mjs真实 WAV 走完 KWS→唤醒→ASR→出稿,并验证静音不误唤醒
test/socket.test.mjs真起 HTTP+WebSocket 服务器,灌真实 PCM,验证帧协议与两种注入模式
test/client.test.mjs用假 window.__ModuleLoader__ 执行 client bundle,注册三个 Slot 并真实渲染
test/profile-resolve.mjs以 profile 为 cwd 验证包解析、挂载与原生引擎加载

设计上刻意不做打包:宿主半是普通 ESM,浏览器半是手写的 window.__ModuleLoader__.load({id, factory}) 包装(正是打包器会产出的形态)。改完源码重启即可,没有构建步骤。

许可

MIT