0%

上下文窗口是真实存在的硬约束

所有 LLM 都有上下文限制。Claude 3.5 Sonnet 标称 200k tokens,但系统提示词占约 20k,工具定义占约 15k,固定开销就吃掉 35k 左右。留给对话的空间大约 165k tokens,如果每轮对话平均 4k tokens,50 轮就会把窗口用尽。

传统的截断策略粗暴丢弃早期消息,问题很明显:用户说过的重要信息凭空消失,模型可能重复询问已经回答过的问题,或者做出与前文矛盾的判断。长对话场景下,这种信息丢失会直接导致任务失败。

Claude Code 用四级渐进式压缩应对这个问题。四级策略从轻到重依次触发,核心目标是在有限的 token 预算内尽可能保留对任务有用的信息。

阅读全文 »

单 Agent 的瓶颈

考虑一个典型场景:把项目的所有 TypeScript 文件迁移到 strict 模式,同时更新 ESLint 配置,然后运行测试确认无回归。单 Agent 只能顺序执行——修改 tsconfig、修改 ESLint、修改文件、运行测试,每一步等上一步完成。对于一个有 200 个文件的项目,这个过程可能需要十几分钟。

多 Agent 的价值在于把这类任务拆解为可并行的子任务。Explore Agent 扫描文件识别修改点,多个 Fork Agent 并行修改不同文件组,Plan Agent 协调顺序避免冲突,Verification Agent 运行测试验证结果。并行化、专业化、隔离性,这是多 Agent 编排解决的核心问题。

阅读全文 »

Claude Code 的 Computer Use 功能让 AI 直接操控桌面环境:点击按钮、输入文字、截图分析界面状态。AI 能看见屏幕并操作鼠标键盘,带来的安全风险同样真实:误删文件、点错按钮、泄露敏感信息。为此,Claude Code 设计了一套九层安全关卡系统,每一层都可以独立拦截危险操作。底层通过 Python Bridge 实现跨语言通信,TypeScript 代理驱动 Python 执行器完成实际的桌面交互。

阅读全文 »

Agent 执行权限的核心矛盾

AI Agent 需要执行命令、修改文件、访问网络才能完成编程任务,但这些操作都具有破坏性风险。权限系统需要在”让 Agent 高效工作”和”防止危险操作”之间找到平衡点。过于宽松会导致不可逆的损害,过于严格会让 Agent 寸步难行,每次操作都需要人工确认。

Claude Code 的权限系统通过五层决策机制解决这个问题。每一层都可以独立中断工具调用,从确定性的规则匹配到概率性的 AI 分类器,层层递进,最终由用户兜底。

阅读全文 »

问题的起点

编程助手每次对话都从零开始,用户不得不反复说明同样的背景信息:自己的角色定位、编码偏好、项目当前的决策状态。这些信息无法从代码仓库中推断出来,但如果不记住它们,AI 就无法提供真正连贯的协助。

Claude Code 的 Memory 系统通过持久化的结构化知识库解决这个问题。它不是聊天记录的归档,而是一个有明确类型定义、自动提取、智能检索的知识管理系统。

阅读全文 »

终端里的 React 应用

Claude Code 的终端界面不是传统的 CLI 逐行输出,而是一个完整的 React 应用。它通过 Ink 框架(React 的终端渲染器)实现了组件化 UI、Flexbox 布局、双缓冲渲染和交互式对话框。选择 Ink 而非 ncurses 或 blessed 这类传统终端 UI 库,核心原因是复用 React 生态:组件化思想、状态管理、生命周期、以及开发者的熟悉度。

Ink 的架构分为四层。React Components 通过自定义的 React Reconciler 转换为 Ink Host Config 调用,Host Config 使用 Yoga 布局引擎计算 Flexbox 布局(基于终端字符单位),最终 Terminal Renderer 将布局结果转换为 ANSI 转义序列输出到 stdout。这个架构让终端 UI 开发体验接近 Web 前端,同时保持了终端应用的性能特征。

阅读全文 »

20k tokens 的缓存难题

Claude Code 的系统提示词约 20k tokens,每次 API 调用都要发送。这个数字本身不夸张,但叠加两个约束就变成了工程问题。第一个约束是动态性:系统提示词需要包含当前日期、项目结构、Git 状态、MCP 服务器指令、CLAUDE.md 用户指令,这些内容每轮对话都可能变化。第二个约束是成本:20k tokens 的提示词如果不做缓存优化,每个会话的延迟和 API 费用会成倍增加。

解决方案是将系统提示词拆分为静态可缓存区域和动态可变区域,通过缓存边界标记分隔。静态部分(角色定义、系统规则、任务指导、工具说明、风格约束)在全球范围内共享缓存,动态部分(会话指引、记忆系统、环境信息、MCP 指令、Token 预算)按会话级缓存。这样每次 API 调用时,静态部分可以直接复用缓存,只有动态部分需要重新计算。

阅读全文 »

不只是命令别名

Skills 的表面形态是斜杠命令(/code-review/commit),但本质是一个完整的 AI 行为定义系统。一个 Skill 文件可以同时约束工具池、指定模型、注入 Hook、选择执行上下文(inline 或 fork),这些能力组合起来让 Skill 成为一个可复用的行为模板,而不是简单的 prompt 快捷方式。

阅读全文 »

工具不只是函数调用

在多数 AI Agent 框架中,工具只是一个带装饰器的函数:接收参数,返回结果。Claude Code 的工具设计远超这个层次。每个工具是一个自描述的实体,通过统一接口向框架暴露身份、能力声明、生命周期钩子、渲染逻辑和智能特性。框架不需要了解工具的内部实现,只需调用标准接口即可完成验证、权限检查、执行和结果处理。

阅读全文 »

同样的模型,不同的体验

一个反直觉的现象:用 GPT-4 模型搭配 OpenAI 的 Codex CLI,效果尚可;用 GPT-4 模型搭配 Anthropic 的 Claude Code,效果更好。自家模型配自家 Agent 应该是最佳组合,但实际表现不如搭配竞争对手的 Agent。

常见的猜测是”Claude Code 的 Prompt 更好”。Prompt 确实有影响,但不是决定性因素。Claude Code 的源码揭示了一个更根本的差异:它不是一个 Prompt 工具,而是一个完整的 Agent 运行时框架。这个框架理解模型的能力边界、工具的执行风险、上下文的压缩策略和用户的意图流转。模型是大脑,Claude Code 是躯体——这个类比虽然粗略,但抓住了核心关系。

阅读全文 »