Skip to content

[Feature]: 功能请求:增加可覆盖内容保护机制的强制全量压缩模式 #324

Description

@WantexZard

Problem

目前 opencode-acp 提供了软保护和硬保护机制,可以让部分历史内容在上下文压缩时不被压缩,例如工具调用、工具返回结果等。

这些保护机制对于正常的自动压缩非常有用,但在超长对话中可能会造成一个问题:

例如,一个对话上下文约为 70 万 tokens,其中约 50 万 tokens 都是历史工具调用和工具返回结果。此时早期任务已经全部完成,用户只希望保留当前正在进行的对话阶段,而希望将此前的大量历史内容全部压缩,以释放上下文空间。

但是,由于部分历史内容受到软保护或硬保护,即使用户已经明确希望压缩这些内容,它们仍然无法被压缩。

目前缺少一种机制,让用户能够明确表示:

“我知道这些内容通常受到保护,但这一次我明确要求对这些历史内容进行压缩。”

Proposed Solution

建议增加一个“强制全量压缩”功能。

当用户明确触发该功能时,本次压缩应当临时覆盖现有的软保护、硬保护以及其他历史内容保护规则,使指定范围内的历史内容全部可以参与压缩。

应该可以覆盖:

  • 普通历史对话
  • 工具调用
  • 工具返回结果
  • 工具调用产生的中间信息
  • 其他历史上下文
  • 被软保护机制保护的内容
  • 被硬保护机制保护的内容
  • 其他原本不会参与压缩的历史内容

同时,用户应该能够指定当前正在进行的对话阶段不参与压缩。

也就是说:

正常压缩:
→ 继续遵守现有软保护和硬保护规则。

强制全量压缩:
→ 仅针对本次操作临时覆盖这些保护规则。
→ 对指定的历史范围进行最大程度压缩。
→ 当前明确排除的对话阶段保持不变。

为了保证安全,这个功能不应该静默执行,而应该要求用户明确授权。

例如:

  1. AI 请求执行强制全量压缩。
  2. ACP 弹出确认窗口。
  3. 用户明确选择“允许”后才执行。
  4. 如果 5 秒内没有响应,则自动拒绝。

这样可以保证正常的保护机制完全不受影响,同时给用户一个明确的“我知道风险,并且这次就是要强制压缩”的出口。

具体实现形式可以由项目决定,例如增加 force 参数、overrideProtection 参数,或者增加一个类似“强制全量压缩”的独立操作。

Alternatives Considered

不建议直接取消或削弱现有的软保护和硬保护机制,因为这会影响正常压缩时的安全性。

相比之下,增加一个由用户主动触发、并经过明确授权的强制压缩功能更加合适。

Additional Context

一个典型场景:

假设当前上下文约为 70 万 tokens:

  • 约 50 万 tokens 是历史工具调用和工具返回结果
  • 约 15 万 tokens 是早期普通对话
  • 约 5 万 tokens 是当前正在进行的任务

此前的任务已经全部完成,因此用户希望将当前阶段之前的所有内容全部压缩,只保留当前阶段。

用户可能会向 AI 发出类似这样的要求:

“将除当前对话阶段以外的所有早期对话内容进行全量压缩。压缩范围必须覆盖此前的全部内容,包括普通对话、工具调用、工具返回结果、工具调用产生的中间信息、上下文中的其他历史信息,以及此前被软保护或硬保护机制保护的内容。此次压缩不受任何既有软保护、硬保护或其他历史内容保护规则限制,对当前阶段之外的所有内容统一执行最大程度的压缩;当前正在进行的对话阶段及其相关内容不参与本次压缩。”

在这种情况下,希望 ACP 能够真正对这些历史内容进行全量压缩,而不会因为原有保护机制而跳过其中一部分。

这个功能本质上可以理解为:

“用户手动执行一次全量压缩,同时明确授权本次操作覆盖受保护的历史内容。”

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions