实现可调节压缩级别 实现可调节压缩级别 | Zhiwei Li

实现可调节压缩级别 | AI生成和翻译

Home 2026.05

现在我已经掌握了全局。以下是代码告诉我们的信息:

当前 /compress 行为:

  1. 已支持焦点主题:/compress database schema 会引导摘要生成器保留与该主题相关的信息,同时对其他内容进行更激进的压缩。

  2. 两次运行 /compress 确实有效,但适用于迭代更新,而非更激进的压缩:
    • 第一次:将中间轮次压缩成摘要
    • 第二次:在开头找到之前的摘要,然后对第一次压缩后累积的新中间内容进行摘要
    • 如果在两次压缩之间没有新增消息,第二次很可能是空操作(已被压缩)
  3. 代码明确警告重复压缩的风险(第 447-450 行):

    if _cc >= 2:
        agent._vprint(
            f"{agent.log_prefix}⚠️ 会话已压缩 {_cc} 次——"
            f"准确性可能下降。建议使用 /new 重新开始。",
        )
    
  4. 压缩激进程度由以下参数控制(config.yaml):

    compression:
      threshold: 0.50      # 何时自动压缩(上下文达到 50%)
      target_ratio: 0.20   # 需保留的最近尾部内容占阈值的比例
      protect_last_n: 20   # 保留未压缩的最新消息数量下限
      protect_first_n: 3   # 始终保留的非系统头部消息数量
    

那么高/中/低级别会有什么效果?

  • 低(当前默认值):温和压缩,保留阈值的 20% 作为尾部,保护最近 20 条消息
  • 中:降低 target_ratio(例如 0.15),减少保护的尾部消息数量(例如 15 条)
  • 高:非常低的 target_ratio(例如 0.10),最小的尾部保护(例如 10 条消息),减少保护的头部消息数量(例如 1 条)

运行两次 /compress 与高/中/低级别的对比:

运行两次 /compress 并不等同于“高”级别压缩。第二次只是用新内容更新摘要——不会进一步压缩已有摘要。

如果您希望单次压缩更激进,则需要高/中/低级别参数。/compress <focus> 功能已提供对非焦点内容更激进压缩的能力,但它是话题特定的,而非通用激进程度。

建议:

添加 /compress high 或 /compress low 将会非常实用。实现方式很直接——只需在单次压缩调用中临时覆盖压缩器的 target_ratio、protect_last_n 和 protect_first_n 参数即可。

需要我实现这个功能吗?