前言¶
DeepSeek Harness (DSH) 提供了插件化扩展能力。在 Web 端开发时,如果希望为对话界面增加语音交互功能,通常需要编写后端服务或引入外部语音 SDK。该插件通过浏览器原生的 Web Speech API,实现了纯客户端的语音识别与朗读(TTS)功能,无需服务端支持,也不需要配置 API Key。
插件定位¶
- 名称:
lak321/dsh-voice-chat - 一句话描述:DeepSeek Harness 语音对话插件,支持语音输入与自动/手动朗读回复。
- 维护者:lak321
- 类别:客户端
- 许可证:MIT
核心功能¶
- 语音输入:利用 Web Speech API 进行语音识别,支持普通话、粤语、台湾国语、英语。识别结果实时显示在输入框中,支持编辑后发送。
- 朗读回复:集成浏览器 TTS 引擎,支持对 AI 回复进行朗读。提供自动朗读功能(默认开启),通过消息序号判断新旧消息,避免历史消息重复朗读。
- 语音设置:支持选择人声、调节语速(0.5~2.0)与语调(0~2.0)。
- 文本清理:自动剥离 Markdown 标记(如粗体、斜体、代码块、标题等),防止 TTS 朗读出“星号星号”等噪音。
- 数据持久化:所有设置通过 localStorage 保存,刷新页面后保留。
- 架构特点:纯客户端插件,无服务端依赖,无 API Key 需求。
安装与启用¶
该插件仅兼容 DSH Profile: web。
使用官方命令安装(git 源,产物已入库,无需构建):
dsh plugin --profile web add "github:lak321/dsh-voice-chat#<commit>&path:/"
安装完成后需要重启 DSH 进程(例如运行 npx -y @deepseek-ai/dsh web)。
注意:旧的手动复制 client/ 目录并注入 cordis.patch.yml 的方式已废弃。
典型用法¶
- 语音输入:点击输入框旁的按钮说话,识别后的文字会自动填入输入框,可编辑后直接发送。
- 朗读回复:每条 AI 回复旁会出现朗读按钮,点击即可朗读该条消息。系统默认开启自动朗读,新回复生成时会自动朗读。
- 设置调整:在设置面板中,可以关闭自动朗读,选择人声,或调整语速和语调。
开发与注意事项¶
- React Hook 规范:如果涉及 React 开发,
props.useSession必须在组件函数体顶层调用,不能在onClick等事件处理函数中调用,否则会报错。 - 导出要求:Client 插件必须导出
exports.inject才能使用ctx.slots。 - 运行机制:插件通过
ctx.slots.inject注册 slot 到conversation.input.left和conversation.chat.assistant-actions,通过SpeechRecognition和speechSynthesis实现核心逻辑。
结语¶
该插件为 DSH Web 界面提供了轻量级的语音交互能力,适合需要在浏览器端直接使用语音功能的场景。