跳转至

策略性压缩技能

不依赖随意的自动压缩,而是在工作流的策略性节点建议手动执行 /compact。

激活时机

  • 当运行接近上下文限制的长会话时(200K+ Token)
  • 当执行多阶段任务时(调查 -> 计划 -> 实现 -> 测试)
  • 当在同一会话内切换无关任务时
  • 当完成主要里程碑并开始新任务时
  • 当响应变慢或一致性下降时(上下文压力)

为什么需要策略性压缩

自动压缩会在任意点执行: - 经常在任务中途执行,导致丢失重要上下文 - 无法识别逻辑任务边界 - 可能中断复杂的多阶段任务

在逻辑边界处进行策略性压缩: - 探索后、执行前 -- 压缩调查上下文,保留实现计划 - 里程碑完成后 -- 为下一阶段提供全新起点 - 主要上下文切换前 -- 在开始其他任务前清理探索上下文

工作方式

suggest-compact.js 脚本在 PreToolUse(Edit/Write)中执行,并执行以下操作:

  1. 工具调用跟踪 -- 统计会话内的工具调用次数
  2. 阈值检测 -- 在可配置阈值处提出建议(默认:50 次)
  3. 周期性提醒 -- 超过阈值后每 25 次提醒一次

Hook 设置

如果以插件安装:无需额外设置。插件的 hooks/hooks.json 已注册 suggest-compact.js(Hook ID pre:edit-write:suggest-compact,在 standard 和 strict Hook 配置中启用)。请勿将下方代码块复制到 ~/.claude/settings.json —— 插件安装不包含 ~/.claude/scripts/,重复插件 Hook 会导致双重执行(${CLAUDE_PLUGIN_ROOT} 不会在用户 settings.json 中解析)。

如果手动安装(./install.sh),添加到 ~/.claude/settings.json:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit",
        "hooks": [{ "type": "command", "command": "node ~/.claude/scripts/hooks/suggest-compact.js" }]
      },
      {
        "matcher": "Write",
        "hooks": [{ "type": "command", "command": "node ~/.claude/scripts/hooks/suggest-compact.js" }]
      }
    ]
  }
}

配置

环境变量: - COMPACT_THRESHOLD -- 首次建议前的工具调用次数(默认:50)

压缩决策指南

使用下表决定压缩时机:

阶段转换 压缩? 原因
调查 -> 计划 是 调查上下文体积大,计划是提炼后的结果
计划 -> 实现 是 计划已存在于 TodoWrite 或文件中,可为代码保留上下文
实现 -> 测试 视情况而定 如果测试引用最近代码则保留;切换焦点时压缩
调试 -> 下一个功能 是 调试跟踪会污染无关任务的上下文
实现中途 否 丢失变量名、文件路径、部分状态的成本很高
失败尝试后 是 在尝试新方法前清理死胡同推理

压缩中保留的内容

了解哪些内容会保留,就能更有信心地执行压缩:

保留 丢失
CLAUDE.md 指令 中间推理和分析
TodoWrite 任务列表 之前读取的文件内容
记忆文件(~/.claude/memory/) 多阶段对话上下文
Git 状态(提交、分支) 工具调用记录和次数
磁盘上的文件 口头提及的细微用户偏好

最佳实践

  1. 计划后压缩 -- 当 TodoWrite 中的计划确定后,为重新开始而压缩
  2. 调试后压缩 -- 在继续前清理错误解决上下文
  3. 实现中途不要压缩 -- 保留相关变更的上下文
  4. 阅读建议 -- Hook 告知何时,是否执行由你决定
  5. 压缩前记录 -- 在压缩前将重要上下文保存到文件或记忆中
  6. 配合摘要使用 /compact -- 添加自定义消息:/compact Focus on implementing auth middleware next
  • The Longform Guide -- Token 优化部分
  • 记忆持久性 Hook -- 用于在压缩中保留状态
  • continuous-learning 技能 -- 在会话结束前提取模式

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC