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(默认) | 按 token | 6.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 快捷键那一步需要 |
路线一:自己装(推荐)
- 下载本仓库,解压到任意目录
- 双击
安装小米语音输入.bat,粘贴 API Key,点「安装」 - 自己重启 DSH(关掉所有页面 → 重新打开启动器)。脚本不会替你重启
- 输入框右边出现麦克风图标 = 成功
- 可选:双击
设置快捷键.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 字段:
| 键 | 默认值 | 说明 |
|---|---|---|
providerId | xiaomi-mimo-asr | 注册到语音服务的识别器 id,要跟 defaultProvider 对上 |
displayName | 小米 MiMo 语音识别(云端) | 界面上显示的名字 |
baseUrl | https://api.xiaomimimo.com/v1 | 接口根地址,不要带 /chat/completions |
model | mimo-v2.6-flash | 填 *-asr 结尾则走专用转写模型 |
language | zh | auto / zh / en,仅 asr 模型用到 |
apiKey | 空 | 直接写密钥。不推荐,优先用密钥文件 |
apiKeyFile | 空 | 密钥文件路径;留空则用 <DSH_HOME>\asr-xiaomi.key |
timeoutMs | 90000 | 单次请求超时(毫秒) |
maxOutputTokens | 4096 | 输出上限,仅全模态模型使用 |
密钥读取优先级:
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-asr | mimo-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-asr | mimo-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预检说明.md | AI 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。四步全自动:
- 从
cordis.patch.yml删掉标记段 - 撤销 Ctrl+Alt 快捷键(并验证标记已消失)
- 删除插件目录
- 询问是否一并删除密钥文件
想临时停用而不卸载:双击 语音输入开关.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
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) ormimo-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.keywith restricted ACL. - Audio never becomes a Session event and never passes through any third-party relay.
See 使用说明.md for the full manual (in Chinese).