前言¶
在 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 版本支持的插件安装方式,勿凭仓库名自行拼接未在文档中出现的命令。
启用顺序建议如下:
- 在 DSH 中启用官方语音输入,并在官方设置中完成识别模型准备。
- 安装并启用
dsh-speech-service,在本插件设置中按需勾选「增强输入框语音」、自动发送、自动朗读等项。 - 若使用自动朗读,先启用
dsh-rabiroute-agent并配置 Rabi 默认 TTS。 - 若使用自定义 ASR,在插件设置点击「添加 ASR 模型」,填写名称、后端、绝对模型路径、Python 可执行文件、设备和支持的语言,保存后在「识别服务」中选择。
添加 ASR 模型时需填写示例字段(路径为运行 DSH 的本机绝对路径;换电脑后需调整路径与 Python 环境):
- 设备默认为
cpu;faster-whisper 精度默认为int8 - 语言须按检查点支持范围填写(
auto表示自动识别),插件不会根据路径猜测 - 并发默认 1,繁忙时会明确报错;更新模型配置会撤销旧识别器并取消在途识别
Python 环境与后端依赖需自行安装;插件不安装 Python、不下载模型、不执行模型目录里的自定义 Python 代码。
典型用法¶
仅增强官方语音流程¶
- 完成官方语音输入与模型配置。
- 在本插件设置勾选「增强输入框语音」。
- 在普通输入框点击话筒说话;静音达到默认 1000 ms 阈值后结束并走官方识别。
- 需要免按键提交时,再勾选「转写后自动发送」(注意草稿冲突时的保留行为)。
使用本地 FunASR 或 faster-whisper¶
- 在本机准备符合后端要求的模型目录与 Python 环境。
- 插件设置 →「添加 ASR 模型」→ 填写名称、后端、模型路径、
python路径、设备、语言 → 保存。 - 在「识别服务」中选择该模型;录音开始时通过官方接口固定识别器与语言。
- 若识别偏慢或超时,按需调整
workerTimeoutMs等配置项,并查看logs/speech-service。
会话内朗读¶
- 启用
dsh-rabiroute-agent与 Rabi TTS。 - 在本插件开启自动朗读(或通过会话头 actions 按需触发,以当前 UI 为准)。
- 仅新产生的助手正文会播放;切换会话或关页即停。
适用场景与注意¶
适合已在 DSH 中使用官方语音输入、希望在不改官方源码的情况下补齐静音收尾、自动发送、朗读与普通输入框 UI 的开发者。若需要完全离线或自建 ASR,可在本插件注册 FunASR / faster-whisper 本地目录,但需接受「每次识别起子进程、非常驻服务」的开销。
注意事项:
- 插件与 DSH 同进程权限运行,自定义 ASR 会启动本机 Python 子进程并读取你配置的模型路径。
- 大模型或冷启动可能导致单次识别较慢;并发默认为 1。
- 规划上本插件设计为可拆卸:官方能力对齐后应逐项关功能并卸载,避免长期双轨维护。
结尾¶
dsh-speech-service 把语音相关的增强收拢在插件边界内:官方负责基础语音与模型准备,插件负责可选 UI、流程与本地 ASR,并文档化退役路径。进一步了解请查看 SkillHub 目录页 与 GitHub 仓库 的 README、CHANGELOG 与 THIRD_PARTY_NOTICES.md。