dsh-voice-input
Voice input for DeepSeek Harness: a microphone seat inside the composer plus a Web settings page, transcribing through the browser engine or any OpenAI-compatible /audio/transcriptions endpoint.
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:QDchuan/dsh-voice-input说明文档
阅读完整 README ↗配置:四条路,从快到好
1. 什么都不配(浏览器引擎) 刷新页面直接点麦克风。Chrome / Edge 会用它自己的在线识别,边说边出字。缺点很实在:它依赖浏览器厂商的服务,中国大陆通常不可用(表现为一直不出字,或状态条报「浏览器识别服务不可达」)。
2. 配一个云端转写接口(推荐) 设置 → 语音输入 → 点「快速填充」里的一颗预设,再粘贴 API Key、保存。预设会一次填好服务类型、API 地址与模型名:
| 预设 | 服务类型 | API 地址 | 模型 |
|---|---|---|---|
| OpenAI | OpenAI 兼容 | https://api.openai.com/v1 | whisper-1 |
| 硅基流动 | OpenAI 兼容 | https://api.siliconflow.cn/v1 | FunAudioLLM/SenseVoiceSmall |
| Groq | OpenAI 兼容 | https://api.groq.com/openai/v1 | whisper-large-v3-turbo |
| Ollama | Ollama | http://127.0.0.1:11434/v1 | 由「检测本机模型」填入 |
| 本地 whisper.cpp | OpenAI 兼容 | http://127.0.0.1:8080/v1 | whisper-1 |
只要服务兼容 OpenAI 的 POST /audio/transcriptions(multipart,file + model),就能直接用;apiBase 填服务根地址,插件在其后拼 /audio/transcriptions。
3. 本机 Ollama(结论:目前转写不了)
Ollama 自己路由 POST /v1/audio/transcriptions(已实测:multipart 的 file + model 会进入它的音频管线,不是 404),但它要求模型带音频投影(audio / mmproj),而 Ollama 0.34 的官方模型库里一个都没有。这一点是实际验证过的,不是推测:
| 实测 | 结果 |
|---|---|
ollama pull gemma3n:e2b(Ollama 模型页明确宣传「Audio Data Extraction: Transcribe spoken language」,5.24 GB) | 拉下来后 capabilities 只有 ["completion"],model_info 40 个键里没有任何 audio 键 |
用 gemma3n:e2b 请求 /v1/audio/transcriptions | 400 Multimodal data provided, but model does not support multimodal requests. —— 这个转换连多模态都不支持 |
| 用文本模型请求同一接口 | 500 audio input is not supported - hint: ... provide the mmproj |
| 上游状态 | 音频输入仍是未合并的提案(ollama#11798、ollama#15243) |
插件对这块的处理是:先问清楚,再给出路,而不是把一个 500 丢给用户。它读取 GET /api/tags,对每个模型 POST /api/show 检查 model_info 里有没有 *.audio.* 键(不能只看 capabilities:在这个版本里能听和不能听的模型都只报 completion),逐个标注 可听 / 仅文本 / 未检测,并在上传之前就把结论讲明白。「模型名不存在」和「模型不会听」因此是两条不同的提示,各自带上本机名单。
判定逻辑是对的,坏消息是它判定出的结果是「本机没有能听的模型」,而且现在也拉不到 —— 这正是 gemma3n:e2b 那次 5.24 GB 下载证明的。所以本地转写走第 4 条路。
4. 本地转写(本地推荐 whisper.cpp / faster-whisper) 起一个说 OpenAI 协议的本地转写服务,把「服务类型」留在「OpenAI 兼容」、地址指向它,即可完全离线:
- faster-whisper-server:原生就是 OpenAI 的
/v1/audio/transcriptions,插件直接可用。 - whisper.cpp 的
whisper-server:只有/inference一个端点,需要用它的--request-path/--inference-path把路径对齐成/v1/audio/transcriptions(参数名取自它自己的 README;本机没有验证过这条,因为它的 v1.9.4 release 不带 Windows 二进制)。 - 任何其他兼容 OpenAI
/audio/transcriptions(multipart,file+model,返回{text})的服务都行。
而且你不需要把地址填进去。 没配 apiBase 时,插件会依次探测 127.0.0.1 的 8081 / 8080 / 8000 / 9000 端口(只探本机,永远不碰远端地址),发现 OpenAI 兼容的转写服务就直接用它。设置页的「自动发现本机转写服务」可以关掉。
使用
- 光标放在输入框(或先打几个字,转写会接在后面)。
- 点麦克风按钮,或按 Alt+M。
- 说话。浏览器引擎会把中间结果实时写进输入框;接口引擎在状态条上显示电平和计时。
- **点状态条上的「完成」**结束录音并转写(也可以再点一次麦克风按钮,或再按一次 Alt+M)。接口引擎此时上传并转写,结束后把文字插入输入框。
- 想放弃这次录音:点「取消录音」,或按 Esc。
插入规则(追加 模式下):中文接中文不加空格、中英之间加一个空格、左括号后不加空格 —— 尽量贴近手写习惯。开启「转写完成后自动发送」后,文字落进输入框就会自动发送(插件会等输入框真正提交了新内容再发送,不会把上一次的内容发出去)。