dsh-speech-polish:为 DSH 内置本地听写加术语纠错层

前言

DeepSeek Harness(DSH)在输入框里提供本地语音转写,底层一般是 SenseVoiceSmall(int8,约 239 MB),日常口语够用。做技术口述时,同音字、近音字和专业名词经常被写错,调 VAD 或锁语言往往也拉不回来字错率。社区里不少语音插件会另起麦克风管线或换云端 ASR;若你仍想用内置识别、又不想录音出本机,可以在转写结果进输入框前加一层术语感知的文字纠错。下面介绍维护者 KeinsteinNUS 的 dsh-speech-polish(分类:模型推理)。

这是什么

dsh-speech-polish 是 DSH 插件,英文简介为:Terminology-aware correction layer for DeepSeek Harness’s built-in local speech-to-text——在 Harness 内置本地语音转写之上,用一次 LLM 调用修正同音/近音和专业名词,不新增按钮、不换引擎;音频仍在本地识别,只有已转好的文字可能发往 OpenAI 兼容接口。

仓库:https://github.com/KeinsteinNUS/dsh-speech-polish
社区目录:https://www.skillhub.cn/plugins/KeinsteinNUS/dsh-speech-polish(独立站点,与 DeepSeek / 幻方无官方从属关系)

它解决什么问题

README 用 4 句中文技术句(103 字,本地 SenseVoice,锁中文)对比过字错率(CER):原始识别约 14.6%~16.5%,调 VAD 无收益;加上本插件后,术语命中由 10/13 提升到 13/13。另有一例真实口述(2026-10-27,文档记宿主 Node v24.21):底层 raw 为「把悬图的转速改成三天转,退火温度120度」,纠错后为「把旋涂的转速改成3000转,退火温度120度」,额外耗时约 1.0 秒。

接入方式

DSH 语音输入是「服务 + 多个识别器(provider)」。本插件注册新 provider,链路为:

麦克风 → 内置 SenseVoice(本地)
        → 原始文本 → temperature=0 的 LLM 纠错(带术语表)
        → 修正文本 → 输入框

界面仍是输入框麦克风;在设置里会多一项识别器(默认显示名 SenseVoice + glossary fix)。

安装与启用

插件以当前 DSH 进程权限运行,安装前建议浏览仓库源码与 MIT 许可证。engines 要求 Node >=20、DSH >=0.2.0-0 <0.3.0-0;依赖 @deepseek-ai/dsh-experimental-speech-to-text 的 ctx.speechToText(DSH 0.2.x)。文档写明主要在 Windows 桌面端实测(DSH 0.2.1-rc.3)。

方式一:预构建包(推荐)

dsh plugin --profile <你的 profile> add https://github.com/KeinsteinNUS/dsh-speech-polish/releases/download/v0.1.0/dsh-speech-polish-0.1.0.tgz

方式二:从仓库(需本机可直连 GitHub)

dsh plugin --profile <你的 profile> add git+https://github.com/KeinsteinNUS/dsh-speech-polish.git

不要用 github:KeinsteinNUS/dsh-speech-polish 简写——npm/pnpm 可能解析成 SSH,未配 key 时会 Permission denied (publickey)。

方式三:npm(发布到 npm 后)

dsh plugin add dsh-speech-polish

启用步骤:

  1. 打开 插件管理页 → 语音输入 Bundle 详情,识别器选 SenseVoice + glossary fix,语言选中文;或
  2. 在 profile 的 cordis.patch.yml 写入:
- id: speech-to-text
  config:
    defaultProvider: sensevoice-polish
    language: zh

重启桌面端,或修改 cordis.patch.yml 触发宿主重新加载插件。

纠错用的 API 密钥

纠错需要 OpenAI 兼容 chat 接口,默认 DeepSeek。密钥按顺序尝试:插件配置 apiKey → 环境变量 DEEPSEEK_API_KEY → DSH 凭据库 ~/.dsh/.credentials.yaml 的 refs.DEEPSEEK_API_KEY(依次 DSH_HOME、<用户目录>/.dsh、HOME/.dsh)。三者皆无则不报错,直接返回原始识别结果。

配置要点

配置写在 bundle patch 里 speech-polish 的 config 下。常用项:

键 默认 说明
baseProviderId sensevoice-local 底层识别器 id
providerId sensevoice-polish 本插件注册的 id
model deepseek-chat 纠错模型
baseURL https://api.deepseek.com 可换其它兼容端点
timeoutMs 8000 单次纠错超时
minChars 4 更短文本不纠错
maxGrowthRatio 0.6 输出膨胀超限则丢弃该次纠错
glossary 内置通用技术词 数组,可替换为你的领域术语
enabled true false 时透传
traceFile 关闭 打开则 JSONL 逐步诊断

领域术语示例(材料、医疗、法务等需自备):

- id: speech-polish
  config:
    glossary: [液晶盒, 取向层, 旋涂, 退火, 相位延迟, 氧化铟锡, 偏振响应, 双折射]

术语表只用于同音错写时的候选修正;输出长度相对原文偏离过大(文档说明约 40%~160% 外)会判不可信并丢弃。

诊断与失败策略

打开 traceFile 后,每阶段一行 JSON:apply(加载注册)、enter(当前 provider 收到转写)、raw / polished / skip / error。无 apply 即未加载;有 apply 无 enter 即未选中该识别器。

  • 音频不出本机;仅文本可能发往模型端点。
  • 网络、超时、输出离谱、无密钥等任何失败都回退原文,听写不会因此中断。
  • 默认不写日志;traceFile 默认关闭。

与其它语音插件的对比

dsh-ears、dsh-voice-scribe、dsh-voice-mic 等多半另起麦克风与管线,或用云端 ASR 替换内置方案。本插件保留内置识别器,只外包一层纠错,适合:接受本地小模型识别率、但专业词常被写成同音字;不想多一个麦克风入口、也不希望上传录音。

结尾

DSH 生态强调「一切皆插件」;dsh-speech-polish 在不动内置 SenseVoice 的前提下,用术语表和一次低温 LLM 调用把口述里的专业词尽量修对。安装与配置以 README 为准,可从目录页或 GitHub 跟进版本与 issue。

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

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

小夜