在使用 DeepSeek Harness (DSH) Web UI 進行智能體開發時,流式輸出的內容(尤其是工具調用 Tool Calls)往往難以被屏幕閱讀器捕捉,用戶容易錯過工具開始執行的時刻。該插件通過 aria-live 區域,確保這些內容能被即時讀出。
核心功能¶
該插件是一個客戶端插件,用於在 Web 平臺上監聽對話變化並通過 aria-live 區域朗讀。
主要行爲包括:
- 工具調用宣佈:工具調用在文本短暫穩定後(約 400ms 去抖動)立即宣佈,而不是等到執行完畢。這能讓用戶看到工具開始執行的時刻。
- 助手消息宣佈:只有當助手消息的文本完全穩定後,纔會在 aria-live 區域宣佈其完整內容,流式傳輸中的片段不會觸發朗讀。
- 排除內部推理:插件會移除內部推理塊(Think block),確保只有可見的答案文本被讀出。
- 去重機制:通過
data-chat-anchor-key屬性進行去重,防止重複渲染觸發重複朗讀。 - 狀態檢測:利用 DSH 的
data-streaming屬性檢測流式傳輸狀態,僅在屬性移除(即傳輸完成)時觸發朗讀。
安裝與啓用¶
安裝此插件需要手動配置文件依賴和 bundle。
- 將倉庫克隆到插件目錄(例如
/opt/dsh/plugins/dsh-a11y-announcer/)。 - 在
/opt/dsh/package.json中添加此插件爲文件依賴。 - 在
/mnt/ssd/dsh/profiles/web/package.json中添加此插件爲文件依賴。 - 在
/mnt/ssd/dsh/profiles/web/package.json的dsh.profile.bundles中添加此插件作爲 bundle。
修改 lib/client.js 源碼後,需要重啓 dsh web 服務即可生效,無需重新構建 bundle。
典型用法¶
在開啓 Web UI 後,配合 NVDA、JAWS 或 VoiceOver 使用:
- 當工具調用出現時,屏幕閱讀器會自動朗讀工具名稱和內容。
- 當助手回答完成時,屏幕閱讀器會朗讀最終的完整文本。
- 內部推理過程不會被打斷朗讀。
適用場景與注意¶
- 適用場景:需要使用 DSH Web UI 進行開發的視障用戶,或需要明確感知工具調用發生的場景。
- 注意:
- 插件不會移動用戶的鼠標焦點,僅通過無障礙區域朗讀。
- 加載舊會話時,已存在的節點不會重新觸發朗讀(無重放機制)。
- 該插件基於 Web 平臺,使用 MutationObserver 監聽
[data-slot="conversation.session"]容器。
總結¶
該插件通過 aria-live 技術解決了 DSH Web UI 在流式輸出場景下的無障礙問題。它專注於工具調用的實時反饋和最終答案的穩定朗讀,幫助屏幕閱讀器用戶更順暢地使用 DeepSeek Harness。