dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
为 DeepSeek Harness 网页界面打造的语音插件——以西班牙语为首选语言,并且在无需注视浏览器的情况下也能使用。
按下一个按键,说出你的需求,智能体会用语音回答。一个小巧的悬浮窗会停留在你正在使用的任何应用之上,告诉你当前的状态。
状态:1.0 版,每天在用。 语音对话、悬浮窗和全局快捷键已完成并每天在使用。界面支持中文、英文和西班牙语。本地 Whisper 尚未实现;见 缺失的功能。
Harness 已有不错的语音插件,但没有一个能做到下面两件事,而其中一件不是靠努力就能做到的:
dsh-kitt-voice 使用 Whisper——真正多语言的识别模型——并用 Piper 朗读,后者拥有优秀的西班牙语语音且完全在本地运行。JSON=yeisón、setup=setáp、brake bias=breik báias。仅对 Piper 生效:神经语音和系统语音本来就能正确读出这些词。dsh plugin --profile web add dsh-kitt-voice
该命令会把包安装到 Harness 配置文件中,并自动把插件追加到配置文件的 bundle 列表(声明了 dsh.bundle 的依赖会自动加入层栈)。重启 Harness——彻底停止,而不是简单地重新启动,否则你仍在和旧进程对话。在输入框工具栏会出现麦克风和扬声器按钮。
卸载:
dsh plugin --profile web remove dsh-kitt-voice
同一个命令会同步 bundle 列表,只移除这个插件。旧版建议手动编辑 package.json,那属于旧版 CLI(会重写整个列表)的做法;当前版本按已安装状态同步。
不使用 npm,而是使用本地克隆: 让配置文件指向克隆目录。
dsh plugin --profile web add link:/绝对路径/to/dsh-kitt-voice
如果你的 Harness 使用其他配置文件名,把 web 换成你的名字。
除转写密钥外,一切都在 设置 → 插件 → dsh-kitt-voice:识别器、语言、辅助词汇、语音文件夹、语音、麦克风和声音输出。
转写密钥来自 Harness 自己的凭据库——和智能体密钥所在的地方一样。无需创建任何东西,也无需重启:以 GROQ_API_KEY 保存即可,插件会找到它。如果你的密钥存在别的名字下,把 apiKeyRef 指向那个名字。
如果凭据库为空,则使用环境变量 DSH_KITT_API_KEY 或 GROQ_API_KEY。
密钥不会显示在设置里,也永远不会到达浏览器。页面只询问是否已配置,通过一个不可能返回值的调用。每次请求都会重新解析,所以更换密钥立即生效。
| 设置 | 作用 |
|---|---|
piperPronunciation | 为了让 Piper 语音正确读出英文词,这些词该怎么拼写,格式为 词=拼写,以逗号分隔。Piper 读的是其语音所属语言的音素,所以西班牙语语音会把 JSON 念成「jotason」,除非按西班牙语拼法写出来。仅对 Piper 生效。 |
speechRate | 朗读回复的速度。1 是语音本身的语速;0.5 是一半,2 是两倍。三种引擎都适用,包括系统语音——它由页面朗读而不是服务器。 |
uiLang | 插件自身界面的语言:西班牙语、英语或简体中文。与转写语言相互独立——你可以用西班牙语口述而界面保持英文。 |
buttonColours | 控件各有自己的颜色,或者全部为白色。颜色让人一眼看出每个控件的作用;朴素模式是给觉得那样太吵的人准备的。 |
overlayAuto | 一使用语音就自动打开悬浮窗,并随框架一起关闭。默认关闭:一个自己冒出来的窗口,是没有人要求过的窗口。 |
micLabel | 使用哪个麦克风,按名称。留空表示系统默认。刻意按名称而不按 id:浏览器会给每个来源分配不同的 id 来指代同一个物理设备,所以在悬浮窗里选中的 id 在页面里毫无意义。 |
outputLabel | 回复从哪个扬声器或耳机播放,按名称。 |
| 选项 | 需要账户 | 在桌面应用中可用 | 说明 |
|---|---|---|---|
| 浏览器(默认) | 否 | 否 | 仅 Chrome 和 Edge;音频经过浏览器厂商 |
| Groq Whisper | 是 | 是 | 精度和速度最佳;需要在凭据库中有密钥 |
浏览器识别器是默认项,让新用户几秒钟内就能说话。它在 Electron 中不可用——对象存在但识别每次都会失败——所以当 Harness 嵌入桌面应用时,插件会切换到 Groq 并明确告知。
说西班牙语的人会在西语句子中间说出 setup、brake bias、understeer。只告诉 Whisper「西班牙语」,它会把它们按读音写成西语(cetap、breik baias),智能体收到的就是乱码。设置中的辅助词汇会发送给 Whisper,让这些术语保持英语。请按你自己的领域编辑它。
免提对话必须知道你何时说完一句话。那是一个模型——Silero v5——加上它的运行时,一共约十六兆字节。
它们不随本包一起发布。 大多数安装语音插件的人只想按一个按钮说话;让所有人都为可能永远不用的模式背负十六兆字节是不礼貌的。它们按以下两种方式之一到达,顺序如下:
vadDir——什么都不下载;无论哪种方式,文件都由 Harness 自己回传给页面,浏览器永远不会自行访问互联网,而且固定列表中的六个名字是唯一能成为路径的名字。
是六个文件,不是五个:检测器自己的包不携带推理运行时。它期望页面上已有一个,并且要先加载。
cd overlay
start.cmd Windows
./start.sh macOS 和 Linux
Electron 不随包发布:Harness 是网页应用,大多数人不想要桌面窗口。启动器会使用你已经安装的 Electron——把 DSH_KITT_ELECTRON 指向它——或在这里运行 npm install 获取一个。
一条悬浮在所有东西之上(包括全屏游戏)的横条,横条就是控制区——和 Harness 自带工具栏里的完全相同:同样的图形、同样的颜色、同样的尺寸,因为它们本就是同一组控制,只是出现在两个地方。
边框承载状态,可以用余光读取:静止时无颜色,聆听时为绿色——并随测得的音量增长——思考时为蓝色并缓慢呼吸,朗读时为红色。 如果出错,会显示闪烁的 ERROR 字样,无需解读任何颜色。
按住即可拖到任何位置,它会记住你留在哪里。
快捷键(在菜单中分配):F8 说话并发送,F9 开始或结束对话,F7 静音麦克风,F10 再次听回复,F11 停止朗读(在对话中同时停止等待回复),F6 打开菜单。想用方向盘按钮,就在方向盘自己的软件里把它映射到这些按键之一——无需任何手柄代码。属于整个系统的按键(Ctrl+C、Alt+F4 等)会被拒绝:全局快捷键会把按键从机器上的所有应用中夺走。
如果你的 Harness 不在 3081 端口,设置 DSH_KITT_PORT。它只接受端口,绝不接受 URL:窗口只能访问 loopback。
lib/ 插件
index.js 服务器端:设置、HTTP 路由、捕获最后一条回复
client.js 浏览器端:控制、录音、设置卡片
guard.js 谁可以调用路由
transcribe.js 语音转文字
speak.js 使用本地 Piper 语音朗读
neural.js 神经语音:其协议,以及会让什么离开你的电脑
overlay.js 使用语音时打开悬浮窗
vad.js 语音检测器的文件,以及它们如何到达
lastfromlog.js 从会话日志恢复最后一条回复
apikey.js 每次调用解析密钥,从不缓存
log.js 一行启动信息,以及被拒绝的请求——绝不含密钥
freshness.js 检测服务器运行的是旧版插件
paginas.js 多个页面同时打开时由哪一个响应按键
pronunciacion.js 英文词该怎么拼写才能让 Piper 读对
overlay/ 悬浮窗(独立的 Electron 应用)
main.js 窗口、外形和位置
shortcuts.js 系统级快捷键
requests.js 窗口可以向 Harness 请求的封闭列表
textos.js 窗口显示的所有文字,三种语言
index.html 它绘制的内容
test/ 值得保护的部分
两半从不共享内存。它们通过 /dsh-kitt-voice 下的十三条 loopback 路由通信:config、settings、devices、voices、transcribe、speak、last、state、command、orders 和 vad/status、vad/download、vad/file。每一条都会检查调用者。状态流向为页面 → 主机 → 悬浮窗;command 流向相反,是浏览器之外的按键到达页面的方式。
127.0.0.1 发送请求。请求必须来自 loopback,携带 Origin 的请求必须指向这台服务器——相同的 loopback 写法、相同的端口(Origin 和 Host 都由调用者写入,所以永远不信任它们彼此一致)。拒绝不会透露关于这台机器的任何信息。127.0.0.1 上的可配置端口——永远不会接受别人给它的 URL。它的页面完全不发起网络调用:所有请求都由主进程对照 overlay/requests.js 的封闭列表转发,所以即使它自己的代码也无法把它指向别的服务器。npm test
115 项测试,使用 node --test 运行,无需构建步骤。它们覆盖出错代价最高的部分:谁可以调用路由、语音名能否逃出它的文件夹、回复切分器承诺了什么、日志回退永远不会在它所服务的路由内部抛错、窗口的请求白名单、朗读句子切分器、交给语音的文本片段、两个页面同时打开时由哪一个响应按键、何时判定问题出在麦克风、英文词该怎么拼写才能让 Piper 读对、发送给神经语音服务的内容,以及速度档位。
二十七个各花掉一整个下午的问题,连同它们的症状一并写下: 已经付过代价的陷阱。它们全都是在使用中暴露的, 而不是靠读代码发现的,而且没有一个报错。动到哪一部分之前,先读属于它的那一条。
MIT——见 LICENSE。参考过的既有项目在 NOTICE 中致谢。如何参与:CONTRIBUTING.md。变更记录:CHANGELOG.md。
由 Kitt Cat 开发 · kittcat.com
English: README.md · Español: README.es.md