Skip to content

02 - Claude Code 核心技术详解

1. System Prompt 设计

Claude Code 的 System Prompt 是一个"万字级"的巨大提示词,
它定义了 Claude Code 的完整行为规范:

  ┌──────────────────────────────────────────────────────────┐
  │              System Prompt 结构                           │
  │                                                          │
  │  ┌────────────────────────────────────────────────┐      │
  │  │  身份定义                                       │      │
  │  │  "You are Claude Code, Anthropic's CLI..."     │      │
  │  └────────────────────────────────────────────────┘      │
  │  ┌────────────────────────────────────────────────┐      │
  │  │  工具使用规则                                    │      │
  │  │  - 优先用专用工具(Read vs cat)                 │      │
  │  │  - 并行调用独立工具                              │      │
  │  │  - Edit 前必须先 Read                           │      │
  │  └────────────────────────────────────────────────┘      │
  │  ┌────────────────────────────────────────────────┐      │
  │  │  代码风格指令                                    │      │
  │  │  - 不加不必要的注释                              │      │
  │  │  - 不过度抽象                                    │      │
  │  │  - 修 bug 不要附带重构                           │      │
  │  └────────────────────────────────────────────────┘      │
  │  ┌────────────────────────────────────────────────┐      │
  │  │  安全规则                                        │      │
  │  │  - 不执行破坏性 git 操作                         │      │
  │  │  - 不推送到 remote (除非明确要求)                │      │
  │  │  - 不提交敏感文件 (.env 等)                      │      │
  │  └────────────────────────────────────────────────┘      │
  │  ┌────────────────────────────────────────────────┐      │
  │  │  沟通风格                                        │      │
  │  │  - 简洁、不废话                                  │      │
  │  │  - 不用 emoji (除非用户要求)                     │      │
  │  │  - 探索性问题用 2-3 句话回复                     │      │
  │  └────────────────────────────────────────────────┘      │
  │  ┌────────────────────────────────────────────────┐      │
  │  │  环境信息 (动态注入)                              │      │
  │  │  - 操作系统、Shell、工作目录                      │      │
  │  │  - 是否是 Git 仓库                              │      │
  │  │  - 当前日期                                     │      │
  │  │  - 模型信息                                     │      │
  │  └────────────────────────────────────────────────┘      │
  │                                                          │
  │  System Prompt 的设计哲学:                               │
  │  ┌──────────────────────────────────────────┐            │
  │  │  不是告诉 AI "怎么写代码"                  │            │
  │  │  而是告诉 AI "在什么边界内做决策"           │            │
  │  │  给足够的自由度 + 明确的底线                │            │
  │  └──────────────────────────────────────────┘            │
  └──────────────────────────────────────────────────────────┘

2. 上下文管理与 Compaction

核心问题: 对话越来越长,上下文窗口终将耗尽

  对话进行中:
  Token 使用  ▲
              │          ████████████████████
              │      ████████████████████████████
              │  ████████████████████████████████████
              │  ████████████████████████████████████████
              ├────────────────────────────────────────── 上下文限制
              │  ███████████████████████████████████████████

              └──────────────────────────────────────────▶ 时间

  解决: Compaction (上下文压缩)

  ┌──────────────────────────────────────────────────────────┐
  │                                                          │
  │  压缩前的对话历史:                                        │
  │  ┌──────────────────────────────────────────────────┐    │
  │  │ [User] 帮我看看这个 bug                           │    │
  │  │ [Assistant] 让我读一下代码                         │    │
  │  │ [Tool: Read file1.go]                            │    │
  │  │ [Tool Result: 200行代码...]                      │    │
  │  │ [Assistant] 发现问题在第50行                       │    │
  │  │ [Tool: Read file2.go]                            │    │
  │  │ [Tool Result: 150行代码...]                      │    │
  │  │ [Tool: Edit file1.go]                            │    │
  │  │ [Tool Result: 修改成功]                           │    │
  │  │ [Assistant] 已修复                                │    │
  │  │ [User] 再帮我加个测试                              │    │
  │  │ ... (大量中间步骤) ...                            │    │
  │  └──────────────────────────────────────────────────┘    │
  │                    │                                     │
  │                    ▼ Compaction                           │
  │                                                          │
  │  压缩后:                                                 │
  │  ┌──────────────────────────────────────────────────┐    │
  │  │ [System Summary]                                 │    │
  │  │ 之前的对话中:                                     │    │
  │  │ - 用户报告了 file1.go 的 bug                      │    │
  │  │ - 我读取了 file1.go 和 file2.go                   │    │
  │  │ - 修复了第50行的空指针问题                         │    │
  │  │ - 用户接着要求添加测试                              │    │
  │  │                                                  │    │
  │  │ [最近的对话保持原样]                               │    │
  │  │ [User] 再帮我加个测试                              │    │
  │  │ ...                                              │    │
  │  └──────────────────────────────────────────────────┘    │
  │                                                          │
  │  压缩策略:                                               │
  │  ┌──────────────────────────────────────────────────┐    │
  │  │  1. 保留 System Prompt(不能压缩)                │    │
  │  │  2. 保留最近 N 轮对话(保持连贯性)               │    │
  │  │  3. 旧对话让 LLM 自己总结成摘要                   │    │
  │  │  4. 工具结果(代码内容)是最大的 Token 消耗者      │    │
  │  │     → 优先压缩工具结果                            │    │
  │  └──────────────────────────────────────────────────┘    │
  │                                                          │
  └──────────────────────────────────────────────────────────┘

3. 权限沙箱模型

Claude Code 的权限控制系统:

  ┌──────────────────────────────────────────────────────────────┐
  │                     权限分层模型                               │
  │                                                              │
  │  ┌──────────────────────────────────────────────────────┐    │
  │  │  自动允许 (Auto-allow)                                │    │
  │  │                                                      │    │
  │  │  这些操作不需要用户确认:                               │    │
  │  │  • Read: 读取文件                                    │    │
  │  │  • Glob/Grep: 搜索文件                               │    │
  │  │  • 子 Agent: 探索代码库                               │    │
  │  │  → 只读操作,不会造成破坏                              │    │
  │  └──────────────────────────────────────────────────────┘    │
  │                                                              │
  │  ┌──────────────────────────────────────────────────────┐    │
  │  │  需要确认 (Needs Approval)                            │    │
  │  │                                                      │    │
  │  │  这些操作需要用户点击允许:                              │    │
  │  │  • Edit/Write: 修改文件                               │    │
  │  │  • Bash: 执行命令                                    │    │
  │  │  • WebFetch: 访问外部 URL                            │    │
  │  │  → 有副作用的操作                                     │    │
  │  └──────────────────────────────────────────────────────┘    │
  │                                                              │
  │  ┌──────────────────────────────────────────────────────┐    │
  │  │  可配置权限 (settings.json)                           │    │
  │  │                                                      │    │
  │  │  用户可以自定义 allow/deny 规则:                       │    │
  │  │  {                                                   │    │
  │  │    "permissions": {                                  │    │
  │  │      "allow": ["Bash(npm test)", "Bash(go build)"],  │    │
  │  │      "deny":  ["Bash(rm -rf)"]                      │    │
  │  │    }                                                 │    │
  │  │  }                                                   │    │
  │  └──────────────────────────────────────────────────────┘    │
  │                                                              │
  │  权限检查流程:                                                │
  │                                                              │
  │  工具调用请求                                                 │
  │       │                                                      │
  │       ▼                                                      │
  │  ┌──────────────┐                                            │
  │  │ 在 deny 列表? │──Yes──▶ 拒绝                               │
  │  └──────┬───────┘                                            │
  │         │ No                                                 │
  │  ┌──────▼───────┐                                            │
  │  │ 在 allow 列表?│──Yes──▶ 自动执行                           │
  │  └──────┬───────┘                                            │
  │         │ No                                                 │
  │  ┌──────▼───────┐                                            │
  │  │ 是只读操作?   │──Yes──▶ 自动执行                           │
  │  └──────┬───────┘                                            │
  │         │ No                                                 │
  │         ▼                                                    │
  │    弹窗询问用户                                               │
  │                                                              │
  └──────────────────────────────────────────────────────────────┘

4. CLAUDE.md 和记忆系统

┌──────────────────────────────────────────────────────────────┐
│                    项目上下文系统                              │
│                                                              │
│  CLAUDE.md — 项目级指令文件                                   │
│  ┌──────────────────────────────────────────────────────┐    │
│  │  放在项目根目录,每次对话都会被加载                     │    │
│  │                                                      │    │
│  │  内容示例:                                            │    │
│  │  - 项目用 Go 1.22 + PostgreSQL                       │    │
│  │  - 运行测试: go test ./...                           │    │
│  │  - 代码风格: 不用 panic,用 error return              │    │
│  │  - API 格式: RESTful,返回 JSON                      │    │
│  │                                                      │    │
│  │  作用: 让 Claude Code 理解你的项目上下文               │    │
│  │  类似于给新入职同事的 README                           │    │
│  └──────────────────────────────────────────────────────┘    │
│                                                              │
│  Memory 系统 — 跨会话的持久化记忆                             │
│  ┌──────────────────────────────────────────────────────┐    │
│  │  存储在 ~/.claude/projects/{dir}/memory/              │    │
│  │                                                      │    │
│  │  MEMORY.md (索引文件)                                 │    │
│  │  ├── user_profile.md     (用户背景和偏好)             │    │
│  │  ├── feedback_style.md   (用户给的反馈指导)            │    │
│  │  ├── project_context.md  (项目相关信息)               │    │
│  │  └── reference_links.md  (外部资源链接)               │    │
│  │                                                      │    │
│  │  记忆类型:                                            │    │
│  │  ├── user:      用户是谁,什么水平,什么偏好          │    │
│  │  ├── feedback:  用户纠正过的行为(做/不做)            │    │
│  │  ├── project:   项目进展、决策、截止日期              │    │
│  │  └── reference: 外部系统的指针和链接                  │    │
│  └──────────────────────────────────────────────────────┘    │
│                                                              │
│  加载优先级:                                                  │
│  ┌──────────────────────────────────────────────────────┐    │
│  │                                                      │    │
│  │  System Prompt (最高优先级,不可覆盖)                  │    │
│  │      ↓                                               │    │
│  │  CLAUDE.md (项目级指令)                               │    │
│  │      ↓                                               │    │
│  │  Memory 文件 (持久化记忆)                             │    │
│  │      ↓                                               │    │
│  │  对话历史 (当前会话)                                   │    │
│  │                                                      │    │
│  └──────────────────────────────────────────────────────┘    │
│                                                              │
└──────────────────────────────────────────────────────────────┘

5. 如果你想自己实现类似系统

从 Claude Code 学到的设计原则:

  ┌──────────────────────────────────────────────────────────┐
  │                                                          │
  │  1. System Prompt 是"宪法"                                │
  │     → 定义行为边界,不是具体操作步骤                      │
  │     → 越详细越好,但要有层次                              │
  │                                                          │
  │  2. 工具设计要"正交"                                      │
  │     → 每个工具做一件事                                    │
  │     → Read ≠ Bash(cat),虽然结果一样但语义不同            │
  │     → Edit(增量修改)比 Write(全量覆盖)更安全          │
  │                                                          │
  │  3. 上下文管理是核心难题                                  │
  │     → 对话会变长,必须有压缩策略                          │
  │     → 压缩要保留"关键决策",丢弃"中间过程"               │
  │     → Prompt 缓存可以节省成本                            │
  │                                                          │
  │  4. 权限模型要分层                                        │
  │     → 只读自动允许                                        │
  │     → 有副作用的要确认                                    │
  │     → 破坏性操作要双重确认                                │
  │                                                          │
  │  5. 记忆让 AI 变得"个人化"                                │
  │     → 记住用户偏好,避免重复犯同样的错                    │
  │     → 记忆要有类型和过期机制                              │
  │                                                          │
  │  6. 流式输出提升体验                                      │
  │     → 用户能实时看到 AI 在"思考什么"                      │
  │     → 工具调用前显示意图,执行后显示结果                  │
  │                                                          │
  └──────────────────────────────────────────────────────────┘

模块七完成!

下一个模块: 模块八:OpenClaw & OpenCode 架构