高热度讨论(1444 分,839 条),论证好的 prompt 工程胜过盲目升级模型。对优化 LLM 应用效果有直接指导价值。
有时批改学生作业,我会看到这样的答案:
使用欧拉角表示旋转,可能存在以下缺点:
万向节死锁: 在某些位置,姿态可能会到达一个奇异点,导致它无法在坐标值不发生突变的情况下连续旋转。
数值不稳定: 使用欧拉角可能会降低数值计算的精度,频繁使用时,误差可能不断累积,最终造成结果不准确。
坐标不唯一: 欧拉角的另一个缺点是,某些旋转无法通过欧拉角得到唯一表示,尤其是在奇异点处。
欧拉角的这些缺点使其难以应用于机器人领域。值得注意的是,真正使用欧拉角实现机器人系统的情况非常少。人们通常会改用旋转矩阵或四元数,从而更高效地表示旋转。
[这不是真实的学生答案,而是我根据许多答案的风格和内容,手工拼出来的一份综合样本]
这样的答案,你只需要读上一两份,就能立刻看出是怎么回事:学生直接复制粘贴了大型语言模型的输出,最有可能是 ChatGPT。它们无一例外地冗长、絮絮叨叨,而且乏味地执着于「项目符号加粗体」这种格式。行文水平很少能超过六年级读书报告,还会不断复述 prompt,大概是为了证明自己没有跑题。
作为教师,每次读到这种内容,我都很难过。ChatGPT 的修辞风格足够鲜明,让我能够辨认出来;但又没有鲜明到足以把它提交给学术诚信委员会。即使我真这么做了,我也不确定,为了稍微提高一点课堂诚信度,花上几个小时争论和裁决这件事是否值得。
我写这篇文章,是想向所有人发出恳求:不只是我的学生,还包括写博客的人、在 Reddit 留言的人、勉强接收论文的作者,以及 Reviewer 2。不要让计算机替你写作!我这么说,不是出于学术诚信,也不是为了公平精神。我这么说,是因为我相信,你自己的原创想法,远比大型语言模型把它们加工之后得到的任何东西更有趣、更有意义,也更有价值。在本文接下来的部分,我会简要分析人们为何如此频繁地使用大型语言模型写作,并论证为什么在创意表达中,没有任何充分的理由使用它。
我自己不怎么使用生成式模型,但我认识许多严重依赖它们的人。根据我的亲身观察,人们之所以让这类模型替自己说话,主要有以下几个原因。
这件事不重要。 我认为,这种想法在课堂环境中最为常见。学生普遍认为,课程就是一连串必须跨越的障碍;等他们跑完这条障碍赛道,就会获得一纸学位,证明自己完成了这些作业。我认为,这也是论文评审中越来越多人使用语言模型的原因。许多研究人员认为,评审只是本就繁重的本职工作之外的一项附带任务;有些人觉得自己抽不出时间认真写一份评审意见,于是把这项工作交给语言模型。
模型产出的东西更好。 我的一些同行认为,大型语言模型写出来的内容,就是比他们自己写得好。根据我的非正式观察,这种现象似乎在英语非母语者中更为常见。我也经常在初学编程的人身上看到这种情况:在他们看来,编程就是一套需要记住并照念出来的神秘咒语。我认为,这也是某些学术写作使用语言模型的原因。它与前面论文评审的情况不同:这里的作者大概相信自己的论文很重要,只是不相信自己能写出足够好的文字。
利益攸关。 最后这个原因在个人身上最为少见,却可能制造了互联网上绝大多数的语言污染。这类利益攸关的写作包括网络水军伪造民意、客服聊天机器人,以及网上烘焙食谱开头那些没完没了的废话。这些文字从来就不是写给人看的,也完全不包含任何作者意图。本文主要关注普通个人的动机,因此不会过多讨论这种情况;不过为了完整起见,我还是把它列了出来。
我认为,人类写作的主要目的应该是交流原创想法。需要说明的是,我并不认为这些想法必须多么特别,也不必具有学术性。你的假期、你的狗和你最喜欢的颜色,全都可以写。但这些想法应该属于你自己:浪费笔墨去传达别人的想法,毫无意义。
从这个角度看,使用语言模型写作甚至比抄袭更糟。复制别人的文字时,一个人虽然没有传达自己的原创想法,但至少传达的还是某个人类的想法。而语言模型从构造上就不具备自己的原创思想;发布它的输出,不过是一场毫无意义的练习。
现在,有了这个定义,我们可以回过头来,再次审视那些使用语言模型的理由。
在我看来,属于「这件事不重要」这一类的模型输出,又可以分成两种:一种是真的不重要,另一种其实很重要。
先说那些真的不重要的内容。当有人在 Reddit 帖子下面留下一段由计算机生成的原文摘要时,我真心觉得,如果他根本没有这么做,世界上的每个人都会过得更好。要么那篇文章空洞到了摘要就能提供它的全部价值——既然如此,它根本不值得别人专门评论;要么它需要一个真正的人认真阅读才能理解——既然如此,摘要就毫无意义。归根结底,写这种评论是在浪费所有人的时间。所有一次性的模型用途,都是如此。
与此同时,还有些用途表面上看起来无关紧要,实际却并非如此——也就是「其实很重要」的那一类。我希望课堂写作练习的目的,不是生产一件文字制品,而是迫使学生思考;语言模型能产出前者,却不能带来后者。对于论文评审者来说,情况更加糟糕:一份敷衍了事的评审意见,除了给原作者制造一些无意义的额外工作,并向编辑重复他们早就知道的事情之外,几乎不会产生任何价值。
下面来说相反的情况:我的一些同行认为,生成式模型的输出比自己的作品更好。我最常在职业沟通中看到这种用法,通常是用来生产套话,或者调整原始 prompt 的语气。每一次,模型都会模糊原本的意思,并在最简单的想法外面裹上一层又一层多余的废话。运气好的话,它至少不会写错;但多数时候,模型会彻底编造原文中的关键细节,最终产出完全无法理解的东西。无论一个真实的人写得多差,我至少可以——希望如此?——相信他心里有某种理解想要分享;换成语言模型,就没有这种保证了。
对于程序员,我稍微更能理解一些,但长期后果也更加阴险。你或许还记得 Peter Naur 的《Programming as Theory Building》:编写一个足够复杂的程序,不仅需要代码这一制品——也就是程序源代码——还需要一套关于程序的理论,而个人必须充分理解代码背后的逻辑结构。Vibe coding,也就是几乎完全依靠语言模型生成来编写程序,只会制造出一个背后没有任何理论的制品。结果很简单:没有理论,生成出来的代码实际上就毫无用处。用 Naur 的话说,这样的程序已经死了;而在我们的情形中,它甚至一出生就是死胎。互联网上几乎所有通过 vibe coding 写出来的应用都深陷安全问题,这一点丝毫不令人意外;看看那个泄露 OpenAI key 的 vibe-coded 食谱应用就知道了。每当一个人通过 prompt 生成代码,他都会创造出一个新的死胎程序;vibe coding,就是把这些尸体缝合成弗兰肯斯坦怪物的艺术。
为了做个实验,我把这篇文章的中心论点复制到 Google Gemini 中,并通过 prompt 让它续写整篇文章。下面折叠区域中是它的完整回答。
以下是一篇由我撰写的短文的引言。请续写两个简短段落,完成这篇文章。
我写这篇文章,是想向所有人发出恳求:不只是我的学生,还包括写博客的人、在 Reddit 留言的人、勉强接收论文的作者,以及 Reviewer 2。不要让计算机替你写作!我这么说,不是出于学术诚信,也不是为了公平精神。我这么说,是因为我相信,你自己的原创想法,远比大型语言模型把它们加工之后得到的任何东西更有趣、更有意义,也更有价值。在本文接下来的部分,我会简要分析人们为何如此频繁地使用大型语言模型写作,并论证为什么在创意表达中,没有任何充分的理由使用它。
思考为什么这么多人开始转向大型语言模型写作,是一件很有意思的事。也许这源于对效率的追求,希望不必投入逐句斟酌的精力,就能快速生成文字。在这个往往把速度放在首位的世界里,即时产出的诱惑可能十分强烈。对于面临截止日期的学生,或需要内容的博客作者来说,走捷径完成写作的诱惑或许令人难以抵挡。除此之外,也可能存在一种不自信:觉得自己的写作「不够好」,而语言模型不知怎么就能将其提升。对于那些要面对学术评审中常见的苛刻批评,或网络评论里时常出现的尖锐言辞的人来说,这一点可能尤其明显。
然而,这种对人工智能的依赖,从根本上误解了创意表达的本质。你个人的声音,由你独特的经历、视角,甚至为表达一个想法而经历的挣扎塑造而成;正是这种声音,让你的文字能够引起共鸣。语言模型在海量既有文本数据上训练,只能生成拼贴之物,只能映照那些已经有人说过的话。它缺少真正洞见的火花,也缺少那种与一个概念反复较量、直至将其化为己有之后,才会出现的意外妙语。把自己的声音交给算法,就是在削弱建立真正连接的可能,也是在削弱向世界传达自己原创思想时,那种深刻的满足感。
说白了,生成出来的文字很无聊。在这份长达 234 词的输出中,模型只不过是冗长地复述了一遍同一个 prompt。从语气上说,它给出的只有空泛而无意义的概论;就算它那硕大无朋的词汇量能够挣到一点分数,也会因为使用时毫无品位而立刻丢个精光。例如,看看下面这句话:
也许这源于对效率的追求,希望不必投入逐句斟酌的精力,就能快速生成文字。
Gemini 用一个庞大的句子,表达了一个微小的想法。我可以轻而易举地砍掉其中三分之二,同时不损失任何实质内容:
也许这源于对效率的追求。
再稍微用点心,我还可以继续精简:
也许人们这么做,是为了效率。
简而言之,语言模型非常擅长制造废话,除此之外就不怎么擅长了。
现在回到我的核心观点:任何形式的生成式模型创作输出——无论是图像、文字、音频还是视频——我都从未见过哪一个比原始 prompt 更值得一看。最终输出的信息量比 prompt 更少,其创作过程也完全没有人类的构想。创作的全部意义,就在于分享一个人自己的经历——如果根本没有经历可以分享,又何必费这个劲?如果不值得写,就不值得读。