在使用 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。