DeepSeek Harness(DSH)采用插件架构,旨在通过社区贡献扩展基础能力。开发者在构建智能体或交互式应用时,往往需要流式语音输入能力,而原生 DSH 尚未提供此功能。dsh-doubao-voice 插件解决了这个问题。它接入火山引擎流式大模型语音识别(豆包 Seed ASR),通过浏览器采集麦克风音频,经宿主 WebSocket 中继至豆包服务,最终将识别文本流式回填到输入框。
核心功能¶
- 接入豆包 Seed ASR:使用火山引擎流式大模型语音识别服务。
- 交互入口:在输入框左侧提供麦克风按钮,支持全局快捷键(默认
Alt+V)唤起。 - 状态指示:提供四态指示,包括“正在准备中”(转圈)、“正在听写”(音量动态条)、“收尾中”(转圈)。
- 真流式处理:音频格式为 16kHz/16bit/单声道 PCM,按 200ms 分块上传,识别文本边说边上屏。
- 编辑与回滚:识别结果不自动发送,支持在输入框内编辑确认。中途取消录音会自动回滚,支持中途修正原位替换,多停顿长录音不堆叠(LCP 合并算法)。
- 配置管理:在设置页管理凭据、热词(逗号/分号分隔)、语言(BCP-47,如
zh-CN)、快捷键及最长录音时长(默认 300s)。 - 输出与兜底:输出方式跟随光标(默认)或输入框;若写入失败,自动兜底复制到剪贴板并提示。
- 本地存储:凭据存储在
~/.dsh/dsh-doubao-voice.json,ACL 收紧到当前用户,仅本机可读。
安装与启用¶
在终端中执行以下命令安装插件:
dsh plugin --profile web add dsh-doubao-voice
安装完成后,重启 dsh web 进程并刷新浏览器页面即可启用。
配置方式¶
安装后需要在设置页或通过环境变量配置火山引擎凭据。
方法一:设置页¶
进入 DSH 设置页,找到“语音输入(豆包)”配置项:
- App ID / Access Token:从火山引擎控制台获取。
- Resource ID:默认值为 volc.seedasr.sauc.duration。
- 热词:输入逗号或分号分隔的词汇,最多 100 个。
- 语言:设置识别语言,如 zh-CN、en-US、ja-JP 等。
方法二:环境变量¶
环境变量优先级高于文件配置。在 PowerShell 中设置如下:
$env:ARK_APP_ID="你的AppID"
$env:ARK_ACCESS_TOKEN="你的Token"
$env:ARK_RESOURCE_ID="volc.seedasr.sauc.duration"
$env:ARK_LANGUAGE="zh-CN"
$env:ARK_HOTWORDS="芯片,Buck电路"
技术实现¶
该插件依赖 ws(WebSocket)库。协议层实现基于 Proma 桌面端 doubao-asr-service.ts 的调研复刻,包含二进制帧协议、参数解析逻辑及确定性测试。
架构流程¶
浏览器 (lib/client.js) 宿主 (lib/index.js) 火山引擎
麦克风 → 16kHz PCM ──WS 二进制──► registerUpgrade 中继 ──sauc 协议──► 豆包流式 ASR
▲ ◄── transcript 流 ──JSON──◄ DoubaoAsrClient ◄────────────┘
流式回填输入框(基线 + 累计文本,幂等写入)
测试¶
项目包含针对合并算法和写入保险的测试脚本:
node test/merge-test.mjs
node test/writer-guard-test.mjs
node test/relay-test.mjs
适用场景与注意事项¶
- 适用场景:需要流式语音转文本能力的 DSH WebUI 用户,适合长文本录入或实时对话场景。
- 权限与安全:插件以当前
dsh进程权限运行。安装前建议检查源码与许可证。 - 免责声明:此为社区项目,非 DeepSeek 或火山引擎官方出品。使用火山引擎服务需遵守其服务条款,Access Token 请妥善保管。该插件收录于 awesome-dsh-plugin 目录,不构成安全背书。
总结¶
dsh-doubao-voice 为 DeepSeek Harness 提供了完整的流式语音识别解决方案,从采集、传输到回填均有明确的实现。通过简单的安装和配置,开发者可以在 DSH 环境中直接使用豆包 Seed ASR 的能力。