让AI主动管理自己的上下文
嗯,用户让我用中文帮他总结一下这篇文章,控制在100字以内,而且不需要用“文章内容总结”这样的开头。直接写文章描述即可。 首先,我需要通读整篇文章,理解其主要内容。文章主要讨论了上下文管理在AI中的应用,特别是如何主动清理和管理上下文。作者提到目前大部分上下文管理关注的是存储和检索,而清理部分讨论较少。现有的清理方法主要是基于阈值触发压缩,但作者认为这种方法不够主动。 接着,作者引入了d-mail功能和pi agent的概念。d-mail允许AI在发现低信息密度操作时回溯时间,并通知之前的自己。pi agent则提供了树形存储结构,支持更灵活的上下文管理和跳转。作者还提到git-like的工作流类比,将每条消息视为提交,通过标签和日志来精简上下文。 最后,作者开发了一个工具包,并鼓励试用和迁移至其他工具。 现在我需要将这些内容浓缩到100字以内。重点包括:上下文管理的现状、d-mail和pi agent的功能、git-like的工作流、工具包的开发以及应用前景。 总结起来:文章探讨了AI上下文管理的现状与改进方法,提出主动清理策略,并引入d-mail和pi agent实现树形存储与时间回溯功能。通过git-like工作流优化上下文精简,并开发工具支持agent自主管理。 </think> 文章探讨了AI上下文管理的现状与改进方法,提出主动清理策略,并引入d-mail和pi agent实现树形存储与时间回溯功能。通过git-like工作流优化上下文精简,并开发工具支持agent自主管理。 2026-2-8 12:30:2 Author: blog.xlab.app(查看原文) 阅读量:2 收藏

是时候让上下文管理也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
2
3
4
5
6
7
8
9
├─ user: "开发一个X功能"
│ └─ assistant: "plan..." <- 1. base分支
│ ├─ user: "尝试用A方法开发" <- 2. 在base分支新建分支git branch-1
│ │ └─ assistant: "work..."
│ │ └─ [......]
│ │ └─ user: "不太行" <- 3. 产生了一堆commit后,此时创建一个mr合并到base
│ └─ sum: "尝试了A方法..." <- 4. 不以全部commit提交,而是精简为一个mr-commit
│ └─ user: "尝试用B方法开发" <- 5. 继续开发
│ └─ assistant: "..."

左边的就是pi tree提供的结果,同时pi session中每条message id也是8位hex,那么只要在tree的结果中,把每个消息前把ID加上,agent带着目标ID调一下tree就可以了

但是在产生了一堆对话之后,session tree会非常巨大,AI看一眼tree上下文就炸了,所以必定要做精简

构建上下文感知

借用git tag的概念,提供一个工具让AI主动的标记任务进度,基于用户消息+Tag构建更加精简的上下文骨架

于是设计了3个工具

context_taggit tag,标记任务进度
context_loggit log,查看上下文骨架
context_checkoutgit checkout,在骨架上跳转

为了能让AI更好的形成“构建-感知-压缩“循环

出了上下文骨架之外,还应该感知上下文占用情况、对话深度,离最近的tag有多远,提醒打即使打tag,前置设计了一个HUD

最终的context_log大概是这样

1
2
3
4
5
6
7
8
9
[Context Dashboard]
• Context Usage: 0.9% (8.2k/1.0M)
• Segment Size: 4 steps since last tag 'exp-b-start'
---------------------------------------------------
| ba87607d [MODEL_CHANGE]
| eacb45e0 [SUMMARY] Experiment A failed. Starting Experiment B.
| 2366e20a (tag: exp-b-start) [AI] (system action)
: ... (2 hidden messages) ...
* 25dbfe72 (HEAD) [TOOL] (write) Successfully wrote 23 bytes to experiment.js

Skill

插件还补充了一个skill,指导agent如何使用,何时使用,怎么打tag,怎么checkout,什么是好的checkout message

不多介绍了,都放在这里可以直接看 https://github.com/ttttmr/pi-context

说实话,我也不知道效果好不好,欢迎试用

1
2
npm install -g @mariozechner/pi-coding-agent
pi install npm:pi-context

最后

理论上也可以迁移到其他的工具上,毕竟都有session存储,想办法编辑和重载即可

这是回滚上下文,如果结合可回滚的文件系统,在checkout时能可选回滚文件应该也很有用

广告

我开发了其他的pi扩展,欢迎使用


文章来源: https://blog.xlab.app/p/6a966aeb/
如有侵权请联系:admin#unsafe.sh