第1章 从代码补全到智能体编码
过去五年,程序员与机器协作的方式经历了几次明显变化。最初,机器主要在开发者写下代码之后提供补全和提示;随后,聊天式助手开始能够根据自然语言解释代码、生成函数并协助调试;如今,编码智能体进一步进入软件开发过程,可以围绕一个目标自主规划任务、调用开发工具、执行代码,并根据执行结果继续调整方案。这些变化并不只是功能上的逐步增加,更意味着人和机器在软件开发过程中的分工正在发生变化。在这一演进过程中,Vibe Coding是一个无法绕开的概念。它通常指开发者以自然语言表达意图,让生成式AI快速生成和修改代码,再通过运行结果和持续反馈推进开发。Vibe Coding降低了编程的操作门槛,也成为许多开发者接触AI编程的重要入口,但它并不等同于Agentic Coding。前者更强调人与模型之间的即时交互和快速试错,后者则进一步关注任务规划、工具调用、状态管理和结果验证,以及这些环节如何组成一个相对完整的软件开发过程。
本章将从这一演进过程出发,区分不同阶段编码工具在交互方式、任务边界和信任关系上的差异,并进一步讨论一个更基本的问题:当代码生成本身越来越容易,软件开发真正需要解决的问题发生了什么变化。读完本章,读者应当能够理解从代码补全、对话式编程到智能体编码的演进逻辑,认识Vibe Coding与Agentic Coding之间的区别,并建立理解后续章节所需的整体框架。
1.1 技术演进:从自动补全到智能体编码
2021年年中,GitHub Copilot以技术预览形式推出,生成式AI开始通过代码补全融入主流软件开发流程。这一阶段的交互方式相对克制。开发者仍然在熟悉的编辑器中编写程序,模型根据当前代码和上下文给出候选片段;开发者可以接受建议并继续编辑,也可以忽略建议,按照原有方式继续编写代码。自动补全(autocomplete)之所以能够迅速被开发者接受,很大程度上正是因为它没有显著改变原有的工作流程。开发者依然掌握代码编写的节奏,模型主要承担其中一部分重复性的代码输入工作。
但自动补全的局限也恰恰来自这种交互方式。它的基本任务是对开发者当前正在编写的代码进行补充,而不是围绕一个完整的软件任务持续行动。它不会主动运行测试,也不会根据测试失败的结果重新修改代码,更不会自主检查多个文件之间的接口和类型是否保持一致。即使模型本身具备更强的代码理解和生成能力,这些能力也很难通过单纯的补全界面得到充分发挥。
因此,自动补全的局限并不只是模型能力的问题,更是交互模式的问题。模型被置于开发者当前编辑行为所定义的狭窄范围内,只负责回答“接下来可能写什么”。当模型能力不断增强之后,这种限制反而更加明显。问题开始从“模型能不能写出代码”转向“模型能不能理解一个完整任务,并参与任务从提出到验证的整个过程”。这也为随后出现的对话式编程和编码智能体埋下了伏笔。
2022年11月底,ChatGPT发布,生成式AI与程序员的交互方式开始从逐行补全转向多轮对话。开发者可以描述一个问题,获得模型回应,再继续追问、修改要求并反复迭代。遇到报错时,也可以直接把错误信息交给模型,让模型解释原因并提出修改方案。代码生成、问题分析和调试建议由此被放进了同一个交互过程,模型能够处理的问题范围也明显扩大。
但对话式编程仍然存在一个重要限制。模型与实际开发环境之间并没有建立直接的操作通道。模型判断应该修改哪个文件,开发者负责完成修改;模型建议运行什么命令,开发者负责执行;程序运行产生新的结果后,开发者再将结果提供给模型。开发者实际上承担了模型与开发环境之间的信息传递和操作执行工作。随着任务复杂度增加,这些重复的人工操作逐渐成为新的限制,也使模型难以持续推进一个包含多个步骤的开发任务。
随后出现的编码智能体改变了这种交互关系。当模型能够直接读取和修改项目文件、执行命令、运行测试、观察执行结果,并根据结果决定下一步行动时,开发者不再需要介入每一个操作环节。模型可以围绕一个目标连续执行多个步骤,例如分析测试失败的原因、定位相关代码、修改实现、重新运行测试,并根据新的结果继续调整。此时,模型承担的已经不只是代码生成,而是任务执行过程中的一部分决策和行动。这种能够感知开发环境、采取行动并根据反馈持续推进任务的能力,是本书所说的agent(智能体)的核心特征之一。
从软件工程的发展过程来看,这一演进也可以理解为开发活动基本单位的变化。在手工编码阶段,开发者直接编写和组织代码,工具主要负责编辑、编译和调试。自动补全和对话式助手出现后,模型开始参与代码生成、解释和问题分析,但开发者仍然需要驱动每一个主要步骤。进入智能体编码阶段后,交互对象逐渐从单段代码或单个问题转向完整的开发任务,模型可以在明确目标后连续调用工具、获取反馈并调整执行过程。开发者的工作也因此更多地转向任务定义、过程监督和结果验收。
对于这段历史,还可以采用另一种划分方式,将AI 辅助编程概括为自动补全、智能协助、智能体以及正在出现的多智能体编排四个阶段,技术的演进可以用一张示意图直观呈现,如图1-1所示。这样的划分并不意味着后一个阶段会取代前一个阶段。不同任务需要不同程度的自动化,开发者仍然会根据任务性质在代码补全、对话协助和智能体执行之间切换。简单的代码修改可能仍然适合使用补全,复杂问题可以通过对话分析,而涉及多个文件、测试和工具调用的任务则更适合交给智能体处理。

图1-1 自动补全、对话协助、智能体与多智能体编排的演进关系
因此,本书所讨论的 Agentic Coding 主要对应这一演进中的第三个阶段,但它并不是对前两种方式的替代。补全、对话和智能体更像是不同层次的交互方式,共同构成今天的 AI 辅助软件开发环境。理解它们之间的边界,有助于进一步理解为什么同一个开发任务需要在不同模式之间进行选择,也有助于理解后续章节将要讨论的任务分解、工具调用、上下文管理和结果验证等问题。
| 示例:三代工具处理同一个网关任务的差异 运维人员发现IoTFlow网关在解析某款新型温湿度传感器上报的CoAP消息时字段对不上,需要给coap_adapter.py增加对这款设备负载格式的解析逻辑。如果用自动补全时代的工具,开发者需要自己先读懂原有的DeviceMessage结构,自己写出新的解析分支,模型只是在敲字过程中补全变量名和常见的样板语句,测试通不通过、字段有没有漏解析,全靠人自己跑一遍才知道。 换成对话式工具,开发者可以把报文样例和现有代码贴给模型,请它给出一段新的解析函数,但函数对不对,要不要接入现有的envelope.py,测试写没写全,仍然需要开发者自己动手核实、复制、再运行一遍pytest tests/。 到了智能体编码阶段,开发者只需要说明目标和验收标准,模型可以自己打开coap_adapter.py和envelope.py,比对已有的字段命名约定,补上解析分支,运行pytest tests/,如果失败就读取报错信息再修一次,直到测试通过才汇报结果。 三段描述看起来只是效率上的差异,实际上标志着人在这个任务里扮演的角色,从执行者变成了审核者。 |
|---|
1.2 Vibe Coding:直觉式开发的价值与边界
“Vibe Coding”这个说法有一条比较明确的来源记录。2025年2月,人工智能研究者、OpenAI联合创始人Andrej Karpathy在社交平台上描述自己使用生成式AI编程时的状态,并将这种方式称为Vibe Coding。他强调的是一种高度依赖直觉和自然语言交互的编程体验,开发者更多地表达想法和方向,让模型承担代码生成和修改工作,而自己则通过不断运行和反馈来推进开发。这个说法随后迅速传播,并逐渐成为描述这类编程方式的常用术语。
从实际开发过程来看,Vibe Coding有几个比较明显的特征。开发者通常不需要在开始时就写出完整、精确的规格说明,而是先表达一个大致目标,例如制作一个简洁的产品介绍页面,或者让某个函数采用更加符合Python习惯的实现方式。模型根据这些描述生成初始代码,开发者再通过自然语言提出修改要求,例如调整页面样式、增加错误处理或者改变函数行为。这个过程不断重复,直到结果达到预期。开发者关注的重点因此从具体的实现步骤转向最终效果以及与模型之间的持续反馈,这使得原型探索和方案试错的成本明显降低。
这种方式尤其适合软件开发的早期阶段。当面对一个尚未成形的想法时,Vibe Coding可以较快地将模糊的设想转化为能够运行和修改的程序。对于个人脚本、一次性工具和早期原型等场景,开发者往往不需要在开始之前就确定完整的系统架构,可以先获得一个可运行的版本,再根据实际效果判断是否值得继续投入。这种快速建立反馈的能力,是Vibe Coding最有价值的地方之一。
但它的边界也由此显现出来。Vibe Coding能够快速把想法变成可以运行的代码,却不会自动保证代码在边界条件下正确,也不能保证几个月之后仍然容易维护,更不能保证系统出现问题时能够追溯设计依据和责任边界。它解决的主要是“如何更快地把一个想法实现出来”,而不是“如何让这个实现长期可靠地运行和演化”。
因此,Vibe Coding更适合被理解为一种新的开发交互方式,而不是完整的软件工程方法。它降低了从想法到代码的门槛,却没有消除需求分析、架构设计、测试验证和持续维护等工程问题。当开发任务从快速试错进入持续运行的系统,这些问题会重新成为核心。下一节将从这里出发,进一步讨论Vibe Coding与Agentic Coding之间究竟有什么区别。
1.3 从Vibe Coding到Agentic Coding:氛围编程为何止步于原型
如果把Vibe Coding放到团队协作和企业级软件的尺度上观察,它的局限会更加明显。近年来,生成式AI一方面显著降低了软件开发的技术门槛,使越来越多的人能够通过自然语言快速构建一个可以运行的应用;另一方面,编码智能体在需求理解、代码生成、测试编写和问题调试等任务上的能力也在持续提高。两个趋势叠加之后,很容易产生一种过于乐观的判断:既然代码越来越容易生成,软件开发本身似乎也就不再困难。
这种判断忽略了软件工程中一个长期存在的事实。写代码只是软件开发的一部分,真正决定一个系统能否长期运行的,往往是围绕代码建立起来的工程体系,包括需求分析、设计决策、测试验证、变更管理、知识沉淀和责任追踪等。这些机制的意义在于,即使参与开发的人和AI都可能犯错,系统仍然能够通过制度、工具和证据保持可理解、可验证和可维护。
可以把个人原型与企业级软件作一个简单的对比。一个一次性脚本可以快速生成,能够满足当前需求就已经具有足够的价值;但企业的核心业务系统不能采用同样的完成标准。真实的软件往往由多人共同开发,并且需要持续运行和演化。代码第一次提交之后,维护阶段才真正开始,而维护中最困难的工作往往不是继续增加代码,而是理解已有代码为什么这样设计,判断哪些地方可以修改,以及一次局部修改可能影响系统的哪些部分。随着时间推移,这些问题的重要性通常会超过最初的代码生成本身。
从这个角度看,Vibe Coding与成熟的智能体软件工程之间,还存在一个重要的过渡层,可以称为Vibe Engineering(氛围工程)。Vibe Coding强调快速表达和快速实现,核心目标是尽快得到一个能够工作的结果。成熟的智能体软件工程则要求开发过程具有更明确的约束,任务需要符合既定规范,执行过程需要得到验证,关键结果需要留下可以追溯的证据。两者之间并不是简单的取舍关系。真正具有工程价值的做法,是在保留AI快速生成能力的同时,引入足以支撑长期维护的基本结构,使代码不仅能够运行,而且能够被测试、理解、修改和继续演化。Vibe Coding、Vibe Engineering与Agentic软件工程之间的关系,可以用一张对比图来呈现,如图1-2所示。

图1-2 从Vibe Coding到Agentic软件工程的演进
这一区别说明,Agentic Coding并不是Vibe Coding的简单加速版。它试图解决的是 Vibe Coding在复杂软件开发中暴露出来的一系列工程问题。模糊的需求如何转化为可执行的任务,任务上下文如何组织和管理,智能体能够调用哪些工具,工具调用需要什么约束,测试和验证如何替代模型的自我判断,人类又应该在什么环节介入并承担最终责任。这些问题共同构成了从AI辅助编程走向Agentic软件工程的关键路径,也是本书后续章节展开讨论的主要内容。
1.4 核心命题:写代码不再是瓶颈,可信性才是
如果只看软件开发中的代码生成环节,写代码本身正在迅速变得不再稀缺。到 2026 年年中,Google 披露其新增代码中约有四分之三由AI生成,并经过工程师确认;这一比例在半年前约为一半。Microsoft 此前也曾披露,其代码中有相当一部分由AI辅助生成。不过,这些数字的统计口径并不完全一致,不同公司对于AI生成、人工参与程度以及统计对象的定义也存在差异,因此不宜将具体比例理解为严格可比的科学测量。更值得关注的是背后的趋势:代码生成的速度和规模正在快速提高,直接编写代码在软件开发者整体工作量中的相对占比正在下降。
有研究者用一句话概括了这一变化:“生成已经不再稀缺,稀缺的是验证的能力”。这句话指出了本章试图讨论的核心问题。当模型能够在很短时间内生成过去需要较长时间才能完成的代码时,工程师的时间投入结构也会随之发生变化。传统软件开发中,大量时间用于代码编写、调试和测试,而在智能体编码的工作方式下,工程师需要投入更多精力思考系统要解决什么问题、应该如何设计,以及不同方案之间为什么需要作出这样的取舍。对于模型已经能够完成的代码生成工作,人类更多承担的是审查、判断和处理那些需要业务知识与工程经验的问题。
这种变化带来了一个更重要的问题。代码生成速度提高之后,谁来判断结果是否正确,谁来为结果承担责任?当软件生产的速度和规模快速增长,而可靠性要求并没有因此降低时,开发过程中的主要约束就会逐渐从代码生成本身转向验证、治理和系统集成。因此,软件工程需要关注的问题也正在发生变化。代码写得快不快,越来越难以成为衡量开发效率的唯一标准;代码是否正确、是否符合要求、是否能够被验证和维护,以及出现问题时能否追溯原因,才成为更加重要的评价标准。
本书将这些能力概括为可信性(trustworthiness)。这里的可信性并不意味着假设AI永远不会出错,而是要求软件开发过程能够在AI可能出错的前提下,通过明确的规范、有效的验证、适当的人类监督和完整的过程证据,使最终结果达到可以接受的可靠程度。它既涉及代码本身的正确性,也涉及需求是否得到满足、设计决策是否合理、执行过程是否可追踪,以及系统在后续维护和演化中是否仍然能够保持可控。
这一命题贯穿全书。第4章讨论的四个悖论,第5章展开的可信性问题,第9章讨论的验证方法,以及第10章讨论的人类监督机制,分别从不同角度回应同一个核心问题:当代码越来越容易生成之后,我们如何确保这些代码仍然值得信任?
1.5 全书结构导览
本书分为六个部分。
第一部分继续建立理解Agentic Coding所需要的基本认知,首先明确智能体编码的概念、能力边界及其与传统AI编程工具的区别,然后讨论编码智能体依赖大语言模型完成哪些类型的推理和决策,并分析实践中常见的失效模式。在此基础上,本部分进一步回答一个贯穿全书的问题,即为什么编码智能体具有较强的执行能力,却仍然不能被默认视为可信的开发者。
第二部分进入智能体的工作循环,讨论一个开发任务如何从模糊的需求逐步转化为可以执行的任务简报,并进一步分析上下文工程、工具调用、代码执行、测试验证和人类监督等环节如何形成完整的闭环。这里关注的已经不只是模型能够生成什么,而是如何组织一个能够持续执行、获得反馈并根据结果调整的开发过程。
第三部分将视角落到具体的编码活动,讨论不同类型的开发任务如何交给智能体处理,覆盖代码生成、缺陷修复、重构与迁移、代码评审等典型场景。重点不是展示某一种工具的操作步骤,而是分析不同任务适合怎样的智能体工作方式,以及开发者应该在哪些环节介入。
第四部分进一步扩展到多智能体协作。当一个任务需要多个智能体共同完成时,任务分工、信息传递、状态同步和结果汇聚都会带来新的问题。本部分讨论多智能体系统的协作结构、任务编排方式以及常见的协作反模式,分析从单个编码智能体走向智能体团队之后,软件工程面临哪些新的约束。
第五部分回到软件本身,讨论代码库、编程语言和软件交付流程如何适应智能体参与的开发模式。智能体改变的不只是代码生成方式,也会影响代码组织、接口设计、测试体系、版本控制和持续交付等环节。本部分关注这些已有的软件工程基础设施需要作出怎样的调整,才能支持更大规模、更高频率的智能体参与。
第六部分则回到开发者和软件工程教育,讨论智能体编码对开发者角色、能力结构和学习方式带来的影响,并进一步讨论当前仍未解决的研究问题。随着代码生成逐渐成为基础能力,软件工程师需要掌握的核心能力也会发生变化,如何定义新的能力边界,如何培养这种能力,仍然需要持续探索。
这六个部分并不是彼此孤立的知识点,而是一条逐步展开的论证链。第一部分回答 Agentic Coding是什么,以及为什么需要一种新的软件开发方式;第二部分回答这种方式如何形成完整的工作循环;第三至第五部分进一步讨论它在不同开发任务、协作规模和软件生命周期中的具体应用;第六部分则回到人本身,讨论这种变化对软件工程师、学习和未来研究意味着什么。
贯穿全书的虚拟系统IoTFlow会在不同章节中反复出现。它提供统一的软件背景,使抽象的概念和工程方法能够落到具体的代码、任务和开发场景上。但IoTFlow本身并不是本书的学习目标,读者不需要把它作为一个完整项目从头到尾掌握。它更像是一条贯穿全书的案例线索,用来帮助读者理解不同章节讨论的问题如何出现在真实的软件开发过程中。
本章要点
(1)自动补全、对话式协助和智能体编码代表了三种不同的人机协作范式。它们的关键区别不只是模型能力的提升,更在于模型能够获得多大的任务范围、上下文范围以及环境操作权限。
(2)新的交互模式并不会简单取代旧的模式。开发者会根据任务性质,在代码补全、对话协助和智能体执行之间进行选择和切换。三种模式在实际开发中长期共存,并形成不同层次的协作方式。
(3)Vibe Coding的优势主要体现在探索和原型阶段。它能够以较低的成本把模糊想法快速转化为可以运行的程序,更擅长回答“现在能不能做出来”,但并不能自动回答“这个实现是否值得长期信任”。
(4)Agentic Coding不是Vibe Coding的简单加速版。它进一步引入任务规划、工具调用、上下文管理、测试验证和过程监督等机制,试图解决AI参与复杂软件开发之后产生的工程问题。
(5)在快速生成和成熟的软件工程之间,还存在一个重要的过渡空间。它保留生成式AI带来的开发速度,同时引入足以支撑长期维护的基本工程结构。一个较为成熟的完成标准,不只是代码能够运行,还应当能够解释、验证、维护和继续演化。
(6)大型科技公司近年来不断披露AI参与代码生成的数据,但不同公司的统计对象、统计方法和人工参与程度并不完全一致。因此,具体比例不宜直接进行横向比较,更值得关注的是代码生成能力快速提高这一总体趋势。
(7)当代码生成的成本显著下降之后,软件工程面临的主要约束正在从“如何更快地写出代码”转向“如何判断生成结果是否可信”。验证、审查、治理和责任追踪的重要性因此进一步提高,这也是本书反复回到的核心命题。
(8)可信性不是一个抽象的价值判断,而是可以转化为具体工程要求的属性集合,包括结果是否可验证、过程是否可追溯、关键决策是否可审计,以及系统是否能够在出现错误时进行定位和纠正。本书后续章节将围绕这些属性,进一步讨论相应的方法和工程机制。
延伸阅读
[1] Advait Sarkar和Ian Drosos,《Vibe coding: programming through conversation with artificial intelligence》,2025年。该论文专门分析了Vibe Coding这一概念的形成与语义演变,同时梳理了 Vibe Coding 在随后传播过程中含义发生的变化,链接:https://arxiv.org/html/2506.23253v1。
[2] Addy Osmani,《The Factory Model: How Coding Agents Changed Software Engineering》。这篇文章2026年2月发表于Addy Osmani 个人网站,文章讨论了编码智能体普及之后软件工程工作方式的变化,并提出“生成不再是瓶颈,验证成为瓶颈”的判断,链接:https://addyosmani.com/blog/factory-model/。
[3] Ahmed E. Hassan,《Agentic Software Engineering: Building Trustworthy Software with Stochastic Teammates at Unprecedented Scale》,2026年。该书从Vibe Coding、Vibe Engineering到Agentic Software Engineering的连续演进出发,讨论生成式AI对软件工程方法和组织方式带来的影响,链接:https://agenticse-book.github.io/。
[4] Chip Huyen,《AI Engineering: Building Applications with Foundation Models》,2024年。该书从工程实践的角度系统讨论生成式AI应用的构建、评估与部署,其中关于模型和AI系统评估的方法论,对于理解本书后续关于测试、验证和评估的讨论具有参考价值,ISBN:978-1098166304。