dsh-speech-input:给 DeepSeek Harness Web 输入框加一个麦克风按钮

前言

在 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.jsDEFAULT_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、幻方没有官方从属关系。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜