dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
给 AI 编程助手装上耳朵和嘴:Qwen3-ASR 转写 + Qwen3-TTS 音色克隆,全程离线,双击 install.bat 装完,DSH 输入框旁边点一下就能说。
对着麦克风说一句,文字直接落进 AI 对话的输入框;选中一段回复,点一下就能听。
转写和合成都在你自己的显卡上完成——音频不出本机,一行都不上传。
127.0.0.1,模型、语音、文本都留在这台机器上。install.bat 自带 Python 3.11 + PyTorch CUDA,不污染你系统里已有的任何环境。实测(RTX 5070 Ti Laptop / 12 GB 显存):
场景 · 结果 一句中文转写 · 13.8 秒,逐字正确 一句中文合成(参考音色,预热后) · 7.8 秒 闭环验证:合成 → 再转写回来 · 与原文完全一致
项 · 要求 系统 · Windows 10 / 11,64 位(两个安装脚本都做环境自检,不满足会直接说缺什么) 显卡 · NVIDIA,CUDA 12.8 可用;显存 8 GB 起,12 GB 更稳(ASR ~4 GB + TTS ~5–6 GB) 驱动 · 建议 ≥ 550(nvidia-smi 能看到卡和 CUDA 版本) 磁盘 · 至少 25 GB 空闲(两个包各约 10 GB,外加下载缓存) 内存 · 16 GB 起 网络 · 首次安装要联网(Python / PyTorch / 模型都走国内镜像);装完可断网使用
市面上的语音工具大多停在"把话说成字"这一步,然后你自己复制粘贴。这个项目解决的是另外三个问题:
127.0.0.1。顺带一个发现:DSH 的「添加模型提供商」只认对话协议(OpenAI Chat Completions / Responses / Anthropic Messages)。ASR / TTS 不是对话模型,硬塞进设置页没有意义——你没法对一段音频说"你好"。所以这里走的是插件 + 本地 HTTP 桥接,而不是伪装成一个模型提供商。
组成 · 位置 · 作用 桥接插件 · plugin/ · 宿主侧 /voice-bridge/api/* 代理 + 浏览器侧「语音」胶囊与浮层 ASR 一键部署包 · deploy/asr/ · Qwen3-ASR-1.7B,语音转文字,默认端口 8010 TTS 一键部署包 · deploy/tts/ · Qwen3-TTS-12Hz-1.7B-Base,文字转语音,默认端口 8011
先说清楚体积:这两个部署包本身只是脚本,`deploy/` 整个目录只有 94 KB(ASR 47.9 KB + TTS 45.6 KB)。Python 3.11、PyTorch CUDA、模型全都不在仓库里,是 install.bat 运行时按需下载的——装完每个包约占 10 GB 磁盘(Python 5.3 GB + 模型 4.4 GB + 下载缓存)。
两者各自独立,各有自己的 Python 和 PyTorch。这不是偷懒:qwen-asr 要求 transformers==4.57.6,qwen-tts 要求 transformers==4.57.3,版本冲突,共用一个环境必然炸。
把 deploy/asr/ 和 deploy/tts/ 分别复制到一个路径里没有中文和空格的目录(例如 D:\Qwen3-ASR-1.7B),然后各自双击。这两个目录都很小(94 KB),真正吃磁盘的是它们接下来下载的东西:
install.bat # 第一次:环境自检 → 内置 Python → PyTorch CUDA → 推理库 → 下模型 → 冒烟测试 → 启动
start.bat # 以后启动
stop.bat # 停止
status.bat # 看是否在运行安装器会做七件事,全程有进度条:环境自检 → 下载 11 MB 嵌入式 Python 3.11(四个镜像依次试)→ 装 PyTorch CUDA 12.8(约 2.5 GB)→ 装推理库 → 从 hf-mirror.com 逐文件下模型(断点续传)→ 冒烟测试 → 启动并自动开浏览器。
中断了直接再双击一次,已完成的步骤会跳过。
包 · 模型 · 模型下载量 · 装完占用磁盘 · 显存 ASR · Qwen/Qwen3-ASR-1.7B · 4.4 GB(12 个文件) · 约 10 GB · 约 4 GB TTS · Qwen/Qwen3-TTS-12Hz-1.7B-Base · 4.3 GB(13 个文件) · 约 10 GB · 约 5–6 GB
TTS 的仓库名必须带-Base。Qwen/Qwen3-TTS-12Hz-1.7B(不带-Base)在 Hugging Face 上是 401。
把 plugin/ 放好(建议 D:\dsh-voice-bridge,不要放进 DSH 安装目录,升级会被覆盖),然后改 profile 的 package.json:
// %USERPROFILE%\.dsh\profiles\desktop\package.json
{
"dependencies": {
"dsh-voice-bridge": "link:D:/dsh-voice-bridge" // ← 加这一行
},
"dsh": { "profile": { "bundles": [ /* … */ "dsh-voice-bridge" ] } } // ← 数组末尾加这一项
}改完完全退出 DSH 再打开(插件只在启动时加载,界面里 Ctrl+R 不会重载宿主半)。
输入框左侧(权限 / 计划模式那颗胶囊右边)会多一颗 「语音」 胶囊。点开:
同一排按钮里还有一颗「部署」(来自配套的 dsh-local-model-toggle 插件)。选一个含 install.bat 的目录就能就地跑安装、看实时日志——deploy/asr、deploy/tts 都能被它直接吃进去。
flowchart LR
U["🎙 你的声音 / 文本"] --> P["DSH 界面<br/>语音面板(浏览器半)"]
P -->|"POST /voice-bridge/api/*"| H["DSH 宿主<br/>lib/index.js 薄代理"]
H -->|"Gradio call + SSE"| A["Qwen3-ASR<br/>127.0.0.1:8010"]
H -->|"Gradio call + SSE"| T["Qwen3-TTS<br/>127.0.0.1:8011"]
A --> R["📝 转写结果"]
T --> S["🔊 合成音频"]只做一层薄代理有两个好处:浏览器不用处理跨域;端口和路径配置只在宿主侧存一份,面板不需要知道细节。
服务 · 端口 · Gradio 接口 · 参数 Qwen3-ASR-1.7B · 8010 · POST /gradio_api/call/run · [音频, 语种, null] — 第三个 null 是隐藏 State 占位,少传会报 didn't receive enough input values Qwen3-TTS-12Hz-1.7B-Base · 8011 · POST /gradio_api/call/run_voice_clone · [参考音频, 参考文本, 是否只用声纹, 正文, 语种]
%USERPROFILE%.dsh\voice-bridge\config.json(宿主每次请求都重读,面板下次打开就生效):
{
"asr": { "port": 8010, "model": "Qwen3-ASR-1.7B", "dir": "D:\\Qwen3-ASR-1.7B", "enabled": false, "idleMinutes": 10 },
"tts": { "port": 8011, "model": "Qwen3-TTS-12Hz-1.7B-Base", "dir": "D:\\Qwen3-TTS-1.7B", "enabled": true, "idleMinutes": 10 },
"lang": "Auto",
"xvec": false
}字段 · 说明 dir · 指向部署目录;面板的启动/停止按钮就是去这里找 start.bat / stop.bat enabled · 面板上那颗开关的持久状态 idleMinutes · 闲置多少分钟自动停服,释放显存 lang / xvec · 默认语种、是否只用声纹
1. 合成没声音 / 报 `Reference text is required when use x-vector only is NOT enabled.`
-Base 模型没有内置音色,必须给参考音频。3 秒能听出音色,8–15 秒更稳。不勾「只用声纹」时还要填参考文本(即那段音频说了什么)。
2. 第一次合成特别慢
要加载模型,十几秒属正常。之后预热好了约 8 秒一句。面板的「闲置关闭」可以避免反复冷启动。
3. 显存不够 / OOM
ASR 约 4 GB、TTS 约 5–6 GB,两个同时开在 12 GB 卡上就比较紧了。建议用面板开关按需起停,或把 idleMinutes 调小。
4. 装 PyTorch 失败
控制台最后 30 行发 issue。通常是镜像或显卡驱动问题,install.ps1 会自动从官方源切到阿里云 pytorch-wheels。
5. 端口被占用
start.bat -Port 8020 换端口,同时在 config.json 里把对应 port 改掉。
6. 面板高度固定,内容被截
plugin/lib/client.js 顶部的 PANEL_H 是常量。窗口比它矮时会夹到可视区内,内容多时内部滚动。
更多排查见 docs/troubleshooting.md。
已验证(本机 RTX 5070 Ti Laptop 12 GB,Windows 10):
.ps1 在 PowerShell 5.1 下语法零错;所有 .bat 保持纯 ASCII(规避 cmd 中文编码坑)。未验证 / 已知限制:
transformers 版本冲突)Qwen3-TTS-12Hz-1.7B-CustomVoice / -VoiceDesign,用文字描述造音色pip install qwen-asr qwen-tts如果这个项目帮你省下了订阅费,一颗 ⭐ 就是最好的支持。
MIT © 2026 lvsun080403