Files
pengxiao a90f7adfa1 refactor(officefile): 按 md/latex/word 三层结构重组文档目录
将 Markdown 源文件移入 md/,LaTeX 工作目录保留在 latex/,
Word 导出移入 word/;删除临时脚本、调试截图和空 stub。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 14:25:21 +08:00

430 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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是最高效的方式