ARTICLE · 1028588
AI 编程助手 30 分钟就失忆,context-mode 给它装了一套内存管理
MOGE / ARTICLE
AI 编程助手 30 分钟就失忆,context-mode 给它装了一套内存管理
你有没有过这样的经历:让 AI 助手帮你查一份日志、抓一个网页、翻二十条 GitHub issue,它很听话地全都读了一遍,然后——上下文窗口满了。
紧接着对话被压缩,前面改到哪个文件、任务进行到哪一步、你刚才纠正过它什么,全都忘了。你只能重新解释一遍,它再重新读一遍,如此反复。
这不是模型不够聪明,而是上下文窗口的用法出了结构性问题。GitHub 上这个叫 context-mode 的开源项目,今年二月才开源,如今 Star 已经冲到两万二以上,还上过 Hacker News 榜首。它要解决的,恰恰是这件事。
—————— ✦ ——————
本文看点
01
这些痛点,你是不是每天都在忍
02
它到底是什么
03
十一个工具,构成它的核心
SECTION 01
这些痛点,你是不是每天都在忍
❌ 每次工具调用都在往上下文里倒原始数据。一次 Playwright 页面快照 56 KB,二十条 GitHub issue 59 KB,一份访问日志 45 KB。半小时过去,四成上下文就没了,而真正的任务还没开始。
❌ 压缩之后模型直接失忆。对话被裁掉一半,它不记得正在改哪个文件,不记得那个报错到底解决没有,更不记得你十分钟前明确否掉过的方案。
❌ 输出侧也在漏。模型把大量词元花在客套、铺垫和重复解释上,输入输出两头一起烧。
❌ 大文件、长日志根本喂不进去。要么手工截断丢信息,要么干脆放弃分析,最后自己肉眼去看。
❌ 同一份数据被重复读好几遍。上个对话读过的文档,新开一个对话又要从头读一遍,一个字的记忆都没有留下。
❌ 密钥和敏感数据没人管。工具把带 token 的请求原文一五一十写进会话记录,谁也不知道。
—————— ✦ ——————
“上下文窗口不是垃圾桶。真正值钱的不是塞进去多少数据,而是模型最后看懂了什么。”
—————— ✦ ——————
SECTION 02
它到底是什么
context-mode 是一个 MCP 服务器,插在 AI 编程助手和外部工具之间,专门决定什么该进上下文、什么不该进。它把自己定位成“上下文问题的另一半”:别人在优化模型怎么想,它在管数据怎么流。
它的思路可以拆成四层。
第一层,上下文节约。 所有重型操作都被扔进隔离的子进程里跑,只有最终结果——通常几百字节——回到对话。日志原文、接口响应、页面快照,从头到尾没进过上下文。
第二层,会话连续性。 文件编辑、git 操作、任务进度、报错、你的每一次决策,都记进本地数据库。对话被压缩时,它不把老数据重新倒回来,而是切块存进全文索引,再用相关性算法只捞回当下需要的那几条。你重新打开对话,模型能直接接着上次的位置往下走;如果不显式选择继续,旧会话数据会被立刻清掉,新会话就是干净的一张白纸。
第三层,让模型写代码而不是读数据。 这是最有意思的一条。要统计五十个文件里各有多少行,不该把五十个文件全读进上下文,而应该写一个脚本去数,只把打印结果拿回来。一次脚本调用替代十次文件读取,上下文能差出两个数量级。它的原话是:别把大模型当数据处理机,把它当代码生成器。
第四层,不干涉模型的表达。 它只管道数据往哪儿走,不规定模型该怎么说话——答案该简洁还是该详尽,交给你和你的提示词决定。因为已经有人验证过,一味逼模型短话少说,反而会把编码和推理的表现拉低。
—————— ✦ ——————
SECTION 03
十一个工具,构成它的核心
| 工具 | 它做什么 | 省下多少 |
|---|---|---|
| 批量执行 | 一次调用批量跑多条命令加多个查询 | 986 KB → 62 KB |
| 沙箱执行 | 在隔离环境里运行 12 种语言的代码,只有标准输出进上下文 | 56 KB → 299 B |
| 文件处理 | 直接在沙箱里处理文件,原文不外流 | 45 KB → 155 B |
| 抓取索引 | 抓取网页、切块、建索引,默认缓存 24 小时 | 60 KB → 40 B |
| 内容索引 | 把文档切块写入全文索引 | 60 KB → 40 B |
| 内容检索 | 对已索引内容做多查询检索 | 按需取回 |
| 用量统计 | 展示节省比例、调用次数与会话统计 | — |
| 环境体检 | 检查运行时、钩子、索引与版本 | — |
| 版本升级 | 拉到最新版本并重新配置钩子 | — |
| 索引清空 | 彻底删除知识库里的全部索引内容 | — |
| 团队看板 | 打开托管看板,查看团队级统计 | — |
沙箱本身跑在独立子进程里,脚本之间互相看不到内存和状态。可用运行时共十二种:JavaScript、TypeScript、Python、Shell、Ruby、Go、Rust、PHP、Perl、R、Elixir 和 C#;检测到 Bun 时,JS 与 TS 的执行还会快上三到五倍。
已登录的命令行工具也能照常用,gh、aws、gcloud、kubectl、docker 通过凭证透传继承环境变量和配置路径,但这些凭证不会暴露给对话。当输出超过 5 KB 且调用方给了意图描述,系统会切换到意图驱动的过滤:先整段索引,再按意图检索,只返回匹配的片段,并附上一组可以继续追问的关键词,避免一次吐出一整片无关内容。
在平台适配上,它对不同客户端的支持程度做了明确分级:
| 支持程度 | 代表平台 | 实际效果 |
|---|---|---|
| 完整钩子 | Claude Code、Codex CLI、GitHub Copilot、Gemini CLI、OpenCode、Kiro、OpenClaw 等 | 约 98% 上下文节约,压缩后可自动恢复工作状态 |
| 部分钩子 | Cursor 等 | 节约比例接近,会话恢复仍受上游限制 |
| 仅指令文件 | Zed、Antigravity 等 | 约 60% 节约,需要手动放一份说明文件 |
—————— ✦ ——————
SECTION 04
亮点
✅ 省得是真的。官方基准里,一次完整会话中 315 KB 原始输出被压到 5.4 KB,降幅 98%,会话有效时长从约 30 分钟拉长到约 3 小时。从页面快照到测试输出,二十多个场景都给了前后对照。
✅ 十七个客户端通吃。Claude Code、Codex CLI、Cursor、GitHub Copilot、Gemini CLI、Zed、Kiro 等主流 AI 编程工具基本都在名单里,并针对每个平台的钩子机制单独做了适配,而不是发一份配置文件了事。
✅ 一切本地化。没有遥测,没有云同步,不需要注册账号,数据库就落在你自己的家目录,会话结束即消失。
✅ 隐私不靠承诺,靠架构。原始数据既然从没进入过上下文,也就不存在被上传这一步。这是设计选择,不是待补的功能。
✅ 沿用你已有的权限规则。你在配置里禁掉的提权命令、禁读的环境变量文件,在沙箱内部同样生效;带 token 的调用参数会先被正则脱敏成占位符,再写进会话记录。
✅ 边界防护做得具体。项目外的文件读取默认被拒绝,想放行得复用你原本就写好的授权规则;项目内的软链接若指向外部,同样会被拦下,堵住了“宿主拦一次、换个工具再试一次”的老漏洞。
✅ 网络抓取默认加固。只放行 http 和 https;云厂商元数据地址、链路本地地址、组播段一律硬拦,防住域名重绑定这类把戏;本机与内网地址则默认放行,不影响本地开发。
✅ 检索链路做得细。倒数排名融合、邻近重排、模糊纠错、缓存与渐进节流,检索质量是朝着正经搜索系统对齐的。
✅ 态度克制。作者明确说执行类工具继承进程权限,边界防护只是纵深防御的一层,不是完整的系统沙箱——该交给宿主的安全职责,不越权揽过来。
—————— ✦ ——————
“上下文优化的终点,不是让模型忘得更快,而是让它在需要的时候,恰好想起该想起的东西。”
词元越来越便宜,但注意力从来没有便宜过。窗口再大,塞满原始数据的窗口也依然是低效的窗口。context-mode 真正值得学的地方,是把上下文预算当成一等资源去经营:该留在外面的数据留在外面,该记住的事记在本地,该取的时候精确取回。对那些每天和 AI 助手一起写代码的人来说,这可能比模型再强一点更实用。
—————— ✦ ——————
开源信息
项目:context-mode
仓库:https://github.com/mksglu/context-mode
官网:https://context-mode.com
作者:mksglu
Star:22.4k+
Fork:1.6k+
主要语言:TypeScript
许可:Elastic License 2.0,源码可获取
数据:用户量 56.2 万以上,npm 下载 52.7 万以上,曾登上 Hacker News 榜首