会话不是上下文窗口
定义
Session 和 Context Window 是两个必须分离的概念:Session 是持久化的事件流,记录所有发生过的事;Context Window 是模型当前能看到的 Token,相当于临时的工作记忆。原始事件应永久保存在 Session 中,Context Window 只是从 Session 中临时取景的一个视角。
先搭一个心智模型
Session 像保存全部原始素材的录像库,Context Window 像本轮取景框:每次只选当前任务需要的一段,但原始素材仍能回查和重新剪辑。
说明
Context Window 容量有限,每次对话开始时构建,用完即丢,像工作记忆;Session 是 append-only 持久日志,只增不减,像完整录像。分离原因是 Compaction 和 Trimming 都是不可逆操作,一旦压缩原始细节永久丢失,且难以预知未来哪些 Token 会重要。
Session 作为持久上下文对象提供类似数据库的查询接口,Brain 可以按需读取任意范围事件,让 LLM 像在 REPL 中操作对象一样查询和过滤,摆脱固定窗口限制。
Harness 可以自由变换从 Session 取出的事件,优化 Prompt Cache 命中率时保持前缀稳定,上下文工程按任务类型选择性放入历史。正确做法是 Session 存全量,Context 取子集。
跟着一个例子走
一个会话持续了很多轮
用户几天内反复推进同一任务,完整日志远大于模型一次能处理的窗口。
- 会话继续完整记录
消息、工具结果、分支和检查点都进入持久事件流。
- 每轮重新构建上下文
选择近期消息、任务摘要和当前相关制品,而不是简单截取最后若干 Token。
- 需要时回到原始证据
摘要指向事件或文件位置,关键决策可以从档案重新核对。
边界与误区
为什么 Session 和 Context Window 必须分离: 压缩和裁剪是不可逆操作,一旦压缩原始细节永久丢失。正确做法是原始事件永久保存在 Session,Context Window 只是从 Session 临时取景。
为什么把 Session 比作完整录像、Context Window 比作工作记忆: Session 负责保留可追溯事件,Context Window 只装当前推理所需的子集;比喻强调职责差异,不代表二者具有真实录像或人类记忆的全部性质。