dsh-voice-input
开发工具 活跃维护

dsh-voice-input

difimim/dsh-voice-input

轻量语音输入插件,无需手动输入文本,点击麦克风即可唤起语音录入,识别准确率高,响应延迟低,适配主流浏览器,交互流畅自然,可快速集成至各类工具界面使用

0
Stars 标星
0
Forks 分支
0
Watchers 关注
0
Open Issues
JavaScript
主要语言
MIT
开源协议
8 KB
仓库大小
26 天前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:difimim/dsh-voice-input
git clone https://github.com/difimim/dsh-voice-input.git
git clone git@github.com:difimim/dsh-voice-input.git
README.md main

DSH Voice Input · DeepSeek Harness 语音输入插件

在 DeepSeek Harness(DSH)输入框底部加入一个麦克风按钮:点击后用浏览器内置的 Web Speech API 把语音实时转成文字并填入输入框。零成本、零服务端部署,同时预留了 Host 端 Vosk 离线识别接口,方便以后切换为完全离线、隐私更好的方案。

A DeepSeek Harness dynamic Cordis plugin that adds a microphone button to the composer. Click it to transcribe speech into the input box using the browser's built-in Web Speech API — zero cost, zero server. An offline-engine seam (Vosk / whisper.cpp) is reserved on the Host for later.


功能特性

  • 🎙️ 输入框工具行左侧新增麦克风按钮,点击开始 / 停止收音
  • ⚡ 实时识别:边说边把中间结果写进输入框草稿
  • ➕ 追加式写入:不清空已有文字,识别结果追加到当前草稿末尾
  • 🌐 零成本零服务端:直接复用浏览器内置 Web Speech API
  • 🧩 预留离线接口:Host 端 voice.transcribe 已挂好,未来接 Vosk 无需改动客户端
  • 🎨 跟随主题:按钮颜色使用 DSH 主题变量,自动适配明暗色

工作原理

部分 说明
识别引擎 浏览器内置 Web Speech API(SpeechRecognition / webkitSpeechRecognition)
识别语言 默认 zh-CN(中文),可在 client.js 顶部 VOICE_LANG 修改
写入方式 通过输入框 Slot 提供的 inputActions.setDraft() 写入草稿,与手打内容共存
按钮位置 conversation.input.left(输入框工具行左侧,模型选择那一行)
离线预留 Host 端 voice.transcribe 私有 RPC,当前返回「未配置」

目录结构

dsh-voice-input/
├── host.js      # Host 半(函数体:预留 voice.transcribe 离线接口)
├── client.js    # Client 半(函数体:麦克风按钮 + Web Speech 识别)
├── package.json # 仓库元信息
├── LICENSE      # MIT
└── README.md

host.js 与 client.js 是 DSH 动态 Cordis 插件的两个「函数体」,不是可 import 的 ES 模块,因此不含 import/export。它们要整段粘贴到 DSH 的 Host / Client 代码框里运行。

安装

方式一:DSH 动态 Cordis 插件(当前实现形态)

  1. 打开 DSH 的动态 Cordis 插件面板;
  2. 把 host.js 全文粘贴为 Host 代码;
  3. 把 client.js 全文粘贴为 Client 代码;
  4. 运行,并按提示批准该包。

插件即挂即用,按钮出现在输入框工具行左侧。

方式二:固化到你的 Agent 预设 / 组合

把 Host 与 Client 两个函数体分别写进你预设里的 Host/Client 插件行(参考 DSH 的 editing-cordis-compositions 说明),即可随预设持久挂载。具体行结构与你的组合方式有关,这里不展开。

使用

  1. 点麦克风图标 → 按钮变红并出现脉冲动画,开始收音;
  2. 直接说话,文字会实时出现在输入框里;
  3. 再点一下(图标变方块)→ 停止收音;
  4. 确认文字无误后,正常回车发送。

浏览器兼容性

浏览器 支持
Chrome / Edge ✅(推荐)
Safari ✅(较新版本,行为略有差异)
Firefox ❌(不支持 Web Speech API)
  • 首次点击会弹出麦克风授权,请点「允许」。
  • 需联网:Web Speech API 会把音频交给浏览器厂商的识别服务器。

隐私说明

当前方案(Web Speech API)为了“零成本、零部署”,会把语音发到浏览器厂商的识别服务。若你在意隐私或需要完全离线,请使用下方预留的 Vosk 接口。

离线识别(Vosk)预留接口

Host 半已注册私有 RPC:

harness.handle('voice.transcribe', async (args) => {
  // args: { audio, lang }
  // return: { ok, text }  或  { ok: false, reason }
})

未来接 Vosk / whisper.cpp 时,只需在 host.js 里实现 voice.transcribe(跑本地模型 / 调用本地识别服务),并在 client.js 里把引擎从 Web Speech 切到 host.call('voice.transcribe', …) 即可,客户端其余逻辑无需重写。

Roadmap

  • [x] Web Speech API 实时语音输入
  • [ ] 语言切换(中文 / 英文 / 自动)
  • [ ] Vosk 离线识别接入(Host 端)
  • [ ] 语音输入过程中的可视化状态条

License

MIT