前言¶
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 兩種主流協議,適合需要在產品中快速集成語音能力的開發者。