dsh-realtime-voice:全双工语音 Agent 插件

前言

DeepSeek Harness 生态强调“一切皆插件”。在为产品集成语音 Agent 时,开发者通常需要处理复杂的协议适配(如 OpenAI 的 WebRTC 或豆包的 WebSocket)、浏览器音频生命周期管理以及会话中断逻辑。dsh-realtime-voice 旨在提供一套与底层提供商解耦的通用方案,让开发者只需关注 Agent 对话本身,而不必深入底层实现细节。

是什么

这是一个为 DeepSeek Harness 提供的、与提供商无关的全双工语音代理插件。它由 AlexKaiqi 维护,采用 MIT 许可证。该插件将浏览器音频连接到 OpenAI Realtime(通过 WebRTC)或豆包 Duplex(通过 WebSocket),同时保持凭证和提供商协议在 DSH Host 边界之后。

核心功能

该插件提供了以下核心能力:

  1. 全双工实时语音对话
  2. OpenAI Realtime (WebRTC) 适配器
  3. 豆包 Duplex (WebSocket) 适配器
  4. 与提供商无关的抽象层
  5. 可打断的对话
  6. 浏览器音频管理
  7. 动作执行循环

安装与启用

使用前需确保环境满足以下依赖:

  • 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 两种主流协议,适合需要在产品中快速集成语音能力的开发者。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜