🎯 学习目标

完成本章后,你将能够:

  • ✅ 理解 短期上下文 (Context Window)长期记忆 (Long-term Memory) 的区别与协作机制。
  • ✅ 熟练操控 project_context.mduser_preferences.md,注入关键项目知识。
  • ✅ 掌握 上下文压缩摘要策略,在有限 Token 内保留核心信息。
  • ✅ 学会手动干预记忆系统,纠正 AI 的错误认知,防止“幻觉”累积。
  • ✅ 设计一套高效的对话清理与重启流程,保持会话“轻装上阵”。

7.1 Claude Code 记忆系统:长期记忆与项目上下文

Claude Code 不仅仅是“聊完即忘”的聊天机器人。它通过文件系统持久化存储关键信息,形成了独特的混合记忆架构

🏗️ 记忆系统架构解析

记忆类型 存储位置 生命周期 作用 更新方式
会话上下文 内存 (RAM) 当前会话有效 记录当前的对话历史、未完成的代码块、临时变量。 自动追加,随 /clear 或退出清除。
项目记忆 .claude/memory/project_context.md 永久 (直到手动删除) 记录项目架构、技术栈、关键决策、目录结构、业务逻辑。 AI 自动总结 + 用户手动编辑。
用户偏好 .claude/memory/user_preferences.md 永久 (全局或项目级) 记录你的编码风格、常用命令、回复偏好、禁忌事项。 AI 自动学习 + 用户手动配置。
技能库 .claude/skills/ 永久 存储可复用的脚本、Prompt 模板、工作流定义。 用户创建/导入。

📝 核心文件深度解读

1. project_context.md:项目的“维基百科”

这是 AI 理解你项目的基石。

  • 包含内容
    • 架构概览:前端用 React,后端用 FastAPI,数据库用 PostgreSQL。
    • 关键路径:入口文件在哪,配置文件在哪,核心逻辑在哪。
    • 业务规则: “所有金额计算必须精确到小数点后两位”,“用户密码必须加盐哈希”。
    • 历史决策: “2024-03-01 决定弃用 Redux,改用 Zustand”。
  • 如何生效:每次新会话启动时,Claude Code 会自动读取此文件,将其作为“系统预设知识”加载到上下文中。
2. user_preferences.md:你的“私人助理手册”
  • 包含内容
    • 代码风格: “喜欢函数式编程”,“变量命名用 camelCase”,“注释用中文”。
    • 交互习惯: “解释代码时要简洁”,“报错时先给解决方案再给原因”。
    • 禁忌: “不要使用 any 类型”,“不要自动安装依赖”。
  • 价值:避免每次会话都要重复唠叨“请用 TypeScript”、“别写废话”。

🛠️ 记忆管理实战技巧

技巧 1:手动注入“黄金知识”

AI 自动总结的记忆可能不够精准。你可以直接编辑 .claude/memory/project_context.md,强行写入关键信息。

示例

## ⚠️ 重要安全规范
- 严禁在任何日志中打印用户明文密码。
- 所有外部 API 调用必须经过 `AuthService` 进行签名验证。
- 数据库连接字符串必须从 `process.env.DATABASE_URL` 读取。

效果:AI 在后续所有代码生成中都会严格遵守这些红线。

技巧 2:定期“修剪”记忆

记忆文件不是越大越好。过时的信息会干扰 AI 判断。

  • 操作:每隔一段时间(如每个 Sprint 结束),打开记忆文件,删除已废弃的功能描述、旧的技术栈引用。
  • 命令辅助

    “请检查当前的 project_context.md,列出其中可能过时的信息(如已删除的模块、旧版依赖),并建议删除哪些部分。”

技巧 3:利用 /memory 命令动态管理
  • /memory show:查看当前加载的记忆内容。
  • /memory add "新的业务规则...":在不打开文件的情况下,直接追加记忆。
  • /memory clear:清空记忆(慎用!通常只用于测试)。

⚠️ 常见陷阱:记忆污染

  • 现象:AI 坚持认为项目使用旧框架,或者坚持错误的业务逻辑。
  • 原因:早期对话中的错误信息被写入了记忆文件,且未被修正。
  • 解决
    1. 打开 .claude/memory/project_context.md
    2. 找到错误段落,手动修正或删除。
    3. 在对话中明确告知 AI:“我已更新项目记忆,请忽略之前关于 X 的描述,以新记忆为准。”

7.2 优化上下文窗口:如何保持对话的高效性

大模型的上下文窗口(Context Window)虽然很大(如 200k tokens),但并非无限。填满的上下文 = 变慢的速度 + 更高的成本 + 潜在的注意力分散

📉 为什么需要优化?

  1. 成本:输入 Token 越多,API 调用费用越高。
  2. 速度:处理长上下文需要更多计算时间,响应变慢。
  3. 注意力稀释:过多的无关信息会让 AI 难以聚焦核心任务,导致“迷失中间”现象(Lost in the Middle)。

🚀 优化策略大全

策略 1:精准排除 (Exclusion Patterns)

.claude-code.json 中配置 exclude_patterns,从源头阻断无用文件进入上下文。

"context": {
  "exclude_patterns": [
    "node_modules/**",
    "dist/**",
    "*.log",
    "*.min.js",
    "coverage/**",
    ".git/**",
    "docs/old-api-specs/**" // 明确排除旧文档
  ]
}

效果:AI 永远不会主动读取这些文件,除非你显式 /cat 它们。

策略 2:主动清理 (/clear 的艺术)

不要在一个会话中聊到天荒地老。

  • 何时清理
    • 完成一个大模块开发后。
    • 切换完全不同的任务主题时(如从“写后端 API”切换到“写前端 CSS”)。
    • 发现 AI 开始胡言乱语或重复啰嗦时。
  • 操作方法
    1. 先让 AI 总结当前进度:“请将我们刚才完成的功能点和待办事项总结成一段话。”
    2. 将总结复制到剪贴板,或确认已存入 project_context.md
    3. 输入 /clear
    4. 开启新话题:“基于刚才的总结(粘贴总结),我们现在开始做下一件事…”
策略 3:引用而非包含 (Reference vs. Include)
  • 低效做法:把整个 utils.js 文件内容粘贴到 Prompt 里问问题。
  • 高效做法

    “请参考 src/utils.js 中的 formatDate 函数逻辑,为 src/helpers.js 编写一个类似的 formatCurrency 函数。”
    原理:Claude Code 会自动按需读取文件,只将相关片段加载到上下文中,而不是全量加载。

策略 4:摘要压缩 (Summarization)

对于长对话历史,使用 AI 自身的能力进行压缩。

  • 指令

    “我们之前的对话太长了。请将过去 50 轮对话的核心决策、代码变更和遗留问题,压缩成 200 字的摘要。我将用这个摘要开启新会话。”

  • 应用:将生成的摘要作为新会话的开场白,瞬间恢复上下文,同时释放 90% 的 Token 空间。
策略 5:分治法 (Divide and Conquer)

面对超大型任务(如“重构整个项目”),不要试图在一个上下文中完成。

  • 方法
    1. 创建多个独立的会话窗口(Terminal Tab)。
    2. 会话 A 专攻 src/auth 模块。
    3. 会话 B 专攻 src/payment 模块。
    4. 每个会话只加载相关文件的上下文,互不干扰。

📊 上下文健康度自检清单

在长对话过程中,定期问自己:

  • AI 是否开始重复之前的回答?
  • AI 是否忽略了最近的指令,反而去执行很早之前的建议?
  • 响应时间是否明显变慢?
  • Token 消耗是否异常激增?

如果以上任一答案为 ,请立即执行 /clear + 摘要重启 流程。


🧪 动手练习:掌控记忆与上下文

练习 1:构建项目知识库

  1. 打开 .claude/memory/project_context.md
  2. 手动添加三段关键信息:
    • 项目的核心业务目标(一句话)。
    • 当前使用的关键技术栈版本(如 Node v18, React v18)。
    • 一条不可违反的安全红线。
  3. 启动新会话,询问 AI:“这个项目的主要技术栈和安全红线是什么?”
  4. 验证 AI 能否准确回答。

练习 2:上下文压缩实验

  1. 进行一轮长对话(约 20 轮),涉及代码生成、修改、调试。
  2. 记录当前会话的 Token 消耗(如果终端显示)或估算长度。
  3. 指令 AI:“请总结本次会话的所有关键产出和待办事项,压缩至 300 字以内。”
  4. 执行 /clear
  5. 将总结发给 AI,继续一个新任务。
  6. 对比清理前后的响应速度和准确度。

练习 3:排除规则测试

  1. 在项目中新建一个大文件 big-data.log (填入大量随机文本)。
  2. 确保 .claude-code.json 中排除了 *.log
  3. 问 AI:“请分析 big-data.log 的内容。”
  4. 预期结果:AI 应拒绝读取或提示文件被排除,而不是尝试分析(这证明排除规则生效,节省了上下文)。
  5. 然后尝试 /cat big-data.log,验证手动强制读取是否可行。

❓ 常见陷阱与解答 (FAQ)

问题 原因分析 解决方案
AI 总是忘记之前的约定 约定只在对话历史中,未写入长期记忆;或对话太长被挤出上下文。 将重要约定写入 project_context.mduser_preferences.md
Token 消耗过快 包含了大量无关文件(如 node_modules);或未定期 /clear 检查 exclude_patterns;养成每完成一个任务就 /clear 的习惯。
记忆文件冲突 多人协作时,每个人修改记忆文件导致冲突。 约定只有 Tech Lead 可修改核心记忆文件,或使用 Git 分支管理记忆文件。
AI 读取了不该读的文件 文件名未在排除列表中,或被 /cat 强制读取。 完善排除列表;敏感文件放入 .gitignore 并设置权限禁止 AI 访问(需底层支持)。

📝 本章小结

  • 记忆系统是 AI 的“海马体”:通过 project_context.mduser_preferences.md 实现知识的持久化,让 AI 越用越懂你。
  • 上下文窗口是稀缺资源:必须通过 排除规则定期清理摘要压缩分治策略 来精细化管理。
  • 主动干预是关键:不要完全依赖 AI 自动管理记忆,人工定期修剪和注入“黄金知识”能显著提升效果。
  • 健康度自检:时刻关注响应速度和准确性,及时重启会话,保持 AI“头脑清醒”。

🚀 下一步预告
拥有了记忆和高效的上下文管理后,我们将进入 第 8 章:技能系统 (Agent Skills),学习如何将常用的复杂操作封装成“一键技能”,让 AI 真正变成你的超级工具箱!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐