前言¶
在 DeepSeek Harness (DSH) 的開發中,爲智能體添加語音交互能力通常需要自行處理 TTS/ASR 引擎的對接以及瀏覽器端的錄音/播放 UI。dsh-voice 插件專爲面試 preset 場景設計,提供了回合制語音通道。它通過抽象 Agent 工具屏蔽底層引擎細節,讓面試流程在語音層面形成閉環。
插件定位¶
dsh-voice 是一個回合制語音通道插件,支持 TTS/ASR 引擎抽象。它爲面試場景提供語音交互能力,所有者維護,許可證爲 MIT。
核心功能¶
插件通過三個 Agent 工具提供語音能力,瀏覽器端自動配合錄音與播放:
voice_speak:Agent 輸出語音,瀏覽器自動播放。voice_listen:人聲輸入錄音,自動轉寫回傳給 Agent。voice_status:引擎健康檢查,檢查 TTS/ASR 可用性、隊列及錄音狀態。
引擎抽象¶
插件支持 TTS 與 ASR 各自獨立選擇引擎,auto 模式按 qwen → mimo → local 順序探測可用者。
- qwen:使用 DashScope 原生接口,依賴環境變量
DASHSCOPE_API_KEY。 - mimo:使用 MiMo-V2.5 接口,依賴環境變量
MIMO_API_KEY,支持配置 baseUrl。 - local:支持 sherpa-onnx、whisper.cpp、piper 等本地二進制與模型。
本地 ASR(sherpa-onnx)已驗證閉環,支持從 macOS say 合成中文並轉寫。音頻默認落盤至 ~/.dsh/voice。
安裝與配置¶
在對應的 profile 下執行安裝命令:
dsh plugin --profile web add @harness-flow/dsh-voice
安裝後重啓 profile 生效。插件行的默認配置是中性值,需要在 profile 的 cordis.patch.yml 中按行 id dsh-voice 覆蓋。
示例配置如下:
- id: dsh-voice
config:
asr:
engine: auto
language: zh
tts:
engine: auto
voice: Cherry
audioDir: ~/.dsh/voice
listenTimeoutSec: 120
- 雲引擎密鑰僅通過環境變量讀取,配置中只寫變量名。
- 本地引擎(如 sherpa-onnx)需要 profile 安裝
sherpa-onnx-node並配置模型目錄。 - 本地 MiMo 網關可通過配置
baseUrl指向本機地址複用同一實現。
面試官預設用法¶
插件負責語音鏈路(host 側服務 + 瀏覽器 UI),preset 只負責「面試官」這個角色與流程。
建議在 preset 中定義面試官 Persona,要求其一次只提一個問題,使用 voice_speak 朗讀後立即調用 voice_listen 等待作答。以下是一個示例配置片段:
- id: persona
name: '@deepseek-ai/dsh-persona'
config:
text: >-
你是一位專業的面試官,正在通過語音進行一場結構化面試。
一次只提一個問題:用 voice_speak 朗讀問題,隨後立刻調用 voice_listen
等待候選人作答;根據 transcript 追問或進入下一題。
流程:開場寒暄 → 自我介紹 → 技術/項目深挖 → 行爲面 →
候選人提問 → 結束語與後續安排。全程專業、中立、鼓勵,不做主觀臆斷;
面試結束後輸出評分表(各維度 1–5 分 + 一句話依據)與錄用建議。
版本說明與限制¶
當前版本爲 v0.1,存在以下設計取捨:
- 回合制優先:
voice_speak阻塞到合成完成,保證順序;全雙工打斷(barge-in)待後續版本。 - 單客戶端橋接:僅支持單客戶端橋接,內存中管理 listen 會話,頁面關閉後隊列自動丟棄。
- 無會話持久化:不持久化
voice/*會話事件,僅聊天記錄保留文本轉寫。 - 失敗局部化:引擎探測失敗隻影響該引擎;瀏覽器播放被攔截時等待用戶手勢重試。
總結¶
dsh-voice 解決了 DeepSeek Harness 中構建語音面試場景的引擎集成與交互邏輯問題。它提供了清晰的 Agent 工具接口與可配置的 TTS/ASR 引擎抽象,適合需要構建語音交互面試流程的開發者使用。