笔者在之前从事 ABAP 开发时,曾经花了很多时间来熟悉和研究 SAPGUI 以及 ABAP Development Tool 这些开发工具的工作原理以及背后的生态圈。
当时也写过一些相关文章:
如今时代变了,Claude Code 已经成为很多开发人员日常工作重度使用的工具之一。
对学习 Claude Code 的工作原理和高级用法所投入的时间和精力,从长远眼光来看可以会带来丰厚的回报。
本系列记录笔者的 Claude Code 学习笔记。
本文是第一篇。
Claude Code 是一个运行在终端的 agentic 助手。
虽然它在编程领域表现出色,但实际上命令行能做的事它都能做:写文档、运行构建、搜索文件、研究技术问题等等。
我们日常使用 Claude Code 时,实际上背后产生了一个个如下图所示的 Agentic Loop.
当我们给 Claude 发送一条指令时,这个任务会经历三个阶段:收集上下文、执行操作、验证结果。
这三个阶段相互交织。
Claude Code 在整个过程中持续使用工具(Tools)来完成任务:可能是搜索文件来理解代码,可能是编辑文件进行修改,也可能是运行测试来检查工作成果。
用户输入的提示词触发 Claude 收集上下文、执行操作、验证结果,并重复这个过程直到任务完成。
当然,用户可以在任何时候打断这个循环。
Agentic Loop 会根据用户的请求自动调整。
一个关于代码库的问题可能只需要收集上下文,一个 bug 修复可能要反复经历所有三个阶段,一个重构可能涉及大量验证工作。
Claude Code 会根据前一步采集的信息决定下一步做什么,把多个操作链接起来,并在过程中不断调整方向。
用户本身也是 Agentic Loop 的一部分,我们可以在任何时候打断这个 Loop,引导 Claude 换个方向,提供额外的上下文,或者让它尝试不同的方法。
Claude 在自主工作的同时,能够始终响应我们的输入。
Agentic Loop 本身由两个组件驱动:负责推理的大模型和负责执行的工具。
Claude Code 充当整个这套智能代理的赋能框架 :它提供工具、管理上下文、维护执行环境,把 Claude Code 连接的大语言模型变成一个真正能干活的编程 agent.
大语言模型
Claude Code 使用大语言模型来理解用户的指令并对任务进行推理。
在编程领域,大语言模型能读懂任何编程语言的代码,理解组件之间的连接方式,并找出需要做什么改动来完成用户的指令。
对于复杂任务,大模型会把工作拆分成多个步骤,执行这些步骤,并根据学到的信息进行调整。
Claude Code 提供了多个模型,它们有各自擅长的工作场合。
Sonnet 能很好地处理大多数编程任务。而 Opus 在复杂的架构决策上提供更强的推理能力。
用户可以在会话中用 /model 切换,或者用 claude --model启动时指定。
工具
工具是让 Claude Code 具备 Agentic 特性的关键所在。
没有工具的支持,Claude Code 只能用文本回复用户请求。
有了工具,Claude 就能在我们本地电脑直接采取行动:读代码、编辑文件、运行命令、搜索网页、与外部服务交互等等。
每次工具调用都会返回信息,这些信息会反馈到 Agentic Loop 中,影响 Claude Code 的下一步决策。
内置工具大致分为五类,每一类代表一种不同的能力类型。
其中代码智能工具需要针对不同的代码,安装额外的代码智能插件:
当然除了上面提到的最主流的工具之外,Claude Code 还有派生子 agent、向用户追问以及其他编排任务的工具。
Claude Code 完整支持的工具列表可以查阅官方文档:
https://code.claude.com/docs/en/tools-reference
Claude Code 会根据我们的提示词和它在 Agentic Loop 过程中学到的信息,来选择使用哪些工具。
比如当我们说「帮我修复失败的测试」时,它可能会:
运行测试套件,看看哪里失败了
读取错误输出
搜索相关的源文件
读取这些文件来理解代码
编辑文件修复问题
再次运行测试进行验证
每次工具调用都会给 Claude Code 赋予新的信息,这些信息会影响其下一步执行动作。
这就是 Agentic Loop 的实际运作方式。
除了 Claude Code 这些内置的基础工具之外,开发人员还可以通过 skills 扩展 Claude Code 的知识,通过 MCP 连接外部服务,通过 hooks 实现自动化工作流,通过子 agent 委托任务。
这些扩展在架构上属于核心 Agentic Loop 之上的逻辑扩展层,笔者后续也会深入学习这一层。
Claude Code 可以在终端命令行,VS Code,JetBrains IDEs 等环境中运行。
当我们在一个目录中运行 claude 命令行时,Claude Code 可以访问下面这些本地资源:
代码项目文件:包含启动 claude 命令行的当前目录和子目录中的文件。经过用户显式许可后,也可以访问其他位置的文件
用户终端:用户能运行的任何命令,比如构建工具、git、包管理器、系统工具、脚本等。换言之,用户在命令行里能做的事情,Claude Code 也能做
项目的 git 状态。比如当前分支、未提交的更改和最近的提交历史。
CLAUDE.md:一个 markdown 文件,即 Claude Code skills 的实现源代码文件。我们可以在其中存储项目特定的指令、约定和 Claude Code 每次会话都应该知道的上下文。
自动记忆区域:Claude Code 在我们工作时自动保存的学习内容,比如项目模式和用户偏好。它可以持久化存储在项目的 MEMORY.md 文件中。每次会话开始时会加载这个文件的前 200 行或前 25KB(以先到者为准)
用户扩展配置:用于外部服务的 MCP 服务器、用于工作流程的 skills、用于委托工作的子 agent,以及用于浏览器交互的 Claude in Chrome 等等
因为 Claude 能访问整个项目,所以它可以根据实际需要自主地对项目内的文件进行读写操作。
比如当我们让 Claude Code "修复用户登录认证的 bug"时,它会检索相关文件,读取这些文件的内容以理解上下文,对相关文件进行协调编辑,重复运行登录的自动化单元测试,验证 bug 是否修复。
如果用户显式要求,Claude Code 还可以将当前修复 bug 做出的代码变更,提交到远端 Github 仓库。
Claude Code 能做什么?
当我们在一个目录中运行 claude 命令行时,Claude Code 获得的不仅是对我们项目的可见性,它还获得了 agency,即对该项目进行潜在自治处理的能力。
这个能力的影响范围很广,比如:
编辑和创建文件:修改现有代码,创建新模块,重构整个目录
运行命令:执行测试、启动服务器、运行构建脚本、查询数据库、调用 API
使用 git:创建分支、提交更改、查看差异、切换分支,甚至在我们要求时推送到远程仓库
安装依赖:添加包、更新库、修改配置文件
与外部服务交互:通过 MCP 连接到 API、数据库、云服务、企业内部工具
生成子 agent:为并行工作或专门任务启动独立的 Claude Code 实例
搜索网络:查找文档、研究错误信息、查询技术问题
这种级别的 agency 是 Claude Code 能够处理端到端任务的根源:不仅仅是对代码更改提出建议,而是亲自动手实现更改、测试更改并验证这些更改是否有效。
这种强大的自治能力也意味着 Claude Code 的操作可能会带来风险。
为了尽量规避这些风险,Anthropic 引入了权限模式的概念,让用户可以定义哪些操作在 Claude Code 执行之前,需要用户人工批准。
目前 Claude Code 支持的几种权限模式:
如何高效使用 Claude Code
Anthropic 官网给出了一些使用 Claude Code 的最佳实践。
当然,我需要在实际工作中大量使用,才会体会出这些最佳实践背后蕴含的智慧。
👉 从小处开始,然后扩展
尽管 Claude Code 现在有能力可以挑战一些大型的高复杂度任务,但从任务开始通常更明智。
比如先让它重复熟悉我们某个代码仓库,修复一个小 bug,或者进行一次有针对性的重构。随着我们对它的工作方式的深入了解,我们可以逐步委托更复杂的任务。
👉 让 Claude Code 探索当 Claude Code 刚刚接触一个它陌生的代码仓库时,和人类的工作方式一样,它需要足够的上下文。
不要假设 Claude Code 一上来就达到人类开发者对当前代码仓库的熟悉程度。
充分让 Claude Code 去探索仓库、读取文件和学习。当然,你得烧得起 Tokens.
这个收集上下文的阶段对于后面的优秀决策至关重要。
👉 在过程中引导我们不需要等到 Claude Code 完成任务才提供进一步的输入。
如果发觉它走错了方向,我们可以打断。
如果它错过了重要的内容,我们可以向它指出。
如果它找到了正确的解决方案但我们想用不同的方法,我们可以引导它。前面已经说过,Claude Code 的 Agentic Loop 是协作式的,我们作为终端用户也是 Loop 中的一环。
👉 使用 CLAUDE.md 持久化上下文如果我们发现自己在每次会话中都重复相同的指令,比如"使用 tabs 而不是 spaces"、"测试在 __tests__ 中"、"遵循项目的命名约定",那么就把这些重复的内容写进 CLAUDE.md 吧。
Claude Code 会在每次会话开始时读取这个文件,所以我们不需要重复自己。
👉 验证关键更改
纵然 Claude Code 可以运行测试和验证其工作,但 Claude Code 也免不了会犯错。
所以人类开发者应该对 Claude Code 做出的关键更改进行验证和审查。
Claude Code 是一个编码助手,而不是碳基开发人员的替代品。
👉 当遇到困难时及时给 Claude Code 反馈如果 Claude Code 做了一些不符合我们期望的事情,及时告诉它,比如"这个重构太激进了"、"这个测试不够覆盖边缘情况"、"使用这个库而不是那个"。
Claude Code 收到反馈后会调整其方法。当然这种反馈也可以维护进 CLAUDE.md,这样它就会记住我们的偏好。
👉 利用扩展本文开头部分介绍的 Claude Code 内置工具很强大,但扩展会解锁更多能力,包括但不限于: