上下文管理
会话上下文的压缩、重置、归档与恢复——让 AI 保持高效响应。
为什么需要上下文管理
LLM 有上下文窗口限制。随着对话进行,历史消息越来越多,会导致:
- 响应变慢 — 输入 Token 越多,LLM 首字延迟 (TTFT) 越高
- 成本增加 — 每轮对话都需要发送完整历史,Token 消耗持续增长
- 信息淹没 — 过多的历史可能让 LLM "迷失",忽略最新的重要信息
OpenVort 提供四种上下文管理操作来解决这些问题。
四种操作
| 操作 | 效果 | 适用场景 |
|---|---|---|
| 压缩 (Compact) | 用 LLM 生成旧消息摘要 + 保留最近 10 条 | 对话太长但不想丢失上下文 |
| 重置 (Reset) | 清空活跃上下文,旧消息归档保留 | 切换话题,但保留历史可查 |
| 归档浏览 | 分页查看被重置/压缩的历史消息 | 回顾之前的对话内容 |
| 恢复 (Restore) | 把归档消息合并回活跃上下文 | 需要继续之前的话题 |
压缩 (Compact)
压缩是最常用的操作。它用 LLM 将旧消息总结为一段摘要,保留最近的 10 条消息,大幅减少上下文长度。
手动压缩
在聊天中发送 /compact 命令:
/compact
> 已压缩: 38 条 → 11 条(摘要 + 最近 10 条)
自动压缩
系统会在每轮 LLM 调用前估算上下文 Token 数。当超过约 70000 Token 时,自动触发压缩。
压缩后的上下文结构
压缩前: [msg1, msg2, ..., msg38]
压缩后: [摘要消息, msg29, msg30, ..., msg38]
↑ LLM生成的摘要 ↑ 保留最近10条
摘要会保留关键信息:用户需求、重要决策、工具调用结果等。如果 LLM 摘要生成失败,系统会回退到简单文本摘要(截取每条消息的前 200 字)。
重置 (Reset)
重置比压缩更"干净"——直接清空活跃上下文,从零开始。但旧消息不会删除,而是移入归档。
使用方式
- 在 IM 中发送
/new或/reset - 在 Web 面板中点击"重置上下文"按钮
重置后的效果
重置前:
活跃消息: [msg1, msg2, ..., msg25]
归档消息: []
重置后:
活跃消息: [](空白开始)
归档消息: [msg1, msg2, ..., msg25](可查看、可恢复)
归档浏览
重置后的历史消息不会丢失。在 Web 面板中可以分页浏览归档消息,查看之前的对话内容。
多次重置会累积归档——每次重置的消息追加到归档末尾。
恢复 (Restore)
如果需要继续之前被重置的话题,可以将归档消息合并回活跃上下文。
恢复后归档会被清空,所有消息回到活跃状态。
恢复会导致上下文变长。如果归档消息很多,恢复后可能需要执行一次压缩。
消息裁剪
除了压缩和重置,系统还有一个自动裁剪机制:当活跃消息超过 50 条时,自动丢弃最旧的消息。
裁剪时会注意保持工具调用的完整性——不会只保留 tool_use 而丢失对应的 tool_result,避免 LLM 混淆。
最佳实践
| 场景 | 推荐操作 |
|---|---|
| 对话变慢但话题还在继续 | /compact 压缩 |
| 要换一个全新话题 | /new 重置 |
| 想回顾之前聊过什么 | Web 面板查看归档 |
| 需要回到之前的话题 | 恢复上下文 |
| 日常短对话 | 不需要任何操作,系统自动管理 |