抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

前言

从 2021 年 Github Copilot 的横空出世,GPT-4 点亮了 AI 编程助手的第一缕曙光,再到 Cursor + Claude 3.5、Windsur + Agent,最后是今年的 Claude Code 加上各家的编程代理(Coding Agent Cli)。四年多来,AI 对程序员的影响是显著的,已经成为一种大趋势。我在这几年的使用过程中也有一些感悟或者说技巧,今天就和诸位分享一下。

从副驾,到主驾

Copilot 在中文里的意思是「副驾驶」。微软在 2021 年给 Github Copilot 的定位相当准确,彼时的 Agent 技术还无法做到像 2025 年这样随意的多轮工具调用,只能进行隐式的代码续写(补全)。我一开始也只是把 AI 融入到代码补全里,并没有想过要进一步融入我的工作流。

第一个转折点在于 Cursor + Claude 3.5。Cursor 的「Edit」和 「Composer」模式结合 Claude 3.5 Sonnet,让我们第一次看到 AI 在代码编写中扮演了部分主驾的角色。模型会自主调用工具,编辑器会对比形成差异,程序员只需审查完成后,点击 「Apply」即可。

正好当时的 Cursor 可以免费使用,我便开始尝试这套组合,让 AI 在实际项目上编写功能。在实际体验中,对于不需要太多上下文感知的逻辑功能(如算法、逻辑抽取、代码重构),它展现出很好的效果。但对于需要更多上下文来编写的功能(如基于非公开库的 API 调用、网络请求 API),AI 的表现就很一般,仍然不能完全把方向盘交给它,大部分逻辑还是需要我来编写。

这种情况一直持续到了 2025 年初,直到 Claude Code 的发布。

Claude Code 不同于 Cursor,它没有使用检索增强生成(RAG)等传统技术,而是把方向盘交给模型,就像 Agent 一样。当你提供一些需求后,它会自动调用工具,像人类一样搜索和定位需要修改的代码,再调用工具继续更改。

这种效果实在是惊艳到我了,我便开始大量使用 Claude Code。实践证明,由于它的深度代码库理解和自主解决复杂任务的能力,开发效率得到了极大的提升。它不再仅仅是「补全」或「修改」,而是能够端到端地处理一个完整的开发工作流,从理解需求、定位文件,到实现功能、生成测试,甚至还能自动处理 Git 工作流并解决冲突。 这标志着 AI 在编程领域,开始从一个「副驾驶」,逐渐转变为能够独立掌控方向的「主驾驶」。

方向盘不能完全交给 AI,Code Review 依然重要

虽然到 Claude Code,Codex 等 Coding Agent,AI 的编程能力貌似已经能开始取代程序员了,实际是这样吗?

我体验下来,有几点是目前的 Coding Agent 的缺陷(短时间无法改善):

复杂架构的设计

AI 在架构设计这块,不能说是一塌糊涂,也可以说是相当糟糕了。对于实际不会太多代码的入门程序员,结合 Vibe Coding,在迭代过程中,逐渐会形成很多代码,AI 倾向于无组织地把代码堆砌到几个文件中,没有一个合适的架构来分层归类和组织代码。

本质上,AI 只会编写大家都在用的「样板代码」,因为它学习了海量的开源代码。但架构设计是高度依赖具体业务场景和未来发展预期的权衡,涉及性能、可扩展性、可维护性等非功能性需求的思考。 AI 无法实际理解你的功能所需要的架构,也无法预见未来的技术选型,常常会给出看似炫酷但并不符合实际的方案,或者在不同功能模块间采用不一致的设计模式,导致架构混乱。

幻觉与难以发现的 Bug

我们都知道, AI 会产生「幻觉」。在代码领域,这表现为捏造不存在的 API、调用了错误版本的库函数或类,传递不正确的参数到库的函数,或者一本正经地写出逻辑上完全不通的代码。更麻烦的是,AI 有时会引入一些非常微妙的逻辑错误或边界情况处理的遗漏,这些 bug 很难通过单元测试发现,往往需要对业务逻辑有深入理解才能识别。这类幻觉,除非引用最新的文档,已存在的类似逻辑的代码,很难彻底根除。

对于开发者来说,调试自己不熟悉甚至没有亲自编写过的、由 AI 生成的复杂逻辑,其难度和耗时远超自己从头开始写。这类幻觉在 Agent 的持续迭代下,其隐患在被不断的放大,随着迭代次数的增加,问题会越来越严重,最终可能导致整套程序崩溃。

这意味着,Code Review 依然重要。我们在实际编写业务逻辑时,还是需要仔细查看 AI 生成的代码,有时候它就会跑偏了,调用什么不符合当前版本的函数啥的…

我自己的使用方式

前面也说到了,AI 在算法,固定逻辑,或基于公共库进行部分业务逻辑的编写上很不错。但是在某些时候依然会有幻觉,或者架构设计不完善,导致生成的代码难以维护等。我也总结了几条使用的方式,如下:

  1. 提供代码优于文档

项目库的文档,有时候并不是确定性的,可能随着版本的更新会过时,或者没有详细的编写某些函数的作用。因此,在多数情况下,提供已实现逻辑代码,总是优于提供某个项目的文档。这些逻辑代码可以是你项目里面已有的部分代码,或者是在 Github 等其他地方的开源代码。AI 能参考这些已有代码的实现,来为你的项目生成更符合你项目需求的代码。

  1. 具体修改,圈定范围

无论是生成业务逻辑,或者修复业务 bug。尽量先由你来定位代码需要增加,修改,删除的位置。这些位置可能是一整个文件,或者一个类,甚至是一个函数或者一个方法。你需要将这些指定的位置(以及这些逻辑可能依赖的外部库或者代码)给 AI,并圈定这些范围,详细描述需要修改的逻辑。让 AI 只在这些区域内进行代码的生成或者修改,避免它修改到其他位置,也可以让它不弄乱你的代码架构设计。

  1. 架构设计由你自己来

将自己定位为架构师和决策者。由你来搭建项目的骨架,定义好模块、接口和数据结构。把具体的、独立的实现细节交给 AI 去填充。

例如,你设计好了一个 Service 类和它的方法签名,再让 AI 去实现这个方法内部的具体逻辑。

这样既能保证整体架构的质量和一致性,又能利用 AI 提升编码效率,实现「人类负责思考,AI 负责执行」的最佳协作模式。

结语

使用 AI Coding 这几年,我意识到,「协作」依然是目前使用 AI 最好的方式。无论是定义一堆 SPEC 文件,还是各种提示词工程让 AI 能写出维护性更高的代码,本质上都是想让需要程序员协作的部分,一点或者大部分都转交给 AI 自己实现。

实际证明,这些东西效果并不够好。与其恐慌会被 AI 取代,还不如和 AI 一起协作,才能有更好的架构设计,更快的业务产出。

评论