把 Claude Code 用明白:从架构、机制到开发赋能的全面解析

215 阅读22分钟

本文源自 GLM Coding 大师作品征集赛 的获奖作品,原文作者为 Lazenca

数万开发者严选的编码搭子 GLM Coding Plan

推荐语:

这篇文章可谓是技术社区级的Claude Code全景指南。系统梳理了从安装、配置到上下文工程、Subagent与Skill机制的全链条逻辑,几乎覆盖了Agent工作原理的所有关键环节。

概况

Claude Code (下称CC)是 Anthropic 开发的命令行 AI Agent 工具,与传统的 Chatbot 不同,CC 在 Terminal(Linux bash、CMD、Powershell)中运行,Agent可以探索整个代码库,修改文件、代码,运行命令,自动进行调试与 debug,还可以通过扩展工具来访问或编辑其他格式的文件,总而言之,可以做到shell所能做到的一切。

Tip:文中会使用形似该处的“Tip”栏目表示最佳实践,虽然远非“最佳”的实践,但也能避过一些雷点。

核心优势

  • 项目化上下文:探索整个项目目录,而非仅当前打开的代码文件,获取全面的上下文信息
  • 系统级权限:可以直接操作shell,进行文件管理、自动化编写代码并测试
  • 多 Agent 架构:使用主 Agent 领导多个Subagent 分配任务,节省主 Agent 上下文
  • IDE 集成:不需要更换 IDE,可与 VSCode 等Editor的集成终端直接集成

同类工具

市面上有不计其数的类似工具,大体分为3类:命令行工具、IDE与vscode插件,命令行工具无疑是最底层的,从硬性能上来说自然是最佳的(智能水平还取决于工具内置的提示词与软件工程架构水平),选择CC的理由在于:

  1. 命令行工具具有环境兼容性与性能优势,可以跨Windows与Linux平台使用,当然还有WSL
  2. 命令行工具能做到shell所能做到的一切,换言之,是无所不能的
  3. 命令行工具的开发重心更加集中,没有GUI界面的开销,并且常见的AI IDE无非是VSCode套壳
  4. 命令行工具相对开放,CC可以通过npm下载,并且可以接入其他模型接口
  5. CC的扩展性与定制性高,官方与社区提供了插件与相关扩展工具
  6. CC的工程架构水平很高,自动化程度、细节打磨与功能开发也更加卓越,采取闭源策略,更新频繁,社区活跃。

安装与开始使用

依赖项

  • macOS 10.15+、Ubuntu 20.04+/Debian 10+ 或 Windows 10+(需搭配 WSL 1、WSL 2 或 Git for Windows)

  • 4GB+ RAM

  • Node.js(本地安装包则不需要):Node.js — Run JavaScript Everywhere

    • 确保 node -v 和 npm -v 命令可以正常使用
  • 网络:身份验证和AI处理需要网络连接

  • Shell:在Bash、Zsh或Fish中效果最佳

Claude Code 安装与使用配置

原生安装(官方推荐)

在2.0.31版本中,Anthropic提供了安装包原生安装以替代Node.js安装,以提供更稳定的更新,各个环境安装命令:

Homebrew (macOS, Linux):

brew install --cask claude-code

macOS, Linux, WSL:

curl -fsSL https://claude.ai/install.sh | bash

Windows PowerShell:

irm https://claude.ai/install.ps1 | iex

Windows CMD:

curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

NPM安装

在Windows终端与Linux bash中输入以下命令,即可安装

npm install -g @anthropic-ai/claude-code
claude --version

然后直接输入claude使用

Tip:替换npm的下载源来进行替代:(淘宝镜像)

npm config get registry
npm config set registry https://registry.npmmirror.com/
npm config get registry

API 配置

此时的CC是无法使用的,需要登录,我们建议使用其他模型替代。

我非常推荐使用智谱的GLM Coding Plan作为CC的主力模型来源,能力在开源模型里面也属于SOTA级别,可以享受到几乎unlimited的模型调用,并且GLM对CC有特别的优化。


有两种方法可以设置模型,第一种是在系统环境变量中设置(以智谱为例)

setx ANTHROPIC_BASE_URL "https://open.bigmodel.cn/api/anthropic"
setx ANTHROPIC_AUTH_TOKEN "your-api-key"
setx ANTHROPIC_MODEL "glm-4.6"
setx ANTHROPIC_DEFAULT_HAIKU_MODEL "glm-4.6"

也可以在用户文件夹的.claude/settings.json设置(注意最后一行没有逗号)

{
    "ANTHROPIC_BASE_URL": "https://open.bigmodel.cn/api/anthropic",
    "ANTHROPIC_AUTH_TOKEN": "your-api-key",
    "ANTHROPIC_MODEL": "glm-4.6",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "glm-4.6"
}

在 Vscode 中使用 Claude Code

  1. 通过 Terminal 启动
  • 打开 Vscode 的集成终端(Ctrl+`)
  • 直接输入 claude 启动
  • Claude Code会自动连接IDE
  1. 使用 VSCode 插件 提供了官方的 Claude Code 插件:
  • 在编辑器右上角快速进入
  • CC插件会自动将所在文件与选中的代码作为上下文输入
  • 右键菜单会出现 "Fix with Claude Code" 选项
  • 为斜杠命令、计划模式、历史对话与开始新对话等功能提供了可交互按钮

Tip:配置.claude/config.json以跳过登录

{
 "primaryApiKey": "anything"
}

CC的设计哲学与关键组件

上下文工程

上下文(Context)是AI Agent工作的基础与输入,与过去提示词(Prompt)概念不同的是,提示词的宗旨在于在每次交互中利用利用自然语言的约束与提示来尽可能提高AI的表现,而上下文工程的核心观念是为AI提供充足的信息,包括你的项目架构,内部或外部的技术文档,规定的工作流程与技术规格,此外,如何组织不同的上下文,控制Agent对于不同上下文的注意力也是上下文工程的重点。上下文整体的长度要比提示词长得多,由许许多多不同的部分组成,并且也不是一次性使用,而是在一个项目里持续不断地为AI提供信息,提高AI输出内容的稳定性与对用户需求的吻合度。

所谓上下文工程(Context Engineering)与提示词工程(Prompt Engineering)的最终目的就是提高大语言模型这个概率模型的输出的确定性。因此,优秀的,充足的上下文能够尽可能多的提供AI Agent工作所需要的信息,要求AI按照既定的规则工作而不输出用户所不希望看到的结果,例如引入新的bug、过度开发、破坏现有架构等。

而现有的AI工具上下文容量并不足够长:国产模型普遍只有128K-256K的上下文容量,即使是一些标称容量1M甚至2M的模型,在上下文过长(超过200-300K)时也会注意力分散,幻觉率大大提高,性能下降。因此,确保上下文的长度与有效性是控制AI行为稳定性最有效的手段。这并不意味着总是要节省上下文空间的使用,恰恰相反,应该在上下文容量范围内塞入更多的规则,来更好的控制AI Agent工作,余下的上下文则作为AI聊天与工作时的“缓存”。

在CC的技术文章中分享了很多上下文工程的技巧与设计理念,下文将结合理念与CC的组件来讲述。

上下文压缩

CC在聊天上下文接近模型的上下文容量上限的时候会进行上下文压缩(阈值为92%),这将会把现有的聊天与工作成果汇总成Summary然后继续接下来的聊天,以此来实现连续不断地聊天与工作。同时,你也可以使用/compact命令手动进行上下文压缩,这可以成为一部分工作的结尾和另一部分工作的开始。另外,如果上下文已经无用,使用/clear来进行全新的聊天,也可以通过/resume命令回到这个项目文件夹所进行过的任意一个聊天。

Tip:上下文压缩功能当前不算好用,尽量在一个session中只执行一个任务,小步快跑,渐进开发,只有在一个任务上下文实在不够或发生明显降智时谨慎使用

自动载入的上下文:CLAUDE.md

CLAUDE.md是CC在项目文件夹工作时所默认读入的上下文文件,并且,在用户文件夹的.claude/目录中也存在一个“系统级”的提示词,你可以将你对CC的所有具有领导性的要求写在里面。而在项目内,根目录的CLAUDE.md提供本项目的信息、要求。

CC的高明之处在于,CLAUDE.md在项目目录中呈树状存在,子目录的CLAUDE.md在CC在上级目录工作时不会被读取,而当CC进入这个子目录时,会自动读取子目录下的CLAUDE.md来获得该目录的信息,确保AI专注于本目录的工作而不被项目的其他模块所干扰。使用/context来审阅目前的各类上下文占用了多少模型的上下文容量,使用/memory来管理这些“记忆”(也就是CLAUDE.md)。

Tip:CLAUDE.md中也可以通过“@”来通过绝对路径或相对路径引用其他文件,CC会自动在memory中读入他们,在斜杠命令中也可以这么做。当前最多支持5级嵌套,使用引用功能可以在不同地方复用规则,降低维护成本。然而,模型似乎对@引入的上下文注意力更低,需要谨慎使用。

手动引入的上下文:斜杠命令(Slash-command)

斜杠命令某种意义上,只是一个快捷方式:本质上只是起到了节约时间的作用——你可以将提示词记在剪贴板中,这某种意义上可以与自定义斜杠命令起到相同作用,总之,一个斜杠命令的上下文需要手动引入,而不在启动CC时自动加载。

自定义斜杠命令的主要意义是记录一个指令,或者说固定的工作流,保存在项目或者用户文件夹的commands/目录下,你可以在聊天时方便的输入/来检索并调用,例如,可以规定一个/review-code的提示词,内含你需要的审阅代码的流程与要求。斜杠命令的提示词中可以使用变量占位符$ARGUMENTS,让斜杠命令有更强的功能性与兼容性。

Tip:精密的流程控制是提高AI性能与自动化水平的有效手段,一个详细的,具有清晰步骤与规则的工作流说明可以让AI稳定地工作很长时间。同时,事无巨细地规定AI的工作范围,也可以让AI减少自我发挥的空间,AI总是过于自信、过于高估其水平而缺乏反思。

上下文隔离:Subagent

Subagent实现了项目中不同业务的划分,由于上下文长度与模型注意力的有限,我们不可能将所有的要求都写入主Agent的CLAUDE.md中,这只会导致主Agent注意力混乱,指令遵循能力下降。因此,使用Subagent功能可以将不同的专业的、定制化的需求与角色分配给不同的Subagent,使用/agents命令来开始自定义自己的Subagent,Subagent的提示文件会保存在项目的agents/目录或是用户目录的.claude/agents/目录下。

当有需求时,主Agent会自动调用Subagent,然后将所需的上下文传送给Subagent进行工作,你不能直接与Subagent进行沟通,而由主Agent作为桥梁。Subagent之间的上下文完全隔离,确保每一个Subagent的专业性和指令遵循,目前而言,Subagent之间并不能直接调用,这可能会导致循环调用的问题。

当然,有时上下文也不需要隔离,一个项目应该有一套各个Subagent与开发者共同遵守的规定,系统级或项目提示词可以起到这个作用,并将自动继承给Subagent,明确要求Subagent遵守以达到这一目的。

Tip:维护一整个Subagent团队是个累人的事情,建议只维护少量的特定Subagent,而许多更加通用的技能,可以使用CC的Skill技能来处理。CC也默认提供了几个Subagent,包括通用Subagent(general purpose)、Plan、Task、Explorer

渐进式披露上下文:Skill(技能)

在CC的技术文章中阐述了渐进式披露上下文的概念,并且以此为核心推出了Skill(技能)功能,事实上,这个概念在之前数个功能中已经获得了实践,具体来说,Skill分为三个部分:元数据、技能文档与引用信息,元数据位于技能文档SKILL.md的开头,包含一个技能的name与description,这部分会在CC启动时自动载入,而SKILL.md的末尾会引用技能文件夹的其他文件作为引用资源,可以包含其他文档,也可以包含作为工具或者实现示例的代码。

在其他功能,如子代理、自定义斜杠命令中,这个观念也有一定实践,CC只加载一小部分组件的描述,在需要的时候再逐步拉取所需信息,Skill将这个过程用单一组件的形式加强了,并且分成了三层。需要强调,Skill名为技能,实则与MCP这类“工具”完全不同,所有将两者进行类比、混淆的文章都完全没搞懂Anthropic的设计理念,Skill本身只是一个分层的上下文,仅此而已,你可以让代理直接使用工具,也可以教他使用、或是教他创建工具,核心在于提供信息来“教”,而MCP是一个协议,提供的是接口已经返回的上下文规范,对于代理来说完全不同。

上下文屏蔽:.claudeignore

偶尔,CC也会读入太多的无用信息,在.claudeignore中编写忽略清单,比如密码、数据库或是隐私信息,来防止CC读取,这也有助于控制上下文来提高CC性能表现。

用工具代替模型智能

为了提高AI工作的准确性与稳定性,使用具有确定结果的工具总是要好于基于概率的语言模型,这个概念最初称作Function Call,现在,工具调用能力已经是Agent模型最重要的能力之一,善于使用工具的模型可以更加稳定、更加准确地交付产品,并且也有助于提高性能表现以及工作效率。Anthropic为CC配备了基础的系统工具,同时,用户也可以接入MCP工具或定制自己的工具来完成工作。

系统工具

CC可以使用读、写工具,搜索工具,以及与文件系统交互的命令行工具,执行工具。并且,斜杠命令、Skill的使用也以类似工具的形式调用,需要相关权限的许可。

MCP

MCP(Model Context Protocol)是Anthropic一项伟大的发明,这是一种工具调用协议,定义了接口与返回的上下文,能够让其他程序、服务器用固定格式与模型交互,例如,可以调用搜索工具为CC提供网络信息,用RAG(Retrieval-Augmented Generation)工具帮助CC在知识库中检索信息,用Word编辑MCP为CC提供与Word文件交互的能力。

MCP提供了一种可能,让大语言模型超出了原有的聊天、或是只在命令行内工作、编写代码、文本的功能,而能够通过一个通用接口和任何一个应用进行交互,传递信息。使用/mcp命令管理已有的MCP服务器,网上的MCP服务器通常提供了安装的指引,项目与系统的MCP设置会储存在~/.claude.json或项目的.mcp.json里。

参照CC的官方文档,或是借助官方Skill,可以更容易的封装自己的MCP工具。

Tip:MCP可以补偿模型不具有的能力,例如视觉理解、网络搜索等,或是对其缺陷进行一定增强。需要注意的是,MCP的每个工具都会载入一段上下文,尽量精简MCP列表,否则会对上下文造成非常大的负载,可以使用@来快捷地开关MC

Tip:合理配置子代理可使用的工具以限制子代理的能力,在配置的工具过多时,若没有明确要求,Agent调用工具的能力会大大下降,因此,限制了工具使用范围的子代理在特定任务的表现更佳,子代理的模型也可以自由调整,提高特定任务的性价比。

Workflow自动化与安全性

经过配置之后,使用CC等代理工具的目的,就是为了减少人类在工作中的参与程度,如果只需要人类在AI工作完成后提供审阅与检查,就可以完成相同的工作,那么一个优秀的开发者就可以独立完成过去一个团队才能完成的工作。CC采用一种被称为主代理循环的工作方式,重复“思考-执行-检查-反思”的循环来实现,这促使CC不断改进自己的工作以达到验收标准。这样高效的代理工具让开发者的工作从编码、开发变成了编写需求-等候-审阅代理的工作成果,而要更进一步地提高效率,需要适当地规定代理的权限范围并且规划好代理的行动路线,减少审阅的工作量。

计划模式

CC单击两次shift+tab进入计划模式(一次是auto accept edits),在使用原生模型的时候,计划模式会使用opus模型,但我们外接之后需要特别设置opus模型对应的模型。计划模式会限制代理进行任何的破坏性的工具使用,而是专注于分析你的需求并生成一个完整的计划,这会有一个Plan子代理完成,他具有更高的与你交流、修订计划的欲望,开始行动之后,代理会制定一个TODO list来跟踪每个任务。使用/todos来查看现有的TODO list。

使用tab键来开关思考模式,也可以通过显式输入“ultrathink”来激活最大程度的思考思考,并附带彩虹特效(显式输入思考是早期版本留下的彩蛋),开启思考模式理应只在混合思考模型生效,在不同模型表现不同,有时也可以搭配思考型MCP使用。

精密的工作流控制与ReAct Agent

这两者往往是一种矛盾的概念,也代表了目前Agent发展的两个方向,一种是逐步编制一个工作流,代理逐步完成任务,这个方式具有很高的稳定性,只是把AI代理当成一个忠诚的执行者,但这会抑制AI本身的智能;ReAct Agent则是把主代理循环的理念进行延伸,让代理主动进行思考与反思,持续进行工作,这或许也可以通过一种循环的工作流控制来实现。

一般我们可以用斜杠命令来设计一些工作流程,但通过一整段提示词控制的工作流程在提示词变长之后,稳定性会急剧下降,Anthropic提供了Claude Agent SDK(其他公司都有同类产品)来通过编程的方式调用Claude Code工作,可以构建非常复杂的代理程序。

权限许可

考虑到威力过大,很有可能对现有架构进行一些破坏性修改或删除重要文件,CC的所有工具调用与命令在执行前都会请求用户许可,你可以单次许可,或者在这个项目里始终许可,这会被记录在项目目录的.claude/settings.local.json文件中。仔细评估流程自动化程度与安全性的平衡,为命令授予许可。使用/permissions(allowed-tools)命令管理许可。有时,可以始终许可一些高频的工具(例如fetch),防止自动工作总是被请求许可打断。

沙盒模式与--dangerously-skip-permissions

沙盒模式已经在Claude的网页版上推出,但CC尚未上线,这会创造一个完全离线并且与系统其他部分隔离的安全环境,在这个环境中代理的任何行为都不需要权限许可,在启动CC时使用claude --dangerously-skip-permissions也有相同的效果,这会极大提高代理的工作效率,但也会造成极大的风险:特别是代理试图删除许多文件时,甚至会造成删库跑路的后果,需要有效的版本控制来解决这个问题。

Hooks(钩子)

钩子是一个相当高阶的工具,可以在CC在进行某一个操作之前或之后固定触发,具体来说,有

  • PreToolUse: 在工具调用之前运行(可以阻止它们)
  • PostToolUse: 在工具调用完成后运行
  • UserPromptSubmit: 当用户提交提示时运行,在Claude处理之前
  • Notification: 当Claude Code发送通知时运行
  • Stop: 当Claude Code完成响应时运行
  • SubagentStop: 当子代理任务完成时运行
  • PreCompact: 在Claude Code即将运行压缩操作之前运行
  • SessionStart: 当Claude Code启动新会话或恢复现有会话时运行
  • SessionEnd: 当Claude Code会话结束时运行

利用钩子可以在流程中添加固定的代码审查、自动格式化、日志记录等功能,或者让CC在需要操作时提醒你,这一切取决于你的想象力。使用/hooks命令来管理钩子。

版本控制

利用Git

有了AI Agent以后,Git的版本控制操作变得容易许多,你可以通过自然语言要求Agent帮你暂存文件,提交版本,还可以自动生成.gitignore文件等。提交的命名与摘要也可以通过AI记录的日志自动完成,结合钩子功能可以将Git版本控制融入到每一次开发中,不丢失任何版本。

另外,CC可以使用MCP或Github CLI与Github进行交互,并内置了Github插件以自动化处理issues。

检查点回滚

Claude Code 2.0.0中,CC终于推出了检查点(Check point)功能,你的每个prompt都会被记录成一个检查点,可以随时通过/rewind命令撤销一个或多个更改,这可以作为比Git更微观的版本控制,避免AI破坏代码原有架构并要求修改。

并行开发

在任何情况下,都可以在同一个目录启动多个CC实例来进行并行开发,但如果并行开发存在相关文件冲突,可以使用Git的worktree功能,worktree可以在指定目录下创建一个Git分支,在这个目录下启动CC实例,就可以实现无冲突的并行开发,开发完成后在主分支将worktree合并即可。

其他神奇妙妙工具

社区与插件分发

官方提供了/plugin功能,可以便捷地通过Github的链接引入插件marketplace来对每个插件进行管理,这些插件包含了他人的Subagent、Command、CLAUDE.md(Output-style,原来的Output-style设置已经废弃)以及MCP配置,参见CC文档来了解如何将这些组件打包成一个plugin。贸然引入外来的配置也可能引发无法预料的后果,需要仔细审查并自适应地调整为需要的形式。

命令行工具的扩展性也让开发者社区创造了海量的外部插件,例如切换MCP的MCP router、管理API的CC Switch等等。

/statusline

设置CC的状态栏,会显示在聊天框下面,使用命令会让CC按照你的要求配置,也可以直接获取其他开发者定制的插件。如Haleclipse/CCometixLine: Claude Code statusline tool written in Rust

快捷键

单击?可以打开快捷键提示

键位说明
bash模式
/斜杠命令
@引入特定文件
#直接添加记忆(CLAUDE.md)
ESC打断AI
ESC+ESC清除输入
ESC+ESC(无输入)回滚检查点/选择某个prompt
shift+tab自动接受编辑模式与计划模式
Ctrl+o详细输出
Ctrl+t展示todos
Ctrl+r搜索记录
shift+enter换行
ctrl+_增加undo
alt+v黏贴图片

其他预置斜杠命令

命令说明
/add-dir添加一个新的工作目录
/bashes管理后台
/config设置
/cost花费(按照官方模型计算)
/doctor问题修复
/exit退出
/export导出聊天记录
/feedback反馈bug
/help帮助
/ide管理IDE连接
/init项目初始化(扫描代码库并生成CLAUDE.md)
/install-github-app与Github直接协作的插件,用于全自动处理issues
/login & /logout登录登出,不要点!!!
/migrate-installer将CC从全局安装迁移到Local
/model切换模型(仅支持官方)
/pr-comments从Github PR获得评论
/release-notes更新日志
/review审查一个PR
/security-review对当前分支未提交的变动进行安全审查
/status状态
/terminal-setup为终端安装Ctrl+Enter的组合键
/usage查看套餐使用情况(官方)
/upgrade升级套餐(官方)
/vim将编辑模式切换到vim