← 开发日志

AI 不过是下一件工具

先说清楚,这篇文章不谈什么。

我不打算争论某个模型训练得是否合乎道德,也不去追究它背后的公司有没有为学习用的素材付过钱。那是一场真实的讨论,只不过不是这一场。我是个工程师,我挑工具,看的是它能做什么,而不是它当初怎么被造出来的那些是非。所以如果你是冲着”AI 训练的伦理之争”来的,这篇不是。就当它在讨论范围之外吧。

我真正的立场是这样的:AI 是一件工具。就这么简单。在我为了把事情做成而顺手拿起的那些工具里,它只是又多了一件。

MoVox 就是最好的证明。这是一个 AI 原生(AI-native)的项目,是借着 AI 才诞生的。这里头 AI 的成分很重,让我拆开来说。先给”AI 原生”这个时髦词下个定义。在我看来,它的意思是:没有 AI,这个项目根本就不存在。不是”AI 帮它提了提速”,而是没有 AI,就没有 MoVox。整条流水线都跑在 AI 技术之上:小说分析、配音、图像生成、视频剪辑,等等。

再说说让这一切成真的那些帮手。研究、设计、找点子,我用的是 Gemini、Claude、NotebookLM 这类 AI 研究工具;而搭建这个项目,我每天都在用 Claude Code、Gemini 这样的 AI 编程智能体(coding agent)。没有这些帮手,项目走不到今天;我大概还在苦苦琢磨自己到底需要哪些技术,边做边学(这一点后面还会提到)。

那我为什么这么淡定,而很多人却不是?因为身为工程师,这部”电影”我早看过了。让我把那个我一再使用的类比摆出来:AI 编程智能体,不过就是一门编程语言。

想想一门编程语言到底在做什么。它把人的意图翻译成计算机能跑的东西,一路翻到最底层的 0 和 1。这就是它的全部工作。而整部编程史,就是一场漫长的求索:找一条更好、更快、更省力的路子来完成这场翻译——把我们想要的告诉计算机,再让它真的听懂。

我把话说简单了些,但请你听我讲完。从最底下说起:我们有汇编,那是处理器直接执行的原始指令。早些年,这些得靠手一条条写。难写,更难读懂。后来出现了 C、C++ 这类高级语言,读起来几乎像英文。当你编译一段 C++ 程序,编译器会把这份”像英文一样”的代码,原封不动地翻回同样的汇编、同样那份我们过去手写的机器码。计算机在最底层是怎么运行程序的,一点没变;只是我们人有了一个更好的方法来传达意图。编程变简单了。就我所知,大多数人都为这份进步叫好,纷纷用起新语言,更快地做出更好的应用。

这场转变里,实际发生了什么?工程师们适应了,就像他们现在也会适应一样。他们提升了自己的本事。他们学 Fortran,再学 C、C++,再学 Java,再学 Rust,如此一路走下来。这里头每一样,都让人和机器的对话变得更容易了一点。这,就是贯穿始终的那条线。

大语言模型(LLM),就是这条线上的下一步。它让编程又一次变简单,这回靠的是让你用自然语言。而且还不只是英文。这是件坏事吗?

是的,它拉低了门槛。是的,它带来了”凭感觉编程”(vibe coding)的时代:你用大白话把想要的东西描述出来,让模型去把代码写好。再问一遍:这有什么不好?我们总算能把心里想的,明明白白地告诉计算机,并且被听懂了。

很多抱怨,来自 LLM 和智能体写出的烂代码。关于这个,有两点。其一:越新、越强的模型,正在把这个问题一点点啃下去。其二,也是我真正欣赏的一点:很多在”凭感觉编程”的人,本来不是工程师,是在做的过程中学习。他们起步时确实没受过训练,没错。可他们中许多人,对自己在做的东西是真的有热情,而且很快就上手了工程师那套思维——怎么把一个问题拆开,怎么一块一块、有条有理地把它解决掉。而 AI 编程智能体,正帮着他们走到那一步。

说实话?这条路——从工作中学——恰恰也是我们大多数”科班程序员”走过的路。我头一回进游戏公司时,压根不知道怎么用 C++ 写游戏。学位没教我这个。它教我的,是怎么更快地在岗位上学会。就这么回事,如此而已。

所以这是我诚实的判断:这里没什么可怕的。这是自然的演进。我们从前经历过,以后还会再经历。

这一次唯一的不同,而且是个实打实的不同,是速度。从汇编到 C 再到现代语言,这一路走了几十年。工程师有好几年的时间看它一步步逼近,去反应,去转向,去提升自己。可 LLM 和智能体没给任何人几年。它们是在几个月里就轰然登场的。很多人根本没时间反应:喘口气、换套本事、想清楚自己该落在哪儿。我想,大多数恐惧其实就出在这儿。不是工具本身,是速度。

在速度底下,还压着一样更根本的东西。这里我要抛出几个论断,不逐一去证明,否则这篇就成研究论文,而不是一篇博客了。

大多数人怕未知。很多人怕改变。我想,这才是围绕 AI 的那份恐惧更深的根子。

容我拿自家人开一会儿玩笑。总来跟我说”AI 要抢你饭碗”的,正是我上了年纪的父母。他们没受过一点计算机训练,一点都没有。他们对 AI 的全部了解,都来自网上那些”它正冲着我们的工作来了”的文章,这就是他们接触到的全部。所以他们担心,那是自然的。因为别人递到他们手里的,只有这一个版本的故事。

可他们说对了一半。AI 的这股浪潮,确实会带来改变。天翻地覆的改变。这一点你必须确信。

而改变,从来不会等谁准备好了才来。你要愿意,就管它叫物竞天择。那些去适应的人——把新工具捡起来,真正学会怎么用的人——往前走了。那些偏要死守、拒绝改变的人,被落在了后头。听着是狠,可每一次技术更迭讲的都是同一个故事。当年学了 C 的工程师,没有谁把饭碗输给了 C。输掉的,是那些拒绝去学的人。

所以不,我不怕 AI 抢我饭碗。我宁愿把那份力气,花在学会怎么把它用好上,就像我当年不得不去学 C 一样。工具一直在变;去适应它们,从来就是这份工作本身。

一旦我们不再惧怕 AI,开始动手用起这些工具,另一桩大担忧就冒出来了:所谓的”AI 废料”(AI slop),不管是在代码里、画作里,还是别的什么地方。很多人抱怨,AI 产出的东西没创意、没灵魂,或者干脆就是错的。这里我还是拿编程语言来打比方。

当我们向编译器描述一个问题(也就是写下 C 代码),它的输出是确定性的——意思是,只要知道输入,就能预知一模一样的输出。于是就有了那句老话:“垃圾进,垃圾出。“输入错了,就别指望有对的输出。我常跟别人念叨:计算机不会犯错(除非硬件出了故障,而那相对少见);软件里的 bug,通常出在人给它的那份描述上(也就是那段 C 代码)。

正因为我们太习惯跟计算机打交道时的这种确定性,我们也就指望计算机上的这位新来者——AI 模型——照样如此。问题是,AI 模型是非确定性的。你给 AI 模型一个指令,比方说让它替我们写个程序,输出就没那么容易预知了。我想,大部分抱怨都由此而来。输出就是不像我们以为它该有的样子。

在我看来,这种非确定性其实是我们要的。而大家没注意到的那一点是:它是一种选择,不是一个缺陷。你完全可以把模型摁住,让它变得几乎全然确定——把所谓的”温度”(temperature)调到零,把随机种子(seed)固定住,它每次都会还你同一个答案。可我们通常选择不这么做。那点随机,是我们故意留着没关的一个开关,因为正是它,让模型去探索,而不是鹦鹉学舌地重复同一句固定回答。

那我们为什么想要一个会去探索的模型?我先从 AI 是怎么”学”的说起。在最基本的层面上,我们现在的 AI 模型,靠的是神经网络(neural network)。神经网络的细节不展开,它大体是受了”人脑如何处理和存储信息”这件事的启发而来的——或者说,受了现代医学对大脑运作方式那点了解的启发,而那点了解,其实远谈不上完整。我们的 AI 生来就是为了模仿人的智能,所以才有 AI 这个词:人工智能(artificial intelligence)。

人的”训练”,是被我们一生的经历塑造出来的。我们用感官去采集身边世界的信息(训练数据),然后大脑去处理这一堆采集,把它消化、提炼成我们的理解(训练过程)。AI 模型的训练,在很高的层面上,走的是一个相似的过程。再往下说一层:人也好,AI 模型也好,都靠反馈来强化自己的学习。对模型来说,这甚至还有个名字:RLHF,即”基于人类反馈的强化学习”(reinforcement learning from human feedback),它是模型在最初训练之后被进一步塑形的一大关键。

从这个意义上讲,一个 AI 编程智能体,更像是一位见多识广的软件工程师,而不像一台编译器。当我们让一个 AI 模型去解决一个问题,我们并不知道它会怎么解,但它会解出来,用它自己的方式。就像人一样,我们都会犯错。有时想出对的答案,有时想出错的,无论是人还是 AI。如果我们不把 AI 当成一位无所不知的神,而是当成一个知识有限、只能凭手头这点知识作答的存在,那我们在评判 AI 的产出时,就会宽容许多。

那我们又该怎么保证 AI 的产出尽可能地接近准确?第一步,为这份活儿选对模型(模型评估与选型)。第二步,把我们的意图讲得清清楚楚(提示词与上下文工程)。等第一轮产出到手,我们审阅它,必要时打回去返工(一套”人在环中”的审阅循环)。这三样,我搭 MoVox 时都用过。让我拿配音那部分做个具体的例子。

选模型这一步,我不想凭直觉拍脑袋,于是在另一个分支上,我搭了个小小的 A/B 对比台:把同一句话,喂给好几个文本转语音(TTS)模型——Qwen-TTS、MeloTTS、CosyVoice3,还有另外几个——然后一句挨一句地听,给每一个结果打分。它们没一个是完美的,一个都没有。但就我们所需的效果而言,Qwen-TTS 得分最高,于是 MoVox 就跑在它上头。用大白话说,这就是模型评估与选型。

不过,就算是冠军也会翻车。Qwen-TTS 偶尔会卡进一个循环里——通常是碰上很短的一句话——然后吐出一段乱糟糟的音频。我大可以坐着把每个文件都听一遍去逮它们,可那不成规模。于是我写了个审查智能体,让它在自己的进程里跑着,就盯着输出目录。每落下一段新音频,它就拿这段音频的时长,去比对这句话有多少个字。要是一段音频相对它要说的内容长得离谱,那就是循环的特征;于是这个智能体就把那个文件挪进一个审查目录,留给我稍后来查。生成照跑,审查照跑,谁也不用等谁。这就是那套”人在环中”的循环:我不指望模型完美无缺,我料定它会出岔子,所以我搭了个东西专门去接住这些岔子。(我是怎么给这些模型打分的,还有那个审查智能体一直在逮到些什么,这两样往后各自都值得写一篇。)

至于作画,我不是艺术家,所以我不会去争论 AI 画出来的东西到底有没有创意。同样,这在讨论范围之外。我只知道,人也一样,既产出杰作,也产出垃圾。

那让我把这两半合到一处,回到我最开头的地方。

AI 是废料吗?可以是。你把一个模型指向一句敷衍的提示词,抓过它随手扔回来的第一个东西,连看都不看第二眼就发出去——那当然,你会得到废料。可那不是工具的错。那是垃圾进、垃圾出,是我们从写下第一行代码起就一直遵守的那条老规矩。拉低标准的不是工具,是人。

另一条路,是我一直和 MoVox 一起在走的那条。为这份活儿选对模型。把心里想的,清清楚楚地说出来。审阅回来的东西,逮住那些没做好的地方,再打一个来回。你要像调度一位有才华、偶尔也马虎的合作者那样去调度它——因为比起任何一台编译器,它离”这个”要近得多。这么做,从另一头出来的东西,就不是废料,是手艺。

这就是我全部的立场,两半都在这儿了。别怕这件工具:它是工程师们走了大半个世纪的这条路上的下一步,而去适应下一件工具,从来就是这份工作的真谛。也别小看它做出来的东西:那份品味、那份判断、这一路上千百次细小的修正——手艺一向就活在那里,如今依然。工具没有取代讲故事的人的位置。它把一整间工作室,交到了一个人手上——单单一个人,就足以撑起全局。

所以不。不是流水线废料,而是手艺。