Lzh on GitHub

智能上下文压缩

了解“智能上下文压缩”如何通过总结早期对话来管理长对话,以防止在接近上下文限制时信息丢失。

“智能上下文压缩” 功能通过总结对话的早期部分来帮助管理长对话。这可以防止当上下文窗口接近其限制时重要信息丢失。此功能默认启用。

工作原理

随着你与 Roo Code 的对话增长,它可能会接近底层 AI 模型的上下文窗口限制。当这种情况发生时,较旧的消息通常会被移除以腾出空间。“智能上下文压缩”旨在通过以下方式防止这种突然丢失:

  1. 总结: 使用 AI 模型,它会压缩对话的早期部分。
  2. 保留要点: 目标是在减少总令牌数的同时保留来自被总结消息的关键信息。
  3. 保持流畅: 这使得 AI 能够对整个对话(甚至是冗长的对话)有更连贯的理解。

重要考虑事项:

  • 总结影响: 尽管如果你使用“检查点”进行回溯,原始消息会得到保留,但总结版本用于正在进行的 LLM 调用,以保持上下文可管理。
  • 成本: 执行总结的 AI 调用会产生费用。此费用包含在 UI 中显示的上下文压缩指标中。

配置

“智能上下文压缩”默认启用,并提供几个配置选项:

  1. 打开 Roo Code 设置(Roo Code 面板右上角的 ⚙️ 图标)。
  2. 导航到“上下文”设置部分以获取与上下文相关的选项,或导航到“提示”设置部分以获取自定义提示。
  3. 配置可用选项:
  • 自动触发智能上下文压缩: 默认启用,这控制压缩是否自动发生(在“上下文”设置中找到)。
  • 触发智能上下文压缩的阈值: 一个百分比滑块(默认为 100%),根据上下文窗口的使用情况确定何时激活压缩(在“上下文”设置中找到)。
  • 用于上下文压缩的 API 配置: 选择用于上下文压缩操作的 API 配置(默认为你当前激活的配置)(在“上下文”设置中找到)。
  • 自定义上下文压缩提示: 自定义用于上下文压缩操作的系统提示(在“提示”设置中找到)。

图片:智能上下文压缩配置选项:自动触发开关、阈值滑块、API 配置选择和自定义提示定制。

控制和理解上下文压缩

Roo Code 提供了几种控制和理解 “智能上下文压缩” 功能的方法:

控制上下文压缩

  • 自动阈值: “上下文”设置中的阈值滑块允许你定义上下文窗口使用量的百分比(例如,80%)。当对话达到此容量水平时,Roo Code 将尝试自动压缩上下文。
  • API 配置: 选择用于上下文压缩操作的 API 配置。如果需要,这允许你专门为压缩使用不同的提供商或模型。
  • 自定义提示: 修改用于压缩的系统提示,以更好地适应你的工作流程或强调对话总结的某些方面。
  • 手动触发: 任务顶部有一个“压缩上下文”按钮,位于上下文栏的右侧。这允许你随时启动上下文压缩过程。

图片:手动“压缩上下文”按钮(用黄色箭头突出显示)易于访问,可进行手动控制。

理解上下文压缩活动

  • 上下文压缩指标: 当发生上下文压缩时,Roo Code 会显示:
    • 上下文压缩前后的上下文令牌数。
    • 与上下文压缩 AI 调用相关的费用。
    • 一个可展开的摘要,详细说明压缩了什么(此信息是聊天历史记录中可见的 ContextCondenseRow 组件的一部分)。

图片:上下文压缩后,一条消息指示上下文已被压缩,显示了令牌的变化和费用。

  • 视觉指示器:
    • 在上下文压缩活动时,聊天界面中会显示一个进度指示器(“正在压缩上下文...”)。

图片:“正在压缩上下文...”指示器在过程中出现在聊天中。

  • 任务标题也显示当前的上下文压缩状态。
  • ContextWindowProgress 栏提供了令牌分布的视觉表示,包括当前使用量、为 AI 输出保留的空间、可用空间和原始令牌数。
  • 界面清晰度: “压缩上下文”按钮包含一个工具提示,解释其功能,并支持所有支持的语言。

有效上下文压缩的技巧

自定义上下文压缩提示

你可以自定义上下文减少提示,以更好地适应你的特定领域或用例。如果你发现默认的压缩过程丢失了特定于你的工作流程的重要信息,这特别有用。

要自定义提示:

  1. 转到 Roo Code 设置(⚙️ 图标)。
  2. 导航到“提示”设置部分。
  3. 在下拉菜单中找到“自定义上下文压缩提示”。
  4. 输入你的自定义提示,指导 AI 如何保留特定类型的信息。

例如,如果你正在进行一个复杂的调试会话,你可能会添加如下指令:

  • “始终完整保留错误消息和堆栈跟踪”
  • “保持所有变量名及其最后已知值”
  • “记录所有尝试的解决方案及其结果”

这种自定义确保了上下文压缩过程保留了对你的特定用例最关键的信息。

自动错误恢复

当 Roo Code 遇到上下文窗口限制错误时,它现在会自动恢复,以保持你的工作流畅:

错误恢复工作原理

  1. 错误检测: Roo Code 检测来自多个提供商(OpenAI、Anthropic、Cerebras 等)的上下文窗口错误。
  2. 自动截断: 系统自动将上下文减少 25%。
  3. 重试机制: 截断后,Roo Code 会重试你的请求(最多 3 次尝试)。
  4. 无缝延续: 你的工作无需手动干预即可继续。

这种自动恢复确保了:

  • 你不会因上下文限制错误而丢失工作。
  • 长对话可以顺利进行。
  • 系统智能地管理上下文,无需手动重启。

何时触发恢复

当满足以下条件时,自动恢复会激活:

  • API 返回上下文窗口超出错误。
  • 对话接近最大令牌限制。
  • 多个提供商报告类似的上下文相关错误。

此功能与 “智能上下文压缩” 协同工作,提供多层上下文管理,确保你的对话即使在具有挑战性的场景中也能继续进行。

技术实现

令牌计数

Roo Code 使用复杂的令牌计数系统,该系统:

  • 在可用时使用原生令牌计数端点(例如,Anthropic 的 API)。
  • 如果 API 调用失败,则回退到 tiktoken 估算。
  • 为不同内容类型提供准确的计数:
    • 文本内容: 使用基于词的估算,并计算标点符号和换行符的开销。
    • 图像内容: 使用保守的估算,每张图像 300 个令牌。
    • 系统提示: 包含结构元素的额外开销。

上下文窗口管理

  • 默认情况下,30% 的上下文窗口被保留(20% 用于模型输出,10% 作为安全缓冲区),留下 70% 用于对话历史记录。
  • 此保留可以被模型特定设置覆盖。
  • 系统在保持此保留的同时自动计算可用空间。

错误处理策略

  • 多提供商支持: 识别来自 OpenAI、Anthropic、Cerebras 和其他提供商的上下文错误。
  • 渐进式减少: 每次重试尝试时,将上下文减少 25%。
  • 重试限制: 在需要手动干预之前,最多进行 3 次自动重试尝试。
  • 状态保留: 在恢复尝试期间保持对话状态。