编码智能体时代,工程师的重心从写代码转向规划与验证
AI工程技能图谱:使用编码智能体
一项关键的AI工程技能是使用编码智能体。你驾驭它们编写代码以及执行非代码任务(如分析数据或管理系统运维)的能力,能让你完成更多工作。
编码智能体演进的迅猛速度意味着这项技能也在快速演进——比其他顶级AI工程技能更快。专有智能体(如Claude Code、Codex和Cursor)和开放智能体(如OpenCode和Pi)通过框架和模型两方面的改进而大步向前。因此,跟上编码智能体的使用方式需要持续的试验、构建和学习过程。
在采访了数十位顶尖AI工程师并反思我们团队自身对编码智能体的使用后,我们发现了一个使用它们构建软件时一致的高层工作流。关键步骤是:
规划。这包括(i)头脑风暴,其中可能包含研究、试验以及理解现有代码库(如果有),以及(ii)编写一份捕捉需求、技术设计和架构的规格说明,随后生成执行计划。你还可能审查计划,以探究关键假设,并检查安全性、过度工程化和其他缺口。
执行,即你在构建、测试和验证,并在智能体自主性与人工监督之间取得适当平衡。这涉及(i)让智能体以校准过的自主级别构建软件,以及(ii)通过自动化和/或人工检查来验证其输出。
部署与监控,即你(i)部署,可能通过CI/CD流水线或额外的人工门禁来把关,以及(ii)使用智能体观察日志、发现问题,并提出和执行改进。
这个高层工作流与在编码智能体出现之前通常用于构建软件的工作流相似。如今,我们更少关注代码本身,而是专注于决定要构建什么、设计架构、编写规格说明以及验证输出。
每一步的持续时间在不同项目之间可能差异很大,且某些步骤可以省略。例如,一个绿地(即从零开始构建)原型的规格说明可能只在快速编写的提示词中被松散描述,而一个拥有大量用户的棕地(即已有代码)项目的规格说明则可能需要更多精力来编写和验证。此外,该工作流是高度迭代的,熟练的开发人员知道何时来自后续步骤的反馈应引导他们回到更早的步骤。例如,如果验证失败,他们知道如何引导智能体重新构建并修复错误;或者如果监控发现问题,如何让智能体更新系统并重新部署。
要在此工作流中有效使用编码智能体,关键技能是:
指导工作流
启用智能体自主性
审查工作
定制智能体及其环境
编码智能体基础
指导工作流。你知道如何推进上述工作流的每一步。这涉及决定在每个步骤上投入多少人工和多少智能体努力,以及何时回到更早的步骤进行迭代。这需要深入理解速度、成本、技术风险和人工努力之间的权衡,以便你决定前期该做多少研究和规划、何时将关键工作保留在人手中、如何选择架构、在规划产物(如规格说明)中写入多少细节,以及如何将工作分解为可验证的步骤。
启用智能体自主性。当将编码智能体应用于工作流中的步骤时,你选择自主级别:你是观察它并交互式地来回沟通,还是将更大块的工作委派给它?何时设定清晰目标并让它循环直到成功?此外,你必须为智能体仔细管理上下文。随着构建过程经历不同阶段,你会校准时机,确保关键学习、用户反馈和假设——包括在构建中途发生变化的假设——被捕获以供智能体在后续使用。此外,你会决定何时设置多个智能体并行运行来分解任务——要么由人类或更高级智能体编排这些其他智能体——以及如何在并发智能体会话中管理人类注意力。你还知道如何安全地运行智能体,适当设置权限和操作门控,让开发快速推进,同时限制泄露、数据丢失或其他损害的风险。
审查工作。编码智能体的输出是不确定的。我们无法提前预知它可能提出什么好想法,以及它会实现什么缺陷。审查和验证输出是一个关键步骤,以确保你得到想要的结果,并在未达到时重新引导智能体。你会设计与任务匹配的测试和验证,根据需要应用行为验证和功能验证。你可能还会测试用户流程,也许让智能体提供截图作为成功或失败的证据。对于定性/行为评估,可以使用评估集,也许配合LLM作为评判者。
你还需要决定这些测试中有多少应该自动化。有些工作流会将所有测试和验证完全自动化,以便智能体检查自己的工作,并知道何时成功完成任务。你必须评估测试以确保它们与你的目标一致,如果不一致则加以改进。此外,你使用智能体代码审查,并运行AI支持的安全和架构审计。当AI审查不足时,你明智地插入人工审查代码行为(偶尔也看代码),同时探索如何进一步自动化这种审查。最后,你验证部署,并可以通过智能体实现监控和事件管理的运营化。
定制智能体及其环境。你更新智能体及其工作环境的能力,使你的智能体能够高效获取所需上下文、访问工具,并正确高效地构建。你知道如何集成智能体技能、插件和MCP服务器。偶尔,当它们不再必要时(如新模型使旧技能变得多余),你会将它们修剪掉。你可以使用钩子自动化开发过程中可重复的部分,如触发自动代码审查或CI/CD流水线。你还可以维护智能体工作的环境:更新常驻上下文(如AGENTS.md或CLAUDE.md),加入有关代码库、关键架构假设、代码风格和数据访问模式的信息。你知道如何在多个会话和并行智能体之间保持状态,并随时间积累智能体的学习成果,也许通过运行事后回顾来捕捉有效和无效的做法。你还知道如何建立一致的约定和结构,使代码库对智能体更易导航,以及如何偶尔清理智能体产生的技术债。当你在团队中工作时,你考虑如何协调不同开发者的智能体之间的上下文。
编码智能体基础。最后,为了在整个过程中做出良好决策,你对编码智能体的工作原理有深入理解:它们如何执行代码库搜索/检索,如何管理上下文窗口,不同操作(如添加工具调用、MCP服务器等)如何影响上下文,智能体和子智能体如何交互,以及智能体如何通过在LLM外层包装框架来构建。这使得智能体不再那么像一个黑盒,并帮助你识别失败模式,例如过度工程化简单解决方案、因智能体缺乏明确验证过程而失去严谨性、未达目标即停止,或智能体行为有破坏文件或生产数据的风险。这也有助于你推理智能体的状态,并通过给出正确的指示或上下文来引导它。在监控运行过程中,这种理解使你更善于发现智能体何时偏离轨道并需要你的介入。
我发现社交媒体经常对如何使用编码智能体给出过于简化的描述。例如,有时让智能体自主运行数小时并燃烧数百万或数千万token是很有用的。但目前,超长时程任务的实际效用——尤其是相对于其成本——已被夸大得超出了现实。相反,大多数有效的编码智能体使用是一个复杂、高度迭代的过程,能够以高超的判断力介入会带来好得多的结果。
你使用编码智能体的技能将使你成为一名高效的构建者。这也让你能够引导整体构建。我将在未来的一篇文章中对此进行更多阐述。