上下文窗口满了

压缩不是唯一的答案,而且是那个有损的答案

警告来得总是时候不好:窗口快满了,智能体提议压缩。你答应了,因为不这么做就得从头开始,于是会话以一种更稀薄的形态继续下去。

摘要留住什么,丢掉什么

对这个仓库自身历史里 43 次真实压缩做过统计:摘要留下了 77% 的决定和 0.2% 实际跑过的命令。推理能活下来,因为它是散文。那条带正确参数、跑通的调用,那段确切的报错文本,一次编辑替换掉的那段范围——这些是摘要当作噪音的部分,恰恰也正是你没法凭记忆重建的部分。

所以窗口满了并不是真正的问题。问题是这个解法朝着一个没人会主动选的方向有损。

有意识地让窗口保持小

deja install --auto

不用把所有东西都带在上下文里,另一种做法是在需要时把需要的那部分取过来。召回会在会话开始时、每次提问时、编辑或执行命令之前、以及一条命令失败之后到来——每一次都有上限:注入被限制在每次提问 1,536 字节、每次召回调用约 4 KB。面对一个本来会不断增长直到崩掉的窗口,这只是一笔固定而很小的开销。记忆要花多少 token有实测数据。

已经压缩过之后

deja ctx "what we were doing"

压缩之前的那些轮次仍然完整地在磁盘上——压缩重写的是智能体的上下文,不是它的转录。deja 读的是转录,所以摘要丢掉的命令、报错和编辑仍然搜得到,而把它们找回来只需要一次查询:deja ctx 会打印那次会话的摘要和它改过的代码。

为什么不用更大的窗口

更大的窗口只是把墙往后挪,并没有拆掉它,而且上下文里的每一个 token 都会在会话的每一轮里被计费。一份 5 GB、能在毫秒内搜完、并以 1.5 KB 摘要返回的历史,和一面 200k token、装着同一段历史并持续收费的窗口,是两种形状不同的答案。

与此无关的那一半

索引覆盖这台机器上每个智能体的转录——各有各的格式——包括 deja 装上之前的会话。建索引和检索都在本地:不需要模型(embedding 是可选的,用 deja embed 打开),什么都不离开这台机器(隐私)。

快速开始 · 记忆要花多少 token · 压缩丢掉了什么