生成式人工智能在软件开发中的应用——代码生成与自动补全

351 阅读31分钟

人工智能能显著提升代码生成与自动补全的生产力和创造力。本章探讨了AI驱动工具如何重新定义编程体验,将传统耗时的手工编码过程转变为互动、高效且能减少错误的工作方式。

代码生成领域的AI应用,不仅仅是加快开发者敲代码的速度,更重要的是理解他们工作的上下文,推荐相关代码片段,甚至在极少输入的情况下生成复杂的代码块。这些工具依托先进的机器学习算法,能够从公共和私有代码库中学习,不断优化建议和准确性。

我将分析软件工程师如何从完全亲自完成开发任务,转变为主要负责审查AI工具所贡献代码的角色。这要求你准确告知工具需求,并仔细审核输出,确保交付成果符合要求。

这些AI工具功能强大,容易让人陷入不加审查直接使用生成代码的陷阱,比如未经验证就发起pull request或推送到生产环境。这种粗心大意存在两个重要风险:

  • 代码过时
    多数AI工具训练时所用数据已不再最新,可能建议使用已过时的框架或功能。
  • 错误答案
    大型语言模型(LLM)偶尔会生成“幻觉”内容,即包含错误陈述、bug或不存在的函数及API调用。

软件工程师应当利用AI工具辅助提高效率,但绝不能完全替代自身判断,就像多数集成开发环境(IDE)中流行的自动补全功能一样。虽然按Tab键代替每个字符输入极大方便了编码,但自动补全建议从极其相关到毫无用处不等,使用与否需由你自行判断。

本章介绍的AI工具也需不断评估。很多时候,它们生成的代码能完美完成任务;但也有可能不完整,含有bug、性能问题或其他缺陷,需你进行修改、舍弃或调整。

代码生成工具类型

本章评述的AI工具主要分为两类,软件开发中用法略有不同:

  • 基于浏览器的工具
    如ChatGPT,可直接登录浏览器与模型交互,所有计算均在云端完成,本地无负载。此类工具易用,适应多种用例,但上下文窗口有限,每次交互都需手动输入或复制粘贴上下文,处理大规模代码库或文档时较为受限。
  • 基于IDE的工具
    如GitHub Copilot,作为插件安装在本地IDE中,嵌入开发流程。其优势是上下文窗口大,能将整个代码库作为上下文输入,极大提升交互效率。

使用场景

数以百万计的软件工程师正在采用AI工具来支持他们的日常工作。以下是这些工具对开发影响最显著的五大使用场景:

  1. 生成代码片段
    不必手动输入代码库中的每个单词和函数,你只需向AI工具提供代码应满足的具体需求,工具便会输出任何主流编程语言(如Java、Python、PHP或JavaScript)中可直接使用的代码。这不仅加快了原型设计,也提升了整体开发效率。本章介绍的工具可生成涵盖网页开发、数据分析、自动化脚本或移动应用等多种应用的代码。总体来看,AI帮助弥合了概念构思与实际实现之间的差距,使技术开发更加便捷和高效。
  2. 调试
    调试通常是软件开发中既耗时又令人沮丧的环节,这一场景尤为重要。AI工具能分析错误信息和有问题的代码片段,提出具体的修改或改进建议,节省时间同时也具备教学功能,随着时间推移提升你的调试能力。部分工具(如ChatGPT)还能解释错误产生的原因,甚至指出避免这些错误时的架构权衡。这种对软件开发常见陷阱的深入理解,是许多开发者将AI作为编码助手的重要原因。
  3. 加速学习
    当你想快速掌握不熟悉的技术栈、学习新编程语言或框架,或理解具体实现细节(如MySQL中给表添加索引,或从Stripe API拉取上月交易数据)时,AI工具能充当导师角色。它们提供教程、示例以及各类技术文档的简明总结。这种与AI工具的互动式学习能加速你的成长,无论你学习的具体技术或范围有多大。
  4. 优化代码
    许多工程师利用AI工具审查代码,使其更高效、可读性更强且更易维护。包括重构建议、更高效算法的使用,或性能与安全的最佳实践应用。代码优化是持续性的挑战,容易被忽视,但所有次优代码最终会积累成庞大的技术债务,届时必须大范围重构,耗时且昂贵。使用AI工具在任务层面审查代码,可显著提升整体代码质量。
  5. 自动化文档
    文档对软件项目的维护和理解至关重要,但开发者往往忽视或轻视它。一些AI工具能自动生成文档,包括内联注释以及函数、类、模块的详细说明。这不仅节省时间,也保证文档与代码库同步更新。清晰完整的文档有助于提升代码可读性,促进团队协作。此场景对大型团队或开源项目尤为重要,因为明确的文档是支持其他开发者有效贡献的关键。自动化文档还增强了项目的可维护性,促进团队内部更好的知识传承。

如前所述,软件开发的AI工具主要分为两类:基于浏览器的和基于IDE的。我们将先从浏览器端工具开始介绍。

基于浏览器的工具

基于浏览器的AI工具只需访问网站即可使用,非常方便。但这类工具要求用户在提示词中包含所有上下文信息,对于大型代码库或复杂应用的代码生成来说,使用起来不太实用,因为这需要频繁在浏览器工具和开发者所用的IDE之间进行大量复制粘贴操作。

ChatGPT

ChatGPT是由OpenAI开发的大型语言模型(LLM),也是本书中最广泛使用的AI工具。自2022年11月发布以来,ChatGPT经历了爆发式增长。截至2025年4月,每周活跃用户约8亿,仅几周内用户数翻倍。该平台每日处理超过10亿次查询,成为全球访问量排名前五的网站之一。

随着ChatGPT的流行,OpenAI的收入也迅速增长,预计2025年将超过127亿美元,高于2024年的37亿美元。这一增长得益于超过2000万的付费订阅用户,涵盖Plus、Team和Pro多个等级,每月贡献至少4.15亿美元收入。快速普及源自其持续创新。2024年5月推出的GPT-4o具备多模态能力,支持用户通过文本、语音和图像进行实时交互。随后发布的本地图像生成和高级推理模型(如GPT-4.1和o3)进一步增强了功能。

ChatGPT的演进使其从单纯的文本聊天机器人,发展为多功能AI助手,重塑了个人和企业与技术互动的方式。其用户友好的界面和强大功能,使其成为涵盖个人生产力到企业解决方案等广泛应用领域中不可或缺的工具。

如图1-1所示,ChatGPT呈现一个聊天界面,用户可输入提示词并在几秒钟内收到回复。OpenAI近期新增了ChatGPT代码编辑器,用户可以在屏幕右侧打开,配备控制台和预览功能。

image.png

这是OpenAI试图弥合基于浏览器工具与基于IDE工具之间差距的一次尝试。允许开发者直接在ChatGPT中编辑和运行代码,旨在最大限度减少ChatGPT与开发者IDE之间的复制粘贴操作。

Google Gemini

Gemini是Google直接对标ChatGPT的产品,于2023年12月发布,是其前身Bard的升级版本。Gemini无缝集成于Google生态系统中,提升了Gmail、Docs和Sheets等应用的用户体验。截至2025年4月,Gemini月活跃用户约达2.75亿。

Gemini不断扩展功能,新增了“Gemini Live”实时对话助手和“音频概览”功能,能将文档转换为播客式摘要。此外,Gemini高级用户还可通过文本提示生成短视频,支持无需传统视频制作工具的内容创作。

该平台的发展还得益于超过150万开发者使用Gemini构建多样化应用。作为Google AI战略的重要组成部分,Gemini持续演进,提供满足广泛用户需求的创新解决方案。

与ChatGPT类似,Google Gemini也拥有聊天界面,用户可提交提示并获得回复。它还推出了浏览器内的开发环境体验,右侧配备代码编辑和预览面板(见图1-2)。对于许多软件工程师来说,这一便捷功能使Gemini足以应对小型脚本和项目开发需求。

image.png

基于IDE的工具

接下来,我们来回顾市场上顶尖的基于IDE的工具,这些工具帮助软件工程师工作,包括原生集成AI功能的IDE以及流行IDE的AI助手插件。

GitHub Copilot

GitHub Copilot于2021年推出,迅速发展成为软件工程师的重要工具。它提供AI驱动的代码建议,支持多种开发环境的集成。到2025年,Copilot拥有超过一百万付费订阅用户,被超过77,000家机构采用,企业用户同比增长达180%。该工具对GitHub的财务增长贡献显著,占据平台收入的40%以上,截至2025年4月,GitHub的年收入运行规模达到20亿美元。

Copilot的功能已超越基本的代码补全,新增了Copilot Chat,允许开发者与AI进行代码解释和建议的互动;还有Copilot Extensions,支持与Azure、Docker、MongoDB等工具集成。此外,Copilot Pro+版本引入了更先进的AI模型,包括Anthropic的Claude 3.7和Google的Gemini Flash 2.0,进一步提升工具的多样性和功能。

Copilot对开发者生产力的提升效果显著。研究表明,使用Copilot的开发者编码效率可提高至55%,且报告工作满意度更高。随着持续改进和用户群体扩大,GitHub Copilot正重新定义软件开发格局,使全球开发者的编码更加便捷和高效。

Copilot的界面设计不会干扰用户原有IDE的默认使用体验,但它增加了键盘快捷键层,方便用户启动聊天功能,该聊天面板可显示在界面右侧(如图1-3所示),也可内嵌于代码视图,用于自动补全或与特定代码块交互。

image.png

GitHub Copilot 与所有主流 IDE 集成,如 Visual Studio Code、JetBrains、Eclipse 和 Xcode。因此,它从一开始就实现了平稳增长:大多数软件工程师已经在使用这些 IDE,安装 GitHub Copilot 只需在扩展搜索中点击几下即可完成。

这种将 AI 助手推向软件开发市场的策略,后来受到所谓“AI 原生 IDE”的挑战,下面我会介绍这类工具。此外,虽然 Copilot 之前仅支持 OpenAI 模型,但随着 Cursor 和 Windsurf 的流行,Copilot 现在提供了从 OpenAI、Anthropic 和 Google 模型中选择的选项。

Cursor

Cursor 由 Anysphere 于2023年推出,迅速成为领先的 AI 原生代码编辑器,重新定义了软件开发体验。作为 Visual Studio Code 的一个分支,Cursor 将先进的 AI 功能直接集成在编码环境中,提供智能代码生成、智能重写和自然语言代码库查询等功能。与 GitHub Copilot 和其他流行 IDE 扩展(如 Tabnine 或 AWS CodeWhisperer)不同,Cursor 本身是一个需要用户安装到设备上的完整 IDE。因此它不仅与 GitHub Copilot 和类似扩展竞争,也与 Visual Studio Code 及所有流行 IDE 形成竞争。Cursor 推出时,这被认为是一项非常大胆的策略。

截至2025年初,Anysphere 达成了显著里程碑:年经常性收入达到2亿美元。这一增长主要归功于 Cursor 以用户为中心的策略,拥有超过36万名个人用户订阅其 Pro 和 Business 计划。值得注意的是,Anysphere 在没有任何市场推广费用的情况下,依靠口碑传播和 Cursor 强大的功能吸引用户。

Cursor 的成功还体现在被诸多知名科技公司工程师采纳,包括 OpenAI、Shopify 和 Instacart。其直观的界面和强大的 AI 集成,使其成为寻求提升生产力和优化编码流程开发者的首选工具。考虑到大多数软件工程师多年使用同一 IDE,切换成本较高,Cursor 的受欢迎程度尤其值得关注。

Cursor 的用户界面(见图1-4)类似于其分支来源 Visual Studio Code。与 GitHub Copilot 类似,Cursor 提供键盘快捷键,支持从内联代码块交互到更复杂的聊天面板功能。

image.png

Cursor 的聊天交互可以创建文件和文件夹,以满足用户需求。当生成的代码令人满意且能正常工作时,这非常方便,但如果建议的代码破坏了应用或影响了之前正常运行的功能,回滚就会变得困难。这实际上是我对Cursor以及本章介绍的其他基于IDE工具的最大不满之一。

Windsurf

Windsurf 是由 Codeium 于2024年11月推出的AI原生IDE,旨在革新编码体验。它基于Codeium早期工具的基础,引入了一种“智能代理”式的软件开发方法,将AI辅助与开发者工作流程融合。其旗舰功能Cascade作为智能代理,预判开发者需求,提供上下文感知的代码建议、自动调试和实时协作能力。

截至2025年初,Windsurf在开发者社区引起广泛关注,估值约为27.5亿美元,年经常性收入超过4000万美元。平台的快速普及归功于其直观的用户界面、深度集成的AI功能,以及提供免费套餐和每月仅10美元的实惠专业版定价策略。

Windsurf创新功能包括多文件编辑、自然语言命令支持和完整的上下文感知,使其成为AI驱动开发工具领域的强劲竞争者。其强调帮助开发者维持“心流状态”,让编码更加高效且不易分散注意力,树立了现代IDE的新标杆。

Windsurf的用户界面(见图1-5)类似于Cursor,同样提供键盘快捷键支持其功能,包括与特定代码块的内联交互、打开聊天面板进行更复杂的交流,以及内置终端。

image.png

工具对比

我评估了30多款AI工具,最终筛选出本章重点介绍的几个。所有被覆盖的工具均符合以下标准:

  • 是一个由专业团队支持的成熟项目。
  • 生成的代码质量高。
  • 提供免费或试用功能。
  • 在撰写本文时(2025年中),拥有较高的用户采纳度。

本章的测试流程如下:我向每个选中的代码工具提交了同一个简短的代码挑战,只运行一次该挑战,并对比它们的输出结果。随后,我根据表现给每个工具打分,分值从1到10不等,1分代表最差(程序报错且无法运行),10分代表完美无缺的解决方案,5分则表示程序能够运行,但只解决了部分问题。

所有测试均在2025年4月进行。考虑到这些工具及其底层模型快速迭代,未来同一提示词可能得到不同结果。

我给所有工具的提示词是一道我在数十场面试中使用过的代码挑战:

生成JavaScript代码解决以下问题。

背景说明:

  • 有一个二维数组,元素为0或1。
  • 需要找到所有由0组成的矩形的起点和终点。
  • 已知这些矩形相互分离,且不相邻,但可以接触数组边界。
  • 矩形可能仅包含一个元素。

期望输出:

  • 返回一个数组,每个元素代表一个矩形。
  • 每个矩形用一个包含4个元素的数组表示,分别是矩形左上角的Y坐标、X坐标,以及右下角的Y坐标、X坐标。

示例输入:

input1 = [ 
  [1, 1, 1, 1, 1, 1, 1], 
  [1, 1, 1, 1, 1, 1, 1], 
  [1, 1, 1, 0, 0, 0, 1], 
  [1, 1, 1, 0, 0, 0, 1], 
  [1, 1, 1, 1, 1, 1, 1], 
  [1, 1, 1, 1, 1, 1, 1], 
  [1, 1, 1, 1, 1, 1, 1], 
  [1, 1, 1, 1, 1, 1, 1] 
]

input2 = [ 
  [0, 1, 1, 1, 1, 1, 0], 
  [1, 1, 1, 1, 1, 1, 1], 
  [1, 1, 1, 0, 0, 0, 1], 
  [1, 1, 1, 0, 0, 0, 1], 
  [1, 1, 1, 1, 1, 1, 1], 
  [1, 0, 0, 1, 1, 1, 1], 
  [1, 0, 0, 1, 1, 0, 0], 
  [1, 0, 0, 1, 1, 0, 0] 
]

这是一个二维数组算法题。通常我会在一小时的现场编码面试开始时,向候选人陈述这道题目,内容与上述基本一致。候选人在编程时会边思考边讲解,有时会借助Google搜索帮助。

在这场一小时的面试中,很少有候选人能完整解决题目(识别多个矩形)。大多数只能给出部分解法,如只找到一个矩形,或只识别左上角,或其他变体。图1-6展示了我运行这些工具输出后的控制台截图。

image.png

如图1-6所示,五款工具均为该代码挑战返回了正确结果。每款工具的代码均可在本书的GitHub仓库中查看。ChatGPT、Gemini和Windsurf生成的解决方案代码清晰且高效,我对它们的结果没有任何负面评价。Copilot和Cursor采用了深度优先搜索算法,该算法通常用于遍历树结构,对于本题而言稍显复杂和“杀鸡用牛刀”。这种复杂性虽然使它们能够处理除矩形外的其他形状,但这并非本题的要求。

无论如何,不论我如何分析代码,这些工具均在几秒钟内给出了完美的答案,而很少有应聘者能在一小时内解决此类代码题。

这让我认识到,这类代码挑战对于当前这些AI工具的发展水平来说实在过于简单。基于这次测试,我会给它们全部打满分,10分(满分10分)。因此,我决定给每个工具布置第二个更复杂的挑战,要求它们创建一个完整可用的应用:

我想开发一个待办事项应用,需求如下:

  • 界面简洁,包括一个看板和一个“新任务”按钮
  • “新任务”按钮点击后弹出模态窗口,窗口内有一个简单的多行文本输入框
  • 添加新任务时,后端通过集成OpenAI的API自动拉取详细的分步骤说明
  • 所有笔记存储在数据库中,每条笔记包含三个字段:用户创建的任务标题、从OpenAI拉取的说明,以及时间戳

同样,五款工具针对该挑战的解决方案代码均可在本书的GitHub仓库中查看。下面将展示各工具解决方案的截图及我的分析。

ChatGPT

ChatGPT的解决方案表现良好。我觉得它提供的代码库结构清晰明了,方便我将所有内容复制粘贴到对应文件中。它还很擅长指导我解决首次运行时遇到的一些配置错误。几分钟内,我就能在浏览器上成功运行该应用,如图1-7所示。

image.png

默认状态下有一个“新任务”按钮,点击该按钮后,屏幕中央会弹出一个模态窗口,供我输入任务内容。点击“创建”按钮后,后台会花几秒钟向OpenAI API发送请求。最终,页面会显示由ChatGPT生成的任务指令卡片(见图1-8)。

image.png

在我看来,ChatGPT在这项任务中表现非常出色,无论是生成的代码、运行代码的指导,还是我请求的调试帮助都很到位。不过,和其他基于浏览器的助手一样,使用ChatGPT时必须将所有文件内容复制粘贴到IDE中,这仍然有些繁琐。即使是这样一个基本的待办事项应用,也包含十多个文件,分布在client和server文件夹及其子文件夹中。即便在这个层面,操作也容易出错且难以跟踪变更,这对于使用ChatGPT和其他浏览器助手处理更复杂、代码量更大的项目来说是一个巨大障碍。

从代码审查的角度看,ChatGPT给出的解决方案是经典的React.js和Express.js框架骨架,结构清晰,包含符合需求的看板界面、“新任务”模态窗口和有效调用OpenAI接口,且所有敏感配置均通过环境变量管理。代码库采用直观的客户端/服务器划分,使用了现代React hooks、async/await及适度的错误处理。

缺点是所有任务都存储在内存中,服务器重启会清空看板,且没有输入校验、认证或速率限制。这些缺失使得项目仅处于“原型”阶段,但没有明显的安全漏洞,足以作为强化和扩展的安全起点。ChatGPT基于浏览器的特性使得复制粘贴代码到正确文件有一定难度,但完成后解决方案运行顺利,调试迭代不多。

该方案界面简洁但满足需求,代码质量较好。综合来看,我给ChatGPT此次测试打8分(满分10分)。

Google Gemini

Gemini的解决方案未能正常运行。我像对待其他工具一样,耐心尝试了很久,并在本书GitHub仓库中也有它的工作代码。前后端均能启动,Gemini也帮我解决了途中出现的一些错误。

然而,Gemini最终给出的最好的结果仅是一个空白窗口,如图1-9所示。

image.png

除了该方案无法正常运行之外,Gemini在生成复杂代码(超过单个文件的项目)时速度非常慢且容易出错。与ChatGPT不同,Gemini会在其代码编辑器中将所有代码生成在一个大文件里(见图1-10右侧面板)。这导致我在将代码复制到IDE时非常困难,因为必须手动创建每个文件夹和文件,再逐一粘贴内容。同时,这也极大增加了调试过程中跟踪代码变更的难度。

image.png

基于以上种种原因,Gemini在第二次测试中的表现非常令人失望。

在审查Gemini的代码时,我发现它本意是打造一个时尚的前端界面,使用了TypeScript、Tailwind、Framer Motion和Hero图标,原本可以做出清晰且现代的UI,但遗憾的是,代码根本无法正常运行。React代码中存在一个明显错误:虽然导出了App组件,却没有真正进行渲染。这个错误本应很容易被Gemini检测到。

后端代码似乎实现了所需功能,但在实际代码中暴露了OpenAI API密钥,而不是使用环境变量管理。这是一个严重的安全隐患,导致该方案无法用于部署甚至测试。

综合来看,Gemini带来了所有评测工具中最令人失望的体验。首先,复制粘贴所有代码到正确文件的过程笨拙且容易出错;然后,前后端运行均出错;再者,修复React问题耗费大量时间,却始终无法让UI正常渲染。尽管花了不少时间,最终仍未得到可用的解决方案。需要说明的是,Gemini在第一个挑战中能生成可运行的方案,第二个挑战提供了部分相关代码。基于这些,我给它打4分(满分10分)。

GitHub Copilot

Copilot的方案起初运行良好,因其依赖和库极少。处理OpenAI API请求结构时,经过几轮调试:先是使用了错误的接口地址,后payload格式错误,再后来有解析错误。但几分钟后,我得到了可运行的方案(见图1-11和图1-12),前端非常简陋,仅由原生HTML构成,几乎没有样式。

按钮可以正常工作,添加新任务时也能触发后端功能。不过,前端在完成任务后并不会隐藏模态弹窗,也没有关闭弹窗的“×”按钮。视觉效果平平,若要改善UI,需多次迭代。

image.png

image.png

从代码审查的角度来看,Copilot 创建了一个极简的概念验证版本,前端采用了纯 HTML、CSS 和原生 JavaScript,后端是一个小型的 Express 服务器,几乎没有任何依赖。优点是极其简单:任何人几分钟内都能读懂这段代码,部署也非常轻量。

但这也带来了权衡:所有最佳实践都未被采用——OpenAI 密钥是硬编码的,缺乏数据库支持,没有输入校验,没有响应式设计,也没有为未来扩展考虑的框架便利性。这样的方案适合用作黑客松项目,但如果用于面向用户的产品则存在较大风险,除非进行重大重构。

我认为这种做法有其合理性,毕竟我没有给Copilot提供关于代码质量或健壮性的具体提示。作为一名CTO,我欣赏简单起步的策略,而Copilot确实在这次挑战中产出了最简洁的应用。基于此,我在本次对比测试中给它打8分(满分10分)。

Cursor

Cursor将代码分成了前端和后端两个文件夹,通过简单的NPM启动命令可以轻松运行它们。后端流程运行顺利,数据库和与OpenAI API的集成也表现良好,但前端界面显得笨拙。基础UI设计怪异,标题放在最顶部,“新任务”按钮却放在最底部,如图1-13所示。

image.png

当我点击“新任务”按钮时,会弹出一个窗口。该窗口样式还算不错,但输入框仅为一行,导致较长的备注内容会被截断,如图1-14所示。

image.png

当在模态弹窗中创建任务后,任务卡片会显示在按钮下方,位于屏幕最底部(见图1-15)。

image.png

Cursor 的解决方案首次尝试就成功实现了功能,使我能够轻松运行前端和后端。然而,这个解决方案并不像我要求的看板(Kanban)界面。它的UI比Copilot略好一些,但依然相对基础。

从代码上看,Cursor的目标是打造一个简洁的界面,使用了Material UI和react-beautiful-dnd库,但不知为何最终并未呈现出令人愉悦的用户界面。代码模块化良好,正确使用了环境变量,基础架构扎实。后端相对简陋,所有代码集中在一个Express文件中,使用内存数组存储数据,没有输入验证和错误处理。

总的来说,Cursor的开发体验无可匹敌:它产出了可运行的代码,前后端首次尝试即能成功运行。代码功能完整,尽管UI表现一般,底层仍有大量提升空间。我给Cursor打9分(满分10分)。

Windsurf

我发现让Windsurf的方案正常运行较为困难。它最初提出了一个过于复杂且依赖不必要库的解决方案。

首先,前端根本无法运行。Windsurf陷入了使用前端库Chakra UI导致的“感觉调试”(vibe debugging)问题,依赖关系破损。最终,我不得不提示它完全放弃使用该库,才能继续进行。移除该库后,前端才终于运行起来(见图1-16)。

image.png

然后我在后端遇到了类似的问题,这次是与MongoDB依赖相关的。出于某种原因,Windsurf在这么简单的任务上不断陷入复杂的困境,最终我不得不提示它简化后端,改用内存存储。

最终,程序成功运行,并将我创建的任务放置在“待办”栏中,界面呈现出一个规范的看板UI(见图1-17)。

image.png

不过,我需要将任务拖动到“进行中”栏才能触发OpenAI API请求——但当我这么做时,程序崩溃了(见图1-18)。

image.png

我再次给了Windsurf更多时间来调试问题,最终应用运行时没有报错。然而,我发现它运行得有些“过快”,结果令人失望。事实证明,Windsurf不小心删除了与OpenAI API集成的代码,而这正是该应用的核心功能之一(见图1-19)。

image.png

经过大量反复调试和修改后,我终于得到了一个可用的Windsurf解决方案,拥有优雅的看板界面,并且实现了完整的后端功能(见图1-20)。

image.png

在代码方面,Windsurf 的解决方案功能最为完整:它使用了 React,实现了拖放(drag-and-drop)、模态窗口创建、实时刷新,并且在路由、控制器和组件之间有清晰的分离。环境变量得到了尊重,错误处理也更加细致,代码风格一致且易于理解。

有趣的是,Windsurf 采取了本次测试中最激进的方式。它试图使用一些华而不实的库,结果陷入了难以自拔的困境。我不得不三次提示它,指示Windsurf不要使用那些导致问题的依赖(先是 Chakra UI 库,然后是 MongoDB,最后是拖放功能)。其“智能代理”式的设计使Windsurf成为我测试过的最强大且看似最独立的工具,甚至超过了Cursor和Copilot。然而,这种独立性也让它多次陷入死胡同,需要经验丰富的开发者指引才能脱困。

Windsurf 也是我花费时间最长才得到可用解决方案的工具,耗时超过一小时。但它打造了最时尚的界面,且代码质量相当不错。我给它打9分(满分10分)。

表1-1对我对这些工具在测试中表现的评分做了比较。

工具用户体验测试表现
ChatGPT浏览器8/10
Google Gemini浏览器4/10
GitHub CopilotIDE8/10
CursorIDE9/10
WindsurfIDE9/10

总结

多年来,我在面试中使用过数十次第一个测试题——二维数组代码挑战。令人难以置信的是,这次测试中评测的五款工具都能在10秒内给出与顶尖软件工程师同样的结果。

显然,这些工具在这类任务上远远超越了人类:即那些需求明确、输入输出规范、生成的代码局限于单一文件且拥有丰富训练数据的任务。所有面试类题目都符合此描述,更广义上讲,任何这些大型语言模型(LLM)工具都能轻松在几秒钟内解决类似的算法难题。

然而,当我给它们布置更复杂的任务——生成更庞大的代码库时,有些工具开始遇到困难,即使只是实现一个带笔记和后端自动化的简单看板UI。使用基于浏览器的工具(如ChatGPT和Google Gemini)复制粘贴代码到正确文件的过程非常繁琐,且容易出错。这相比集成了代码编辑器和终端的IDE工具来说,体验大打折扣。作为开发者,我无需复制粘贴任何内容,只需审查、接受或拒绝建议即可。IDE工具让整个过程如同高效的代码评审循环,我提出修改需求,工具现场编写代码,我即时审核、接受并测试。

同时,很明显不同厂商的多款最先进模型均能生成高质量软件代码。我测试的所有基于IDE的工具(Cursor、Windsurf和GitHub Copilot)均允许开发者从下拉菜单中选择模型;而基于浏览器的工具则更封闭,ChatGPT仅使用OpenAI模型,Gemini仅用Google模型。

这意味着,这个市场的竞争日益聚焦于实际的开发者体验。我认为,基于浏览器的工具已无法参与这场竞争,因为与它们共享上下文过于繁琐,更别提复制粘贴回代码仓库了。未来的赢家必然是基于IDE的解决方案,而非浏览器。

即便在基于IDE的工具中,也存在不同策略。GitHub Copilot依然带有将ChatGPT式聊天引入IDE的原始风格,提供代码访问和变更能力。Windsurf则提升到了更高层次,采取智能代理式方法,自动创建文件夹和文件、执行代码修改,并提供简洁按钮让我像进行代码评审一样“一键接受全部”改动。Cursor处于两者之间,聊天用户体验优于Copilot,并且允许用户选择是否使用其智能代理模式(本次测试我未使用该模式)。

从软件工程师角度看,未来的工作将更多侧重于向这些工具发出指令并审查它们生成的代码,而非亲自书写代码。尽管听起来简单,实际操作远不止如此。这些工具有潜力将整个代码库带入充满漏洞和难以维护的状态,就像我在使用Windsurf时遇到的情形。试想一个包含数百文件的生产级代码库,Windsurf用智能代理模式随意添加第三方库并删除后端关键功能,如果开发者不仔细审查和测试代码而盲目接受建议,后果不堪设想。

作为软件工程师,你绝对应该利用这些工具:它们可以帮助你更快地交付产品功能,并在许多情况下提升代码质量标准。但你必须在将AI生成的代码推向生产或发起Pull Request之前,认真审查代码。无论代码中多少是AI生成的,都要把代码当成“自己的”。这些工具有可能破坏你的可用代码,因此你应当使用覆盖从正常路径到边缘情况及错误状态的完整测试套件运行生成的代码。通过所有测试是代码满足需求的重要确认。最后,务必重新审视公司针对专业用途AI工具的相关指南。

参考文献:

  1. Gȕlen, Kerem. 2025年4月15日。“ChatGPT用户数突破10亿并导致服务器崩溃”。Dataconomy。
  2. Palazzolo, Stephanie & Amir Efrati. 2025年4月1日。“ChatGPT收入三个月激增30%”。The Information。
  3. Sentisight.ai. 2025年1月24日。“Google Gemini:用户反馈如何?”
  4. Millward, Wade Tyler. 2024年7月31日。“微软2024年第四季度财报:CEO纳德拉称Copilot增长最快”。CRN。
  5. GitHub Copilot资源。“GitHub Copilot影响力测评”。GitHub,2025年6月4日访问。
  6. Shibu, Sherin. 2025年4月9日。“这家AI初创公司零营销支出,3月收入突破2亿美元”。Entrepreneur。