Skip to content

上下文压缩 (Context Compression)

上下文压缩是 LLM Chat 处理超长对话的核心技术。它通过将旧的消息历史“总结”为简洁的摘要,在节省大量 Token 的同时,确保 AI 依然能够记住对话的关键背景。

工作原理

与传统的“截断”策略(直接丢弃旧消息)不同,压缩系统采取了非破坏性总结方案:

  1. 检测:系统监控当前对话的 Token 总数或消息条数。
  2. 总结:当达到阈值时,系统选取最旧的一段消息,调用 AI 模型生成一份摘要。
  3. 替换:创建一个特殊的“压缩节点”插入对话树,并将被总结的原始消息在发送给 AI 时隐藏。
  4. 保留:原始消息依然保存在你的本地数据库中,你可以随时禁掉压缩节点来恢复它们。

触发机制

你可以在“智能体编辑器 -> 参数设置 -> 上下文压缩”中配置触发规则。

1. 自动触发

开启 “自动触发压缩” 后,系统会在你发送消息前检查以下条件:

  • Token 阈值:当前上下文 Token 超过设定值(如 80,000)时触发。
  • 消息条数:对话路径上的消息超过设定值(如 50 条)时触发。
  • 最小历史要求:为了防止过早压缩,你可以设置“最小历史条数”(如至少 15 条才允许压缩)。

2. 手动触发

在对话区域的工具栏或上下文统计面板中,你可以手动执行“立即压缩”。这会忽略自动触发的阈值限制。


压缩策略

为了保证对话质量,压缩过程遵循以下参数:

  • 保护最近消息 (protectRecentCount):最近的 N 条消息(默认 10 条)永远不会被压缩。这能确保 AI 对当前正在讨论的话题保持最高清晰度的记忆。
  • 每次压缩条数 (compressCount):触发时,系统一次性将最早的 N 条消息(默认 20 条)合并为一个摘要。
  • 摘要节点角色:你可以指定摘要以 SystemUserAssistant 身份呈现。通常建议使用 System 以获得更好的权威性。

摘要生成配置

摘要的质量直接决定了 AI 后的表现。

模型选择

  • 默认:使用当前对话所选的模型。
  • 专用模型:你可以指定一个更便宜或更擅长总结的模型(如 GPT-4o-mini 或 Gemini Flash)专门负责生成摘要。

提示词模板

系统区分了两种压缩场景:

  1. 初始摘要 (summaryPrompt):用于第一次对原始消息进行压缩。
  2. 续写摘要 (continueSummaryPrompt):当已有摘要节点且需要追加新消息时,系统会将“旧摘要 + 新消息”交给 AI,生成一份包含所有信息的“新总摘要”。

交互与管理

压缩节点 UI

压缩节点在消息列表中以特殊的样式显示:

  • 统计信息:显示该摘要包含的原始消息条数。
  • 手动编辑:你可以点击“编辑”按钮,手动修改 AI 生成的摘要内容,修正关键信息的遗漏。
  • 开关控制:点击节点上的“数据库/压缩”图标,可以临时禁用该压缩。禁用后,系统在下次请求时会重新发送被隐藏的原始消息。

性能提示

  • 流式处理:如果启用了“流式处理”,摘要生成过程将是异步的,不会阻塞你的正常对话。
  • 非破坏性:压缩操作仅修改对话树的结构关系,不会删除任何历史数据。

相关阅读

Released under the Apache-2.0 License.