实现可调节压缩级别 | AI生成和翻译
现在我已经掌握了全局。以下是代码告诉我们的信息:
当前 /compress 行为:
-
已支持焦点主题:
/compress database schema会引导摘要生成器保留与该主题相关的信息,同时对其他内容进行更激进的压缩。 - 两次运行
/compress确实有效,但适用于迭代更新,而非更激进的压缩:- 第一次:将中间轮次压缩成摘要
- 第二次:在开头找到之前的摘要,然后对第一次压缩后累积的新中间内容进行摘要
- 如果在两次压缩之间没有新增消息,第二次很可能是空操作(已被压缩)
-
代码明确警告重复压缩的风险(第 447-450 行):
if _cc >= 2: agent._vprint( f"{agent.log_prefix}⚠️ 会话已压缩 {_cc} 次——" f"准确性可能下降。建议使用 /new 重新开始。", ) -
压缩激进程度由以下参数控制(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 参数即可。
需要我实现这个功能吗?