← Back to home@Murphy2000-cyk

dsh-asr-xiaomi

基于小米 MiMo 云端识别给 DeepSeek Harness 加语音输入的插件

Stars
1
Language
PowerShell
Created
Oct 25, 2026
Updated
Oct 25, 2026

Introduction

dsh-asr-xiaomi

给 DeepSeek Harness 加语音输入:点一下麦克风,说话,文字直接进输入框。 语音识别走小米 MiMo 云端接口,本机零模型、零 GPU、零额外内存占用。

一个 DSH 的语音识别 Provider 插件。纯 Host 侧 HTTP 客户端,不下载模型权重、不启动子进程、不占显存。


目录


为什么做这个

**DSH 目前没有开箱可用的语音输入。**装好之后,输入框旁边连一个麦克风按钮都没有,想说话只能自己打字。

底层其实已经有一整套语音组件(浏览器录音 UI、带鉴权的接口层、识别器注册表),但它们都是实验性的,默认不启用;官方那条路线还要额外下载本地模型权重,占磁盘也占内存。

这个插件补的就是最后那一层,也就是一个具体的识别器实现:注册一个云端 Provider,把音频送到小米 MiMo,拿回文字。装完重启就能用,不下载任何模型。

该插件的特点是:识别在云端完成,本机不跑推理,因此不占 CPU、内存和显存。反过来说,这也意味着它依赖网络,断网就用不了。

为什么选小米 MiMo

选它的理由主要就两条:性价比高,识别效果够好。价格上,用默认的 mimo-v2.6-flash 转写,一小时音频约 ¥0.044,按每天用一小时算,一个月也就一块多钱。效果上,它能自动加标点、根据上下文纠正同音错字,并保留 AGENTS.md、Remotion、DeepSeek 这类术语的英文原形,日常口述是够用的。

特性

特性说明
零本地模型不装 SenseVoice、不下载权重,整个包约 110 KB
零上下文成本插件不进系统提示,模型上下文里是 0 个 token
自动标点官方声明 ASR 自动加标点,flash 由提示词保证
术语保真提示词要求逐字转写、保留英文术语原形
纠同音错字flash 模型能根据上下文自动纠正
两种模型可切便宜的全模态 flash,或专用转写 ASR,一键切换
Ctrl+Alt 快捷键轻按开始 / 再轻按停止,不用去点按钮
一键开关与卸载带标记的配置段,卸载不留残渣
不含任何密钥安装时弹窗输入,只落在你自己的机器上

成本

模型计费口径单价一小时音频特点
mimo-v2.6-flash(默认)按 token6.25 tokens/秒约 ¥0.044便宜,能纠错、保术语
mimo-v2.5-asr按音频时长¥0.5/小时¥0.5抗噪、方言、纯转写保真度更好

flash 比 asr 便宜约 11 倍。日常用默认的就行。

换算:1 小时音频 ≈ 22,500 输入 token,100 万 token ≈ 44.4 小时音频。 注意这是按量计费,从账户余额扣,与「Token Plan」套餐额度不互通。

快速开始

前置条件

项要求
系统Windows 10 / 11(安装脚本用了 WinForms 弹窗,非 Windows 装不了)
DSH已安装,并且至少启动过一次(否则还没有 cordis.patch.yml)
账号一个小米 MiMo API Key,账户余额不能为 0
Node.js可选。只有 Ctrl+Alt 快捷键那一步需要

路线一:自己装(推荐)

  1. 下载本仓库,解压到任意目录
  2. 双击 安装小米语音输入.bat,粘贴 API Key,点「安装」
  3. 自己重启 DSH(关掉所有页面 → 重新打开启动器)。脚本不会替你重启
  4. 输入框右边出现麦克风图标 = 成功
  5. 可选:双击 设置快捷键.bat 启用 Ctrl+Alt

详细图文步骤见 安装说明.txt。

路线二:让 AI Agent 先检查

把仓库路径丢给你的 AI 助手,让它读 Agent预检说明.md。里面有:

  • 一段可直接粘贴执行的 PowerShell 预检脚本
  • PASS / FAIL / WARN 三级判定规则
  • 每个失败项对应的补救办法
  • 检查通过后才进入安装的标准话术

Agent 只负责「检查 + 指路」,密钥由你自己在弹窗里输入,不经过 AI 的上下文。

路线三:命令行(无人值守)

powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1 -Key "sk-..." -Model mimo-v2.6-flash

⚠️ 传了 -Key 就跳过弹窗。不带 -Key 在无界面会话里跑,会弹出一个没人点的模态窗口,进程挂到超时。

安装它到底改了哪三个地方

开源项目应该把改动讲清楚。安装脚本只做三件事,全部可逆:

#位置做什么
1<DSH_HOME>\profiles\<profile>\node_modules\dsh-asr-xiaomi\复制插件本体(2 个文件)
2<DSH_HOME>\asr-xiaomi.key写入密钥,并把 ACL 收紧为仅当前用户可读
3<DSH_HOME>\profiles\<profile>\cordis.patch.yml追加一个带标记的配置段,改前自动备份

配置段长这样,用 >>> dsh-asr-xiaomi BEGIN / <<< END 包起来,重装时整段覆盖、卸载时整段删除:

- insert:
    - id: speech-to-text
      name: "@deepseek-ai/dsh-experimental-speech-to-text"
      config:
        defaultProvider: xiaomi-mimo-asr
        language: zh
    - id: api-speech-to-text
      name: "@deepseek-ai/dsh-experimental-api-speech-to-text"
    - id: ui-voice-input
      name: "@deepseek-ai/dsh-experimental-client-ui-voice-input"
    - id: asr-xiaomi
      name: "dsh-asr-xiaomi"
      config:
        providerId: xiaomi-mimo-asr
        model: mimo-v2.6-flash
        language: zh

前三行是 DSH 自带的语音子系统,本插件只提供最后那行 asr-xiaomi。

不要同时启用官方的 dsh-experimental-voice-input-bundle:它插入的是同样这三条, 重复注册会导致语音服务报 duplicate provider 错误。

配置项

插件在 cordis.patch.yml 里的 config 字段:

键默认值说明
providerIdxiaomi-mimo-asr注册到语音服务的识别器 id,要跟 defaultProvider 对上
displayName小米 MiMo 语音识别(云端)界面上显示的名字
baseUrlhttps://api.xiaomimimo.com/v1接口根地址,不要带 /chat/completions
modelmimo-v2.6-flash填 *-asr 结尾则走专用转写模型
languagezhauto / zh / en,仅 asr 模型用到
apiKey空直接写密钥。不推荐,优先用密钥文件
apiKeyFile空密钥文件路径;留空则用 <DSH_HOME>\asr-xiaomi.key
timeoutMs90000单次请求超时(毫秒)
maxOutputTokens4096输出上限,仅全模态模型使用

密钥读取优先级:

config.apiKey  →  环境变量 MIMO_API_KEY  →  config.apiKeyFile  →  <DSH_HOME>/asr-xiaomi.key

工作原理

浏览器麦克风(录音)
        │
        ▼
client-ui-voice-input        输入框旁的麦克风按钮,录音 UI
        │
        ▼
api-speech-to-text           带鉴权的接口层,DSH 侧单次上限约 4 MB / 120 秒
        │
        ▼
speech-to-text 服务          Provider 注册表,按 defaultProvider 派发
        │
        ▼
   ★ 本插件 asr-xiaomi       唯一的代码,Host 侧 HTTP 客户端
        │
        ▼
https://api.xiaomimimo.com/v1/chat/completions
        │
        ▼
   文字 → 输入框(不自动发送)

插件实现的是 DSH 的 Provider 契约,只有两个成员:

{
  info: { id, name, location: 'cloud', languages: ['auto','zh','en'] },
  async transcribe({ audio, language }, signal) → { text, audioSeconds, inferenceSeconds }
}

不声明 preparation,UI 就把它当成「立即可用」,不会弹安装引导。

两种模型的请求差异

mimo-v2.5-asrmimo-v2.6-flash
消息体只发音频音频 + 文字指令
语言控制asr_options.language由提示词控制
额外参数—max_completion_tokens、thinking: {type:'disabled'}
鉴权头api-key: <key>同左(也支持 Authorization: Bearer)

flash 分支的提示词要求:逐字转写、自动加标点、保留术语原形(DeepSeek / DSH / AGENTS.md / Remotion 等)、纠正同音错字。

计费细节

两种模型的计费口径完全不同,这一点很容易踩坑:

mimo-v2.5-asrmimo-v2.6-flash
计费依据音频时长,精确到秒token
单价¥0.5 / 小时输入 ¥1 / 百万 token,输出 ¥2 / 百万 token
一小时音频¥0.5¥0.0225(输入)+ ≈¥0.0216(输出)≈ ¥0.044

flash 的 token 换算:

输入 token ≈ 音频秒数 × 6.25
1 小时 = 3600 × 6.25 = 22,500 token
100 万 token ÷ 22,500 ≈ 44.4 小时音频

金额随时可能调整,以小米控制台账单为准。

兼容性

项状态
DSH 0.2.0-rc.2✅ 实测可用
其他 DSH 版本⚠️ 未验证。依赖 dsh-experimental-speech-to-text / -api-speech-to-text / -client-ui-voice-input 三个包,且插件本身依赖 @deepseek-ai/schemastery
Windows 10 / 11✅
macOS / Linux❌ 不支持(安装脚本是 PowerShell + WinForms)

DSH 升级后会发生什么:

位置是否保留
cordis.patch.yml 配置段✅ 保留
~/.dsh/asr-xiaomi.key✅ 保留
node_modules/dsh-asr-xiaomi/❌ 依赖树可能被重装,会丢
Ctrl+Alt 快捷键(改在 client.js 里)❌ 会被覆盖

升级后的恢复动作:重跑 安装小米语音输入.bat(Key 会自动预填)→ 重跑 设置快捷键.bat → 重启。

隐私

  • 本仓库不含任何 API Key,也从来不会有。Key 由你在安装时输入,只写到你自己机器的 %USERPROFILE%\.dsh\asr-xiaomi.key,该文件 ACL 已限制为仅当前用户可读
  • 音频不进 Session:录音是临时数据,不会成为 Session 事件或附件
  • 不经过第三方:音频只发往你自己填的小米接口地址,没有中转服务器
  • 不进模型上下文:插件和录音对 prompt token 的贡献是 0

仓库结构

dsh-asr-xiaomi/
├── README.md               本文件
├── 安装说明.txt            三步装完,给人看
├── Agent预检说明.md        给 AI Agent 的安装前检查规程
├── 使用说明.md             完整手册:原理、计费、配置、排错
├── 安装小米语音输入.bat    安装
├── 卸载小米语音输入.bat    卸载
├── 设置快捷键.bat          Ctrl+Alt 快捷键(可选)
├── 语音输入开关.bat        开关 / 换模型
├── install.ps1             上面四个 bat 实际调用的脚本
├── uninstall.ps1
├── toggle.ps1
├── hotkey.ps1
└── plugin/
    ├── package.json
    └── lib/
        └── index.js        插件全部逻辑,约 210 行

文档

文件读者内容
安装说明.txt人准备事项、五步安装、六类故障排查
使用说明.md人完整手册,20 节,含原理、计费、配置项、兼容性、一页速查
Agent预检说明.mdAI Agent预检脚本、判定规则、补救办法、报告模板

已知限制

限制说明
非流式DSH 的语音服务只支持「录完再转写」,没有流式识别。说完点停止才出文字
录音时失焦会取消现有语音前端的行为,不是本插件的 bug
快捷键靠改 client.js通过往 DSH 的 client-ui-voice-input 包里追加一段 IIFE 实现,属于 hack。DSH 升级会覆盖
快捷键依赖页面选择器靠 [aria-label="开始录音"] 找按钮,DSH 改文案就失效
只有 Windows安装脚本是 PowerShell + WinForms
依赖 DSH 实验性包三个 dsh-experimental-* 包名或结构一变,插件就要跟着改
账户余额为 0 时静默失败表现和 Key 填错一样,都是转写失败

卸载

双击 卸载小米语音输入.bat。四步全自动:

  1. 从 cordis.patch.yml 删掉标记段
  2. 撤销 Ctrl+Alt 快捷键(并验证标记已消失)
  3. 删除插件目录
  4. 询问是否一并删除密钥文件

想临时停用而不卸载:双击 语音输入开关.bat,选关闭。配置段还在,加个 disabled: true 而已,再开一次就恢复。

开发与自测

插件本身没有构建步骤,改完 plugin/lib/index.js 直接重装即可生效(重启后)。

两条本地验证路径:

1. 语法与契约

node --check plugin\lib\index.js

transcribe 的入参是 { audio: Uint8Array, language },返回 { text, audioSeconds, inferenceSeconds }。想脱离 DSH 单独测,可以起个假服务把 baseUrl 指过去。

2. 端到端

装好后用快捷键录一句中英混说的话,检查三件事:标点是否正确、AGENTS.md 这类术语有没有被改写、文字是否进了输入框但没有自动发送。

欢迎提 Issue 和 PR。改代码的话请顺手更新 使用说明.md 里对应的章节。

License

MIT


English Summary

dsh-asr-xiaomi is a speech-to-text provider plugin for DeepSeek Harness (DSH) that routes microphone audio to Xiaomi's MiMo cloud API.

  • No local model — no weight downloads, no GPU, no extra RAM. Total package ~110 KB.
  • Zero context cost — the plugin contributes 0 prompt tokens.
  • Two models: mimo-v2.6-flash (~¥0.044/hr, token-billed, error-correcting) or mimo-v2.5-asr (¥0.5/hr, duration-billed, noise-robust).
  • Implements DSH's provider contract: { info, transcribe(input, signal) }.
  • Windows only — the installer is PowerShell + WinForms.
  • Tested against DSH 0.2.0-rc.2.
  • No API keys are contained in this repository. Users supply their own Xiaomi MiMo key at install time; it is stored locally at %USERPROFILE%\.dsh\asr-xiaomi.key with restricted ACL.
  • Audio never becomes a Session event and never passes through any third-party relay.

See 使用说明.md for the full manual (in Chinese).