前言¶
在 DeepSeek Harness(DSH)里跑对话时,助手回答往往是边生成边出现在页面上。眼睛盯着屏幕能跟上节奏,但窗口被最小化、被别的程序挡住,或切到别的标签页时,你只能靠偶尔切回来确认是否还在输出——没有一种「还在说」的听觉反馈。
浏览器里流式文本只是 DOM 在变长,本身不会发声。若用普通定时器排音效,页面一进后台,动画帧和细粒度定时器会被压慢甚至停掉,音效也会跟着消失。下面介绍的 dsh-typewriter-blip(目录名 nsswkj/dsh-typewriter-blip,维护者 nsswkj)针对的就是:在模型回答流式输出时逐字播放短促音效,且窗口在后台时仍尽量照常发声;音色可换,也可自行合成或载入音频样本。
这是什么¶
说话音效 / Speech Blip 是 DSH 社区插件,分类为模型推理。它挂在 Harness 对话界面输入框上方,观察助手回答区域的文字增量,用 Web Audio 为每个新字符(可配置跳过空格)排程短音;不对用户消息、工具调用和思考过程(reasoning)发声。设置保存在浏览器 localStorage(键 dsh:typewriter-blip:v1),改完即生效。
DSH 生态强调「一切皆插件」;插件目录站 skillhub.cn 与 DeepSeek / 幻方无官方从属关系,安装前宜自行查看源码与许可证(本插件为 MIT)。
核心功能¶
发声范围与节奏¶
- 只对回答发声:默认开启;要求 DOM 上
data-chat-flow-kind为assistant-step,且data-chat-group-part不是reasoning。 - 进入对话 / 历史整段挂载不响:首次看到的容器只建基线;宿主复用行元素且内容变短或不再以旧文本开头时,重新建基线、不补播。
- 说完即停:最后一个字之后超过「说完即停」窗口(默认 140 ms)无新字符,则裁掉已排程但未播完的部分;队列不会整段丢弃,前台最多保留约 6 个字、不到三分之一秒的待播,后台保留约最后 0.3 秒(
PLAYOUT_MS)。 - 最小间隔:控制两个音之间的最小毫秒数(默认约 45 ms),流式 chunk 很快时用来限制密度;队列过长会丢最旧项,避免声音落后文本一两秒。
后台仍要听得见¶
页面不可见时,浏览器常停止 requestAnimationFrame 并把定时器压到约一秒一次。插件用双时钟:可见时以动画帧为主;超过约 400 ms 无帧时,由 250 ms 定时器接管排程。音频在 Web Audio 时钟上排程,已排上的音不受页面可见性影响。隐藏页面时会提高缓冲 lead(后台约 1.25 秒),字符批次到达也会直接 tick,避免只靠被压慢的定时器才发现新字。
音色与听感¶
| 预设 | 说明 |
|---|---|
| 柔和 | 三角波,默认 |
| 打字机 | 锯齿波 + 高通噪声瞬态 |
| 自定义 | 合成(方波/三角/锯齿/正弦 + 基频 + 音长 + 亮度)或本地 audio/* 文件(可调播放速度,每字最多约 0.6 秒) |
另有音高 / 音量(±12 半音、0–100%)、随机音高与随机音量(逐字 jitter;自定义音频文件通过播放速率近似音高变化)、跳过空格、试听与恢复默认等面板项。按钮文案为 ♪ 说话音效,面板开在按钮上方(靠顶时可能翻到下方),动画在 prefers-reduced-motion 下关闭。
安装与启用¶
适用 desktop profile。任选其一:
插件市场(dshmarket) 搜索 说话音效,点击安装。
npm 包:
dsh plugin --profile desktop add dsh-typewriter-blip
GitHub 仓库(与 npm 包内容一致):
dsh plugin --profile desktop add github:nsswkj/dsh-typewriter-blip
装完后刷新一次 Harness 页面即可,无需重启 DSH 进程。
插件以当前 DSH 进程的权限在页面内运行;安装前请阅读 仓库源码 与 LICENSE,确认可接受后再装。
典型用法¶
- 按上一节安装并刷新页面。
- 在输入框上方找到 ♪ 说话音效 按钮,点开面板。
- 打开 启用 总开关;按需选 音色 或 自定义音色,调 最小间隔、说完即停、只对回答发声 等。
- 发起对话,等助手流式输出;可用 试听 连播几个字确认当前设置(试听期间按钮会锁定至播完)。
需要恢复出厂参数时,点面板里的 恢复默认。
适用场景与注意¶
适合:长时间挂着 Harness 等模型输出、希望用短音感知「还在打字」的开发者;需要窗口在后台也能听到进度提示时(仍依赖浏览器与系统的音频策略,极端节流下行为以实际为准)。
注意:
- 仅 desktop profile;Web 客户端插件形态以
package.json中dsh.client.platform: web为准。 - 不对 reasoning、用户消息和 UI 块(代码块、按钮等)发声,避免和「助手正文」混淆。
- 自定义音频与随机音高通过
playbackRate实现,调高时单字会变短。 - 社区目录页星标等统计会变动;以安装时页面与仓库 README 为准。
结尾¶
dsh-typewriter-blip 把流式回答映射成可配置的逐字短音,并针对后台节流做了排程补偿,适合给 DSH 对话加一层不依赖盯屏的听觉反馈。进一步了解与 issue: