3000 行 vs 50 万行:从玩具到产品的架构深渊
claude-code-from-scratch 项目用大约 3000 行 TypeScript 实现了一个"迷你版 Claude Code"。它有 Think-Act-Observe 循环、工具系统、System Prompt、权限控制、记忆、Skill、多代理、MCP——我们在前面 10 篇文章里拆解的核心概念,它全都有。
claude-code-from-scratch 项目用大约 3000 行 TypeScript 实现了一个"迷你版 Claude Code"。它有 Think-Act-Observe 循环、工具系统、System Prompt、权限控制、记忆、Skill、多代理、MCP——我们在前面 10 篇文章里拆解的核心概念,它全都有。
自回归大语言模型在缺乏外部强约束时,天然存在向局部贪婪变异发散的病态冲动。Claude Code 的 Plan 模式通过外挂离散有限状态机(FSM),将动作空间硬性投影至零副作用的只读子集,利用人机交互屏障强制在决策树上切断代价高昂的物理回溯分支。
在 MCP 出现之前,每个 AI 工具集成都是一次定制开发。想让 ChatGPT 连数据库?写一个插件。想让 Claude 调 GitHub API?写一个 Function Calling 定义。想让 Copilot 访问你的内部系统?写一个 Custom Tool。
有一个反直觉的现象:同一个模型,拆成多个独立实例让它协作,效果往往比单个实例更好。 不是算力增加了(三个实例的总 token 消耗比一个实例多),不是能力提升了(每个实例都是同样的模型)。提升来自角色分离——当每个 Agent 只关注问题的一个方面时,它做得比"全能 Agent"更专注、更深刻。
如果你用过 Claude Code,你可能注意到它有一个 /skills 命令,可以列出已安装的"技能"。写作规范、架构设计方法、TDD 流程、代码审查策略——听起来像一个插件市场。
上一篇文章聊了上下文压缩——它解决的是"当前会话能记住多少"的问题。但编程助手还需要另一种记忆:跨会话的长期记忆。
大模型在物理底层不存在真正意义上的生物记忆,只有在显卡高带宽内存(HBM)中随序列长度线性堆叠的 Key-Value Cache,以及在数学上随序列拉长而被急剧稀释的注意力权重分布。Claude Code 呈现给开发者的所谓长程对话能力,本质上是一套在硬件显存与精度边界夹缝中运行的缓存逐出流水线,伴随着不可逆的信息失真与前缀失效代价。
任何运行在宿主机用户态、依赖模型自律与应用层正则拦截的 AI Agent 权限系统,在操作系统内核视角下都不构成强制安全边界。Claude Code 设计的五级权限模型与交互式审批机制,是一套降低开发误操作概率的人机协作流控协议,在恶意对抗场景下缺乏沙箱约束力。
如果你以为 System Prompt 就是"给 AI 设定一个人设",那 Claude Code 的 system prompt 会颠覆你的认知。 它不是几句话。它是一个上千行的模板引擎,由多个层次组成,每一层负责不同的事:身份定义、行为约束、工具说明、项目上下文、记忆注入、技能加载。有些层是静态的(每次一样),有些层是动态的(根据项目、会话、用户偏好实时注入)。
上一篇文章我们聊了 Think-Act-Observe 循环——AI 编程助手的骨架。骨架本身不会干活,它需要肌肉。在 Claude Code 里,肌肉就是工具。 没有工具,循环里 Think 和 Observe 之间缺了 Act,退化回普通的问答。有了工具,模型才能触碰真实世界:读你的代码、改你的配置、跑你的测试。