# 00.4 Claude Code作为脚手架

## 核心问题

> 为什么选择Claude Code作为学习工具？
> 如何"借力打力"，用AI来学习AI？
> 工具更新换代时，如何保持知识的可迁移性？

---

## 概念讲解

### Claude Code是什么

Claude Code是Anthropic推出的命令行AI开发助手，但它本质上是一个**学习工具**。

**核心特点**：

```
┌─────────────────────────────────────────────────────────────┐
│                    Claude Code 架构                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   用户 ──→ [Claude Code CLI] ──→ Claude API ──→ 响应       │
│      │                                              │       │
│      │                                              │       │
│      └──── 三个核心概念 ────────────────────────────┘       │
│                                                             │
│   ┌─────────────┐  ┌─────────────┐  ┌─────────────┐       │
│   │   Agent     │  │    Skill    │  │    Hook     │       │
│   │  (智能体)    │  │   (技能)     │  │   (钩子)     │       │
│   └─────────────┘  └─────────────┘  └─────────────┘       │
│                                                             │
└─────────────────────────────────────────────────────────────┘
```

**对比其他工具**：

| 维度 | Copilot | ChatGPT | Claude Code |
|-----|---------|---------|-------------|
| 主要界面 | IDE插件 | Web界面 | 命令行 |
| 工作方式 | 代码补全 | 对话 | 对话+执行 |
| 可扩展性 | 有限 | 有限 | 高(Skill系统) |
| 透明度 | 低 | 中 | 高(显示思考) |
| 工具链集成 | IDE内 | 需复制粘贴 | 直接执行 |

### 为什么选择Claude Code

**1. 透明性**

Claude Code可以看到AI的思考过程：

```
用户: 帮我分析这个生态网络

Claude Code:
思考: 用户想要分析生态网络，我需要：
1. 识别这是一个空间分析任务
2. 确定需要的数据类型
3. 选择合适的分析方法
4. 调用相关技能

动作: 调用 skill:ecological-analysis
输入: {...}
结果: {...}
```

这种透明性对学习很重要——你可以看到AI**如何分解问题**。

**2. 可扩展性**

```yaml
# .claude/skills/spatial-analysis.md
---
description: 空间分析技能
---

当用户需要进行空间分析时：
1. 确定分析类型（缓冲区分析、叠加分析等）
2. 检查所需数据
3. 执行分析
4. 可视化结果
```

你可以定义自己的技能，学习如何将领域知识编码为AI可以理解和执行的形式。

**3. 工具中性**

```
Claude Code
    │
    ├─ 可以调用 QGIS
    ├─ 可以调用 ArcGIS
    ├─ 可以调用 Python脚本
    └─ 可以调用任何命令行工具
```

学习的是**如何编排工具**，而不是特定工具的用法。

### 三个核心概念

#### 1. Agent（智能体）

Agent是具有目标、能自主行动的系统：

```python
# Agent的抽象结构
class Agent:
    def __init__(self, goal, tools, memory):
        self.goal = goal          # 目标
        self.tools = tools        # 可用工具
        self.memory = memory      # 记忆

    def perceive(self, observation):
        """感知环境"""
        pass

    def decide(self):
        """决定下一步行动"""
        pass

    def act(self):
        """执行行动"""
        pass

    def reflect(self):
        """反思和学习"""
        pass
```

**设计问题**：
- Agent应该有多大的自主性？
- 如何让Agent的目标与人类意图对齐？
- 如何处理Agent的失败？

#### 2. Skill（技能）

Skill是能力的封装：

```yaml
# skill示例
---
name: extract-ecological-sources
description: 从土地利用数据中提取生态源地
parameters:
  - landcover_data: GeoDataFrame
  - min_patch_size: float
  - suitability_threshold: float
returns:
  - sources: GeoDataFrame
  - statistics: dict
---

## 执行逻辑

1. 读取土地利用数据
2. 计算每个斑块的适宜性
3. 筛选满足条件的斑块
4. 按面积排序，选择前N个
```

**设计问题**：
- 如何定义技能的边界？
- 技能之间如何组合？
- 如何让技能可复用？

#### 3. Hook（钩子）

Hook是事件驱动的扩展点：

```yaml
# hook示例
---
name: pre-tool-use
description: 在工具调用前执行
trigger:
  - event: ToolUse
condition: tool_name == "ecological-analysis"
action: |
  1. 验证输入数据的坐标系
  2. 检查数据完整性
  3. 记录分析参数用于审计
---

## 价值
- 防止错误的分析
- 建立可追溯性
- 注入质量控制
```

**设计问题**：
- 哪些事件需要hook？
- 如何在自动化和控制之间平衡？
- 如何避免过度使用hook导致系统僵化？

---

## 设计原理

### 工具中性原则

**核心思想**：学习的是设计模式，而非特定工具。

### 指月之辨：工具与真理的关系

**禅宗寓言**：佛经记载，佛法如标指，真理如明月。指非月也，是指月之指也。

**寓意**：
- 手指（工具）指向月亮（真理/原理）
- 我们需要借助手指才能看到月亮
- 但手指不是月亮本身，不要执着于手指

**对应到学习**：

```
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   手指 (指)              月亮 (月)                            │
│    ↓                       ↓                                 │
│   工具                   原理/真理                              │
│   - Claude Code          - 状态机设计                           │
│   - LangGraph             - 模块化思维                           │
│   - 具体框架               - 设计模式                              │
│   - 命令语法               - AI本质                               │
│                                                             │
└─────────────────────────────────────────────────────────────┘
```

**实践启示**：

1. **借指观月，而非指为月**
   - 通过工具学习原理，而非学习工具本身
   - Claude Code 是"指"，帮助我们指向"月"（AI原理）

2. **手指过河，筏喻登山**
   - 工具如竹筏，渡河后应舍弃
   - 学会原理后，工具可以更换

3. **莫执着于一指**
   - 不固守单一工具
   - 不同工具可指向同一真理
   - 工具中性：多工具对比学习

> "授人以鱼不如授人以渔。但更重要的是：不要把渔具当成目的。
> 渔具是指向智慧之鱼的'指'，真正的'月'是理解如何独立思考、
> 如何在新工具出现时快速学习、如何构建持久的认知框架。"

```
┌─────────────────────────────────────────────────────────────┐
│                  抽象层（持久知识）                          │
│                                                             │
│   工作流编排 │ 状态管理 │ 技能组合       │
│                                                             │
├─────────────────────────────────────────────────────────────┤
│                  实现层（易变知识）                          │
│                                                             │
│   Claude Code │ LangGraph │ LangChain │ ...                │
│                                                             │
└─────────────────────────────────────────────────────────────┘
```

**实践方法**：

1. **学习概念，而非命令**
   - 理解"状态机"比记住LangGraph的语法更重要
   - 理解"技能抽象"比记住Skill格式更重要

2. **关注接口，而非实现**
   - 定义清晰的输入输出
   - 理解组件之间的交互模式

3. **多工具对比**
   - 用不同工具实现同一任务
   - 理解不同设计的trade-off

### 借力打力：用AI学习AI

```
你的学习路径

1. 向Claude Code提问
   "解释一下状态机在Agent系统中的作用"

2. 让它生成示例
   "给我一个简单的状态机示例代码"

3. 让它解释代码
   "逐行解释这段代码在做什么"

4. 让它出题测试
   "出几道关于状态机的问题测试我的理解"

5. 让它点评你的答案
   "这是我的理解，请点评并指出不足"
```

---

## 代码示例

### Claude Code基础操作

```bash
# 1. 启动Claude Code
claude

# 2. 基本对话
> 你好，请介绍一下空间智能的概念

# 3. 执行命令
> 列出当前目录的文件
# Claude会自动执行 ls 命令

# 4. 读取文件
> 读取 README.md 的内容

# 5. 使用技能
> /spatial-analysis 分析这个区域的生态网络

# 6. 创建新技能
> 创建一个名为"buffer-analysis"的技能
```

### 创建一个简单的技能

文件：`.claude/skills/hello-spatial.md`

```yaml
---
name: hello-spatial
description: 向用户问好并介绍空间分析基础
---

当用户请求空间分析入门介绍时，使用此技能。

## 执行步骤

1. 询问用户的空间分析背景
2. 根据背景调整解释深度
3. 提供一个简单的空间分析示例
4. 推荐进一步学习资源

## 示例对话

用户: "我是空间分析的初学者"
AI: "欢迎！空间分析是关于..."
```

---

## 实践示例：Claude Code的第一个空间任务

```bash
# 场景：用Claude Code分析一个简单的空间问题

> 我有一个包含公园位置的CSV文件，想找出距离每个居民区最近的车公园

# Claude Code的响应过程：
# 1. 理解任务 - 这是一个最近邻分析问题
# 2. 确定工具 - 使用geopandas和scipy
# 3. 编写代码 - 生成Python脚本
# 4. 执行分析 - 运行脚本
# 5. 展示结果 - 可视化输出

让我帮您完成这个最近邻分析。

首先，让我读取您的数据：
[读取 parks.csv]

然后，我将：
1. 计算每个居民区到所有公园的距离
2. 找出最近的车公园
3. 计算平均服务距离
4. 生成可视化地图

[生成并执行 Python 代码]

结果：
- 平均最近距离：850米
- 服务覆盖率：78%
- 需要新建公园的区域：[列表]
```

---

## 反思与延伸

### 思考问题

1. **工具选择**：你目前使用的AI工具是什么？它在哪些方面帮助/阻碍了你的学习？

2. **知识迁移**：如果Claude Code不再维护，你学到的哪些知识可以迁移到其他工具？

3. **透明性**：你认为AI系统应该有多透明？完全透明是否会降低效率？

4. **自主性**：在使用AI工具时，你希望在多大程度上保持控制权？

### 实践练习

1. **安装Claude Code**
   ```bash
   npm install -g @anthropic/claude-code
   ```

2. **创建你的第一个技能**
   - 选择你熟悉的领域
   - 定义技能的输入输出
   - 编写执行逻辑

3. **与Claude对话**
   - 询问一个你不懂的AI概念
   - 让它用多种方式解释
   - 测试你的理解

### 延伸阅读

- **[Claude Code官方文档](https://claudecode.io/zh)** - 最权威的参考资料
- **"Tools for Thought"** (Richard Wurman) - 思考工具的历史
- **"Building Software with AI"** - AI辅助软件开发的实践

---

## 关键要点

1. **Claude Code是学习工具**，不只是生产力工具
2. **透明性、可扩展性、工具中性**是其核心优势
3. **Agent、Skill、Hook**三个概念构成核心抽象
4. **关注抽象层**的知识，实现层会变化
5. **借力打力**：用AI来学习AI是最高效的方式
