前言¶
DeepSeek Harness 生态强调“一切皆插件”。在为产品集成语音 Agent 时,开发者通常需要处理复杂的协议适配(如 OpenAI 的 WebRTC 或豆包的 WebSocket)、浏览器音频生命周期管理以及会话中断逻辑。dsh-realtime-voice 旨在提供一套与底层提供商解耦的通用方案,让开发者只需关注 Agent 对话本身,而不必深入底层实现细节。
是什么¶
这是一个为 DeepSeek Harness 提供的、与提供商无关的全双工语音代理插件。它由 AlexKaiqi 维护,采用 MIT 许可证。该插件将浏览器音频连接到 OpenAI Realtime(通过 WebRTC)或豆包 Duplex(通过 WebSocket),同时保持凭证和提供商协议在 DSH Host 边界之后。
核心功能¶
该插件提供了以下核心能力:
- 全双工实时语音对话
- OpenAI Realtime (WebRTC) 适配器
- 豆包 Duplex (WebSocket) 适配器
- 与提供商无关的抽象层
- 可打断的对话
- 浏览器音频管理
- 动作执行循环
安装与启用¶
使用前需确保环境满足以下依赖:
- DeepSeek Harness 0.1.1-rc.2
dsh-multi-model-provider@^0.1.0-rc.11
执行以下命令将插件安装到 web 配置文件中:
dsh plugin --profile web add dsh-multi-model-provider dsh-realtime-voice
dsh plugin --profile web update dsh-multi-model-provider dsh-realtime-voice
典型用法¶
安装完成后,插件会在 DSH Host 中注册服务,供客户端调用。客户端通过 voiceAgent 服务启动与 Agent 的全双工对话,并订阅事件流。
const service = ctx.get('voiceAgent');
const conversation = await service.startConversation({
routeId: 'openai/gpt-realtime',
profileId: 'my-profile',
context: 'provider-neutral context',
ownerId: 'my-product:active',
});
const dispose = conversation.subscribe(event => {
// 监听连接、活动、转录、动作、中断、错误或结束事件
});
适用场景与注意¶
- 适用场景:需要通过语音与 Agent 进行实时交互的产品,特别是希望屏蔽底层协议差异(如 WebRTC 与 WebSocket)的场景。
- 权限与依赖:插件以当前 DSH 进程的权限运行,安装前应检查源码与许可证。
- 同源要求:必须使用浏览器同源 Origin/Host,
Sec-Fetch-Site必须为same-origin。 - 职责划分:产品拥有 Agent 身份、上下文和历史记录;插件仅拥有实时语音会话(同时收听与说话)、中断逻辑以及与提供商的适配层。
总结¶
dsh-realtime-voice 通过统一的 API 封装了底层差异,简化了全双工语音对话的开发流程,支持 OpenAI Realtime 与豆包 Duplex 两种主流协议,适合需要在产品中快速集成语音能力的开发者。