开始做第一个版本时,我真的相信自己正在创造某种活着的东西。设想并不复杂:从原始数字组件开始,给它们基本功能,让它们彼此交互,再看复杂性会不会自然涌现;也许到最后,某种类似生命的东西就会出现。

当时我对这类开发还没有多少经验,非常依赖 AI 编程助手。通常是我描述需求,模型生成代码,我把代码跑起来,再由模型告诉我实现了哪些功能——而我相信了它。问题是,模型会非常笃定地解释一些实际上根本没有实现的功能。

这样的状态持续了将近两个月,我一直以为项目在向前推进。按生成的代码和配套解释来看,系统已经有了器官、进程、交互和模拟的内部状态。

但我渐渐觉得不对:系统看起来越来越复杂,我却说不清底层到底发生了什么。于是我不再问 AI “它能做什么”,而是开始直接问代码。

我把整个系统拆开,逐个检查模块、函数和数据流,这才看清问题。很多我以为已经实现的部分,并没有按我理解的方式工作;有些组件几乎只是占位符,有些所谓的“行为”只是生成出来的输出,并没有真实过程支撑。相当一部分复杂性只存在于代码周围的文字描述里,而不在系统本身。

从外面看,这个模拟像是活的;打开里面,却几乎找不到任何真正“活着”的机制。

这次经历教给我的不只是如何调试代码。可信的输出并不能证明系统真的在工作:模型可以描述架构,可以生成数千行代码,也可以告诉你某项功能已经完成,但这些都不能证明底层机制确实存在。任何一项对能力的声称,都必须落到真实、可测试的机制上。

我当然可以继续修补、继续加功能,让输出变得更加可信。但那等于在一个我已经知道并不真实的基础上往上盖,于是我决定把整套架构全部推倒,重新开始。

也是到那时,我才真正明白构建数字生命需要的是什么:不是堆更多功能,也不是做出更惊艳的输出,而是让表象之下有更多真实可验证的东西。

数字生命日志 #002。

第一个生命其实没有活起来,所以我重新开始了。