问题在哪
常见的做法是每次都让模型把到目前为止的一切重新写成一份摘要。每次重写丢一点,重写多了,损失就累积起来:- 长期目标逐渐变淡。 每次重写都要重新判断什么还重要。开头定下、最近没再提的目标,先是越写越短,然后就消失了。
- 子任务被当成”目标”。 摘要抓住的是最近发生的事。眼前这个子任务一做完,摘要就写”任务已完成”,而它所属的那件大事其实还有好几项没做。
- 你的话被转述走样。 你提的约束先被转述一遍,转述又被再转述。限制变松,授权被放大或丢掉;后台消息里一句”用户要求……”,也可能被当成你说的话。
心智、备忘和现场
Vibey 的压缩叫作检查点(checkpoint)。它是整理,不是记账:就像人在睡眠中整理一天的经历,Vibey 回顾做过的事,逐层修订自己的理解,放下细节。原始对话一直保存着,放下的细节需要时可以查回来。 一个检查点分三部分,各有各的变法:心智
心智分四段,越往前越稳定:- 我在这里: 这件事为谁做、为什么做,Vibey 对什么负责、边界在哪,以及和你的约定:怎么汇报、什么时候问、什么可以自己决定、授权到什么范围。
- 目标: 使命(Mission),用 Vibey 自己的话写这段对话的最终目的;以及为使命服务的各条工作线(Workstreams),每条写明状态,有队列的写明处理到哪、下一个是什么。
- 关键决策, 每条附上理由。
- 经验, 写成以后也用得上的原则。
备忘
检查点要移出上下文的每一条你本人发的消息,都会成为候选。Vibey 看到的是一张清单:每行一条消息,带复选框、编号和一小段预览。它要做的只有勾选:- 带上定方向或改方向、提出约束或禁令、表达偏好、给出授权的消息。
- 放下已被撤回、取代或已经完成的旧条目,或者含义已完整写进心智的条目。
- 不勾只用于推进工作的指令(比如”继续”),以及单独看不懂的简短答复。
现场
现场是工作状态,每个检查点都重新写:- 眼下这一步,以及它属于哪条工作线
- 进展:已完成、进行中、阻塞或待决
- 在等什么:后台命令、Watch、定时任务、委派出去的运行、在等你回答的问题,附上 id
- 下一步:紧扣你最近的明确请求,引用你的原话
- 踩过的坑:犯过的错、被证伪的假设、走不通的路,附上错误原文
- 精确引用:继续工作所需的路径、id、命令、链接和数值
一次检查点怎么走
当下一次请求将超过模型上下文窗口的约 90% 时,检查点开始。如果给回复预留的空间和安全余量需要更多位置,或者模型在某个上下文长度以上单价变高,检查点会更早开始。 首先,Avibe 往会话的临时目录里写两个文件:上一份心智(第一次是空模板)和备忘清单。接着,检查点回合暂停手头的工作,在同一个模型上、基于当前的对话进行。Vibey 可以读文件,但只能修改这两个文件,最多五轮工具调用。请求会告诉 Vibey:这条请求来自 Avibe,不是你,不能被记成你说的话。 检查点之后,每次请求带着:- 系统提示词,每个回合重新生成:Vibey 的身份、规则、Skill 目录,以及你的
AGENTS.md文件。检查点从不压缩它。 - 检查点,以 Vibey 自己的回忆的口吻呈现,而不是新的指令。其中你的原话和约定仍然有效。
- 最近的消息,原样保留,最多 20,000 token。在小模型上,上限是检查点阈值的四分之一。
谁说的话
并不是每条输入都来自你。Watch、定时任务、回调和其他 Agent 会话,也会往会话里发消息。每条不是人发的输入,开头都有一行来源标记,比如:[Harness: 开头,Avibe 会在前面加上你的名字,所以这个标记无法伪造。来源标记对所有 Agent 后端生效,不只是 Vibey。
检查点两处都用到了它。压缩指令告诉 Vibey:只有你本人发的消息才是你的话。备忘更进一步:它的候选按记录里的消息类型来取,所以 Watch、定时任务、回调或其他会话的消息,不管写了什么,都不可能进入备忘。
检查点还带着什么
- 按最近使用放回的 Skill。 加载过的内容即将离开上下文的 Skill,会按它现在的版本放回来。最近加载的排在前面,每个最多 5,000 token;合计不超过 25,000 token 和模型窗口十分之一中较小的那个,最多 20 个。放回不算重新加载,所以一直没再加载的 Skill 会逐渐被淘汰。被截短的 Skill 会注明怎样用
vibe skill load加载全文。 - 一份简短的文件清单。 只列路径:最近修改过的 10 个文件、最近读过的 5 个,更早的被挤出时会注明。重要的文件会写进现场的精确引用里。
- 完整记录在哪。 较早的消息,也就是各条输入和 Vibey 的回复,保存在 Avibe 的数据库里。检查点会告诉 Vibey 它们在哪,以及怎样按时间顺序查你本人的消息。备忘条目的编号就指向那条消息。工具输出不保存在那里;需要时,Vibey 会重新运行工具。
校验与兜底
每个检查点在使用前都要经过 Avibe 的校验:- 现场: 恰好一个检查点块,且达到最低长度。
- 心智: 每个标题都完整、顺序不变,使命条目不比之前少,每段都在上限以内。
- 备忘: 除了复选框什么都没改,勾选的消息在预算以内。
检查点失败不会改动任何东西:还放得下的请求照常发出,后面的请求会再试。如果对话大到放不进一个检查点回合,Vibey 会改为只对较早的一部分(最多约一半)做检查点,最多尝试两次。请求已经放不下、又做不成检查点时,Vibey 会不调用模型,直接把最早的约一半移出去。放得下的话,这一步会保留上一个检查点:它的心智、现场和 Skill,以及一份带上所有被移出的、你本人发的消息的备忘。同一次运行里有两次检查点失败或腾出的空间太少之后,这次运行不再做检查点,只靠这一步腾出空间。如果单是最新的工具输出就放不下,它会被截短,并注明这一点。
你会看到什么
什么都不会打断你。没有提示,也没有/compact:Vibey 在回合中间做完检查点,接着做同一件事。这个回合会稍慢一点,因为检查点要向同一个模型多发几次请求,和其他请求一样消耗 token。检查点失败也是静默的,原因记在 Avibe 的日志里。
只有在已经没有东西可以移出时,你才会听到和上下文有关的消息。这时 Vibey 会停下,并说明是什么太大,比如:本次对话已经太长,无法可靠地继续。请发送 /new 开始一个新会话。
限制
- 压缩不等于完整。 不在心智、备忘、现场或最近消息里的内容,就不在上下文里了。Vibey 需要到记录里去查;想再看某个工具的输出,要重新运行它。
- 心智和现场由模型来写。 检查点的质量取决于写它的模型,不同模型的结果有差别,见评测。
- 预算有上限。 很长的消息在备忘里会被截短,用编号指向全文。窗口小于 192,000 token 的模型,心智和备忘的预算按比例缩小。
- 只属于一个会话。 检查点是它所在会话的记忆。
- 只用于 Vibey。 Claude Code、Codex、OpenCode 在 Avibe 里照原样运行,用它们自己的方式压缩上下文。后台输入的来源标记对它们同样生效。
