上下文压缩 (Context Compression)
上下文压缩是 LLM Chat 处理超长对话的核心技术。它通过将旧的消息历史“总结”为简洁的摘要,在节省大量 Token 的同时,确保 AI 依然能够记住对话的关键背景。
工作原理
与传统的“截断”策略(直接丢弃旧消息)不同,压缩系统采取了非破坏性总结方案:
- 检测:系统监控当前对话的 Token 总数或消息条数。
- 总结:当达到阈值时,系统选取最旧的一段消息,调用 AI 模型生成一份摘要。
- 替换:创建一个特殊的“压缩节点”插入对话树,并将被总结的原始消息在发送给 AI 时隐藏。
- 保留:原始消息依然保存在你的本地数据库中,你可以随时禁掉压缩节点来恢复它们。
触发机制
你可以在“智能体编辑器 -> 参数设置 -> 上下文压缩”中配置触发规则。
1. 自动触发
开启 “自动触发压缩” 后,系统会在你发送消息前检查以下条件:
- Token 阈值:当前上下文 Token 超过设定值(如 80,000)时触发。
- 消息条数:对话路径上的消息超过设定值(如 50 条)时触发。
- 最小历史要求:为了防止过早压缩,你可以设置“最小历史条数”(如至少 15 条才允许压缩)。
2. 手动触发
在对话区域的工具栏或上下文统计面板中,你可以手动执行“立即压缩”。这会忽略自动触发的阈值限制。
压缩策略
为了保证对话质量,压缩过程遵循以下参数:
- 保护最近消息 (
protectRecentCount):最近的 N 条消息(默认 10 条)永远不会被压缩。这能确保 AI 对当前正在讨论的话题保持最高清晰度的记忆。 - 每次压缩条数 (
compressCount):触发时,系统一次性将最早的 N 条消息(默认 20 条)合并为一个摘要。 - 摘要节点角色:你可以指定摘要以
System、User或Assistant身份呈现。通常建议使用System以获得更好的权威性。
摘要生成配置
摘要的质量直接决定了 AI 后的表现。
模型选择
- 默认:使用当前对话所选的模型。
- 专用模型:你可以指定一个更便宜或更擅长总结的模型(如 GPT-4o-mini 或 Gemini Flash)专门负责生成摘要。
提示词模板
系统区分了两种压缩场景:
- 初始摘要 (
summaryPrompt):用于第一次对原始消息进行压缩。 - 续写摘要 (
continueSummaryPrompt):当已有摘要节点且需要追加新消息时,系统会将“旧摘要 + 新消息”交给 AI,生成一份包含所有信息的“新总摘要”。
交互与管理
压缩节点 UI
压缩节点在消息列表中以特殊的样式显示:
- 统计信息:显示该摘要包含的原始消息条数。
- 手动编辑:你可以点击“编辑”按钮,手动修改 AI 生成的摘要内容,修正关键信息的遗漏。
- 开关控制:点击节点上的“数据库/压缩”图标,可以临时禁用该压缩。禁用后,系统在下次请求时会重新发送被隐藏的原始消息。
性能提示
- 流式处理:如果启用了“流式处理”,摘要生成过程将是异步的,不会阻塞你的正常对话。
- 非破坏性:压缩操作仅修改对话树的结构关系,不会删除任何历史数据。