dsh-speech-service:为 DSH 官方语音输入增加可拆卸的增强能力

前言

在 DeepSeek Harness(DSH)里做对话式开发时,语音输入往往依赖官方实验性语音模块:模型路径、识别接口都在官方设置里完成。若还需要「说完自动收尾」「转写后自动发送」「回复自动朗读」,以及普通输入框上的话筒与波形,通常只能改客户端或等上游迭代。

dsh-speech-service 由维护者 vb2250158 发布,分类为模型推理,定位是 Removable speech enhancements for DeepSeek Harness voice input:在不动官方源码的前提下,通过插件接入上述能力,并预留官方能力覆盖后逐项关闭、最终卸载的路径。当前版本为 v0.2.0,仓库 GitHub 与社区目录 SkillHub 均可查阅;目录站点为独立社区索引,与 DeepSeek / 幻方无官方从属关系。

这是什么

本插件是独立的 DSH 语音增强插件,在官方语音输入之上增加静音收尾、自动发送和自动朗读。官方语音识别与模型准备仍在官方「语音输入」设置中完成;本插件负责 UI 增强、流程编排,以及可选的本地 ASR 子进程识别。

插件以 MIT 许可证发布,声明支持的 DSH 配套范围为 0.2.1-alpha.1 至 0.3.0 之前(见仓库 peerDependencies 与 README「开发」一节)。安装与运行发生在本机 DSH 进程权限下,安装前应自行审阅源码与许可证。

核心功能

增强输入框语音

在插件设置中勾选「增强输入框语音」后,普通输入框会显示话筒与录音波形。开始说话后,当音量持续低于配置阈值达到 1000 毫秒(默认)时结束录音,并调用官方语音识别接口。全程无声音不会提前结束;最长录音时间沿用官方服务限制。

转写后自动发送

「转写后自动发送」仅在转写成功并插入原草稿后提交。录制期间若草稿被修改导致冲突,会保留转写文字供手动插入。空结果、取消、切换会话和权限失败不会触发发送。

自动朗读回复

自动朗读只播放启用开关之后的新回复正文,跳过历史消息、推理块、工具调用与中断回复。离开会话、隐藏页面或关闭开关时停止播放。朗读需要启用 dsh-rabiroute-agent,并在 Rabi 配置可用的默认 TTS;通过现有 /rabiroute/speech 接口请求音频。

自定义 ASR 模型(可选)

除官方识别器外,可在插件设置注册多个本地 ASR 模型,与官方识别器一并出现在「识别服务」列表中。

支持的后端包括:

  • FunASR 的 AutoModel 本地目录(例如匹配该接口的 SenseVoice、Paraformer 检查点)
  • faster-whisper 的 CTranslate2 模型目录

普通 Whisper PyTorch 权重不能直接当作 CTranslate2 模型使用。FunASR 配置关闭 remote code;faster-whisper 使用 local_files_only,子进程设置 Hugging Face 离线模式;需要自定义模型代码的检查点不在当前版本支持范围内。

每次转写由官方 ctx.subprocess 管理的隐藏 Python 子进程完成:加载模型、识别、退出并释放内存,不是常驻推理服务,大模型每次加载可能较慢。默认识别超时 300000 毫秒,grace 1000 毫秒,结果限额 131072 字节;可在插件配置中修改 workerTimeoutMs、workerGraceMs、maxWorkerOutputBytes、maxConcurrentRecognitions。Home 目录下 logs/speech-service 保留每次调用的日志及含 PID、父 PID、用途、来源的记录。

逐步退役

官方增加对应能力后,可逐项关闭「静音后自动结束录音」「转写后自动发送」「自动朗读回复」。关闭「增强输入框语音」会撤销公开输入插槽替换并立即恢复官方控件;朗读仍可独立启用。官方全部覆盖后可卸载本插件。插件不会根据版本号猜测官方能力,也不会偷偷修改官方配置。

公开接入点包括:conversation.input.activity(优先级 -100 的替换)、plugins.bundle.config(本插件设置)、conversation.session.header.actions(当前会话朗读)。卸载时会撤销注册并等待录音、资源与远端观察释放。

安装与启用

已抓取资料与目录页未给出固定的 CLI 安装命令,请通过 SkillHub 插件页 或仓库 README 使用当前 DSH 版本支持的插件安装方式,勿凭仓库名自行拼接未在文档中出现的命令。

启用顺序建议如下:

  1. 在 DSH 中启用官方语音输入,并在官方设置中完成识别模型准备。
  2. 安装并启用 dsh-speech-service,在本插件设置中按需勾选「增强输入框语音」、自动发送、自动朗读等项。
  3. 若使用自动朗读,先启用 dsh-rabiroute-agent 并配置 Rabi 默认 TTS。
  4. 若使用自定义 ASR,在插件设置点击「添加 ASR 模型」,填写名称、后端、绝对模型路径、Python 可执行文件、设备和支持的语言,保存后在「识别服务」中选择。

添加 ASR 模型时需填写示例字段(路径为运行 DSH 的本机绝对路径;换电脑后需调整路径与 Python 环境):

  • 设备默认为 cpu;faster-whisper 精度默认为 int8
  • 语言须按检查点支持范围填写(auto 表示自动识别),插件不会根据路径猜测
  • 并发默认 1,繁忙时会明确报错;更新模型配置会撤销旧识别器并取消在途识别

Python 环境与后端依赖需自行安装;插件不安装 Python、不下载模型、不执行模型目录里的自定义 Python 代码。

典型用法

仅增强官方语音流程

  1. 完成官方语音输入与模型配置。
  2. 在本插件设置勾选「增强输入框语音」。
  3. 在普通输入框点击话筒说话;静音达到默认 1000 ms 阈值后结束并走官方识别。
  4. 需要免按键提交时,再勾选「转写后自动发送」(注意草稿冲突时的保留行为)。

使用本地 FunASR 或 faster-whisper

  1. 在本机准备符合后端要求的模型目录与 Python 环境。
  2. 插件设置 →「添加 ASR 模型」→ 填写名称、后端、模型路径、python 路径、设备、语言 → 保存。
  3. 在「识别服务」中选择该模型;录音开始时通过官方接口固定识别器与语言。
  4. 若识别偏慢或超时,按需调整 workerTimeoutMs 等配置项,并查看 logs/speech-service。

会话内朗读

  1. 启用 dsh-rabiroute-agent 与 Rabi TTS。
  2. 在本插件开启自动朗读(或通过会话头 actions 按需触发,以当前 UI 为准)。
  3. 仅新产生的助手正文会播放;切换会话或关页即停。

适用场景与注意

适合已在 DSH 中使用官方语音输入、希望在不改官方源码的情况下补齐静音收尾、自动发送、朗读与普通输入框 UI 的开发者。若需要完全离线或自建 ASR,可在本插件注册 FunASR / faster-whisper 本地目录,但需接受「每次识别起子进程、非常驻服务」的开销。

注意事项:

  • 插件与 DSH 同进程权限运行,自定义 ASR 会启动本机 Python 子进程并读取你配置的模型路径。
  • 大模型或冷启动可能导致单次识别较慢;并发默认为 1。
  • 规划上本插件设计为可拆卸:官方能力对齐后应逐项关功能并卸载,避免长期双轨维护。

结尾

dsh-speech-service 把语音相关的增强收拢在插件边界内:官方负责基础语音与模型准备,插件负责可选 UI、流程与本地 ASR,并文档化退役路径。进一步了解请查看 SkillHub 目录页 与 GitHub 仓库 的 README、CHANGELOG 与 THIRD_PARTY_NOTICES.md。

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

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

Xiaoye