ppy-web/dsh-plugin-xiaomi-mimo-tts
ppy-web/dsh-plugin-xiaomi-mimo-tts为 DSH 提供小米 MiMo、豆包、浏览器本地 TTS 语音朗读;自动播报、自定义音色、UI 音效、桌宠联动、QQBot 联动。
国内可用的输入框语音输入。需要先启动本地 Python bridge(pip install dashscope websockets,运行 bridge/voice-bridge.py)——只装插件不可用。浏览器麦克风采集 16kHz PCM 流式转发给 bridge,由阿里云 DashScope ASR(paraformer-realtime-v2)识别;识别文字在光标处实时填入草稿,静音自动停止,可选识别后自动发送。
DeepSeek Harness Web 语音输入插件(国内可用版)
在聊天输入框添加麦克风按钮,点击说话即可将语音转为文字填入草稿。基于 阿里云 DashScope ASR(国内直连可用),替代原版依赖的 Google Web Speech API(国内无法访问)。
本项目 fork 自 NewDaNew/dsh-voice-input,原版使用 Web Speech API(Google 云端),在国内直连不可用;本版重写了识别引擎为阿里云 DashScope ASR + 本地 bridge。
🛠 开发工具:本插件在 DeepSeek Harness (DSH) 中开发与调试(代码重构、排障、测试均由 DSH 辅助完成)。DSH 是一个开源 AI 助手框架:https://github.com/deepseek-ai/dsh
浏览器插件 (lib/client.js)
├─ AudioWorklet 采集麦克风 16kHz PCM
├─ 流式发送 → ws://127.0.0.1:8765
└─ 本地 bridge (bridge/voice-bridge.py)
└─ 阿里云 DashScope paraformer-realtime-v2 识别
为什么需要本地 bridge? DashScope 的 ASR WebSocket 握手依赖官方 SDK 的内部鉴权逻辑,浏览器裸 WebSocket 直连会 401。bridge 用官方 Python SDK 处理鉴权,浏览器只负责录音和显示。
dsh plugin --profile web add github:Schumchanvi/dsh-voice-input-cn
或用 dshmarket 安装(如果已上架)。
pip install dashscope websockets
# 前台运行
python bridge/voice-bridge.py
# 或 Windows 开机自启(双击注册到启动文件夹)
wscript bridge/start-voice-bridge.vbs
bridge 默认监听 127.0.0.1:8765(仅本机,不暴露公网)。
| 项 | 说明 |
|---|---|
| DashScope API Key | 阿里云百炼 API Key(存 localStorage) |
| 识别后自动发送 | 识别完成自动提交草稿 |
| 识别语言 | 自动 / 中文 / English |
| 原版 (dsh-voice-input) | 本版 (dsh-voice-input-cn) | |
|---|---|---|
| 识别引擎 | Web Speech API(Google 云端) | 阿里云 DashScope ASR |
| 国内可用 | ❌ 不可用 | ✅ 直连可用 |
| 架构 | 纯浏览器 | 浏览器 + 本地 Python bridge |
| 识别体验 | 一次性返回 | 流式实时填入 |
| 静音停止 | 无 | ✅ 1.5s 自动停止 |
| 光标插入 | 追加末尾 | ✅ 光标位置插入 |
127.0.0.1,不对外网开放Q: 显示"连接本地语音服务失败"
A: bridge 没启动。运行 python bridge/voice-bridge.py,确认端口 8765 已监听。
Q: 识别不出内容 / "呃呃啊啊" A: 检查麦克风权限(浏览器 + Windows);确认 Key 有效(阿里云百炼控制台可测试);确认音频不是静音。
Q: 显示"无可用麦克风"
A: 这是浏览器 getUserMedia 的 NotFoundError。检查 Windows 麦克风隐私设置、默认输入设备、驱动状态(Intel 智音端点幽灵化时需重装驱动)。
Q: 延迟高 A: 识别为流式,理论上说完即出;若延迟明显,检查网络到阿里云的延迟,或换用更近的区域节点。
Q: 报 NO_VALID_AUDIO_ERROR
A: bridge 只接受裸 PCM(16kHz 单声道 int16)。如果你用自建脚本/客户端直连,别拼 WAV 头;本插件内置的 AudioWorklet 已输出纯 PCM,正常情况下不会出现此错误。
Q: 有回音/自己说话被识别
A: 麦克风流不允许连回 AudioContext.destination(回放)。本插件已断开该连接;若你魔改过,检查 worklet 是否接了 destination。
Q: 文字被填了两次 / 重复插入
A: 这是"停止提交"与"空闲提交"双触发的经典 bug。本插件统一由 onState("idle") 提交一次,手动点停不会再提交;若你魔改过,检查 stop 路径是否也提交了。
Q: 浏览器直连 DashScope 报 401
A: 这是预期的。DashScope ASR 的 WebSocket 鉴权在官方 SDK 内部完成,裸 WebSocket 无法携带签名。必须走本地 bridge(本仓库 bridge/voice-bridge.py)。
Q: bridge 端口被占用(Windows 报"address already in use")
A: 说明已有 bridge 实例在跑(或别的程序占了 8765)。关掉旧的,或用 set VOICE_BRIDGE_PORT=xxxx 换端口(同时需在客户端改 BRIDGE_URL)。
MIT(保留原版 fork 版权声明;阿里云 DashScope 服务需遵守其使用条款)