





















是时候让上下文管理也Agentic起来了
内部版本阅读体验更好 bytetech
目前来说大部分的上下文管理都是关注里面应该放什么,怎么正确的找到合适的东西放进去,比如RAG,MEM之类的,少有如何清理的讨论
目前的清理主要是靠达到上下文窗口的某个阈值,比如80%,触发一次压缩,从而实现清理,最早可能还是Claude Code引入的,如今已经成为基本功能
Claude Code压缩逻辑:修改系统提示词,带上全量历史消息,并追加压缩提示词
可以看到这是一次无缓存的,全量历史消息调用,还是比较费Token的
1 |
|
应该很多人都会遇到压缩完,丢失了很多东西,聊起来费劲
理论上Agent是能够更早感知“我需要压缩一下”,实现更加语义/任务级别的上下文压缩
理想情况下Agent能够主动的管理自己上下文,主动的选择的加载和卸载哪些内容,在长对话/多话题上应该会很有用
现在的Agent就像一个程序只能申请内存,但不能释放内存,只能靠压缩然后重启
最早应该是在kimi-cli上看到的d-mail功能
当ai发现做了一些低信息密度的事情时,比如读了一个大文件,其实有用的只有一点点,此时调用d-mail进行时间回溯,让agent回到之前读之前的上下文,并带一条消息,告诉之前的自己,读了xxx发现了xxx

kimi文档 https://github.com/MoonshotAI/kimi-cli/blob/main/src/kimi_cli/tools/dmail/dmail.md
字节内网文档 https://bytetech.info/articles/7571069998476165146
公开研究资料 https://leslieo2.github.io/posts/agent-control-via-timetravel-checkpoints/
之后看到了pi agent,其中session的设计很有意思
其中/tree命令就是可以跳转到任意节点,并可选带上一个summary,这一点就和d-mail很像了
作者这篇写了设计思路,推荐一读 https://mariozechner.at/posts/2025-11-30-pi-coding-agent/
以防你不知道,openclaw就是用pi开发的
当然目前很多agent都有上下文存储和跳转功能
/resume/fork命令,可能过于冷门了,文档上甚至都没有介绍fork命令但总之这都是面向人类的,不是面向agent的
pi能很方便开发扩展,那么很简单,想办法把/tree交给ai
我觉得session tree很容易类比为git workflow
举个例子
1 | ├─ user: "开发一个X功能" |
左边的数据就是pi tree能提供的数据,为了能让agent准确的执行跳转,让所有消息都带上ID标记,agent只需要带着ID调一下tree跳转就可以了
但实际上在产生了一堆对话之后,session tree会非常巨大,AI看一眼tree上下文就炸了,所以必定要做精简
pi tree是带有所有分支的,完整的tree可能长这样,可以无限套娃的回溯,甚至可以再次回溯到某个历史分支上

但agent其实只要感知当前session的内容就可以了,并不需要感知其他分支,因为所有的分支消息的内容都已经包含在SUM节点中了
那么此时就会发现只看当前红线消息=当前session全部会话,一切似乎又回到了总结压缩的这件事
但有一点不同,我们需要在这个总结上带上跳转标记
Session Log = 当前会话的带标记的总结消息
就像git log一样
1 | 35d4182f (ROOT) |
当决策跳转时,则是 git checkout,并带上一个消息
1 | context_checkout("8c5265a1", "summary...") |
ReAct循环将变成这样

需要注意的是这里的总结是一个无缓存的,全量历史的调用,如果在每次ReAct循环都调用一次,成本应该会很爆炸
有几个改进思路
低频率?特定场景/规则触发?
某种意义上,似乎又回到何时和如何压缩的问题了,而且从成本上也是一样的,只是结构上压缩的逻辑不同
总结和跳转决策都在当前会话这个sesion中继续,就能用缓存了
虽然在当前session中有所有的历史会话,但没有ID,如何在总结的时候提供标记
2.1. 消息内容即ID,agent:我要回到包含“xxxxxx”消息的时间
2.2. 由agent自己在历史中构建,在对话过程中记录关键节点,关键节点的骨架图=session log
我觉得b更有意思一些
在agent的对话中需要嵌入这样的循环
1 | 35d4182f (ROOT) |
依旧借用git的概念,设计了3个工具
context_tag:git tag,标记节点context_log:git log,查看上下文骨架context_checkout:git checkout,在骨架上跳转为了能让AI更好的感知和决策,除了上下文骨架之外,还应该感知上下文占用情况、对话深度,离最近的tag有多远,提醒打即使打tag,前置设计了一个HUD,context_log大概长这样
1 | [Context Dashboard] |
设计更好的context log仍然有很多工作
为了让Agent更好的使用这些工具,还补充了一个skill
d-mail跳转是回到过去,我还想前往未来
比如一个简单的修bug问题来模拟多线对话的场景

绿线是dmail-like的回到过去,还需要能够有一条紫线回到未来,一切时间旅行都是无损的
实现也比较简单,在所有的SUM中标记从哪个节点过来的,可以随时checkout回去
1 | 35d4182f (ROOT) |
session tree还有个好处是,只要不是太久远的分支,都是在缓存里
更好的时间回溯仍然有很多工作可以做
刚开发的,不知道能有多少提升,还需要更多业务验证,欢迎试用
1 | npm install -g @mariozechner/pi-coding-agent |
https://github.com/ttttmr/pi-context
理论上也可以迁移到其他的工具上,毕竟都有会话存储的功能
我开发了其他的pi扩展,欢迎使用
https://github.com/ttttmr/pi-web-search
直接复用antigravity/gemini-cli/gemini做搜索
https://github.com/ttttmr/pi-wakatime
接入wakatime
https://github.com/ttttmr/planning-with-files/tree/master/.pi/skills/planning-with-files
移植了plan skill,已经合入主仓库
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。