@rhythmjnh

Context Guardian

智能上下文保护插件:主动管理 tool result 大小、监控 context window 压力、自动触发压缩

当前版本
v5.1.1
code-plugin社区source-linked

Context Guardian 🛡️

智能上下文保护插件。自动管理 tool result 大小、监控 context window 压力、在溢出前主动保护。

功能(v5)

  • 🛡️ Context 压力监控 — 实时估算完整上下文的 token 用量(系统提示 + 对话历史 + tool call 结果),到达阈值自动触发压缩
  • ✂️ 实时微压缩(Micro-compact) — 根据上下文压力级别自动调整:
    • low(低压) — 不压缩,保留完整 tool result
    • warn(警戒) — 超过 microCompactMaxChars × 2.5 时截断
    • critical(临界) — 超过 microCompactMaxChars 时截断 保留头部 + 尾部关键信息,截断处插入明确提示
  • ✂️ Exec 输出自动限流 — 对大输出命令自动追加 | head -200,避免意外撑爆上下文
  • 📊 大结果告警 — 超过 maxToolResultChars 的 tool result 会在日志中告警

安装

# 从 ClawHub 安装
openclaw plugins install clawhub:openclaw-context-guardian

配置

openclaw.jsonplugins.entries.context-guardian.config 中设置:

{
  "plugins": {
    "entries": {
      "context-guardian": {
        "enabled": true,
        "config": {
          "maxToolResultChars": 8000,
          "compactionThreshold": 0.45,
          "warnThreshold": 0.40,
          "effectiveContextWindow": 0,
          "baseOverheadTokens": 15000,
          "perTurnOverheadTokens": 1200,
          "autoLimitExecOutput": true,
          "execMaxLines": 200,
          "microCompactEnabled": true,
          "microCompactMaxChars": 10000,
          "microCompactPreserveHeadRatio": 0.4,
          "microCompactPreserveTailRatio": 0.2,
          "microCompactPreserveEditTools": true,
          "debug": false
        }
      }
    }
  }
}

配置项说明

v5 基础配置

参数类型默认值说明
maxToolResultCharsnumber8000单个 tool result 最大字符数,超过则告警
compactionThresholdnumber0.45预估 tokens 达到 effectiveContextWindow 的此比例时触发 /compact
warnThresholdnumber0.40预估 tokens 达到此比例时进入 warn 压力级别
effectiveContextWindownumber0实际上下文窗口。0 表示从运行时 contextTokens 自动读取
baseOverheadTokensnumber15000系统提示 + 工具 schema 等的预估 token 开销
perTurnOverheadTokensnumber1200每轮对话的预估 token 开销
autoLimitExecOutputbooleantrue是否自动限制 exec 输出行数
execMaxLinesnumber200exec 命令最大输出行数
compactionCooldownMsnumber60000两次自动压缩之间的最短间隔(毫秒)
debugbooleanfalse调试日志

v5 微压缩配置

参数类型默认值说明
microCompactEnabledbooleantrue是否启用实时微压缩
microCompactMaxCharsnumber10000critical 压力下的微压缩字符阈值;warn 下为此值 × 2.5
microCompactPreserveHeadRationumber0.4微压缩时保留开头内容的比例 (0-1)
microCompactPreserveTailRationumber0.2微压缩时保留尾部内容的比例 (0-1)
microCompactPreserveEditToolsbooleantrue是否保留 edit/write 等修改类工具的完整结果

典型场景

中转服务上下文较小

如果通过中转服务使用模型(如 baotaai),实际上下文可能只有 64K 而非配置的 1M:

{
  "config": {
    "effectiveContextWindow": 64000,
    "compactionThreshold": 0.35
  }
}

这样在本地预估约 22K tokens 时就会触发压缩,避免服务端溢出。

激进微压缩(大量查询场景)

如果经常执行 findls 等返回大量结果的查询:

{
  "config": {
    "microCompactMaxChars": 4000,
    "microCompactPreserveHeadRatio": 0.3,
    "microCompactPreserveTailRatio": 0.1
  }
}

工作原理

插件通过三个生命周期钩子工作:

  1. before_tool_call — 拦截 exec 命令,自动追加输出限制
  2. after_tool_call
    • 追踪每次 tool call 的结果大小和 token 开销
    • 实时微压缩:根据当前上下文压力级别决定是否压缩
      • low 压力:不压缩
      • warn 压力:超过 microCompactMaxChars × 2.5 时截断
      • critical 压力:超过 microCompactMaxChars 时截断
    • 按工具类型区分策略:查询类(exec/read/find 等)可压缩,修改类(edit/write)默认保留完整
    • 截断处自动插入「📝 [信息被截断...]」提示语
  3. before_prompt_build — 检查当前上下文压力,压力高时注入简化提示

Token 估算公式:baseOverhead + turnCount × perTurnOverhead + Σ(toolName + params + result tokens)

Changelog

v5 — 压力分档微压缩 + 默认值优化

  • 微压缩改按压力级别分档:
    • low 压力不压缩,保留完整结果
    • warn 压力阈值提升至 microCompactMaxChars × 2.5
    • critical 压力阈值保持 microCompactMaxChars
  • 截断处插入明确提示语(「📝 [信息被截断...]」)
  • 优化默认值:compactionThreshold 0.75→0.45,warnThreshold 0.45→0.40,microCompactMaxChars 6000→10000

v3 — Micro-compact

  • 新增实时微压缩:工具结果超过阈值自动截断,减少上下文膨胀
  • 按工具类型区分压缩策略(查询类可压缩,修改类保留完整)
  • 支持配置保留比例和阈值
  • 修复 6 个 bug(token 估算、内存泄漏、正则误伤等)

v2 — 初始发布

  • Context 压力监控与自动压缩提示
  • Exec 输出自动限流
  • 大结果告警

开发

cd context-guardian
npm install
npx tsc

License

MIT

源码与版本

源码仓库

RhythmJnh/openclaw-workspace-mac-mini

打开仓库

源码提交

bffdb2742d35b49d79d5057da4ae9c580e02cd9f

查看提交

安装命令

openclaw plugins install clawhub:openclaw-context-guardian

元数据

  • 包名: openclaw-context-guardian
  • 创建时间: 2026/05/11
  • 更新时间: 2026/05/29
  • 执行代码:
  • 源码标签: main

兼容性

  • 构建于 OpenClaw: 2026.5.7
  • 插件 API 范围: >=2026.3.24-beta.2
  • 标签: latest
  • 文件数: 6