AI 简明手册
Agent 工程:从能跑到可控 · 让任务跨轮次继续会话不是上下文窗口

会话不是上下文窗口

定义

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 取子集。

跟着一个例子走

一个会话持续了很多轮

用户几天内反复推进同一任务,完整日志远大于模型一次能处理的窗口。

  1. 会话继续完整记录

    消息、工具结果、分支和检查点都进入持久事件流。

  2. 每轮重新构建上下文

    选择近期消息、任务摘要和当前相关制品,而不是简单截取最后若干 Token。

  3. 需要时回到原始证据

    摘要指向事件或文件位置,关键决策可以从档案重新核对。

回到概念

把两者分开后,系统既能保留历史,又不必让模型每轮重读全部历史。

边界与误区

  • 为什么 Session 和 Context Window 必须分离: 压缩和裁剪是不可逆操作,一旦压缩原始细节永久丢失。正确做法是原始事件永久保存在 Session,Context Window 只是从 Session 临时取景。

  • 为什么把 Session 比作完整录像、Context Window 比作工作记忆: Session 负责保留可追溯事件,Context Window 只装当前推理所需的子集;比喻强调职责差异,不代表二者具有真实录像或人类记忆的全部性质。