前言¶
在开发 DeepSeek Harness (DSH) 智能体时,工具调用失败后,智能体往往不会自动停止,而是继续重复相同的调用。现有的 repeat-tool-reminder 插件仅提供提醒,不会强制阻断。dsh-repeat-stop 旨在解决这一问题,它通过硬停止机制,在连续调用达到阈值后直接拒绝下一次调用。
是什么¶
dsh-repeat-stop 是一个 DeepSeek Harness 插件,属于 dsh-wsl-kit 生态系统的一部分。它对“连续相同的工具调用”进行检测。这里的“相同”定义为相同的工具名称加上相同的参数。当连续调用的次数超过配置阈值时,该插件会阻止下一次调用。
核心功能¶
- 硬停止机制:默认情况下,允许 6 次连续相同的调用,第 7 次调用将被直接拒绝。
- 状态重置:当参数、工具名称发生变化,或接收到真实的用户消息时,计数器会自动重置,避免误杀正常的轮换调用。
- 白名单/黑名单:支持通过
exclude列表排除特定工具名称(如job_output),也支持include列表指定仅追踪特定工具。
安装与启用¶
安装该插件需要使用官方的 DSH 插件管理命令。安装后必须重启 dsh web 服务才能生效。
dsh plugin --profile web add github:173787247/dsh-repeat-stop
安装完成后,在 Web UI 的 Trajectory 中,如果调用被该插件阻止,通常会显示 dsh-repeat-stop: blocked。
配置说明¶
插件通过 YAML 配置文件进行控制。默认配置如下:
- id: dsh-repeat-stop
name: dsh-repeat-stop
config:
enabled: true
threshold: 6
exclude:
- job_output
- job_list
- job_kill
| 配置项 | 默认值 | 说明 |
|---|---|---|
enabled |
true |
总开关,关闭后将不执行任何拦截 |
threshold |
6 |
允许连续调用的最大次数,整数 ≥ 2 |
exclude |
job_* |
不计入计数的工具名称列表 |
include |
[] |
如果设置,仅追踪列表中的工具名称(支持通配符) |
与 dsh-tool-budget 的区别¶
这两个插件在功能上互补,但侧重点不同:
| 插件名称 | 阻断对象 |
|---|---|
dsh-repeat-stop |
连续相同的工具调用(时间窗口短) |
dsh-tool-budget |
整个会话内的工具总调用次数(全局限制) |
注意事项¶
- 版本要求:该插件需要 DeepSeek Harness 版本 >= 0.1.2。
- 重启服务:安装或修改配置后,必须重启
dsh web进程才能加载新插件。 - 生态定位:该插件与
dsh-tool-budget配合使用效果最佳,前者防止死循环,后者控制总成本。
结语¶
dsh-repeat-stop 通过硬停止机制,有效防止智能体在工具调用失败时陷入无限循环。结合 dsh-tool-budget,可以构建更稳定的 DSH 智能体工作流。更多详情及源码可参考其 GitHub 仓库。