压缩后,AI还记得什么?——状态保留机制

你有没有遇到过这种情况:跟Claude Code聊了很久,让它回忆之前讨论的内容,它却说"我不太确定"?
这不是AI变笨了,而是压缩后的"失忆"现象。今天咱们聊聊压缩后,AI到底还记得什么。
搬家时的"标签系统"
想象一下你要搬家,但新房子只有原来一半大。你怎么办?
不可能把所有东西都带过去,得有所取舍:
- 扔掉:那些旧报纸、过期的优惠券
- 装箱:不常用的东西,贴上标签放储藏室
- 随身携带:每天用的东西,放随手可及的地方
Claude Code的上下文压缩也是一样的逻辑。
200K token的上下文窗口就像新房子,装不下整个代码库(旧房子)。所以得"搬家"——把旧内容"装箱压缩",只带最重要的。
有损压缩:扔掉什么、留下什么
压缩是"有损"的——就像你把高清照片压缩成微信头像,细节会丢失。
Claude Code扔掉什么:
完整文件内容
- 你之前让AI读了一个5000行的日志文件
- 压缩后,这5000行具体内容没了
- 但AI记得"我读过这个文件"
工具返回的详细结果
- Grep搜索返回了1000个匹配项
- 压缩后,1000个具体匹配没了
- 但AI记得"我搜过,找到了一些结果"
中间思考过程
- AI之前分析了三种方案,选了第二种
- 压缩后,三种方案的细节没了
- 但AI记得"我分析过,选了方案B"
过时的信息
- 之前说"这个bug在v1.0存在"
- 现在版本到v2.0了
- v1.0的信息可以扔了
Claude Code留下什么:
存在性记忆
"我读过 /src/main.rs" "我执行过 git status" "我搜索过 'user authentication'"关键结论
"那个bug在utils.js第45行" "配置文件用YAML格式" "项目用React不是Vue"元数据标签
文件:/src/config.js 读取时间:2026-05-23 10:30 文件大小:2KB 关键内容:数据库配置 引用ID:file-read-12345
这就像搬家后的箱子:你可能不记得箱子里每件东西,但箱子上的标签告诉你"这是冬季衣服"“这是厨房用品”。
元数据:压缩后的"标签"
元数据是压缩后留下的"信息摘要"。
一个典型的压缩后状态:
文件操作记录:
- 路径:/src/auth/login.js
- 操作:FileRead
- 时间:5分钟前
- 关键函数:validatePassword、generateToken
- 引用ID:read-001
- 状态:已压缩(完整内容在磁盘)
工具执行记录:
- 工具:GrepTool
- 搜索:"TODO"
- 结果数:15个匹配
- 关键发现:3个高优先级TODO
- 引用ID:grep-002
- 状态:已压缩(详细结果可重新获取)
AI看到这些,知道:
- “我读过登录相关的代码”
- “我搜过TODO,发现有3个重要的”
- “如果需要详细内容,可以通过引用ID重新获取”
引用链接:需要时重新加载
压缩不是删除,而是"归档到储藏室"。需要时可以"取回来"。
重新加载的方式:
方式1:自动重新读取
当AI需要被压缩的文件时,会自动用FileReadTool重新读取:
AI:我记得之前读过config.js,让我再看看
↓
发现内容已压缩
↓
自动执行 FileReadTool(path: "/src/config.js")
↓
重新获取内容
↓
继续任务
用户几乎感知不到这个过程。
方式2:摘要足够用
有时候不需要完整内容,摘要就够了:
用户:之前那个TODO找到了吗?
AI:找到了,在utils.js第45行,是关于缓存优化的。(不需要重新读取完整文件)
方式3:用户提醒
如果AI似乎忘了关键信息,你可以提醒它:
用户:我们之前不是说好用Redis做缓存吗?
AI:啊对,我想起来了。让我确认一下配置...
(AI根据你的提醒,重新加载了相关上下文)
状态恢复的策略
Claude Code会智能判断是否需要恢复状态:
自动恢复:
- AI引用被压缩的文件时
- 系统自动用FileReadTool重新读取
- 新读取的内容会再次进入缓存
延迟加载:
- 只在需要时才恢复
- 避免不必要的开销
- 类似"懒加载"模式
智能判断:
- AI自己决定"这个信息重要吗?"
- 如果重要,会主动保留或恢复
- 如果不重要,就让压缩掉
这就像你搬家后:
- 每天用的东西放桌上(不压缩)
- 偶尔用的放柜子里(轻度压缩)
- 很少用的装箱放储藏室(深度压缩)
- 垃圾直接扔掉(删除)
实战:应对AI的"失忆"
理解状态保留,能帮你更好地使用Claude Code:
场景1:AI说"我不太确定"
这通常是因为相关信息被压缩了。
应对:主动提醒关键信息
用户:帮我改一下认证逻辑
AI:我不太确定你指的哪个文件...
用户:就是之前我们讨论的 /src/auth/login.js
AI:啊对,我想起来了...
场景2:关键信息放CLAUDE.md
项目级的关键信息放在CLAUDE.md,它会被优先保留:
# CLAUDE.md
## 项目关键信息
- 技术栈:React + TypeScript + Node.js
- 数据库:PostgreSQL
- 认证方式:JWT
- 重要:所有API都需要认证
这些信息在系统提示词里,不会被压缩。
场景3:分段处理长对话
如果对话很长,可以主动结束当前会话,开启新会话:
"我们先到这儿,新开一个会话继续讨论下一个模块"
这样新会话的上下文是干净的,不会受之前压缩的影响。
场景4:理解不是bug
长对话中的"遗忘"是正常机制,不是AI出问题。
就像你跟朋友聊了一整天,他也不一定能记住早上说的每一个细节。
这对构建AI Agent的启示
如果你想构建自己的AI Agent,状态保留是关键:
设计压缩策略:
- 什么可以压缩?(详细内容、中间过程)
- 什么必须保留?(关键结论、用户明确强调的)
- 怎么判断重要性?(用户标记、AI判断、使用频率)
保留元数据:
- 即使压缩内容,也要保留"存在性"
- 提供"引用链接"让内容可恢复
- 记录时间、类型等关键属性
支持状态恢复:
- 提供重新加载内容的工具
- 延迟加载,避免不必要开销
- 缓存恢复后的内容,避免重复加载
总结
压缩后的状态保留机制,让AI能在有限记忆中优雅地工作:
- 有损压缩:保留关键,丢弃细节
- 元数据标签:记得"读过什么",忘了"具体内容"
- 引用恢复:需要时可以重新加载
- 智能判断:AI自己决定什么重要
这就像人类记忆:你记得"昨天看了一篇关于Rust的文章",但不一定记得每句话——如果需要,你可以回去再读。
理解这一点,你就能:
- 理解AI的"失忆"行为
- 主动帮助AI回忆关键信息
- 在自己的AI Agent中实现类似的机制
下篇咱们聊聊微压缩——更精准的上下文修剪。
