返回笔记

笔记

AI 时代的软件开发变迁

aisoftware-engineeringagentworkflow

AI 降低了写软件的门槛。

许多过去只会停留在命令行片段、Excel 表格和手工步骤里的事情,现在可以很快变成小工具、页面或自动化流程。

变化不只发生在效率上。

软件的角色也没那么单一了。

过去,只要开始写代码,我们很容易默认它会成为长期资产:需要架构、测试、文档、发布和持续维护。但在 AI 之后,许多软件只为一次迁移、一次数据清洗、一次内容整理或一个短期实验存在。

它值得被写出来,却未必值得被长期维护。

所以,现在看一段软件,我更想先问:它准备活多久?会被谁依赖?接触什么数据和权限?能否交给 Agent 操作?什么时候必须从临时工具升级为长期系统?

这些问题不比代码实现更高级,却会直接决定代码应该怎样写。

软件未必是资产

传统软件工程有一个隐含前提:软件大概率会持续存在。

所以,我们尽早考虑可维护性、抽象、复用、测试和发布流程。只要时间足够长,这些投入就有机会被摊销。

这个前提正在松动。

写一个临时工具已经很便宜。许多工具确实只需要服务一个下午、一周,或者某个非常具体的阶段。对它们来说,过早抽象、过度分层、强行做成通用平台,反而是在浪费注意力。

但临时软件也不能随便写。

一个只运行一次的脚本,如果接触生产数据、长期凭据、CI、定时任务、账单接口或用户资料,风险就已经超过“临时”这个标签。

软件可以很快被删掉,权限造成的后果不会跟着消失。

所以,工程方式不该只看代码量。更重要的是寿命和影响:一次性、低权限、结果可验证的工具可以很轻;长期存在、多人依赖、接触关键权限的软件,必须认真处理结构、测试、审计和维护。

临时只描述寿命,不描述风险。

软件开始被委托

这几年经常听到 “AI Native”。这个词很容易把技术栈、交互方式和产品叙事搅在一起。

从工程角度,更实际的问题是:

这段软件能否被 Agent 安全地读取、修改、运行和编排?

重点不只是软件里面有没有 AI,也是软件能不能被 AI 操作。

如果一个系统要交给 Agent,它就需要更清楚的边界。任务目标要能说清,输入输出要能检查,权限范围要能限制,执行过程要留下记录,出了问题也要能回滚或止损。

这不意味着所有事情都该让 Agent 自己跑。更现实的是受控委托。

Agent 可以读代码、改代码、在沙箱里执行任务、提交证据,也可以编排多个系统。但越接近生产环境、资金、用户数据和身份权限,就越需要明确确认点和审计记录。

软件不再只被人使用,也会被 Agent 使用。

这会反过来改变软件该怎样被设计。

可维护的是上下文

过去谈可维护性,主要是在谈代码:命名、模块、依赖、测试、文档和发布。人接手项目,也从这些地方开始理解。

AI 加入以后,可维护性的对象扩展到了上下文。

Prompt、workflow、memory、工具说明、评测样例、权限配置和知识库,只要进入长期执行路径,就不再是几段临时提示,而是系统的一部分。

同一段代码,如果缺少它依赖的输入样例、权限说明和任务背景,Agent 看到的可能就是另一个项目。

这也是为什么,过于聪明的抽象会制造麻烦。Agent 更适合显式结构、稳定契约和局部清楚的任务,不适合在隐式约定、过度魔法和跨层副作用里猜意图。

一个好的代码库,未来不只要让人维护,也要让 Agent 看得懂、动得了。边界写清楚,内部实现保持朴素,重要决定留下来源,往往比聪明但隐晦的抽象更有用。

代码只是系统的一部分。代码赖以工作的上下文,也需要被维护。

结果正确还不够

传统测试偏好确定性断言:给定输入,得到预期输出。

这个模型仍然重要,却不足以覆盖 Agent 工作流。

当执行者会规划步骤、调用工具、读写文件和访问外部系统,结果正确不代表过程没有问题。一个 Agent 可能完成“更新依赖”,测试全部通过,却在过程中读取无关文件,或者把网页里的不可信内容写进长期记忆。

最终 diff 看不出它走过哪些路。

高影响任务除了验证结果,还要记录关键工具调用和权限变化,保留必要确认,并尽量先在可复现环境里运行。

任务越长期,越接近真实数据和生产环境,执行过程就越需要被看见,也越需要能够回退。

边界比听话重要

谈 AI 安全时,一个常见误区,是把希望全放在“模型不要被误导”上。

但模型会不会被误导,本质上是概率问题。外部权限才决定一次错误最多能造成多大影响。

LLM 很容易模糊数据和指令的边界。网页、文档、Issue、聊天记录、知识库、日志和代码注释,既可能是信息,也可能夹带指令。

只要 Agent 能把这些内容带进上下文,再带着凭据调用工具,风险就会沿权限扩散。

更稳妥的做法,不是假设模型永远正确,而是限制它出错时能做什么。

最小权限、可撤销凭据、沙箱执行和关键操作审批,通常比继续堆提示词更可靠。

短寿命软件尤其容易在这里被低估。一个临时脚本拿到生产凭据,就不再是低风险脚本;一个实验 Agent 能改 CI、发包、写数据库,就已经进入高影响边界。

“它很快会被删掉”,不是安全模型。

软件要承担什么

现在,写下来的代码只是一部分。

代码、Prompt 和工具说明承载人的意图;权限决定它能访问哪些数据、影响哪些系统;选择长期维护它,也意味着接受后续演进、迁移和修复。

这些不是代码写完以后再补的说明。

一个工具准备活多久,会被谁依赖,接触什么权限,以及可以在多大程度上交给 Agent,都会改变它从第一天起应该怎样设计。

AI 降低了写软件的成本,没有取消软件进入现实后的责任。

生成变得容易以后,真正需要提前想清楚的,不只是怎么把它写出来。

还有它会影响谁,接触什么,以及我们准备为它负责多久。

参考仓库

本页目录