夜雨聆风学习资料网

ARTICLE · 1039988

AI 时代的大型软件工程:我们真正需要解决的三个问题

AI 时代的大型软件工程:我们真正需要解决的三个问题
最近我一直在思考一个问题:
当 Codex、Claude Code 这样的编程 Agent 已经具备越来越强的编码能力之后,大型软件项目的工程方法到底会发生什么变化?
一开始,我们很容易把注意力放在模型本身:
它能不能写出更好的代码?
能不能理解一个几十万行甚至几百万行代码的项目?
能不能一次完成更复杂的任务?
但随着实践越来越多,我发现真正的问题正在发生变化。
当“生成代码”越来越便宜之后,真正稀缺的能力开始变成:如何组织大量 Agent 持续、并行、可靠地工作。
这已经不只是写代码的问题,而重新回到了软件工程。

一、大型项目真正要提高的三个能力

不管参与开发的是 10 个人,还是一个人带着 10 个 Agent,本质上我们都希望提高三个东西。

1. 提高并行能力

让更多任务能够同时执行。
过去一个工程师可能同时只能推进一两个主要任务。
现在理论上,我可以同时启动多个 Agent:
Agent A 开发用户系统
Agent B 开发支付模块
Agent C 重构数据库
Agent D 编写测试
Agent E 进行代码审查
代码生成速度已经不再是最大的瓶颈。
真正的问题变成:
这些 Agent 能不能真正并行,而不是互相制造冲突?

2. 延长自主运行时间

第二个目标,是让 Agent 工作得更久。
现在很多 AI 编程的工作方式仍然是:
人给一个任务 → Agent 做一点 → 停下来 → 人检查 → 再给指令。
这种模式虽然提高了编码效率,但人的注意力仍然是整个系统的调度中心。
真正有价值的 Agent 应该形成一个完整的闭环:
目标 → 规划 → 实现 → 测试 → 发现问题 → 修复 → 验证 → 继续执行
也就是说:
我们希望 Agent 从“执行一条命令”,逐渐变成“持续完成一个目标”。
Agent 能连续可靠运行的时间越长,人类能够管理的 Agent 数量就越多。

3. 提高人的杠杆率

第三个目标不是简单地“不要人”。
而是:
让人从低价值、高频率的执行工作中退出。
人的工作逐渐从:
写代码、跑测试、修复问题、检查文件、手动合并……
转向:
定义目标
架构设计
划分边界
定义接口约定
确定优先级
制定验收标准
判断风险
最终决策
最终,一个人的产出不再主要取决于:
“这个人一天能写多少代码。”
而取决于:
“这个人能够组织多少可靠的 Agent,为同一个目标持续工作。”

二、为什么不能简单地开 100 个 Agent?

这时候一个很自然的想法出现了:
既然 Agent 很便宜,那我开 10 个、50 个、100 个 Agent 不就可以了吗?
问题恰恰出现在这里。
并行不是 Agent 数量的问题,而是工程结构的问题。
如果 10 个 Agent 同时修改相同的文件,不了解彼此的接口,不知道模块边界,也没有统一的验收标准,那么增加 Agent 数量反而可能降低效率。
所以 AI 时代并没有消灭传统软件工程。
恰恰相反:
Agent 数量越多,对软件工程的要求越高。
这也是为什么大型项目依然离不开:
Git、架构设计、模块边界、接口约定、数据结构、测试、代码合并、持续集成和自动部署。
它们过去解决的是“多人协作”。
未来还要解决:
多 Agent 协作。

三、第一原则:我们无法携带过去,只能携带过去留下的结构

这是我最近越来越重视的一条原则。
人和 AI 都无法携带过去本身,只能携带过去留下的结构。
人的记忆有限。
而 Agent 的执行上下文更加明显——一个任务结束以后,它在执行过程中形成的大量理解,并不会天然成为项目的一部分。
假设一个 Agent 花了三个小时解决一个问题。
它可能经历了:
尝试方案 A → 失败
尝试方案 B → 出现性能问题
阅读源码 → 发现一个隐藏约束
测试方案 C → 成功
最终提交代码
代码保存下来了。
但是:
为什么 A 不行?为什么 B 被放弃?发现了什么隐藏约束?为什么最后选择 C?
这些东西很可能全部消失。
三个月以后,下一个 Agent 很可能重新尝试方案 A。
然后重新踩一次相同的坑。
所以一个长期项目不能只保存结果。
还必须保存:
形成这个结果所需要的知识。

四、代码保存的是结果,工程还需要保存过程

传统项目主要留下两类东西:
代码 + 文档。
它们非常重要,但并不足够。
比如代码里有:
timeout = 30s
代码告诉我们:
超时时间是 30 秒。
文档可能告诉我们:
系统请求超时时间设置为 30 秒。
但真正重要的项目知识可能是:
最开始设置为 5 秒。
生产环境发现某些任务会超过 5 秒。
后来改成 60 秒。
压测又发现连接占用时间过长。
最终根据实际数据确定为 30 秒。
并且流式接口不使用这个超时规则。
于是:
30 秒是结果。
而前面的过程才解释了:
为什么是 30 秒。
所以 AI 时代的项目至少应该保存两类信息。
第一类:结果结构
包括:
源代码
接口定义
数据结构
系统架构
测试
使用文档
这些东西告诉后来者:
这个系统现在是什么样子。
第二类:过程结构
包括:
决策
:为什么这样做
重要发现
:过程中发现了什么
约定
:团队和 Agent 之间形成了哪些规则
踩坑记录
:哪些地方容易出问题
放弃的方案
:哪些方法试过但最终没有采用,以及为什么
当前进度
:现在做到哪里
已经完成的任务
:哪些事情不需要重复做
下一步任务
:接下来应该做什么
这些东西告诉后来者:
这个系统为什么会变成现在这个样子。
这两类结构共同构成了一个大型项目真正的长期记忆。

五、记忆的本质不是让 AI 记住一切

因此,我现在对 AI 记忆的理解也发生了变化。
记忆的目标不是:
让 AI 永远记住所有事情。
这是不现实的,也没有必要。
真正需要的是:
让未来的 Agent 能够根据过去留下的结构,重新构建当前任务所需要的上下文。
所以真正的循环应该是:
执行 → 产生经验 → 留下结构 → 重建上下文 → 下一次执行
Agent 每执行一次任务,都会产生新的经验。
其中真正重要的部分被留下来。
这些信息逐渐成为项目结构的一部分。
未来另外一个 Agent 开始工作的时候,再从这些结构中恢复自己需要的上下文。
这样项目本身就开始拥有一种:
跨任务、跨 Agent、跨人员、跨时间的连续性。

六、这就是为什么我们需要项目 Harness

Codex、Claude Code 等工具实际上已经帮我们完成了大量底层 Harness。
例如:
读取代码、搜索代码、修改文件、执行命令、运行测试、Git 操作、调用工具、上下文管理、子 Agent……
这些通用能力已经越来越成熟。
所以我们真正需要建设的,不一定是另外一个编程 Agent。
而是:
属于我们自己项目的 Harness。
它应该定义:
项目目标
整体架构
模块边界
接口约定
数据结构
业务知识
开发规则
验收标准
测试与验证方法
性能指标
工作流程
项目记忆
底层的编程 Agent 负责执行。
上层的项目 Harness 负责告诉它:
在哪里工作、能做什么、不能做什么、什么叫完成,以及怎么证明自己做对了。

七、一个大型 AI 项目开始之前,应该先建立什么?

所以现在如果让我重新启动一个大型项目,我不会第一时间让 Agent 开始疯狂写代码。
我会先建立几个基础设施。
第一:建立项目 Harness
首先定义整个项目的工作方式。
Agent 如何接任务?
如何读取上下文?
重要发现记录在哪里?
决策记录在哪里?
任务完成以后留下什么?
如何验证?
失败以后如何继续?
这相当于先建立一套:
“Agent 在这个项目里应该如何工作”的规则。

第二:建立 Git 源码管理体系
Git 依然是整个大型开发体系的基础。
分支、独立工作区、提交、PR、合并、回滚……
以前 Git 管理的是多人协作。
未来它同时管理的是:
人 + Agent + Agent + Agent。
没有可靠的源码管理,就很难实现真正的大规模并行开发。

第三:完成架构设计、边界划分和接口约定
如果想真正实现并行开发,就必须能够划分任务。
而任务能不能划分,本质上取决于边界是否清楚。
模块 A 和模块 B 谁负责什么?
依赖方向是什么?
接口是什么?
数据结构是什么?
哪些东西允许修改?
哪些东西不能碰?
所以:
没有清晰的边界,就没有真正的并行。

第四:建立验证体系
这是我认为 AI 编程时代极其重要的一层。
如果一个 Agent 每完成一步都必须问人:
“我这样做对不对?”
它就永远无法真正自主运行。
所以必须尽可能把“对不对”变成机器可以判断的问题。
例如:
单元测试
集成测试
端到端测试
类型检查
代码规范检查
性能测试
服务质量指标
验收标准
它们共同解决一个问题:
Agent 如何知道自己做对了?
验证体系越完善,Agent 能够自主运行的时间就越长。

第五:建立集成、测试和部署流水线
Agent 可以并行产生大量代码。
但最后这些代码必须汇合。
因此:
代码提交 → PR → 自动验证 → 合并 → 集成测试 → 构建 → 部署
仍然是大型项目非常重要的主干。
AI 改变的是这个流程中大量工作的执行者。
而不是让这个流程消失。

第六:建立项目记忆
最后,就是前面所说的“留下结构”。
持续记录:
决策、重要发现、约定、踩坑记录、放弃的方案、当前进度、已经完成的任务、下一步任务。
让项目能够跨越:
任务、Agent、人员和时间。

八、AI 越强,工程反而越重要

这可能是一个看起来有些矛盾的结论。
很多人认为:
Agent 越聪明,我们越不需要软件工程。
我的实践感受恰恰相反。
当一个 Agent 写 500 行代码的时候,很多问题可以靠人检查。
当 20 个 Agent 一天产生几万行修改的时候,人已经不可能逐行理解所有变化。
于是我们更加依赖:
边界、接口约定、测试、验证、性能指标、持续集成和系统架构。
因为我们必须把人的判断逐渐转化为:
机器可以理解、执行和验证的结构。
所以:
AI 降低的是生成的成本,但没有消灭理解复杂系统和控制复杂度的成本。
甚至当生成速度提高几个数量级以后,后者会变得更加重要。

九、最终,我们真正构建的可能不是一个编程 Agent

回到最开始的三个目标:
第一,提高并行度
让更多任务可以同时执行。
第二,提高自主性
让每一个 Agent 可以独立运行更长时间。
第三,提高人的杠杆率
让一个真正理解系统的人,可以管理越来越大的机器执行能力。
但这里还有一个非常重要的前提:
可靠性。
因为 100 个 Agent 同时工作 10 个小时,如果产生的结果无法验证,并没有意义。
所以最终可以形成一个非常简单的关系:
并行度 × 自主性 × 可靠性 → 人的杠杆率
真正困难的问题已经不再只是:
“如何让 Agent 写更多代码?”
而变成:
如何让越来越多的 Agent,在越来越少的人类干预下,长时间、并行、可靠地完成一个复杂目标?
当问题这样定义以后,我们会发现:
Git、架构设计、边界划分、接口约定、验证体系、持续集成、项目记忆、Harness……
这些看起来属于不同领域的东西,其实都在解决同一个问题。
而这可能才是 AI 时代大型软件工程真正值得研究的方向。

相关学习资料