别再教AI了,让它自己看项目
约 8 分钟驭光者首发于微信公众号「羲和Lab」

从代码补全到自主编码的范式转变
阅读时长约8分钟 | 观点型 | 智能编码进化论 01/10
导读
如果你还在费心研究怎么写好提示词,这篇文章可能会让你意识到——你一直在解决错误的问题。
同样修一个跨五个文件的Bug,Coding Agent比传统补全工具快的不止一点点。原因不是AI更聪明,而是它"看得见"整个项目。过去两年,AI编程工具发生了根本性的变化:不是更聪明的补全,而是从"补全"进化到了"自主执行"。这就是Coding Agent。
这篇文章,我们聊聊这个变化到底意味着什么。
一、补全 vs Agent:两种完全不同的AI
先说结论:Copilot和Coding Agent不是程度的差异,是物种的差异。
Copilot做的事情,本质上是一次单向补全。它看到你当前光标所在的那行代码,预测你可能要写的下一行,然后给你一个灰色的建议。你按一下Tab,它的工作就结束了。
整个过程是这样的:看到当前文件,补全下一段代码,结束。单次交互,看完就忘。 下次你打开同一个项目,它对你之前做过的事情一无所知。
Coding Agent做的事情,完全不同。它看到的是整个项目。
你说"修复登录页面的验证Bug",它不会等你输入更多细节。它会自己去搜索项目里的登录相关文件(获取上下文),读取代码理解逻辑(获取上下文),找到Bug所在,修改代码(执行操作),运行测试,验证修复结果(验证结果)。如果测试没过,它会重新读错误信息,再改一遍,直到搞定。
这是一个闭环循环,而不是一次性输出。
This is different from inline code assistants that only see the current file. —— Claude Code 官方文档
打个比方。Copilot像是输入法里的自动补全——你打一个"今",它猜你要打"天",你选了就完事。Coding Agent像是你能独立干活的实习生——你交代一个任务,他去查资料、写方案、执行、验证,中间遇到问题自己想办法解决。
Claude Code的官方定义说得很清楚:agentic harness——将语言模型转变为有能力的编码Agent。注意那个词,"harness"(驾驭装置)。模型本身不具备编Agent的能力,需要一个框架来提供工具、上下文管理和执行环境,让模型从"只会说话"变成"能干活"。
当然,不只Claude Code在走这条路。Cursor的Agent Mode、Windsurf的Cascade、OpenAI的Codex,都在探索Agent模式。大家的核心思路一致:让AI从被动等待输入,变成主动在项目中行动。架构细节不同,生态开放性各有侧重,但方向已经没有人回头了。
二、Agent循环:理解、执行、验证
既然Agent不是单次补全,那它的工作方式是什么?
答案是一个持续循环,包含三个阶段:获取上下文(Gather context)、执行操作(Take action)、验证结果(Verify results)。
听起来很简单,但真正让Agent强大的,恰恰是这个循环的自适应深度。
第一阶段:获取上下文。 Agent接到任务后,第一件事不是急着写代码,而是理解项目。搜索文件、读取代码、查看目录结构、读取配置文件。它需要先搞清楚"这个项目长什么样",才能知道"该从哪里下手"。
第二阶段:执行操作。 在理解了项目之后,Agent开始动手。编辑文件、创建新文件、运行命令、执行测试。它不是一次性做完所有事,而是做一步看一步——根据上一步的结果决定下一步做什么。
第三阶段:验证结果。 Agent会主动检查自己做的事情对不对。运行测试看是否通过、检查类型错误、确认代码符合预期。如果发现问题,回到第一阶段重新理解,或者直接在第二阶段修正。
关键点在于,这三个阶段不是严格分离的。 它们融合在一起,构成一个持续运转的循环。Agent随时可能在任何阶段之间跳转,根据任务的复杂度动态调整循环深度。
举个真实的例子来感受这个区别。
场景一:理解代码库。 你问Agent:"这个项目的用户认证是怎么实现的?"Agent只需要搜索认证相关的文件,读取关键代码,理解逻辑,然后给你一个清晰的回答。整个过程中它只做了一件事——获取上下文。不需要修改代码,不需要运行测试,循环在第一阶段就停了。
场景二:修复Bug。 你说:"用户提交表单后页面报500错误。"Agent搜索表单提交相关的代码文件(获取上下文),读取路由和控制器逻辑(获取上下文),定位到错误行。然后修改代码(执行操作),运行测试验证(验证结果)。如果测试失败了,它重新读错误信息(回到获取上下文),分析失败原因,再修改一遍(再次执行操作)。可能要循环三到五轮才能搞定。
场景三:大型重构。 假设你要把项目里的API响应格式从snake_case统一改为camelCase。Agent先全面搜索涉及响应格式的文件(获取上下文),批量修改(执行操作),然后反复运行测试、检查类型兼容性(验证结果)。验证步骤的数量可能远超修改步骤本身。
同样的三个阶段,不同的任务,循环深度天差地别。这恰恰体现了Agent的智能——它知道什么时候该停,什么时候该继续。
你也是这个循环的一部分。你可以随时打断Agent,调整方向,补充信息,或者让它换一种思路。
Claude Code官方文档用了一段很精准的描述:
Think of delegating to a capable colleague. Give context and direction, then trust Claude to figure out the details.
把任务交给一个靠谱的同事,你只需要说清楚目标和大方向,剩下的细节让他自己搞定。中间你可以随时介入指导,但不需要手把手教他每一步。
这就是Agent和补全工具最本质的区别。补全工具是工具,你握着方向盘;Agent是协作者,它自己开车,你坐在副驾驶上偶尔指路。
三、五把钥匙:Agent的工具体系
Agent能自主行动,靠的不是更聪明的语言模型,而是一套完整的工具体系。
没有工具,语言模型只能输出文字。有了工具,它可以读取你的代码、编辑文件、运行命令、搜索网页。每次工具调用都会产生新的信息,这些信息反馈回Agent的决策过程,指导它下一步该做什么。这就是所谓的Agentic Loop的真正动力来源。
Agent的工具体系大致分五类。
文件操作。 读取文件、编辑代码、创建新文件、重命名和重组目录结构。这是Agent最基础的能力。没有文件操作,Agent连项目代码都看不到,更谈不上修改。
搜索。 按模式查找文件、用正则表达式搜索内容、浏览代码库结构。一个项目可能有几百个文件,Agent需要快速定位到相关代码,而不是盲目地逐个翻阅。搜索能力决定了Agent的"视野范围"。
命令执行。 运行Shell命令、启动服务、运行测试、操作Git。这一类工具让Agent真正具备了"开发环境"的完整能力。它不仅能读代码,还能编译、测试、提交,做你从终端能做的几乎所有事情。
Web访问。 搜索网页、获取文档、查询错误信息。当你遇到一个报错,Agent可以直接上网搜索解决方案,而不是等着你把Stack Overflow的答案复制粘贴过来。
代码分析。 查看类型错误和警告、跳转定义、查找引用。这些能力让Agent不只是"读文字",而是真正理解代码的语义结构——知道这个函数在哪里定义、被谁调用了、类型是否匹配。
这五类工具合在一起,构成了Agent行动的"手和眼"。语言模型负责思考,工具负责执行。
举个具体例子。假设你跟Agent说:"fix the failing tests"。
它会怎么工作?
- 运行测试套件,看看哪些测试失败了
- 读取错误输出,理解失败原因
- 搜索相关源代码文件
- 读取这些文件,理解代码逻辑
- 编辑文件,修复问题
- 再次运行测试,验证修复
六步操作,涉及命令执行、搜索、文件操作三种工具。每一步的输出都是下一步的输入,环环相扣。如果第五步修完之后测试还是失败呢?Agent不会停下来等你。它会重新读错误信息,分析失败原因,换一个思路再改,再跑一遍测试。
整个过程完全自主,你只需要在最后确认结果。
再想想,如果用Copilot做同一件事,你大概需要手动运行测试、手动复制错误信息到对话框、手动解读报错、手动定位文件、手动输入修改指令。Agent把这些步骤全部自动化了,而且它自己知道什么时候算做完。
五类工具的配合也很有意思。文件操作和搜索是"眼",负责获取信息;命令执行是"手",负责落地操作;Web访问和代码分析是"外挂大脑",负责扩展认知边界。它们不是各自独立工作的,而是在Agent循环中协同运作。Agent会根据每一步的实际需求动态选择工具,就像你修Bug时一会儿看终端、一会儿翻代码、一会儿查文档一样自然。
这就是工具体系的威力。不是"替你写一行代码",而是"替你完成一个任务"。
四、范式已变:你准备好了吗
理解了Agent的工作原理,接下来才是真正重要的部分:你和AI协作的方式需要彻底改变。
用Copilot的时候,你的工作模式是"提示词驱动"。每次想让它帮忙,你得手动输入一段描述,等它补全,然后继续手动工作。下一次需要帮忙,再重复这个过程。你写提示词的技巧越高,效果越好,但本质上每次都在重复相同的劳动。
用Agent的时候,工作模式变成了"配置驱动"。你花时间把项目的规则、结构、偏好写进配置文件——在Claude Code里就是CLAUDE.md。Agent每次启动都会读取这些配置,自动了解你的项目约定。比如你在CLAUDE.md里写了一句"本项目使用pnpm而非npm",此后Agent每次安装依赖都会自动使用pnpm,你再也不用在每次会话中重复提醒。
区别在哪?
前者,每次会话你都要从零开始教它。后者,规则沉淀下来,越用越顺手。你今天纠正Agent的一个错误,明天它就不再犯。这不是魔法,是配置文件在起作用。
更深层的变化在于信息获取方式。用补全工具时,Agent只能看到你主动告诉它的信息——你贴一段代码、描述一个问题,它基于这些有限信息给出建议。很多做错的情况,不是因为AI不够聪明,而是它根本看不到完整的上下文。
有了完整的工具体系,Agent不需要你描述项目的目录结构、不需要你解释这个函数被谁调用、不需要你告诉它报错信息的全文。它可以自己去搜索、读取、验证。信息的获取权从你手里转移到了Agent手里。
从"依赖人工描述"到"依赖工具直接查询"——这个转变解决的不是效率问题,是质量问题。
从"每次手动输入提示词"到"项目级配置文件沉淀规则"——这个转变解决的不是体验问题,是可持续性问题。
从"单次交互"到"持续优化的开发闭环"——你不再是在用工具,而是在培养一个越来越了解你项目的协作者。
范式已经变了。还用"怎么写好提示词"的思路来驾驭Agent,就像用骑自行车的经验去开汽车——能走,但走不远。
一句话记住今天的内容:Agent不是更聪明的补全,而是一个能自己看项目、自己动手、自己检查的协作者。你的任务,从"操作它"变成了"配置它"。
下一篇,我们来写AI的岗位说明书——CLAUDE.md。
互动话题
你觉得自己目前是AI的"司机"还是"副驾驶"?有没有哪次被AI的"瞎编"气到想关掉编辑器?来评论区认领你的位置。
智能编码进化论 | 第1篇/共10篇
上一篇:无(本系列开篇)
下一篇:AI岗位说明书:CLAUDE.md精讲
本文内容仅供学习交流,所述方法需结合实际场景灵活运用。 AI工具输出结果仅供参考,关键业务决策请结合人工判断。
本文由AI辅助创作,经人工审核编辑后发布。
本文首发于微信公众号「羲和Lab」,公众号内可留言交流
阅读公众号原文