dsh-a11y-announcer:DeepSeek Harness 无障碍插件

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

  1. 将仓库克隆到插件目录(例如 /opt/dsh/plugins/dsh-a11y-announcer/)。
  2. 在 /opt/dsh/package.json 中添加此插件为文件依赖。
  3. 在 /mnt/ssd/dsh/profiles/web/package.json 中添加此插件为文件依赖。
  4. 在 /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。

GitHub 仓库
插件目录

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

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

小夜