解码 Claude Code(三)— 记忆与上下文:让 AI 不再健忘

当 AI 遇上金鱼脑

你有没有经历过:跟 Claude Code 讨论复杂功能,聊了半小时,上下文越来越长,突然它开始忘记之前的约定,重复已做过的修改,甚至"反悔"之前的共识。

这不是 bug,这是大语言模型的天性。

记忆与碎片

TypeScript 社区知名开发者 Matt Pocock 做过精妙的比喻:LLM 就像电影《记忆碎片》的主角——每隔几分钟失去短期记忆,只能靠纹身和照片维持对世界的理解。每次上下文窗口被清除,AI 就回到初始状态。

理解了这一点,你就明白了 Claude Code 上下文管理的设计哲学:不是消灭遗忘,而是对抗遗忘

Smart Zone 与 Dumb Zone:上下文窗口的隐形红线

当上下文 token 数量低于 10 万时,模型处于 "Smart Zone"——反应敏捷、逻辑清晰。一旦越过这条线,模型跌入 "Dumb Zone":遗漏指令、重复自身、矛盾判断。

这不是渐进式的衰退,而是断崖式的。就像一个人从清醒到醉酒,中间没有"微醺"的过渡。

标准会话经历四个阶段:系统提示 → 探索 → 实现 → 测试。每个阶段都在往上下文塞信息,不管理就会从 Smart Zone 滑向 Dumb Zone。

记忆与上下文管理系统,正是维持 AI 代理长期有效性的基础设施。

CLAUDE.md:项目的灵魂文件

代码与文档

如果说提示词是给 AI 的指令,那么 CLAUDE.md 就是给 AI 的"世界观"。它定义了项目的编码规范、架构偏好、技术决策背景——所有那些让一个新成员快速融入团队的"潜规则"。

CLAUDE.md 的加载分两条路径:

  • 祖先加载(Ancestor Loading):Claude Code 启动时,从项目根目录开始向上遍历目录树,依次加载每一层的 CLAUDE.md。这意味着项目根目录的全局规则会在第一时间注入上下文。
  • 后代加载(Descendant Loading):当你在操作某个子目录时,Claude Code 会向下遍历并懒加载该子目录的 CLAUDE.md。这保证了子模块的特定规则只在需要时才被激活。

三层配置形成了一个优雅的层级:全局(~/.claude/CLAUDE.md)→ 项目根 → 子目录。全局配置管通用偏好(比如"用中文注释"),项目配置管架构约定(比如"使用 Repository 模式"),子目录配置管局部细节(比如"这个模块用 Rust 编写")。

更贴心的是 CLAUDE.local.md。个人偏好写在这里——喜欢的调试方式、本地环境配置——加入 .gitignore 即可避免团队冲突。兄弟目录的 CLAUDE.md 互不加载,避免无关上下文污染。

Rewind:与其修补,不如重来

很多开发者的习惯:AI 犯错了,立刻在当前上下文中纠正它。

回退与重置

这是一个陷阱。

每一次修补都在上下文留下错误痕迹。之前的错误推理链依然占据空间,随着修补次数增加,上下文越来越脏——恶性循环。

Claude Code 提供了更好的方案:/rewind 命令。它允许你回退到之前的任意一个正确状态,就像 Git 的 revert 一样,彻底抹去错误操作的影响。按两次 Esc 键可以撤销上一步操作,简单粗暴但极其有效。

回退到正确状态,永远比从错误状态修补更高效。这不是偷懒,这是工程智慧。

Compact 还是 Fresh?上下文的两个出口

面对一个膨胀的上下文窗口,Claude Code 提供了两条出路:

  • Compact(紧凑化):将当前上下文压缩为摘要,保留关键信息,丢弃冗余细节。适合正在进行中的任务,你不想丢失整体进展,但需要腾出空间。
  • Fresh Session(全新会话):彻底重开一个干净的上下文。适合切换到新的子任务,或者当前会话已经被严重污染。

一个常见的误区是认为"长上下文 = 更好的理解"。事实恰恰相反。在上下文窗口中,信息的密度比总量更重要。一个被紧凑化后的摘要,往往比包含所有对话历史的原始上下文更能引导模型做出正确判断。

不要咬下比你能咀嚼的更大的东西。—— Matt Pocock

这条建议对人类和 AI 都适用。把复杂任务拆分成可以在单个会话中完成的子任务,每个子任务结束后 compact 或开新会话,远比试图在一次超长会话中搞定一切要高效得多。

子代理的真正价值:隔离,而非并行

很多人理解子代理(Subagent)时,第一反应是"并行执行、提升速度"。但 Claude Code 团队的设计意图远比这深刻:子代理的核心价值是隔离

系统架构与隔离

想象一下:你需要在一个大型代码库中搜索所有使用了废弃 API 的地方。如果把搜索结果全部堆在主会话的上下文里,会急剧消耗 token 预算,把主会话推向 Dumb Zone。但如果用一个专门的 Explore 子代理来做这件事——它使用更轻量的模型,只配备只读工具,完成后只把精炼的结果返回给主会话——主会话的上下文始终保持干净。

更强大的是 isolation: worktree 模式。子代理在一个临时的 Git 工作树中运行,可以自由修改代码而不影响主工作区。任务完成后,如果结果令人满意,就合并回来;如果不满意,直接丢弃——临时工作树会被自动清理。这种"沙箱"式的隔离,让 AI 代理可以大胆尝试而不怕搞砸。

RPI 方法论中的上下文哲学

RPI(Research-Plan-Implement)是使用 AI 编程代理的最佳实践框架。在上下文管理方面,它有一个常被忽视的原则:Research 阶段应该"压缩真相"

什么是"压缩真相"?就是在研究阶段只收集客观信息——代码结构、API 签名、数据流向——而不掺杂任何关于"应该怎么构建"的主观判断。常见错误是在研究阶段就告诉模型"我们要用 Redux 重构状态管理",这会导致模型在后续阶段带着预设观点去工作,产出的是 opinions 而非 facts。

不要外包思考。—— Dexter Horthy

这句话的核心意思是:研究阶段的工作应该由你来主导方向,AI 负责收集信息和执行。把"思考"外包给 AI,往往得到的是听起来合理但脱离实际的方案。只有当你自己对问题有清晰的理解,才能有效地引导 AI 产出真正有价值的代码。

三级记忆:让 AI 具备跨会话经验

最后,让我们把视角从单次会话拉到长期项目的维度。Claude Code 的记忆系统分为三级:

  • User 级别:个人偏好和通用习惯,跨项目生效。比如"我偏好函数式编程风格"。
  • Project 级别:项目特定的知识和约定,同一项目的所有会话共享。比如"认证模块使用 JWT + Refresh Token 方案"。
  • Local 级别:本地环境特有信息,不入版本控制。比如"本地数据库端口是 5433"。

项目级记忆是其中最有价值的。它让 AI 代理具备了跨会话记忆能力——昨天讨论的架构决策、上周发现的技术债、上个月踩过的坑,都可以被持久化存储并在新的会话中被激活。对于长期维护的项目来说,这几乎是必需品。

一个新人加入项目需要数周才能建立起的"项目常识",AI 代理通过项目级记忆几秒内就能加载完毕。

写在最后

理解 Claude Code 的记忆与上下文管理,本质上是在理解一件事:AI 的智能是有限的,但通过好的工程实践,我们可以让有限的智能发挥出最大的效用

CLAUDE.md 是灵魂,/rewind 是兜底,compact 是效率保障,子代理是隔离利器,三级记忆是经验传承。它们共同让 AI 代理从"每次重新开始"进化为"持续积累"。

下一期,我们将深入 Claude Code 的安全模型——当 AI 拥有文件系统读写权限时,如何确保它不失控。敬请期待。

Views: 4

Views: 34

解码 Claude Code(二)— 架构哲学:为什么 CLI 形态赢了

从一个周末项目到 Anthropic 最受关注的开发者工具

2024 年 9 月,Anthropic 的工程师 Boris Cherny 为了测试 API,随手写了一个终端工具。这个工具没有花哨的界面,没有精心的产品规划,甚至连"做成终端形态"都不是有意为之。然而就是这个"随手一写"的东西,在不到一年时间里成了全球开发者圈子里讨论热度最高的 AI 编程工具之一。

在 Every 播客上,Claude Code 的产品经理 Cat 坦言:"我们没打算把终端做成最终形态。"但现实比计划更有说服力——CLI 形态不是退步,而是一次被偶然发现的进化。

终端代码界面

为什么开发者不愿意离开终端?答案藏在注意力流里。一个开发者写代码时,终端、编辑器、浏览器文档构成一个紧凑的工作三角。每一次切换到新的窗口,都在打断深度思考的状态。Copilot 和 Cursor 把 AI 嵌入编辑器是对的,但它们把开发者框在了 AI 定义的世界 里——你得在 AI 的聊天窗口里提问,在 AI 的面板里审查代码,按照 AI 设定的交互模式工作。

Claude Code 做了一件截然不同的事:它让 AI 进入开发者的世界。你不需要去任何新的界面,AI 就在你每天敲命令的地方,用你熟悉的工具,操作你熟悉的文件系统。这个方向性的差异,决定了两个截然不同的能力上限。

给 AI 一个 Bash Shell,等于给它整个世界

Claude Code 团队经历过一个被内部称为"第一个 AGI 时刻"的故事。当他们把 bash 工具交给 Sonnet 3.5 时,模型做了一件没人预料到的事:它写了 AppleScript,去查询 Boris 正在听的 Spotify 音乐。

没有人教过它写 AppleScript。没有人给它配置过 Spotify API。它只是拥有了一个 shell,然后自己找到了答案。这个瞬间揭示了一个深刻的架构哲学:通用工具 > 专用工具。

当你给 AI 一个 bash shell,你不是给了它一个工具——你给了它一个可以自己制造工具的工具。

这种哲学直接体现在 Claude Code 的工具设计上。你可能以为,这么强大的工具一定集成了几十种专用能力。事实恰恰相反——Claude Code 只有大约十几个核心工具,而且团队每周都在评估,该添加哪些、该移除哪些,以保持工具集的简洁。

同样的"少即是多"原则也体现在 MCP(Model Context Protocol)生态中。社区经过大量实践后形成了一个共识:日常使用 4 个 MCP 服务器就够了,装 15 个反而会让模型选择困难,效率直线下降。这和人类面对太多选择时的决策疲劳完全一样。

代码与架构

五层配置:从混乱到秩序

一个严肃的 CLI 工具如果不解决配置问题,很快就会在企业环境中碰壁。Claude Code 设计了一套五层配置架构,每一层都有明确的优先级和适用场景:

  • 托管设置(Organization Managed)——组织级强制策略,所有下级无法覆盖。企业的安全团队在这里锁定红线。
  • CLI 参数——单次调用的临时覆盖,适合实验和调试。
  • 本地项目配置(.claude/settings.local.json)——个人开发偏好,不提交到 Git。
  • 共享项目配置(.claude/settings.json)——团队统一规范,提交到 Git 仓库,所有人共享。
  • 用户全局配置(~/.claude/settings.json)——跨项目的个人默认设置。

这个设计的精妙之处在于:它同时满足了 企业管控、团队协作和个人自由 三个往往互相矛盾的需求。安全团队可以在托管层禁止一切网络访问,团队负责人可以在共享层规定允许的文件目录,而个人开发者仍然可以在本地层加入自己喜欢的别名和快捷方式。

权限系统同样遵循清晰的优先逻辑:deny > ask > allow。如果任何一层设置了 deny,无论其他层怎么配置,这个行为都会被拒绝。这和防火墙的"默认拒绝"理念一致——安全永远是第一优先级。

沙箱模式进一步加固了安全边界:文件系统读写隔离、网络域名白名单和黑名单、进程执行的精细控制。Claude Code 可以在严格受限的环境中运行,这对于企业场景至关重要。

还有一个容易被忽略但非常实用的设计:模型的 effort level 可以跨会话持久化。你设置了 high effort,关掉终端再打开,它还记得。这个细节说明 Claude Code 不把每次交互当成孤立的请求,而是当成一个持续的工作会话。

系统架构设计

为未来六个月构建

Boris Cherny 有一个被团队反复引用的产品理念:"不要针对今天的模型能力设计产品。为未来 6 个月的模型构建。"

这句话听起来像是冒险——如果 6 个月后的模型没有如预期进步怎么办?但如果你仔细想想,这恰恰是 AI 产品成功的核心逻辑。AI 模型的能力在以季度为单位飞速迭代,如果你按照今天的限制来设计产品架构,6 个月后你的产品就会被模型的能力甩在后面,成为"旧范式"。

大多数软件产品的设计假设是:底层能力是稳定的。但 AI 产品必须假设底层能力是快速进化的。架构的职责不是适配今天的模型,而是为模型的成长预留空间。

这个理念直接影响了 Claude Code 的功能取舍。很多"今天的模型做不到"的功能,团队依然保留了接口和架构支持。他们赌的不是今天的 Sonnet 能完成,而是 6 个月后的新模型能完成。而历史证明,这个赌注到目前为止是赢的。

Command → Agent → Skill:三层分离架构

Claude Code 的内部架构遵循一个清晰的三层模型:

  • Command 层——用户交互入口。它负责理解用户意图、编排任务流程、决定调用哪个 Agent。
  • Agent 层——执行引擎。Agent 使用预加载的技能获取数据、调用工具、执行具体操作。
  • Skill 层——能力单元。每个 Skill 独立生成输出,专注于单一任务。

这种分离的好处是显而易见的:每一层都可以独立迭代。你可以新增一个 Skill 而不影响 Command 层的编排逻辑;你可以优化 Agent 的工具选择策略而不改变 Skill 的输出格式。

更有意思的是模型选择策略:"入口轻、执行重。"Command 层只需要理解意图和分发任务,可以用更快、更便宜的模型;Agent 和 Skill 层需要深度推理和代码生成,值得投入更强的模型。这种分层资源配置的思路,和微服务架构中"网关用轻量实例、核心服务用高配实例"如出一辙。

未来科技架构

与 Copilot 和 Cursor 的本质区别

最后回到那个最根本的问题:Claude Code 和 GitHub Copilot、Cursor 到底有什么不同?

表面上看,差异是界面形态——一个在终端,一个在 IDE。但真正的差异是权力方向

  • Copilot / ChatGPT / Cursor:用户在 AI 的世界里工作。AI 提供了一个聊天框、一个面板、一个侧边栏,你进入它的领地,按照它的规则交互。
  • Claude Code:AI 在用户的世界里工作。AI 进入你的终端,读取你的文件,运行你的命令,融入你已有的工作流。

这不是一个微小的产品偏好差异,而是一个根本性的架构分叉。前者的上限是"AI 能构建多好的交互环境";后者的上限是"用户已有的环境有多强大"——而答案显然是,用户的真实环境(终端 + 文件系统 + 所有已安装的工具 + 互联网)比任何 AI 能构建的沙箱都要强大得多。

Claude Code 的架构哲学可以用一句话概括:不要把用户带到 AI 的世界,把 AI 带到用户的世界。从这个起点出发,CLI 不是退步,不是技术选型的妥协,而是通往更高能力上限的必经之路。

一个 bash shell,胜过一百个专用 API。少即是多,开放优于封闭。为未来构建,而非为现在妥协。这些不是口号,而是 Claude Code 用代码验证过的架构真理。

Views: 8

Views: 27

解码 Claude Code — Anthropic 的 AI 编程革命(一)

# 解码 Claude Code — Anthropic 的 AI 编程革命(一)

这是一个改变软件开发方式的工具,而它的起点,不过是一次意外的 API 测试。

代码屏幕

从一个”意外”说起

2024 年 9 月,Anthropic 的一位工程师为了方便测试自家 API,随手写了一个终端命令行工具。他给了模型一个 bash shell,想看看会发生什么。

模型做的第一件事,是写了一段 AppleScript,查询他正在听什么音乐。

那一刻,他意识到:模型不只是想回答问题——它想用工具

这个工程师叫 Boris Cherny,他创造的这个"顺手写的 CLI 工具",就是今天被全球开发者疯狂使用的 Claude Code

终端界面

Claude Code 是什么

一句话:Claude Code 是一个运行在终端里的 AI 编程助手,它能读写你的代码、执行命令、管理项目,像一个不知疲倦的结对编程搭档。

它不是 Copilot 那样的代码补全工具,也不是 ChatGPT 那样的问答机器人。它直接住在你的终端里,拥有 bash 权限,能操作文件系统,能调用 Git,能运行测试——它是一个有手脚的 AI

如果你用过命令行,你大概能理解这种感觉:你不用离开终端,不用切换窗口,只需要用自然语言描述你想做什么,它就帮你做了。

AI 概念

为什么它值得关注

几个数字:

  • GitHub 上 4% 的代码提交已经由 Claude Code 完成,Boris 预计年底将达到 20%
  • Anthropic 工程团队生产力提升 200%,Boris 本人每天发布 10-30 个 PR,100% 由 AI 生成
  • Anthropic 内部 70-80% 的技术人员每天都在使用它
  • 内部反馈频道每 5 分钟就有一条新帖子

这不是实验室里的 demo,这是一个已经被自家工程师"吃"到离不开的生产力工具。

核心能力速览

Claude Code 的能力可以归纳为五个维度:

1. 代码理解与生成

它能读懂整个代码库的上下文,不只是当前文件。你说"帮我把这个函数重构一下",它知道这个函数被谁调用、影响了哪些模块、测试该怎么改。

2. 终端原生操作

它有 bash 权限。能装依赖、跑测试、查看日志、操作 Git。这意味着它可以完成完整的开发循环,而不是只生成一段代码让你自己粘贴。

3. 记忆与上下文管理

通过 CLAUDE.md 文件,它记住了项目规范、团队约定、技术栈偏好。它不是每次从零开始的——它"认识"你的项目。

4. 技能系统

类似插件机制,但更灵活。你可以给它装"技能"——代码审查、批量重构、定时任务、浏览器自动化。技能用 Markdown 编写,门槛极低。

5. 多代理协作

它可以派出"子代理"并行工作。一个负责搜索代码,一个负责写实现,一个负责跑测试。多个 AI 实例协同完成复杂任务,就像一个微型开发团队。

团队协作

背后的男人 — Boris Cherny

Claude Code 的创造者 Boris Cherny 并非 AI 领域出身。他在 Meta 工作了 7 年,经历了 4 次晋升,负责过 Facebook、Instagram、WhatsApp、Messenger 的代码质量。他让工程生产力提升了两位数百分比。

2024 年加入 Anthropic 后,他提交的第一个 PR 因为是手写的,被同事拒绝了——"你应该用 Claude 来写代码"。

这个反讽成了 Claude Code 诞生的催化剂。

Boris 的核心产品哲学很有意思:

  • 潜在需求(Latent Demand):不要问用户想要什么,观察他们如何"滥用"现有功能。Facebook Marketplace 的诞生是因为 40% 的群组帖子都是买卖内容。
  • 为未来 6 个月构建:不针对今天的模型能力设计产品,而是预测半年后模型能做什么。
  • 吃自己的狗粮(Anthropic 版叫 "ant fooding"):70-80% 的内部日活不是强制要求,是自发传播。

一个更大的图景

Karpathy(OpenAI 联合创始人、前 Tesla AI 总监)在 2025 年底说过一句话:

作为程序员,我从未感到如此落后。

他把软件发展分成三个阶段:

  • Software 1.0:人类写显式规则(if-else、for 循环)
  • Software 2.0:人类定义架构,机器学习权重(神经网络)
  • Software 3.0:人类写提示和上下文,AI 生成一切

Claude Code 正是 Software 3.0 的代表。在新的范式里,编程不再是敲代码,而是描述你想要什么,然后让 AI 去做

未来科技

这不是遥远的未来。Boris 本人已经 100% 使用 AI 编写代码。Anthropic 的代码库里,每天有数百个 PR 完全由 Claude Code 生成。

系列预告

这是《解码 Claude Code》系列的第一期,我们聊了它是谁、从哪来、为什么重要。

接下来的 7 期,我们将深入拆解它的每一个核心模块:

  • 第二期:架构哲学 — 为什么 CLI 形态赢了?bash 权限意味着什么?
  • 第三期:记忆与上下文 — 如何让 AI 不再"健忘"?
  • 第四期:技能系统 — 用 Markdown 打造可复用的 AI 能力
  • 第五期:多代理协作 — 从单兵作战到 AI 军团
  • 第六期:实战技巧 — Boris 的 50 条黄金法则
  • 第七期:深度报告 — 从天气应用到大规摸重构的真实案例
  • 第八期:未来展望 — Karpathy、Boris 等大佬怎么看 AI 编程的未来

下期见。

Views: 5

Views: 42