你写了一句话,按下 Enter,终端里就开始一行接一行地往外刷。打开了文件。运行了命令。又打开了同一个文件。看上去就像在瞎忙:明明只提了一个简单的要求,眼前却是一段又长又看不懂的过程。

其实它并没有瞎忙。智能体在反复运行一个由三部分组成的循环,你在屏幕上看到的几乎所有内容,都是同一个循环跑到了不同的轮次。

为什么智能体比聊天工具做得多

聊天工具只负责把答案写出来,剩下的都得你自己动手:复制、粘贴、保存、运行。智能体则会自己在你的项目里干活,打开文件、修改文件、运行命令、查看结果,而且这些改动是真真切切留在你磁盘上的。

由此就引出了这篇文章真正想讲的东西。既然智能体是在动手做事,而不是出主意,那就不可能一步到位。从你的一句话到最终结果,中间隔着好几个步骤,每一步都会显示在屏幕上。

一个步骤由什么组成

左侧的请求进入一个由三步组成的循环,循环不断重复,直到结果与任务相符,最终结果从右侧输出智能体循环你的请求收集上下文执行操作检查结果完成
循环的一轮。如果结果与任务不符,智能体就回到起点

收到你的请求后,智能体就进入这个循环,需要跑几轮就跑几轮。每一轮都由三部分组成。

收集上下文。智能体去补上自己还不知道的信息:打开需要的文件,查看项目结构,读取上一条命令的输出。最常让人意外的一点是,它并不是把你的项目背下来了,而是在读它。每次需要某个细节,它都会去翻一遍。

执行操作。只做一个具体操作:修改一个文件,或者运行一条命令。不是一次把整个构想全做完,而是只走下一步。

检查结果。看看实际得到了什么,再和你的要求对比。

接下来是一个分岔口。目标达成了,智能体就停下来,等你的下一个请求。没达成,就回到收集上下文这一步,再绕一圈。

而且这个循环会随请求调整,并不是按固定流程走完。一个关于代码的简单问题,可能在收集上下文时就结束了:智能体读完、回答,什么都没改。修复一个 bug 则相反,三个部分都要反复跑好几遍。各部分之间的边界也不总是那么分明,智能体在整个循环中都会用到工具。

之前看着奇怪的那些现象,都能从这里找到答案。智能体把同一个文件打开了两次,是因为改完之后需要重新看一眼。从请求到回复过了好几分钟,是因为循环跑了四轮,而不是一轮。回到起点不是出故障,这本来就是它正常的工作方式。

推理与工具调用

智能体做的事情,并不都会改动项目里的文件。它的工作正好从中间一分为二,看清这条分界线很有用。

推理 - 智能体在琢磨接下来做什么、该去看哪个文件、错误可能出在哪里。这时磁盘上没有任何改动。不管它推理得多有说服力,眼下也只是一个打算。

工具调用 - 到这里才真正有事发生。读取或写入文件,在项目里搜索,运行命令,上网查文档。每个这样的操作都会在终端里单独显示一行,项目里发生的一切变化,正是由这些操作累积而成的。

调用的结果会返回给智能体,成为它下一轮已知信息的一部分。读了文件,现在就知道文件内容了。跑了测试,现在就知道测试过没过。

错误也是一种结果

命令报错退出了,文件没找到,测试没通过,智能体都看得到,并会在下一步把这些考虑进去。输出里出现错误信息,并不代表全都坏了、只能放弃。很多时候,这恰恰是它缺少的那条信息,下一轮会比上一轮更准。

实际结论很简单。关于工具调用的那几行不是可以看都不看就滚过去的杂音。你的文件此刻正在发生什么,就是在这里看到的。

为什么智能体会提问

干到一半,智能体可能会停下来问你。这是循环里的正常环节,并不说明它搞不定。

问题分为两类,把它们分清楚很有帮助:

  • 缺少关于任务的信息 - 到底要改什么,两个相似的文件里你指的是哪一个,做到什么程度算完成。智能体遇到了歧义,不想靠猜;
  • 需要操作许可 - 智能体准备做一件影响比较大的事,于是停下来问一句能不能做。它能自主到什么程度,取决于你的设置。

第一类问题是个好信号。与其朝错误方向跑了三轮循环再返工,不如现在就问清楚。

提前让智能体提问

问题不一定要等它来问,你也可以主动引出来。在最开始、动手修改之前,请智能体用自己的话把任务复述一遍,并把所有不清楚的地方都问出来:

写一下你是怎么理解这个任务的,以及打算怎么完成它。
如果提问有助于你更好地理解任务和目标,请直接提问。

这样一来,歧义会在第一次修改之前就暴露出来,而不是等到活干了一半才发现。过程中你也可以随时介入:补充上下文,调整方向,或者叫停智能体,重新描述任务。

谁来决定是否完成

在"完成"之后,由人查看改动并做出决定:接受结果,或者退回返工并提出新的请求完成你查看改了什么接受返工新请求
"完成"一词结束的是智能体的循环,而不是整个工作:最终由人来做决定

智能体说"完成",只意味着一件事:它的循环结束了。它执行了操作,按自己的标准检查了结果,认为目标已经达成。但工作本身还没有结束。

一项改动算不算被接受,不看智能体什么时候做完,而看人什么时候查看了实际改动,并为这个结果负起责任。接下来有两种可能:接受,工作就此结束;返工,你说清楚哪里不对,循环从你的新请求重新开始。

这时要看的不是报告,而是改动本身:智能体会显示它删掉了哪些行、加了哪些行。这才是"改了什么"的准确答案,它不在智能体写的那段文字里。

报告写得再有说服力,也不等于证据

智能体描述自己做了什么时,往往写得让人挑不出毛病:"给三个方法加上了错误处理,检查过了,一切正常"。听起来像是事实。但回复里的文字和文件里的内容是两回事,两者并不总是一致。想知道真实情况,唯一的办法就是去看改动列表。

在 Claude Code 中怎么用上这些

理解了这个循环,实际工作中能带来这些好处:

  • 请求写得越准确,循环的轮数就越少。智能体会一直绕圈,直到结果和你的要求对上,表述含糊就得多绕几圈;
  • 你自己在文件里做的修改,智能体下次打开这些文件时就会读到:毕竟它不是记住了项目,而是在读项目。如果你手动改过什么,告诉它一声;
  • 智能体的循环以"完成"二字结束。工作则以你的检查结束,这是两个不同的时间点。

完整的图景是这样的:智能体的循环在里面,你的检查在外面。

你的请求进入由三步组成的智能体循环,循环重复直到得出结果,接着你查看改动并决定:接受,还是退回返工,返工会让一切回到新的请求智能体循环你的请求收集上下文执行操作检查结果完成你查看改了什么接受返工
智能体的循环在框内,人的决定在框外。返工会让一切回到新的请求