前言¶
在 DeepSeek Harness(dsh)里跑智能体时,界面上的反馈往往来自助手消息里的文字。若模型在 reasoningEffort: max 等配置下长时间处于「思考 → 调工具 → 再思考 → 再调工具」的循环,用户可能只看到一串工具卡片,难以判断任务是在推进、卡住还是方向跑偏。手动打断或改 prompt 可以缓解,但缺少一种在 Harness 侧、按会话自动触发的轻量机制。
下面介绍社区插件 dsh-progress-nudge(维护者 buaaflyaway,分类:工作流):它统计连续「只有工具调用、没有面向用户的助手文本」的轮数,在达到阈值后于下一次模型请求之前注入一条简短提醒,要求模型先汇报进展再继续执行;一旦模型输出可见文字,计数立即归零。插件还提供 设置 → 过程汇报 页面,用于调整阈值、文案、语言以及智能体团队下的提醒范围。
这是什么¶
dsh-progress-nudge 是一个 DeepSeek Harness 插件(npm 包名 dsh-progress-nudge,当前版本 0.2.1,MIT 许可证)。它面向上述「对用户沉默的长工具循环」场景,不修改工具调用、不阻断 step,最坏情况只是在对话流里多一条可回放的注入消息(渲染为 progress-nudge 来源的用户侧事件)。
插件在 npm 发布,源码与说明见 GitHub 仓库;社区目录页:skillhub.cn 插件页。社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,安装前建议自行查看源码与许可证。
运行环境要求(来自 package.json):Node ≥ 20,dsh ≥ 0.2.0-rc.2 且 < 0.3.0-0。
核心功能¶
会话内计数与「沉默」判定¶
插件为每个存活的 Agent 会话在内存中维护 streak(连续沉默轮数)和 remindedAt(上次提醒时的 streak),不落盘;计数从已提交的会话日志推导,不轮询 agent/status。
每完成一条 assistant/message 时:
- 若
content含非空白 text 块 → 用户能看到文字 →streak清零; - 若只有 tool-call(可带 reasoning)→
streak += 1; - reasoning 块被故意忽略,不计为「已汇报」,否则难以触发提醒;
interrupted: true的助手消息不计一轮;- 默认
includeSubagents: false时,session.header.origin === 'subagent'的子代理会话不计数。
阈值注入(agent/pre-step)¶
当 streak 达到 threshold(默认 10)时,插件在 agent/pre-step 瀑布中先 await next() 保留其它决策,若决策为 enter 且 streak 到期,则在 decision.messages 前置一条 source.kind = "progress-nudge" 的用户消息;内核将其写入会话日志并进入紧接着的那次模型请求。README 强调:不要在 session/event 里同步调用 agent.inject(),否则会触发会话追加重入错误,插件表面 active 却零注入。
重复节奏:默认 repeat: true 时,再积累满一个 threshold 才第二次提醒(10 → 20 → 30 …);repeat: false 则每段沉默只提醒一次。新用户回合 turn/start 会重置计数;session/disposed 时清理内存状态。
子代理与智能体团队¶
- 子代理:默认不提醒(
includeSubagents: false),避免子会话消耗面向用户的汇报 token。 - Agent Teams:用
ctx.agentTeams.tryMembership(agent)区分 Lead 与 teammate;teamScope为lead(默认)时只提醒 Lead 与独立智能体,all时团队成员也会收到提醒。未启用团队时teamScope无效果。
设置页与配置¶
路径:设置 → 过程汇报(英文 Progress nudge / 繁體 過程回報)。字段与默认值:
| 配置键 | 类型 | 默认值 | 说明 |
|---|---|---|---|
threshold |
整数 ≥ 1 | 10 |
连续沉默多少轮后提醒 |
text |
字符串 | 空 | 自定义文案,{n} 为当前 streak;空则用所选语言内置文案 |
language |
en / zh-CN / zh-TW |
zh-CN |
内置提醒与设置页文案 |
repeat |
布尔 | true |
是否按阈值间隔重复提醒 |
includeSubagents |
布尔 | false |
是否提醒 subagent 会话 |
teamScope |
lead / all |
lead |
智能体团队提醒范围 |
保存通过 Host 的 remote.settings.update 写入 profile 的 cordis.patch.yml 覆盖行并热重载,带 revision 冲突检测。也可直接在 profile 中写顶层覆盖,例如:
- id: progress-nudge
name: dsh-progress-nudge
config:
threshold: 10
repeat: true
includeSubagents: false
teamScope: lead
language: zh-CN
简体内置提醒大意(完整三语文案见仓库 index.js 的 DEFAULT_TEXTS):
【进度提醒 · 来自 Harness 的自动提醒,不是用户的新指令】
你已连续 {n} 轮只发起工具调用、没有向用户输出任何文字……
请先用一两句话简短汇报:① 已经完成了什么;② 当前结果或关键发现;③ 下一步准备做什么。
汇报之后再继续调用工具执行任务。
安装与启用¶
任选其一(命令来自 README):
npm 源安装(推荐):在插件管理器安装框填写 dsh-progress-nudge,或:
dsh plugin --profile <profile> add dsh-progress-nudge
本地目录安装(Windows 跨盘时注意用 file: 前缀复制进 profile):
dsh plugin --profile <profile> add file:<本目录绝对路径>
新增 bundle 通常 HMR 生效;若无新插件行或设置页,重启 dsh 后再看。
卸载:插件管理器移除,或:
dsh plugin remove dsh-progress-nudge
典型用法与验证¶
日常用法是安装并启用插件后,在 设置 → 过程汇报 按需调低 threshold(开发自测 README 曾用阈值 3)或改语言/文案,然后让某会话连续多轮只调工具、不输出助手 text。达到阈值后,下一次模型请求前对话中应出现 progress-nudge 注入行;模型回复含 text 的后 streak 清零。
README 给出的验证清单包括:
- 插件管理页出现「进度提醒 / Progress Nudge」及图标;
- 设置页六个字段可保存并提示「已保存」;
- 连续 10 轮(默认阈值)沉默后第 11 次请求前出现注入;
- 文字回复后清零;
repeat: false时同段沉默不二次提醒; - 启用 Agent Teams 时按
teamScope区分 Lead 与成员。
README 记录过在 dsh 0.2.1-rc.5、插件 v0.1.1、阈值 3 下的实测:注入出现在连续 3 轮无文本之后,且紧跟着带 text 的助手消息。v0.2.0 起默认阈值为 10,并新增设置页与团队范围。
适用场景与注意¶
适合:使用 DeepSeek V4.1 Flash 等模型、易出现长工具链且界面缺少文字进展的场景;启用 Agent Teams 时希望只打扰用户正在看的 Lead 会话(默认 teamScope: lead)。
边界(README 已知限制):
- 计数不持久化,进程重启从 0 计,不影响日志为唯一事实来源的正确性;
- 会话压缩等替换表面时不回放重算;
- 其它插件在
agent/pre-step返回reject时,本插件不追加提醒; - 设置页依赖浏览器端 warm 服务;Host 未挂载 settings 时页面不可用。
安全与权限:插件以当前 dsh 进程权限运行,仅观察会话事件并在 step 边界注入提醒消息。安装前应阅读 源码 与 MIT 许可证,确认符合你的环境策略。
结尾¶
dsh-progress-nudge 用最小的 Harness 扩展点(agent/pre-step + 设置命名空间)解决「工具循环对用户不可见」这一工作流痛点:可配置、可回放、不硬断执行。需要细节与设计取舍表时可直接阅读仓库 README。