智能上下文压缩
智能上下文压缩功能通过总结对话的早期部分来帮助管理长对话。当上下文窗口接近其限制时,这可以防止重要信息丢失。此功能默认启用。
工作原理
当您与 Roo Code 的对话不断增长时,可能会接近底层 AI 模型的上下文窗口限制。当这种情况发生时,通常会删除较早的消息以腾出空间。智能上下文压缩旨在通过以下方式防止这种突然的信息丢失:
- 总结: 使用 AI 模型压缩对话的早期部分。
- 保留要点: 目标是在减少总体 token 数量的同时,保留被总结消息中的关键信息。
- 保持连贯性: 这使得 AI 能够对整个对话(即使是超长对话)有更连贯的理解。
- 斜杠命令连续性: 包含在第一条消息中的斜杠命令会在压缩过程中保留。
重要注意事项:
- 总结影响: 虽然如果您使用检查点来回溯,原始消息会被保留,但总结后的版本是用于持续 LLM 调用的内容,以保持上下文的可管理性。
- 成本: 执行总结的 AI 调用会产生成本。此成本包含在 UI 中显示的上下文压缩指标中。
配置
智能上下文压缩默认启用,并提供多个配置选项:
- 打开 Roo Code 设置(Roo Code 面板右上角的 图标)。
- 导航到上下文管理设置部分。
- 配置可用选项:
- 自动触发智能上下文压缩:默认启用,控制是否自动进行压缩(位于“上下文”设置中)
- 触发智能上下文压缩的阈值:一个百分比滑块(默认 100%),根据上下文窗口使用情况确定何时激活压缩(位于“上下文”设置中)
- 自定义上下文压缩提示:自定义 Roo 在压缩时使用的提示(位于“上下文管理”设置中)
- 压缩模型:压缩使用您当前活跃的对话提供商/模型。
智能上下文压缩配置选项:自动触发开关、阈值滑块和自定义提示定制。
控制并理解上下文压缩
Roo Code 提供了多种方式来控制和理解智能上下文压缩功能:
控制上下文压缩
-
自动阈值:“上下文”设置中的阈值滑块允许您定义上下文窗口使用率的百分比(例如 80%)。当对话达到此容量水平时,Roo Code 将尝试自动压缩上下文。
-
**自定义提示:**修改用于压缩的提示,以更好地适应您的工作流程或强调应保留的内容。
-
手动触发:在任务顶部,上下文栏的右侧提供了一个压缩上下文按钮。这允许您随时启动上下文压缩过程。
手动压缩上下文按钮(用黄色箭头突出显示)易于访问,可手动控制。
了解上下文压缩活动
- **上下文压缩指标:**当发生上下文压缩时,Roo Code 会显示:
- 上下文压缩前后的上下文令牌计数。
- 上下文压缩 AI 调用所产生的成本。
- 一个可展开的摘要,详细说明被压缩的内容(此信息是聊天历史记录中可见的
ContextCondenseRow组件的一部分)。
为什么这个视图很重要:它是您了解什么发生了变化、花费了多少以及 Roo 将继续处理什么的审计跟踪。
- 视觉指示器:
-
当上下文压缩处于活动状态时,聊天界面中会显示一个进度指示器(“正在压缩上下文...”)。
-
任务标题也会显示当前的上下文压缩状态。
-
ContextWindowProgress条提供了令牌分布的直观表示,包括当前使用情况、为 AI 输出保留的空间、可用空间以及原始令牌数量。
-
- 界面清晰度:“压缩上下文”按钮包含一个解释其功能的工具提示,支持所有语言。
有效上下文压缩技巧
自定义上下文压缩提示
您可以自定义上下文缩减提示,以更好地适应您的特定领域或用例。如果您发现默认的压缩过程丢失了特定于您工作流程的重要信息,这将特别有用。
要自定义提示:
- 进入 Roo Code 设置( 图标)
- 打开上下文管理
- 找到自定义上下文压缩提示编辑器
- 输入您的自定义提示,指示 Roo 必须保留什么
例如,如果您正在进行复杂的调试会话,您可以添加如下说明:
- “始终完整保留错误消息和堆栈跟踪”
- “保留所有变量名及其最后已知值”
- “跟踪所有尝试过的解决方案及其结果”
这种自定义确保上下文压缩过程保留对您的特定用例最关键的信息。
自动错误恢复
当 Roo Code 遇到上下文窗口限制错误时,它现在会自动恢复,以保持您的工作流程:
错误恢复的工作原理
- 错误检测:Roo Code 检测来自多个提供商(OpenAI、Anthropic、Cerebras 等)的上下文窗口错误
- 自动截断:系统自动将上下文减少 25%
- 重试机制:截断后,Roo Code 重试您的请求(最多达到内置重试限制)
- 继续:Roo 无需手动干预即可重试
这种自动恢复确保:
- 您不会因上下文限制错误而丢失工作
- 长对话可以顺利进行
- 系统智能地管理上下文,无需手动重启
恢复触发时机
技术实现
令牌计数
Roo Code 采用了一套精密的令牌计数系统,其特点包括:
- 在可用时优先使用原生令牌计数接口(例如 Anthropic 的 API)
- 当 API 调用失败时,回退到 tiktoken 估算
- 为不同内容类型提供精确的计数:
- 文本内容:采用基于单词的估算,并计入标点符号和换行符的开销
- 图像内容:采用保守估算,每张图像按 300 个令牌计算
- 系统提示:为结构性元素计入额外开销
上下文窗口管理
- 默认情况下,上下文窗口的 30% 会被预留(其中 20% 用于模型输出,10% 作为安全缓冲),剩余 70% 可用于对话历史。
- 该预留比例可通过特定模型的设置进行覆盖
- 系统会自动计算可用空间,同时维持此预留比例
错误处理策略
为何不能使用其他模型/提供商进行压缩(以及为何这反而是优点)
压缩始终使用您当前对话所使用的提供商/模型。
使用不同模型进行压缩可能会降低摘要质量,尤其是在历史记录包含工具调用、工具结果或其他结构化内容时。保持压缩与当前模型/提供商一致,可避免因不同工具/格式预期之间的“转换”而导致的错误。
自定义压缩提示的存储方式(高级)
您的自定义压缩提示采用与其他提示模板相同的 support-prompt 覆盖机制进行存储:customSupportPrompts.CONDENSE。
- 如果您之前使用的是旧版
customCondensingPrompt,Roo 会自动将其迁移至该位置。 - 重置操作会清除此覆盖,使 Roo 回退到内置的默认压缩提示。