大模型将改变软件开发的模式

人工智能乘着算力发展的东风突飞猛进。从机器学习到基于神经网络的深度学习,注意力机制的引入和预训练模型的发展,到如今通用大语言模型,我感到我们离未来那么近。

在上个世纪,凯文·凯利在《失控》中介绍了这样一种思想:系统分为串行系统(如一个钟表,各个部件执行不同的功能,缺一不可,共同工作)和网络系统(如电信网络,每个节点承担相似的功能,单个节点故障不影响整体网络的运行)。其中,网络系统有一个不可忽视的特点:涌现。当我们观察单个个体时不能观测出的特征,会随着个体数量的增加显现出来。例如我们无法从单个蜜蜂的行为特征上观测到一个蜂群没有首领带路却自成体系的移动方式。我想,如日中天的通用大语言模型是网络系统涌现现象的完美示范。模型开发人员说当他们不断地指数级堆砌硬件设备和模型参数量时,模型神奇地出现了意想不到的效果。

如今LLM已经支持多模态,研究者把它应用到各个领域。在软件开发领域,大模型将大有作为,一大批程序员失业是早晚的事情,软件开发的模式也要发生改变。

  • 从开发者变成纠正者:LLM学习的代码是如此之多,以至于日常开发中所需的绝大多数代码都可以使用LLM生成。请你自己想一想,你日常工作写的代码中有多少是完全原创的?无法从之前的代码库中搜索到类似的?如果你的代码有先例,LLM自然可以学习到并且生成出来。在未来,编程人员所做的工作主要是修正LLM生成代码中微弱的错误,使其可以运行。

  • 测试驱动开发:单元测试等将是编程人员和LLM交互的良好方式。编程人员通过指定测试样例,命令LLM编写符合规定的代码。这种命令LLM生成代码的方式要比有歧义的自然语言高效和准确的多。

  • 代码错误更多,但低开发成本使得这可以容忍:我坚信在LLM帮助下的程序开发中,至少在目前LLM的智能水平下,软件的漏洞会更多,因为LLM的编写水平恐怕还是远比不上人类(这是我使用过程中的直觉,也许不准确)。但是,LLM下的程序开发成本实在太低了,以至于开发成本加上程序漏洞的成本还是远低于完全人工开发的成本。因此,LLM导致的软件漏洞问题可以容忍。我想,将有一个分类体系、认证标准,规定不同等级的软件是否能用LLM开发,能在多大程度上使用LLM。

  • LLM所生成代码的“过程间”问题将很棘手:过程间问题经常大大增加程序开发和分析的难度,例如执行路径爆炸的问题。目前的LLM缺少“记忆”,我们要把之前的上下文传递给它来唤醒它的“记忆”,使其基于上下文执行任务。对于代码来说,一个普通函数的更改可能涉及到一个长长的调用链,我们该传递哪些信息呢?在一个大型项目中,这个信息会不会太长了,以至于随着项目的尺寸扩大LLM开发成本指数级上升?

随手一写,错误望读者指正。