<!-- title: 新手第一句：提问与喂文件 -->

# 新手第一句：提问与喂文件

> **概述**：很多新手装好 Claude Code 后，随手敲一句"帮我改改这个项目"，得到一个平庸的结果，就误以为它言过其实。问题几乎不在工具，而在**怎么问**和**喂什么给它**。本教程聚焦新手第一次上手最关键的三个动作——**组织需求、引用文件、管理上下文**——带你从"模糊一句话"进化到"一句话就能让 Claude 精准干活"。适合零基础开发者、第一次接触命令行 AI 编程助手、以及用了几天但觉得"不够聪明"的人。

## 前置条件

- 一台 macOS / Linux / Windows（WSL 推荐）的开发机
- 已安装 Node.js 18 及以上（`node -v` 能出版本号）
- 一个 Anthropic 账号（Claude.ai 账号即可走 OAuth 登录，也可用 API Key）
- 一个真实的小项目目录（哪怕是几行代码的脚本），用来练手
- 终端基础操作：会 `cd`、`ls`，就够

如果你还没装好，先在终端执行：

```bash
npm install -g @anthropic-ai/claude-code
```

安装完，`cd` 进你的项目目录，敲：

```bash
claude
```

首次运行会引导你登录（浏览器 OAuth 最省事）。登录成功后，你会看到一个等待输入的提示符。**从这里开始，本教程才真正开始。**

---

## 第一步：先搞懂它的"视野"——它只能看到当前目录

这是新手最容易忽略的一点：Claude Code 是一个**项目级**的智能体，它默认只"看"得见你启动它时所在的目录及子目录。它不像网页版那样需要你手动粘贴代码，也不像全局搜索那样能跨盘扫描。

```bash
# 错误做法：在 home 目录启动，然后问项目里的事
cd ~
claude
> 帮我看看 my-app 里的登录逻辑   # 它根本不知道 my-app 在哪

# 正确做法：先进项目根目录再启动
cd ~/projects/my-app
claude
> 帮我看看登录逻辑              # 它能直接读到代码
```

**预期结果**：在项目根目录启动后，它的第一条响应会准确引用到具体文件和行号；在错误目录启动，它会反问"项目在哪"或瞎猜。

**常见问题**：

- *我同时要改两个不在同一个父目录下的项目怎么办？* 在会话内用 `/add-dir` 把另一个目录加进它的视野：
  ```
  /add-dir ~/projects/shared-lib
  ```
- *它在乱读别的盘的东西吗？* 不会。除非你显式 `/add-dir`，它只看启动目录。

---

## 第二步：掌握四种"喂内容"的方式

Claude Code 不是只能打字。把信息给它，有四种途径，新手至少要会用前三种：

| 方式 | 怎么用 | 适合场景 |
|------|--------|----------|
| 直接打字 | 正常输入框敲需求 | 简单指令、提问 |
| `@` 引用 | `看一下 @src/auth/login.ts` | 让它读某个文件/目录 |
| `#` 记忆 | `# 我们用 pnpm 不用 npm` | 写进 CLAUDE.md 长期生效 |
| 管道喂入 | `cat error.log \| claude -p "分析这段错误"` | 喂动态输出、日志、大数据 |

### 2.1 `@` 引用：最该养成习惯的动作

很多新手喜欢把代码**复制粘贴**到对话框里。这有两个问题：一是粘贴可能丢缩进、换行；二是占满上下文。正确做法是用 `@` 让它自己去读：

```
读一下 @src/lib/server/inventions.ts 和对应的测试 @tests/intentions.test.ts，
然后给 @intentions.ts 加上"过期 token"的处理逻辑，并补一个测试。
```

`@` 后面可以跟：
- 文件：`@package.json`
- 目录：`@src/utils/`（它会遍历读）
- 图片：`@docs/ui-mock.png`（能看图！设计稿转代码就靠它）

**预期结果**：它会在回复里引用 `文件名:行号`，你点一下就能跳转。

### 2.2 `#` 记忆：说一次，永远记住

```
# 这个项目用 pnpm，测试用 vitest，禁止用 npm/yarn
```

输入 `#` 开头的一句话，Claude Code 会问你**存到哪一级**（项目级 `CLAUDE.md`、用户级、还是本地级）。确认后，这条约定从此每次会话自动加载，再也不用重复说。

### 2.3 管道喂入：喂它"动态的东西"

日志、命令输出、API 返回——这些没法 `@` 引用的内容，用管道：

```bash
# 把报错日志直接喂给它分析
cat crash.log | claude -p "这是线上崩溃日志，帮我定位根因并给出修复方案"

# 让它先看仓库状态再回答
git diff | claude -p "审查这次改动，重点看有没有引入安全问题"
```

`-p`（print 模式）表示"问完即走，不开交互界面"，特别适合一次性任务。

---

## 第三步：好问题 vs 坏问题（本教程核心）

Claude Code 的输出质量，90% 取决于你的提问质量。下面是新手最常踩的坑。

### 3.1 坏问题的典型特征

```
❌ 坏问题 1：「这个有问题，帮我修一下」
   —— 它不知道"这个"是啥，"问题"是啥
❌ 坏问题 2：「优化一下代码」
   —— "优化"可以是性能、可读性、删冗余，方向太多
❌ 坏问题 3：「加个功能」
   —— 哪个功能？加在哪？什么交互？
```

### 3.2 用"四要素公式"改写

一个好问题包含四个要素：**目标 + 约束 + 参考 + 验收标准**。

```
✅ 改写示例：

目标：给 @src/auth/login.ts 加上登录失败次数限制，连续 5 次失败锁定账号 15 分钟。
约束：用现有的 Redis 客户端 @src/lib/redis.ts 存计数，不要引入新依赖；
     保持现有函数签名不变，避免破坏调用方。
参考：错误处理的风格参照 @src/auth/signup.ts 里的 try/catch 写法。
验收：加完后跑 `pnpm test auth`，新增一个"锁定后再次登录应返回 429"的测试用例并跑通。
```

对比一下，第二种提问它几乎不可能跑偏，因为它知道**做什么、用什么做、学谁的样子、做完怎么算成功**。

### 3.3 一个新手必学的技巧：让它先给计划

涉及多文件、有风险的改动，**别让它直接动手**。先要计划：

```
我想重构 @src/utils/format.ts 里的日期格式化函数，拆成 3 个小函数。
先别改代码，给我一个改动计划，列出会动哪些文件、每个文件怎么改、有什么风险。
```

它给出计划后，你看一眼觉得没问题，再说"按这个计划执行"。这能避免它一口气改十个文件然后你发现方向错了、要全部回滚。

> 在 Claude Code 里，涉及实现的工作可以直接说"进入计划模式"，或用 `Tab` 切换到 plan 模式，它只会读和规划，不会写文件，直到你批准。

---

## 第四步：上下文怎么累积，又怎么清理

这是新手从"能用"到"用得好"的分水岭。

### 4.1 上下文是累积的，所以连续追问很高效

```
> 读 @src/auth/login.ts，解释它的核心流程
（它解释完）
> 那如果用户 token 过期了，现在会走到哪个分支？
> 把这个分支单独抽成一个函数 verifyExpiredToken
```

后两句不用重复贴代码，因为前面已经把文件读进上下文了。**这就是"对话式"相比"一次性大段提示"的优势**：你可以一步步逼近目标，每步基于上一步。

### 4.2 但上下文有上限——该清就清

上下文窗口是有限的（虽然不小，但不是无限）。当你在同一个会话里换了一个完全不相干的任务，旧上下文反而会干扰它。判断信号：

- 它开始"答非所问"，扯上一个任务的事
- 响应变慢，token 消耗飙升
- 你自己都忘了刚才聊到哪了

这时果断 `/clear`：

```
/clear    # 清空当前对话，从干净状态开始（不影响你的代码文件）
```

### 4.3 不想丢进度？两个选择

| 命令 | 作用 |
|------|------|
| `/compact` | 把当前长对话**压缩摘要**，保留关键信息，腾出上下文空间。适合"任务还没完，但聊太久了" |
| `/resume` | 之前 `/clear` 或关掉终端的会话，可以重新打开继续。适合"刚才那个任务还想接着做" |

### 4.4 三个新手必会的状态命令

```
/cost      # 看这次会话花了多少 token / 多少钱，心里有数
/status    # 看当前登录账号、模型、工作目录
/model     # 切换模型（如切到更强或更快的模型）
```

养成习惯：长会话中途 `/compact`，换任务前 `/clear`，结束前 `/cost` 看一眼。

---

## 第五步：第一次实战——让它读懂并改进一个真实小项目

下面用一个最小可运行的项目，把前面所有技巧串起来。

### 5.1 准备项目

在任意目录创建 `todo.js`：

```javascript
// todo.js —— 一个有 bug 的简易待办工具
const fs = require('fs');
const FILE = 'todos.json';

function load() {
  const raw = fs.readFileSync(FILE);   // 第一次运行会崩：文件不存在
  return JSON.parse(raw);
}

function add(task) {
  const list = load();
  list.push({ task, done: false });
  fs.writeFileSync(FILE, JSON.stringify(list));
  console.log('added:', task);
}

const cmd = process.argv[2];
const arg = process.argv[3];
if (cmd === 'add') add(arg);
```

### 5.2 启动并提问

```bash
cd 这个项目目录
claude
```

**新手优质第一问**（套用四要素公式 + `@` 引用）：

```
看 @todo.js。第一次运行 `node todo.js add 买菜` 会报错，因为 todos.json 不存在。
帮我修一下 load()，让文件不存在时返回空数组；
约束：不要改 add 的函数签名，保持同步写法；
验收：删掉（或不存在）todos.json 后，跑 `node todo.js add 买菜` 应该正常输出并生成文件，
再跑一次 `node todo.js add 写代码`，文件里应该有两条。
```

### 5.3 预期交互过程

它会：
1. 读 `todo.js`，定位到 `load()` 的 `readFileSync` 没有处理文件缺失
2. 给出修改（通常是加一层存在性判断）
3. 因为你的验收标准里有"跑命令验证"，它会主动执行 `node todo.js add ...` 自测
4. 把测试结果贴给你看，确认两条待办都在文件里

**关键体验**：因为你把"验收标准"写清楚了，它**自己跑了测试**并**自证成功**，而不是甩给你一段代码让你自己验证。这是好提问带来的质变。

### 5.4 顺势追问（利用上下文累积）

接着上面，不需要重贴代码：

```
很好。再帮我加一个 `list` 命令，打印所有未完成的待办，格式是 `[1] 买菜` 这样的编号。
```

它会在已有理解上直接扩展，因为它已经知道这个文件的结构和你的风格。

### 5.5 把约定固化（用 `#`）

```
# 这个项目用 CommonJS（require），不要改成 ESM（import）；测试方式是直接 `node todo.js` 跑。
```

存为项目级 `CLAUDE.md`。下次新开会话，它自动遵守，你再也不用叮嘱。

### 5.6 收尾

```
/cost      # 看这次大概花了多少
/clear     # 干净结束，或直接关终端，下次 /resume 能找回
```

---

## 整体工作流程图

```text
flowchart TD
    A[cd 进入项目根目录] --> B[运行 claude 启动]
    B --> C{要不要读现有代码?}
    C -->|要| D[用 @ 引用文件/目录]
    C -->|不要| E[直接描述需求]
    D --> F[用四要素组织提问:目标+约束+参考+验收]
    E --> F
    F --> G{改动是否涉及多文件/有风险?}
    G -->|是| H[先要计划, 批准后再执行]
    G -->|否| I[直接让它改]
    H --> I
    I --> J[它自测并贴出结果]
    J --> K{继续这个任务?}
    K -->|是, 接着追问| L[利用上下文累积, 继续提问]
    K -->|换任务了| M[/clear 清空]
    K -->|聊太久但没完| N[/compact 压缩]
    L --> F
    M --> F
    N --> F
    F --> O[有通用约定? 用 # 写进 CLAUDE.md]
```

---

## 新手避坑清单

1. **永远先 `cd` 到项目根再启动**——这能解决一半的"它怎么不知道"问题。
2. **能用 `@` 就别复制粘贴**——粘贴易出错且占上下文。
3. **提问带验收标准**——让它自己跑测试自证，比你看代码靠谱。
4. **大改先要计划**——`Tab` 进 plan 模式，批准了再动手。
5. **换任务必 `/clear`**——旧上下文是干扰源，不是资产。
6. **重复的叮嘱用 `#` 记下来**——一次写入，永久生效。
7. **盯 `/cost`**——早期建立对 token 消耗的直觉，避免烧钱无感。

---

## 延伸阅读

- **Claude Code 官方速查表**（命令与快捷键全集）：`support.claude.com/en/articles/14553413`——把这篇打印出来贴在键盘旁，前两周照着查。
- **官方 CLI 参考手册**：`code.claude.com/docs/en/cli-reference`——所有 flag（如 `-p`、`--model`、`--resume`）的权威说明。
- **CLAUDE.md 进阶**：当你熟练后，用 `/init` 自动生成项目记忆文件，把本教程里 `#` 写的零散约定升级成结构化的项目文档。

---

## 训练营适用性评估

- **适合的训练营类型**：面向**在职开发者 / 转型中的工程师**的 AI 编程入门营、企业内部"AI 提效"工作坊、高校软件工程的 AI 辅助开发模块。**不适合**完全没写过代码的纯小白——需要至少能读懂一段简单脚本。
- **前置门槛**：低。会命令行 `cd/ls`、能看懂基础代码即可。
- **建议教学时长**：**1.5～2 小时**。其中前 20 分钟讲视野与四种喂入方式，40 分钟做实战项目，30 分钟练提问改写，剩余时间答疑。
- **教学形式建议**：讲师先用"坏问题"现场演示得到糟糕结果，再用"四要素好问题"演示质变，强烈的反差最能说服学员。然后让学员拿自己的真实小项目当场练手，讲师巡场纠正提问方式。
- **考核方式**：给一段有 bug 的代码，要求学员用一个包含"四要素 + `@` 引用 + 验收标准"的提问，让 Claude Code 修好并自测通过。评判标准不是代码对不对，而是**提问写得好不好**。

---

## 参考来源

1. [Claude Code cheatsheet — Claude Help Center](https://support.claude.com/en/articles/14553413-claude-code-cheatsheet) — 官方速查表，收录需形成肌肉记忆的全部命令（`/clear`、`/compact`、`/init`、`/cost` 等）与快捷键，本文斜杠命令清单与"打印贴在键盘旁"的建议来源于此。
2. [How to Use Claude Code (Beginner Guide) — builder.io](https://www.builder.io/blog/how-to-use-claude-code) — 新手完整指南，明确提出"大多数新手安装后敲一句模糊提示就判定它言过其实，把基础做好才能快速提效"的核心论点，本文"好问题/坏问题"框架据此展开。
3. [Referencing Files in Claude Code — Steve Kinney](https://stevekinney.com/courses/ai-development/referencing-files-in-claude-code) — 详解 `@path` 引用文件与目录的用法，强调"显式引用告诉 Claude 哪些文件定义了正确性"，本文 `@` 引用与"别复制粘贴"的建议来源。
4. [Claude Code: Complete Guide to Installation and Getting Started (2026) — neurohive.io](https://neurohive.io/en/guides/claude-code-getting-started-guide/) — 2026 年安装与上手完整指南，明确 Claude Code 是"项目级"智能体（读写文件、运行命令、理解整个代码库），本文"视野=当前目录"的概念据此。
5. [CLI reference — Claude Code Docs](https://code.claude.com/docs/en/cli-reference) — 官方命令行参考，本文 `-p`（print 模式）与管道喂入用法的权威出处。

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
