给聊天框加麦克风按钮,说话自动转文字填入输入框
28.2/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add ai-yucheng/dsh-audio-copilot该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 74 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 21 处,展示前 21 条)
- 读取本地文件dist/index.js:38
await access(path, constants.R_OK); - 读取本地文件dist/index.js:79
const bytes = await readFile(path); - 写入本地文件dist/index.js:90
await writeFile(tmpJson, body, 'utf8'); - 删除本地文件dist/index.js:133
await rm(tmpJson).catch(() => { }); - 读取本地文件dist/index.js:203
const bytes = await readFile(uploadPath); - 发起网络请求dist/index.js:210
const res = await fetch(joinUrl(config.asrBaseUrl, '/audio/transcriptions'), { - 删除本地文件dist/index.js:226
await rm(tmpWav).catch(() => { }); - 写入本地文件dist/index.js:269
await writeFile(tmp, audioBytes); - 删除本地文件dist/index.js:275
await rm(tmp).catch(() => { }); - 发起网络请求lib/client.js:259
fetch(TRANSCRIBE_URL, { method: 'POST', body: form }) - 写入剪贴板lib/client.js:276
navigator.clipboard.writeText(body.text).catch(function () {}) - 发起网络请求src/client.ts:264
const res = await fetch(TRANSCRIBE_URL, { method: 'POST', body: form }) - 读取本地文件src/index.ts:82
await access(path, constants.R_OK) - 读取本地文件src/index.ts:129
const bytes = await readFile(path) - 写入本地文件src/index.ts:140
await writeFile(tmpJson, body, 'utf8') - 删除本地文件src/index.ts:180
await rm(tmpJson).catch(() => {}) - 读取本地文件src/index.ts:252
const bytes = await readFile(uploadPath) - 发起网络请求src/index.ts:260
const res = await fetch(joinUrl(config.asrBaseUrl, '/audio/transcriptions'), { - 删除本地文件src/index.ts:272
if (tmpWav) await rm(tmpWav).catch(() => {}) - 写入本地文件src/index.ts:318
await writeFile(tmp, audioBytes) - 删除本地文件src/index.ts:323
await rm(tmp).catch(() => {})
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools@deepseek-ai/schemastery@deepseek-ai/cordis给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 聊天框麦克风按钮
- 语音转文字填入输入框
- 音频转写
DeepSeek Harness 的音频副驾——转写音频(ASR),编辑器里带语音输入麦克风按钮。🎤
README
由 DeepSeek 最新模型翻译生成🎙️ dsh-audio-copilot · 语音工作台
给纯文本模型补上“听”和“说”的能力 —— DeepSeek Harness (DSH) 音频插件。
Audio Copilot: give your text-only agent ears and a voice.
License: MIT
DSH
GitHub
纯文本模型(如 DeepSeek-V4-Flash)天生听不懂音频、说不出话。本插件为它补齐这两块能力,并附赠一个聊天框语音输入按钮——对着麦克风说话,转成文字自动填入输入框,说完即发。
📖 目录
- 🎯 这是什么?
- ✨ 核心功能
- 🧠 工作原理
- 🚀 快速开始(小白向,3 分钟)
- ⚙️ 完整配置参考
- 🧩 语音引擎怎么选?
- 🎤 语音输入按钮使用教程
- ❓ 常见问题 FAQ
- 📸 示例截图
- 🤝 配套项目
- 📜 更新日志
- 📄 协议
🎯 这是什么?
| 能力 | 说明 |
| 🎤 语音输入按钮 | 聊天输入框旁的麦克风按钮:点击 → 说话 → 自动转文字填入输入框。多引擎可选,中文/方言/外语通吃 |
一个按钮,解决“说话输入”这件事——没有其他隐藏功能,所见即所得。
展开完整文档(README 剩余 1 节)
🎙️ dsh-audio-copilot · 语音工作台
给纯文本模型补上“听”和“说”的能力 —— DeepSeek Harness (DSH) 音频插件。
Audio Copilot: give your text-only agent ears and a voice.
License: MIT
DSH
GitHub
纯文本模型(如 DeepSeek-V4-Flash)天生听不懂音频、说不出话。本插件为它补齐这两块能力,并附赠一个聊天框语音输入按钮——对着麦克风说话,转成文字自动填入输入框,说完即发。
📖 目录
- 🎯 这是什么?
- ✨ 核心功能
- 🧠 工作原理
- 🚀 快速开始(小白向,3 分钟)
- ⚙️ 完整配置参考
- 🧩 语音引擎怎么选?
- 🎤 语音输入按钮使用教程
- ❓ 常见问题 FAQ
- 📸 示例截图
- 🤝 配套项目
- 📜 更新日志
- 📄 协议
🎯 这是什么?
| 能力 | 说明 |
| 🎤 语音输入按钮 | 聊天输入框旁的麦克风按钮:点击 → 说话 → 自动转文字填入输入框。多引擎可选,中文/方言/外语通吃 |
一个按钮,解决“说话输入”这件事——没有其他隐藏功能,所见即所得。
✨ 核心功能
🎤 语音输入按钮(最常用)
- 浏览器端麦克风录音 → 服务端转写 → 文字自动填入输入框
- 录音 UI:红色脉冲光晕 + 秒表计时 + 停止方块 + 转写 spinner
- 最长录音 28 秒(适配智谱 GLM-ASR 的 30 秒上限),到点自动停止
- 转写失败大声提示(错误信息可操作),绝不“没动静”;注入失败自动把结果复制到剪贴板
🧠 四引擎转写(自由切换,不锁定厂商)
| 引擎 | 特点 | 适用 |
| zhipu | 国内直连,GLM-ASR-2512:中文普通话 + 四川/粤/闽/吴方言 + 数十种外语,CER 0.07 顶级,价格极低 | 🇨🇳 国内用户首选 |
| local | 本地 faster-whisper:完全免费、无限用、离线、隐私 | 不花钱 / 离线场景 |
| gemini | 海外多模态,音频理解最强,免费档每时段 20 次限流(429 自动重试) | 海外网络 / 最强语义 |
| openai | 任意 OpenAI 兼容 /audio/transcriptions 端点(Whisper / SenseVoice 等) | 已有第三方端点 |
🛡️ 可靠性设计
- Gemini 免费额度 429 限流 → 自动按提示等待后重试一次
- 智谱拒 webm → 服务端 ffmpeg 自动转 16kHz wav
- 缺 key / 缺 ffmpeg / 端点错误 → 可操作的中文错误信息
- 全部注册走 effect,卸载自动注销;Config 有 schema 校验
🧠 工作原理
┌──────────────────────── 浏览器端 (dsh.client) ────────────────────────┐ │ 聊天输入框工具栏 ── 🎤 按钮 │ │ getUserMedia 录音 → MediaRecorder → webm Blob │ │ │ │ │ └── POST /audio-copilot/transcribe (multipart) │ └───────────────┬────────────────────────────────────────────────────────┘ ▼ ┌──────────────────────── 服务端 (cordis 插件) ──────────────────────────┐ │ /audio-copilot/transcribe 路由 │ │ ├─ zhipu : ffmpeg webm→wav → 智谱 GLM-ASR-2512 (OpenAI 兼容) │ │ ├─ local : python transcribe.py (faster-whisper, CPU int8) │ │ ├─ gemini : curl → Gemini generateContent (多模态直吃 webm) │ │ └─ openai : fetch → 任意兼容 /audio/transcriptions │ │ └─ 返回 { text, language } │ └───────────────┬────────────────────────────────────────────────────────┘ ▼ ┌──────────────────────── 浏览器端 ──────────────────────────────────────┐ │ 文字自动填入输入框(模拟粘贴事件,走 DSH 官方 pasteBegin 通道,React 兼容) │ └────────────────────────────────────────────────────────────────────────┘
🚀 快速开始(小白向,3 分钟)
第 0 步:确认前置
- DSH Desktop 已安装(本插件基于 DSH 0.1.0-rc.7 线)
- Node.js ≥ 20(DSH 自带 runtime,一般无需另装)
- ffmpeg / ffprobe 在 PATH(Windows 到 gyan.dev 下载 full build 解压,把 bin 加进系统 PATH)—— 语音输入/转写需要
第 1 步:安装插件
在 DSH 的 profile web 目录(如 C:\Users\\Desktop\Harness测试\.dsh\profiles\web)执行:
方式 A:GitHub 源码(推荐,可迭代)
git clone https://github.com/ai-yucheng/dsh-audio-copilot.git
pnpm add dsh-audio-copilot@link:C:/绝对路径/dsh-audio-copilot
方式 B:npm(若已发布)
pnpm add dsh-audio-copilot
然后在 profile 的 package.json → dsh.profile.bundles 数组里追加:
"dsh-audio-copilot"
第 2 步:配置 API Key(按你选的引擎)
🇨🇳 智谱引擎(推荐,国内直连):
1. 注册 bigmodel.cn(手机号 + 实名)
2. 控制台 → API Keys → 创建 Key(形如 xxxxxxxx.yyyyyyyyyy)
3. 充值少量余额(语音输入按量计费,10-20 元够用很久)
4. 把 Key 写入环境变量 ZHIPU_API_KEY(Windows:setx ZHIPU_API_KEY "你的key",或写进 ~/.dsh/.credentials.yaml)
🌐 Gemini 引擎(海外):
1. 访问 Google AI Studio(需代理)
2. 获取 API Key → 写入 GEMINI_API_KEY
3. 免费档每时段 20 次请求;付费档无此限制
💻 本地引擎(免费离线):
pip install faster-whisper
建目录放脚本(用仓库自带的一份):
mkdir -p C:/Users//dsh-local-asr
cp docs/local-asr/transcribe.py C:/Users//dsh-local-asr/
首次转写会自动下载模型(~460MB small / ~1.5GB medium),之后离线可用
第 3 步:配置引擎(cordis.patch.yml)
在 profile 的 cordis.patch.yml 追加:
- id: audio-copilot
config:
asrEngine: zhipu # zhipu | local | gemini | openai
asrBaseUrl: https://open.bigmodel.cn/api/paas/v4
asrModel: glm-asr-2512
asrApiKeyEnv: ZHIPU_API_KEY
本地引擎时: localAsrRoot: C:/Users//dsh-local-asr localAsrModel: medium
第 4 步:重启 + 验证
1. 重启 DSH Desktop(服务端路由生效)
2. 硬刷新浏览器 Ctrl+Shift+R(客户端按钮生效)
3. 聊天框工具栏出现 🎤 按钮 → 点击说话 → 文字填入输入框 → 🎉
验证命令:
dsh --profile web --dump-config | grep audio-copilot
⚙️ 完整配置参考
| 键 | 默认 | 说明 |
| asrEngine | gemini | 语音转写引擎:zhipu / local / gemini / openai |
| asrBaseUrl | https://open.bigmodel.cn/api/paas/v4 | zhipu/openai 引擎端点根 |
| asrModel | glm-asr-2512 | zhipu/openai 引擎模型名 |
| asrApiKeyEnv | ZHIPU_API_KEY | zhipu/openai 引擎持 key 的环境变量名 |
| geminiApiKeyEnv | GEMINI_API_KEY | gemini 引擎 key 环境变量 |
| geminiModel | gemini-3.6-flash | gemini 引擎模型 |
| geminiBaseUrl | https://generativelanguage.googleapis.com | gemini 端点根 |
| geminiProxy | http://127.0.0.1:7890 | gemini 代理(海外直连无需配) |
| localAsrRoot | (空) | 本地引擎目录(含 transcribe.py) |
| localAsrModel | medium | 本地 whisper 模型:tiny/base/small/medium/large-v3 |
| localAsrThreads | 4 | 本地转写 CPU 线程数 |
| localAsrPrompt | (空) | 本地引擎专有名词提示(逗号分隔,如 DeepSeek, DSH, 智能体),显著提升术语识别 |
| maxAudioBytes | 26214400 | 转写文件大小上限(25MB) |
| transcribeTimeoutMs | 120000 | ASR 超时(毫秒) |
🧩 语音引擎怎么选?
| 你的情况 | 推荐引擎 | 理由 |
| 🇨🇳 国内网络、要方言/外语 | zhipu | 国内直连无墙;中文+四川/粤/闽/吴方言+数十种外语;按量计费极便宜 |
| 💰 不想花钱、离线优先 | local | faster-whisper 免费无限用,隐私(音频不出本机);medium 模型中文准确 |
| 🌐 有代理、要最强语义理解 | gemini | 音频理解能力顶级;免费档限流,付费档 ~3厘/分钟 |
| 🔌 已有第三方 ASR 端点 | openai | 任何 OpenAI 兼容 /audio/transcriptions |
💡 换引擎只需改 cordis.patch.yml 的 asrEngine + 重启,不影响其他功能。
🎤 语音输入按钮使用教程
1. 点击工具栏 🎤 按钮 → 按钮变红色脉冲 + 秒表计时(0:07)
2. 允许浏览器使用麦克风(首次会弹权限)
3. 对着麦克风说话(最长 28 秒,自动停止)
4. 点击 ⏹ 停止 → 按钮变 spinner("转写中…")
5. 文字自动填入输入框 → 按 Enter 发送
如果转写结果没能自动填入(极端情况),会弹出提示并把文字复制到剪贴板,直接 Ctrl+V 粘贴即可。
❓ 常见问题 FAQ
Q:按钮不出现?
重启 DSH + 硬刷新浏览器;确认 dsh.profile.bundles 已加 dsh-audio-copilot。
Q:点了按钮没反应?
确认麦克风权限已允许;看按钮是否弹出错误提示(如"转写失败:xxx")。录音需 ffmpeg(zhipu 引擎转 wav)。
Q:转写失败"余额不足"?
智谱引擎需要在 bigmodel.cn 充值;其他引擎检查对应 key。
Q:转写失败 429?
Gemini 免费档每时段 20 次限流,已自动重试一次;建议换 zhipu/local 引擎。
Q:识别不准(专有名词错)?
- 本地引擎:配置 localAsrPrompt(如 DeepSeek, DSH, 智能体),实测显著提升
- 智谱引擎:GLM-ASR 支持自定义词典,可加专有名词
Q:录音时长有限制吗?
28 秒自动停止(智谱 ASR 限 30 秒)。需要转写更长音频时,请分段录音。
Q:粤语/方言能识别吗?
- 智谱 GLM-ASR-2512:支持四川/粤/闽/吴等方言 ✅
- 本地 whisper:方言效果一般(whisper 弱项),粤语建议换 zhipu 引擎
📸 示例截图
| 语音工作台 | 使用界面 | 工具栏按钮 |
| 语音工作台 | 使用界面 | 两个插件+功能按钮 |
🤝 配套项目
同系列 DSH 插件(均为自研,开源):
- dsh-composer-image-tools —— 聊天输入框图片工具:📎 上传图片(≤10MB 防烧 token)+ 📷 自定义区域截图(Electron desktopCapturer,不依赖任何外部工具)。与 🎤 按钮同栏并排。
📜 更新日志
详见 CHANGELOG.md。关键里程碑:
- 0.1.0 — 四引擎转写(zhipu/local/gemini/openai)、语音输入按钮、429 自动重试、webm 自动转 wav、本地 faster-whisper 部署、React 兼容的文字注入
📄 协议
MIT © ai-yucheng预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
ai-yucheng/dsh-audio-copilot
给聊天框加麦克风按钮,说话自动转文字填入输入框
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这是你的仓库?认领条目