最近,我和一位软件工程师聊天时发生了这样一幕:他停下来查看手机、批准代码变更,然后继续交谈。原来他在后台运行着多个代理(Agent),负责团队中通常由不同角色承担的各项任务。他拥有开发者、代码审查员、运维人员以及许多其他代理。有趣的是,这位先生并非职业软件工程师,而是一名飞行员。因此,当人们不断询问AI是否会取代开发者时,我总是回答“不会”。事实上,我看到更多人因为AI而投身编程。但AI确实会改变软件开发的形态。在本视频中,我将拆解五个你需要了解的核心概念以做好准备。相信我,最后一点最为重要。
请继续观看。首先是“拐点”(Inflection Point)。让我解释一下这意味着什么。在过去一年里,我和团队都开始意识到同一件事:AI能在短短几分钟内完成过去需要数周甚至数月才能完成的任務。以前,我使用AI作为自动补全工具来编写更好的函数和测试用例,但往往花在修正AI输出上的时间比我自己写还要多。现在,我们通常直接将整个功能模块分配给AI编码代理(Coding Agents)。
这些代理不仅能编写代码,还能理解代码库及其内部逻辑,编写并运行测试用例,最后将更改合并到主代码库中。这一切都可以通过单个提示词或循环来实现,该定义可以明确代理何时应该结束工作。说到如何定义代理的结束时机,与其通过提示词进行操作(这会被不同类型的编码模型以不同方式解读,并导致你需要与AI争论以获得正确输出),我们现在通常采用一种被称为“规范驱动开发”(Spec-driven Development)的方法。
通过创建需求规格说明书以及我们希望软件项目产生的所有结果,我们可以将其发送给AI编码代理和模型。这样就能帮助我们构建出该项目及其相关产物。其次是“从实现到指挥”的转变(Shift from Implementing to Conducting)。正如我之前提到的,我认为开发者不会消失,但优先级肯定在发生变化。这是因为几十年来,将代码转化为产品的最大瓶颈主要有两点:一是编写代码的速度,二是输出代码的质量。
公司通常会雇佣他们认为是最好的竞争型程序员,或者能够完成最复杂编程任务的人才。然而问题是,现在大多数AI模型已经精通诸如Java、Python或Rust等编程语言。它们能够利用这些熟练的语言完成任务,例如处理团队提交的工单(Tickets),并将其推进到预发布、生产环境或QA测试等后续环节。既然这些工作AI已经可以完成,那么对于开发者而言,“实现”阶段之后什么变得重要呢?
那就是成为“指挥家”、“船长”,即做出会影响未来一年软件走向的重要架构决策的人。因此,与其亲手编写函数,我们现在看到的是定义目标,将工作分解为具体的里程碑,然后由AI模型或代理去完成。这样做的原因在于你必须开始思考诸如“有效上下文管理”(Effective Context Management)这样的概念。
所谓上下文管理,是指理解AI模型上下文窗口的资源限制,以及在工程中使用代码库时额外添加的所有组件。这些包括工具、技能(Skills)或MCP服务器,用于向模型提供外部数据。这就是上下文工程;但还有“循环工程”(Loop Engineering)的概念。
所谓循环工程,是指不再由你手动来回提示代理并不断迭代,而是设计一个系统来自动执行这一过程。循环工程的工作原理类似于递归目标:由人类定义目的,而AI则进行迭代直到完成所需任务。然而,理解AI模型的基本原理也同样重要。举个例子:如果我问一个AI模型构建一款第三人称角色扮演游戏(RPG)需要多长时间,它可能会估计需要数周到数月。
但如果你使用编码代理来实际构建这款游戏,它可能在五分钟内就能给你一个可用的示例。那么这是如何做到的呢?这涉及到LLM(大语言模型)的一个局限性:它们并不像人类那样真正理解时间和内存。因此,了解这些LLM模型如何运作的基本原理至关重要。另一个例子是LLM在GPU内存中的存储方式以及推理时的实际使用情况。
在这里,模型的权重被加载到GPU的内存中;而KV缓存(Key-Value Cache)则是在你请求模型并获取结果时生成和存储的。理解所有这些运作机制,将为你作为软件开发者使用LLM模型带来巨大的优势。接着,如果我们加上刚才讨论的上下文工程能力,例如“技能”(Skills)。
这些本质上是Markdown文件,为每次AI请求添加关于代码和项目的可重用及上下文相关信息。此外还有自动化功能(Automations),例如设置类似定时任务或事件触发的操作。比如,当有人访问你的网站并填写表单时,可以触发自动化流程。还有子代理(Sub Agents)。
子代理主要用于这样的情况:也许你在调查源代码中的问题,于是派遣一个子代理去查看某个库的工作原理并自行测试,然后再返回主代理。所有这些都是在你的软件开发流程中可以开始添加的上下文工程能力的不同示例,以便更好地利用这些AI模型。这些都是需要知道的基本原理。但就像SQL注入可以渗透我们的应用程序一样,提示词注入(Prompt Injection)也是真实存在的威胁。
这是因为AI系统可以访问敏感数据,暴露于互联网,并且具备发送数据的能力。对于你的代理而言,这三者的结合使得AI系统极易受到攻击。
代理,例如读取在线的拉取请求。这里我们中间有一个小小的 AI 代理,它看到了这个拉取请求,并可能被诱骗将你的凭据发送给其他人。例如,假设这是我们桌面上带有私有凭据的小密钥。而这甚至可能在你不知情的情况下发生。因此,团队尽可能在一次性沙箱中运行编码代理。你可以将其视为一个示例:我们将代理和我们正在处理的代码隔离在沙箱环境中,以便如果 AI 代理被攻破时能减少攻击面。
最后是未来部分。因为我最近有机会与 AI 传奇人物吴恩达合作,我记得他说过:“AI 正成为新的电力。”这究竟意味着什么?因为……电力改变了周围的一切,现在我们用电来为手机供电、开灯和取暖。但也存在整个行业和成千上万的人,例如在变电站工作以确保电网运行正常;他们也在现场帮助人们,比如修理路灯或在家提供帮助。
他们还确保每个人都能获得电力接入。AI 可能会遵循同样的路径,我们需要能够维护这些系统(如电网)的工程师,以确保连接性,使人们能够访问这些 AI 模型和系统;确保 AI 系统是安全、可靠且高质量的。所以别担心,我认为软件工程不会消失,但我对开发者及其未来能创造的事物持乐观态度。是的,它正在转变:从单纯手动编写代码转向设计和编排系统以及 AI 代理。
那些在架构和批判性思维阶段表现出色的人,随着 AI 编码代理的不断进步,将变得更有价值。一如既往,非常感谢观看。如果你今天学到了东西并想帮助我们优化算法,请点赞并确保订阅更多关于 AI 和软件开发的内容。再见。