AI-Native Engineering:软件工程为什么必须开始为 Agent 而设计
最近在和一些团队闲聊,大家的话题似乎已经从“AI 能不能写好代码”,慢慢变成了“AI Coding 到底怎么才能真正提效”。我把最近的这些讨论和自己的感受整理了一下,写出来和大家一起探讨。
AI Coding 最吸引人的地方,是它能让代码产出变快。但是在真实的软件工程里,产出更多代码,好像并不直接等于效率更高。毕竟真实的开发涉及到极其复杂的上下游环节,单纯“敲键盘写代码”的时间占比其实并没有那么高。
这也是很多团队刚引入 AI 工具时常遇到的困惑:模型写单测、写算法题明明很强,但在自己的业务工程里跑起来就是磕磕绊绊。
为什么会这样?我最近在想,这里面可能有一个很容易被忽略的前提:过去几十年的软件工程演进,其实完全是为“人类协作”而设计的。
既然 AI 以后要深度参与开发,那整个工程体系是不是也得慢慢变成“人和 Agent 都能协作”的样子?要想真正跑通这套协作,打破“写得快但提效慢”的魔咒,我总结了三个比较核心的观察方向:看得懂、接得住、验得住。
1. 代码库要让 Agent 看得懂
过去,代码库主要是给我们人类看的。
人脑有极强的“容错”和“脑补”能力。只要团队里有人知道历史包袱、业务规则,代码结构哪怕乱一点,文档哪怕不更新,大家依然可以靠问老同事、翻聊天记录甚至靠直觉把活儿干下去。这种团队里的“隐性知识”,是我们习惯的工作方式。
但 Agent 进场后,我发现效率最容易卡在第一关:它没有“老同事的默契”。
它只能依赖代码、文档、README、issue 等显性的上下文。如果一个项目只有老员工能凭“肌肉记忆”绕过坑,那 Agent 进去大概率就是一脸懵,然后到处踩坑。那些过去被我们靠着默契忍受下来的混乱,对 Agent 来说可能就是无法跨越的理解断层。
所以是不是可以这么想:为 Agent 而设计的第一步,或许不是急着接入什么高级工具,而是让代码库本身减少对“人脑经验”的依赖。比如模块边界尽量清晰一点,命名更符合直觉,README 和架构说明最好能让机器直接读取。
Agent 时代,代码库可能慢慢不只是代码库了,它会变成 Agent 的“工作现场”。
2. 任务要让 Agent 接得住
第二个让我感触比较深的变化,是发 issue 和拆解任务的方式。
以前很多任务,其实是写给熟人看的。比如我们经常这样写: “按之前那套改一下。” “这里简单兼容一下旧版逻辑。” “这个地方别动太多。”
人类同事秒懂,因为大家知道背景,这是一种高语境的默契。但如果我们把这种 issue 丢给 Agent,它往往会抓瞎,最后做出来的东西南辕北辙,人还得花时间去返工,效率反而降了。
在 AI-Native Engineering 里,为了让 Agent 能顺利“接活”,任务本身可能需要换一种写法。与其说是流程变重,不如说是为了给它划定一个“安全沙盒”:说清楚目标是什么、相关的文件有哪些、什么核心逻辑绝对不能碰、怎么客观判断这活儿做完了。
协作对象变了,沟通方式可能也要跟着变。以前好的 issue 是让人能理解,以后好的 issue,可能还要让 Agent 能执行。
3. 结果要让系统验得住
最后聊聊验证。既然 AI 产出代码变快了,那随之而来的最大瓶颈自然变成了 Review 和测试。
不管模型多强,Agent 肯定会犯错,大家对这个应该都有心理准备。但问题在于,如果 Agent 在十秒内生成了几百行代码,全靠人类 Reviewer 去人肉检查,那整个研发流程可能直接就卡死在验证环节了。
过去有些团队测试不完善,靠资深工程师的经验也能兜底。但 Agent 参与越多,靠人肉兜底就越吃力。所以我自己的一个感受是:Agent 越能写代码,自动化的测试和 CI 其实就越重要。
真正适合 Agent 的工程体系,大概不是让它随意发挥,而是它改完之后,系统里有东西能自动化验证、能拦截异常、能追溯来源。这些工程基建,慢慢会变成机器生成代码的“方向盘”和“刹车”。
写在最后
聊到这里,我所理解的 AI-Native Engineering,其实不是指望 Agent 直接接管整个软件工程。
它更像是一个大家共同探索的过程:我们承认 Agent 会越来越多地参与到软件生产中,然后一起想办法,把环境改造得更适合它。代码库要让它看得懂,任务要让它接得住,结果要让系统验得住。
过去我们常说,好的工程系统,是让新人更容易上手。也许在不久的将来还要加上一句:好的工程系统,也应该让 Agent 更容易做对事,更不容易做错事。
这就不仅仅是用 AI 写代码了,而是让软件工程本身,慢慢长成适合 Agent 参与的样子。