🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

语音麦克风 Zachary7456/dsh-voice-mic

DeepSeek Harness
Zachary745681 天前有提交已提供中文文档扫描:含敏感能力

点按麦克风或按快捷键说话,实时转写填入输入框

28.1/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Zachary7456/dsh-voice-mic
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/26·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/05·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 81 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 29 处,展示前 26 条)
  • 执行外部命令来自配置/变量
    lib/index.js:184
    const r = spawnSync(cmd, [...args, '--version'], { encoding: 'utf8', timeout: 15000, windowsHide: true });
  • 执行外部命令来自配置/变量
    lib/index.js:199
    const r = spawnSync(python.cmd, [...python.args, '-c', 'import fastapi,uvicorn,numpy,sherpa_onnx,multipart'],
  • 读取本地文件
    lib/index.js:206
    if (!existsSync(dir)) return false;
  • 读取本地文件
    lib/index.js:208
    const files = readdirSync(dir);
  • 发起网络请求
    lib/index.js:223
    const res = await fetch(`${this.baseUrl}/health`, { signal: AbortSignal.timeout(4000) });
  • 执行外部命令来自配置/变量
    lib/index.js:242
    const child = spawn(
  • 执行外部命令来自配置/变量
    lib/index.js:287
    const pip = spawn(python.cmd, [...python.args, '-m', 'pip', 'install', '--disable-pip-version-check',
  • 写入本地文件
    lib/index.js:312
    mkdirSync(this.cacheDir, { recursive: true });
  • 读取本地文件
    lib/index.js:314
    const have = existsSync(tarPath) ? statSync(tarPath).size : 0;
  • 读取本地文件
    lib/index.js:314
    const have = existsSync(tarPath) ? statSync(tarPath).size : 0;
  • 执行外部命令固定命令
    lib/index.js:324
    const curl = spawn('curl', args, { windowsHide: true, stdio: ['ignore', 'ignore', 'ignore'] });
  • 读取本地文件
    lib/index.js:329
    const now = existsSync(tarPath) ? statSync(tarPath).size : have;
  • 读取本地文件
    lib/index.js:329
    const now = existsSync(tarPath) ? statSync(tarPath).size : have;
  • 删除本地文件递归
    lib/index.js:351
    rmSync(extractDir, { recursive: true, force: true });
  • 写入本地文件
    lib/index.js:352
    mkdirSync(extractDir, { recursive: true });
  • 执行外部命令固定命令
    lib/index.js:353
    const tar = spawnSync('tar', ['-xjf', tarPath, '-C', extractDir], { encoding: 'utf8', timeout: 300000, windowsHide: true });
  • 写入本地文件
    lib/index.js:361
    mkdirSync(this.modelDir, { recursive: true });
  • 写入本地文件
    lib/index.js:362
    copyFileSync(join(srcDir, modelFile), join(this.modelDir, modelFile));
  • 写入本地文件
    lib/index.js:363
    copyFileSync(join(srcDir, 'tokens.txt'), join(this.modelDir, 'tokens.txt'));
  • 删除本地文件递归
    lib/index.js:364
    rmSync(extractDir, { recursive: true, force: true });
  • 发起网络请求
    lib/client.js:141
    const res = await fetch(`${API}/config`);
  • 发起网络请求
    lib/client.js:229
    const resp = await fetch(`${url}/v1/asr`, { method: 'POST', body: form });
  • 发起网络请求
    lib/client.js:252
    const resp = await fetch(`${base}/audio/transcriptions`, {
  • 发起网络请求
    lib/client.js:796
    const res = await fetch(`${API}/backend/status`);
  • 发起网络请求
    lib/client.js:831
    const resp = await fetch(`${API}/backend/deploy`, {
  • 发起网络请求
    lib/client.js:850
    await fetch(`${API}/backend/cancel`, { method: 'POST' });
扫描于 2026/11/5(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-client-ui-conversation
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 麦克风按钮录音
  • 快捷键录音
  • 实时转写回填输入框

README

由 DeepSeek 最新模型翻译生成
dsh-voice-mic DeepSeek Harness Web GUI 语音输入插件。录音后实时转写并写入输入框,不自动发送。 安装 要求:dsh >=0.1.0-rc.6、Node.js >=18。浏览器识别需 Chrome/Edge;本地后端另需 Python 3.9+。 dsh plugin --profile web add github:Zachary7456/dsh-voice-mic 或(npm 发布后):dsh plugin --profile web add dsh-voice-mic 安装后重启 dsh web。插件带 bundle patch,会自动挂进 profile,无需手动改 cordis.patch.yml。
展开完整文档(README 剩余 1 节)
dsh-voice-mic

DeepSeek Harness Web GUI 语音输入插件。录音后实时转写并写入输入框,不自动发送。

安装

要求:dsh >=0.1.0-rc.6、Node.js >=18。浏览器识别需 Chrome/Edge;本地后端另需 Python 3.9+。

dsh plugin --profile web add github:Zachary7456/dsh-voice-mic
或(npm 发布后):dsh plugin --profile web add dsh-voice-mic

安装后重启 dsh web。插件带 bundle patch,会自动挂进 profile,无需手动改 cordis.patch.yml。

验证:

dsh --profile web --dump-config | grep dsh-voice-mic
curl -s http://127.0.0.1:3080/plugins/dsh-voice-mic/client.js | head -c 100

使用

- 输入框左侧麦克风按钮:点按切换录音,默认快捷键 Alt+V(设置页可改)
- 录音期间识别结果实时写入输入框草稿;停止后提交,不自动发送
- 快捷键仅在页面获得焦点时生效(浏览器限制)
- 实时写入采用追尾替换:只更新上次追加的尾缀,不覆盖手动输入;无结果或出错时自动回滚

识别引擎

设置 → 语音输入 → 识别引擎,三选一。

浏览器内置(默认)

零配置,走 Web Speech API。中文质量与延迟取决于浏览器与网络。说话停顿导致浏览器自行断开识别会话时,插件自动重启识别器继续监听,直到手动停止。

本地离线后端

设置页一键部署:检测 Python → pip 安装依赖 → 下载模型(断点续传,可取消)→ 启动 asr_server.py → 轮询就绪。已下载的模型会缓存,切换模型免重复下载。

模型:

| 模型 | 适用 | 大小 |
| SenseVoiceSmall int8 | 中/英/日/韩/粤,日常使用 | ~158MB |
| Paraformer | 仅普通话,准确率与标点最佳 | ~223MB |

- 模型目录:~/.dsh/voice/models/(可用 DSH_VOICE_MIC_MODEL_DIR 覆盖);下载缓存:~/.dsh/voice/cache
- 服务端口默认 7860,只绑定 127.0.0.1
- 后端进程由 dsh 托管:dsh 重启后需重新点部署(或配置 autoStart: true 自动拉起)
- 转写期间音频不出本机

云端 API

OpenAI 兼容的 POST /v1/audio/transcriptions(multipart file + model,返回 {text})。需配置 base URL、API key、模型名;内置 OpenAI / Groq / 硅基流动预设。密钥存于浏览器 localStorage,由浏览器直连服务商,不经过 dsh。

设置页「测试 API 连接」发送静音样本验证配置:401/403 为密钥错误,404 通常表示填了完整端点而不是 base URL。

离线验证完整链路可用仓库内的 mock 服务:

python server/mock_api.py # 127.0.0.1:7861/v1,key 任意

实时上屏时录音期间约每秒调用一次 API,会产生相应费用。

工作原理

两半结构:

lib/index.js host 半:配置下发(GET /config)、后端部署管理(/backend/status|deploy|cancel|stop) lib/client.js client 半:输入框按钮与快捷键、录音、转写、设置页 server/ 本地 ASR 服务(sherpa-onnx + SenseVoice/Paraformer)与 API mock

录音与转写:

- 浏览器引擎:Web Speech 的 interim 结果直接上屏,final 累积,仅在显式停止/超时/致命错误时结束会话
- 后端/API 引擎:AudioContext 直采 PCM → 16kHz WAV;录音期间每 1 秒将累积音频送转写(部分结果上屏,按序号丢弃过期响应);停止时全量转写一次提交
- 三种引擎共用同一录音采集与上屏逻辑,仅转写函数不同

部署流程(host 半):findPython → 依赖自检 → 模型自检/下载 → spawn asr_server.py(注入 DSH_VOICE_MIC_MODEL_DIR/TYPE)→ /health 轮询就绪。下载与安装步骤可由 /backend/cancel 中断。

配置

设置页可改全部用户配置(存浏览器 localStorage)。服务端配置亦可:

~/.dsh/profiles/web/cordis.patch.yml
- insert:
- id: dsh-voice-mic
name: dsh-voice-mic
config:
hotkey: alt+v
port: 7860
autoStart: false

环境变量:

| 变量 | 作用 | 默认 |
| DSH_VOICE_MIC_HOTKEY | 快捷键 | alt+v |
| DSH_VOICE_MIC_LANG | 浏览器识别语言 | zh-CN |
| DSH_VOICE_MIC_BACKEND | 本地后端地址 | 空 |
| DSH_VOICE_MIC_PORT | 后端端口 | 7860 |
| DSH_VOICE_MIC_MODEL_TYPE | 默认模型类型 | sensevoice-small-int8 |
| DSH_VOICE_MIC_MODEL_DIR | 模型目录 | ~/.dsh/voice/models/ |
| DSH_VOICE_MIC_AUTOSTART | 启动时自动部署后端 | false |
| DSH_VOICE_MIC_API_BASE / _MODEL / _KEY | 云端 API 配置 | 空 |

优先级:设置页(localStorage)> 环境变量 > cordis 配置 > 默认值。

测试

markdown
node test/smoke.mjs # 两半插件加载/路由/配置合并
node test/verify-install.mjs # 已安装实例的激活检查
node test/deploy-test.mjs # 一键部署端到端(占用 7862 端口)
node test/e2e-backend.mjs [url] # 本地后端转写
node test/e2e-api.mjs [base] [key] [model] # 云端 API 协议(配合 server/mock_api.py)

开发

无构建步骤,直接改 lib/*.js。client 半改动刷新页面即生效;host 半改动需重启 dsh web。

License

MIT
预览分享卡片长什么样 ↓Zachary7456/dsh-voice-mic
分享 · DeepSeek Harness Hub
Zachary7456/dsh-voice-mic

点按麦克风或按快捷键说话,实时转写填入输入框

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部