主题
字号
Chapter 01 / 06 ≈ 22 min
第一章

它到底是什么

把 Claude Code 理解成「会打字的 ChatGPT」会让你错过 90% 的它。这一章想让你换一副眼镜再往下看——先看见那个叫 agent loop 的循环,剩下的东西才都对得上。

一个常见的误会

很多人第一次看到 Claude Code,会以为它是「把 claude.ai 搬进终端」——同一个聊天,只是没有浏览器。这个直觉很自然,但不对。

claude.ai 那个聊天框,本质是一张:你说话,它回话。它可以帮你写代码、解释概念、生成诗歌,但写完以后,代码是印在聊天气泡里的文本——你得自己复制、自己粘贴到编辑器、自己保存、自己运行。它不知道你项目里有什么文件,也碰不到你的磁盘。你和它之间隔着一层玻璃。

Claude Code 是一双。它坐在你的终端里,能读你的文件、改你的文件、执行命令、看命令输出、再根据输出决定下一步做什么。它和聊天框的区别,不是「能做更多事」那么简单——是它在一个根本不同的循环里运转。

这一章剩下的内容都在讲这个循环:它是怎么构造的,为什么重要,它怎么让「AI 协助编程」从「我描述、它回答」变成了「我提目标、它干活」。

简单来说

网页版 Claude 是一个回答问题的人;Claude Code 是一个坐在你电脑前、替你动手干活的人。

那「agent」到底是什么?

「agent」这个词在 AI 圈被用得很滥,但对 Claude Code 来说,它有一个很具体的技术含义,这个概念需要展开说。

一个普通的大模型调用是一次性的:输入一段文字,吐出一段文字,结束。就像你问一个朋友「现在几点了」,他回答「三点」,对话终止。这叫 single-turn——一问一答。

一个 agent 是把模型放进一个循环里运行。每一轮,模型不只能输出文字,还能输出「我想调用某个工具」,比如「我想读 package.json」。系统执行这个工具调用、把结果塞回给模型、让模型再想一想下一步做什么。直到它说「我做完了」为止。

把这两句话拉平:

LLM 调用
输入 prompt → 输出 text。一次完成。没有后续动作。
Agent 循环
输入 prompt → 输出 text 工具调用 → 执行工具 → 结果注入 → 再次调用模型 → ……直到模型选择「完成」。

差的不是技巧,是结构。一个 agent 不是「更强的模型」,它是「模型 + 工具 + 控制循环」这三件东西组合起来的系统。模型本身没有变——Claude Code 用的 Opus、Sonnet、Haiku 和网页版是同一批。变的是它的能力——真正可以做到调用工具解决问题。

一轮到底发生了什么

把最外层的循环画出来,长这样:

  ┌────────────────────────────────────────────────────────┐
  │                                                     │
  │   你的请求  ──►  模型思考  ──►  想调用工具?           │
  │                     ▲             │                 │
  │                     │             ▼                 │
  │                 工具结果  ◄── 执行工具(Read/Bash/...) │
  │                                   │                 │
  │                                   ▼                 │
  │                             不需要更多工具?          │
  │                                   │                 │
  │                                   ▼                 │
  │                            给你最终回复              │
  │                                                     │
  └────────────────────────────────────────────────────────┘

这个循环叫 agent loop。Claude Code 的核心就是它。你看到终端里那些灰色的「· 调用工具 Read」「· 调用工具 Bash」的行,就是这个循环在跑。每一个灰行都是一次「模型说要做什么 → 系统去做 → 把结果带回来」的完整回合。

举个最小的具体例子

你说「帮我看看 README 里写了什么」。在后台,Claude Code 会这样走:

  1. 第 1 轮:模型收到你的请求,决定「我需要读 README.md」,输出一个 Read 工具调用。
  2. 系统拿到这个调用,去磁盘上读文件,把文件内容打包回传给模型。
  3. 第 2 轮:模型看到 README 内容,决定「够了,可以回答了」,输出一段文字:「这个项目是一个用 Rust 写的静态站点生成器……」
  4. 系统看到模型没有再请求工具,把这段文字展示给你,结束本轮任务。

两轮就够了。但如果你问「帮我把 src/ 下所有 console.log 换成 logger.debug,并运行测试确认没破坏」,循环可能会走几十轮:Glob 找出所有 .ts 文件、Read 每一个、Edit 一个个改、Bash 跑 npm test、看到测试挂了再 Read + Edit 修——直到测试全绿,才说「做完了」。

这就是 agent 真正有趣的地方:它的工作量和你的指令长度脱钩了。你一句话可以触发几十次文件操作,而你只需要审查最终结果。

打个比方

想象你请了一个实习生帮你改代码。普通的 LLM 是这个实习生只能隔着玻璃窗跟你说话;agent 是你把电脑交给他,他可以真的坐下来敲键盘,但每隔几步抬头看你一眼:「这样行吗?」后面你会看到,那个「抬头看你一眼」就是权限弹窗——第二章会详细讲。

工具:它的手和眼

模型能做什么,最终取决于它手里有什么工具。Claude Code 给它挂的工具箱比较大,分几类:

类别工具它用这个工具做什么
文件Read / Write / Edit读文件、从头写文件、在已有文件里做精确替换
搜索Glob / Grep按路径模式找文件、按内容在整个项目里搜索
执行Bash跑任意 shell 命令,从 lsnpm testdocker build
网络WebFetch / WebSearch抓一个 URL 的内容并总结、用关键词搜网
后台Monitor / run_in_background起长任务,不阻塞当前对话
子代理Agent召唤另一个 Claude 去独立完成一个子任务(第三章细讲)
计划TaskCreate / TaskUpdate维护当前会话的待办清单
自省Skill调用一段事先写好的标准流程

每一轮,模型从这个工具箱里挑一个(偶尔几个并行),系统执行后把结果给它。再加上通过 MCP 接入的外部工具(GitHub、Slack、数据库),工具箱实际上是「可扩展的」——你自己项目里挂的每一个 MCP 服务器,都是给 Claude 多配一组趁手的手套。

可见和可控

一个关键设计选择:所有工具调用都对你可见。终端里的每一行灰色日志都是 Claude 当前在做什么。不像一些封闭的 AI 助手把中间过程藏起来只给你最终结果——Claude Code 相反,它在你眼皮底下工作。这不是好看,是安全:你随时能看明白它凭什么给出某个结论、是不是读了不该读的文件、跑了不该跑的命令。

配套的是权限系统。读文件、搜索是纯只读,系统会自动放行;写文件、跑 shell 命令、发网络请求这些有副作用的操作,默认每次都会弹一个小框问你是否允许。你可以逐次确认、也可以「允许这个命令模式所有后续操作」——这套机制第二章还会专门讲。

和网页版 Claude 的区别

网页版 Claude(claude.ai)也能调用一些工具——搜索、代码解释器、artifact 预览、Projects 里的文件。但它的工具箱是封闭的沙盒:它跑在 Anthropic 的服务器上,看不见你的电脑。你让它「读我项目里的 utils.ts」,它只能说「请把内容粘贴给我看看」。

Claude Code 相反——它跑在你的机器上,工具箱直接对接你的文件系统和 shell。你让它「读 utils.ts」,它真的去读了。同一个模型、同一个大脑,换了一副身体。

能力 网页版 Claude Claude Code
读你项目里的文件不能,要粘贴直接读
改你项目里的文件生成文本你自己贴写进去 + diff 给你看
跑命令(npm testgit diff不能能,看输出后决定下一步
持续循环干活一问一答可以跑几十轮直到完成
记住项目规范每次重新解释CLAUDE.md 持久记忆
上下文窗口200kOpus 4.7 达 1M token
控制权看不到中间过程每一步工具调用明文可见
代价订阅即用消耗配额更快,但效率更高

很多人问「我订阅了 Pro,为什么还要装 Claude Code?」——因为它们解决不同的问题。你在网页版写一个 essay 很方便;写一个跨十几个文件的重构,在网页版几乎不可能,在 Claude Code 是十分钟的事。

和 GitHub Copilot 的区别

如果说网页版 Claude 是一张嘴、Claude Code 是一双手,那 Copilot 是一根自动补全的手指

Copilot 的核心工作流是:你在编辑器里敲代码,它在光标处给你接下一行或一段。它的粒度是「行」或「小片段」,触发是「你在打字」,主动权在你。它像一个提词器——聪明的提词器——但你还是主角。

Claude Code 的粒度是「任务」。你说一句「帮我把这个 API 从 REST 改成 GraphQL」,它会自己读相关文件、列出要改的地方、一个个改过去、跑测试、如果测试挂了再回头调整。整个过程你可能只打了一句话。它更像一个初级工程师——会出错的那种——你把活派给他,验收他的产出。

一张表看对比:

维度CopilotClaude Code
工作单位几行代码整个任务
触发方式你敲键盘你描述目标
上下文当前文件 + 打开的文件整个项目 + 跑命令的输出
会跑命令吗不会会,并看输出决定下一步
适合场景你知道在写什么,只是想打得快你知道要什么,不想自己动手

两者不互斥

很多人在 VS Code 里用 Copilot 做小补全,需要跨文件的活就切到 Claude Code。Anthropic 也做 VS Code 扩展把 Claude Code 嵌进 IDE——Cmd/Ctrl+Esc 召唤 Claude,在同一个窗口里完成「打字的同时有 agent 支持」。

为什么是终端,而不是 IDE 插件?

这是个值得解释的设计选择。答案有三层。

第一层,务实。终端是程序员世界的通用接口。无论你用 VS Code、Neovim、JetBrains、还是在服务器上裸 ssh,你都有终端。把能力放在终端里,意味着任何开发环境都能用——不需要为每个 IDE 写一个插件,也不受 IDE 的 API 限制。

第二层,哲学。终端天然就是一个「发号施令并看结果」的地方。你 lscdgit status——每一条命令都是一个小循环:输入、执行、输出、再决定。agent loop 其实是这个循环的一个更聪明的版本:不是你一条一条敲,而是模型替你敲,并且能看懂输出的含义。终端和 agent 在抽象结构上是同一种东西。

第三层,可组合性。终端里的一切都是文本流,可以被管道串联、被脚本调度、被 CI 系统调用。Claude Code 的 claude -p "..." 非交互模式——当你把它当成一个「接受 prompt 吐出 JSON」的命令行工具时——意味着你可以把它塞进 Makefile、塞进 GitHub Actions、塞进 cron。浏览器应用没法做到这一点。

Anthropic 也在做 VS Code 扩展、JetBrains 插件、桌面 App、网页版 App、iOS 移动端,但它们都是同一个 Claude Code 的外壳,里面的大脑和循环是一样的。先理解终端里的版本,其他都能套过去。

你的第一次对话,可能是这样

在项目目录里敲一个字:

claude

一个带着橙色小圆点的界面弹出来。如果是第一次跑,它会引导你登录(浏览器里授权)和选订阅档位。登完以后你就在输入框前了。随手问它:

> 这个项目是干嘛的?给我一个简要的概述。

它不会凭空编。它会:

  1. 调用 ReadREADME.md
  2. 调用 Glob 扫一下目录结构,看看技术栈;
  3. 可能再读 package.jsonpyproject.toml
  4. 然后给你一个有根据的总结概览。

整个过程你能看到它每一步在做什么——工具调用是明文显示的,不是黑盒。这是 Claude Code 很重要的一个属性:它在你眼皮底下工作。你随时可以按 Ctrl+C 打断,也随时能看明白它为什么得出某个结论。

第一次翻车,大概会这样

别期待它完美。第一次用,你很可能遇到其中至少一种:

这些全是可以管理的。重要的是你从一开始就知道它们会发生——这样遇到它们的时候你不会慌、不会怀疑 AI 是不是「不好用」。它很好用,只是它像所有强大的工具一样需要会用

稍微总结一下...

进入下一章之前

(1)Claude Code 是一个跑在你电脑上的 agent,不是聊天机器人。
(2)它的工作方式是 模型 + 工具 + 循环,不是一问一答。
(3)你能看见并打断它的每一步——这是你控制它的入口。

到这里,你对 Claude Code 的「世界观」已经齐了。接下来第二章把手把手教你「怎么打字」——三种前缀、三十多个斜杠命令、权限弹窗那一幕。读完第二章,你就能开始真正它做事了。