前言¶
在 dsh web 里和模型对话,长一点的提示词往往要敲上好几分钟。输入框本身没有语音入口,想口述通常只能借助系统听写再粘贴,或者直接改 Harness 的 DOM 往页面里塞控件——后者页面一升级就可能失效。
下面介绍的 dsh-speech-input 走的是另一条路:通过官方插槽在输入框右侧加一个原生麦克风按钮,点击开始听写,识别结果实时写入当前草稿,再次点击停止并补全句末标点,全程绝不自动发送消息。
DSH 的理念是「一切皆插件」,输入框增强正是插件体系覆盖的范围。
这是什么¶
dsh-speech-input 是 liznee 维护的 DeepSeek Harness 插件,当前版本 v0.2.3(2026-08-29),许可证为 MIT。它是一个纯浏览器插件:不需要额外的 API key、服务端,也不用下载模型。
它解决的问题很具体:为 DeepSeek Harness Web 输入框增加原生麦克风按钮,点击开始听写、识别结果实时写入当前草稿,再次点击停止并补全句末标点,绝不自动发送消息。
核心功能¶
接入方式:官方插槽与公开接口¶
插件使用官方 conversation.input.right 插槽渲染麦克风按钮,不查询、也不改写 Harness DOM。识别文字只通过 Harness 公开的 inputActions.setDraft() 写入普通草稿,模型看不到音频或识别状态。
听写行为¶
- 支持 Chrome / Edge 的 Web Speech API,中英文跟随浏览器语言
- 中间识别结果原位更新,不会反复叠加同一句话
- 听写期间手工补写的内容会保留
- 持续 5 秒无语音自动停止并保留已听写文字;时长可在
src/client/index.js的DEFAULT_SILENCE_TIMEOUT_MS调整,设为0可关闭自动停止 - 听写中按 Enter 立即停止并保留已听写文字(补好句末标点)
听写中的界面¶
听写时输入框会显示一个椭圆胶囊:左侧圆环是取消 ×,中间是实时音量条,右侧五根音量条是停止按钮。
音量条不是循环假动画:插件通过 Web Audio API 在本地计算麦克风 RMS,展示最近 16 个真实音量样本。
听写期间,Harness 的发送按钮和 Enter 发送会由官方接口置灰禁用,停止或取消后恢复,不存在说到一半被发出去的情况。
取消与资源清理¶
- 点击取消会移除本轮语音产生的全部文字,并保留开始听写前的草稿
- 权限、麦克风或网络硬错误会给出明确提示
- 页面切换或插件卸载时中止识别并释放麦克风
- 支持键盘焦点、屏幕阅读器状态播报和减少动态效果偏好
安装与启用¶
从 GitHub 安装到 web profile:
dsh plugin --profile web add github:liznee/dsh-speech-input
插件已发布到 npm,也可以直接安装:
dsh plugin --profile web add dsh-speech-input
想本地验证,可以先打一个 tarball 再安装:
npm ci
npm test
npm pack
dsh plugin --profile web add ./dsh-speech-input-0.2.1.tgz
仓库已提交预构建的 lib/,Git 安装不会执行构建脚本,也不需要在 pnpm-workspace.yaml 中授权 allowBuilds。安装或升级后需要重启 dsh web。
想在本地开发,需要 Node.js 20 以上版本,常用命令如下:
npm ci
npm test
npm run test:coverage
npm run pack:check
构建产物是 Harness 的懒加载 CommonJS module-factory 格式。
典型用法¶
1、点击输入框右侧的麦克风按钮开始听写,识别结果实时写入当前草稿,中间结果原位更新。
2、再次点击停止,插件会补全句末标点。
3、想直接结束,按 Enter:听写立即停止并保留已听写文字(补好句末标点),再按一次 Enter 发送。
4、想丢弃本轮内容,点击胶囊左侧的取消,本轮语音产生的全部文字会被移除,草稿恢复为开始听写前的状态。
隐私与已知限制¶
先说插件自身的行为:不保存音频、不写日志、不上传音频,也不会把音频发给 Harness 或 DeepSeek。为了显示真实音量,插件会额外打开一条本地麦克风流,只连接到 Web Audio AnalyserNode 计算 RMS,不播放、不录制、不上传,停止或取消时立即关闭音轨。
需要特别注意的是识别路径:Web Speech API 的处理由浏览器决定,Edge/Chrome 通常会把识别音频交给浏览器厂商的在线语音服务,这不是离线识别。不能接受这条数据路径的话,请不要授权麦克风。
已知限制:
- Firefox 当前没有可用的 Web Speech
SpeechRecognition实现,按钮会禁用 - 浏览器语言就是识别语言,首个版本没有独立语言设置
- 插件只写草稿,绝不自动发送
适用场景与注意¶
适合两类人:
- 经常在 dsh web 里输入长提示词、想减少打字的用户;
- 想参考输入框增强类插件写法的开发者,它的接入方式(
conversation.input.right插槽加inputActions.setDraft())本身就是一个可以对照的实现。
使用前注意:
- 插件以当前 dsh 进程权限运行,安装前建议先检查源码与许可证。许可证为 MIT,详见仓库中的 LICENSE 与 NOTICE;
- Chrome/Edge 的识别走浏览器厂商的在线服务,在隐私敏感的环境里使用前先确认能接受这条路径;
- Firefox 用户目前无法使用。
结尾¶
dsh-speech-input 做的事情不大:一个麦克风按钮、一段实时听写、一条只写草稿的通路。但实现相当克制——官方插槽接入、公开接口写草稿、退出时释放麦克风、把识别路径的隐私影响写清楚。如果你经常在 dsh web 里打长段提示词,或者正在找输入框增强类插件的参考实现,值得一试。
- 社区目录页:https://www.skillhub.cn/plugins/liznee/dsh-speech-input
- 源码仓库:https://github.com/liznee/dsh-speech-input
其中目录是社区维护的独立站点,与 DeepSeek、幻方没有官方从属关系。