是时候让上下文管理也Agentic起来了
前言
目前来说大部分的上下文管理都是关注里面应该放什么,怎么正确的找到合适的东西放进去,比如RAG,MEM之类的,少有如何清理的讨论
目前的清理主要是靠达到上下文窗口的某个阈值,比如80%,触发一次压缩,从而实现清理,最早可能还是claude code引入的,如今已经成为基本功能,当然压缩有压缩的学问
我觉得不够主动,应该更加细粒度,最早应该是在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)
作者这篇写了设计思路,推荐一读 https://mariozechner.at/posts/2025-11-30-pi-coding-agent/
以防你不知道,openclaw就是用pi开发的
同时session以树的形式存储,并提供了树操作方法,提供/fork和/tree,实现了树的复制和跳转,其中/tree命令可选带上一个summary,这一点就和d-mail很像了
当然目前很多agent都有上下文存储和跳转功能,上下文存储和恢复基本都是/resume,至于跳转,claude/codex都是按两下esc,opencode则没有,但是有/fork命令,可能过于冷门了,文档上甚至都没有介绍fork命令
但总之这都是面向人类的,不是面向agent的,那么很简单,想办法把/tree交给ai
git-like tree
我觉得session tree很容易类比为git workflow
- 每条消息都是一个commit
- 跳转就是checkout,可以跳到任意一个commit
- 总结的动作更像是提交mr,不带上全部垃圾commit,而是合并为一个mr-commit
举个例子
1 | ├─ user: "开发一个X功能" |
左边的就是pi tree提供的结果,同时pi session中每条message id也是8位hex,那么只要在tree的结果中,把每个消息前把ID加上,agent带着目标ID调一下tree就可以了
但是在产生了一堆对话之后,session tree会非常巨大,AI看一眼tree上下文就炸了,所以必定要做精简
构建上下文感知
借用git tag的概念,提供一个工具让AI主动的标记任务进度,基于用户消息+Tag构建更加精简的上下文骨架
于是设计了3个工具
context_tag:git tag,标记任务进度context_log:git log,查看上下文骨架context_checkout:git checkout,在骨架上跳转
为了能让AI更好的形成“构建-感知-压缩“循环
出了上下文骨架之外,还应该感知上下文占用情况、对话深度,离最近的tag有多远,提醒打即使打tag,前置设计了一个HUD
最终的context_log大概是这样
1 | [Context Dashboard] |
Skill
插件还补充了一个skill,指导agent如何使用,何时使用,怎么打tag,怎么checkout,什么是好的checkout message
不多介绍了,都放在这里可以直接看 https://github.com/ttttmr/pi-context
说实话,我也不知道效果好不好,欢迎试用
1 | npm install -g @mariozechner/pi-coding-agent |
最后
理论上也可以迁移到其他的工具上,毕竟都有session存储,想办法编辑和重载即可
这是回滚上下文,如果结合可回滚的文件系统,在checkout时能可选回滚文件应该也很有用
广告
我开发了其他的pi扩展,欢迎使用
https://github.com/ttttmr/pi-web-search
直接复用antigravity/gemini-cli/gemini做搜索https://github.com/ttttmr/pi-wakatime
不多说,接入wakatimehttps://github.com/ttttmr/planning-with-files/tree/master/.pi/skills/planning-with-files
移植了plan skill,已经合入主仓库