dsh-progress-nudge:连续工具轮次后的过程汇报提醒

前言

在 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 给出的验证清单包括:

  1. 插件管理页出现「进度提醒 / Progress Nudge」及图标;
  2. 设置页六个字段可保存并提示「已保存」;
  3. 连续 10 轮(默认阈值)沉默后第 11 次请求前出现注入;
  4. 文字回复后清零;repeat: false 时同段沉默不二次提醒;
  5. 启用 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。

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

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

小夜