Rickee's Corner
Published on

Vibe Coding 基本技术

Authors
  • avatar
    Name
    RickeeX
    Twitter

近期 Vibe Coding 的一些感想:

明确需求

冯诺伊曼曾经对计算机的反对者说:

你坚持认为机器有做不到的事情。如果你能明确告诉我机器做不到的是什么,那么我总能制造出一种机器,它就做那件事!

js
const greeting = 'I can do just that!'
function sayHello() {
  console.log(greeting)
}
sayHello()

在 1948 年,这还只是基于图灵完备性的逻辑思辨,有大量的事情逻辑上可行但是实际上不可行。但是 AI Vibe Coding 几乎将问题颠倒了过来:有大量的问题在实际上可行,但我们(外行人)在逻辑上无法清楚表达。

其实根据需求写代码从来都不难,代码本就可以通过某种自然语言去尽量无歧义地表达。在 pre-LLM 的人肉编程时代,同样可以说:「定义一个变量叫 i,每次运行下列代码的同时将 i 赋值为 i+1 …」只不过随着 LLM 的进步,自然语言的无歧义性变得越来越不重要。以前一句话就是一行代码,现在一句话就是一个小模块,甚至一句话就是一个顶层架构设计。

要理解 Vibe Coding 为我们带来了什么,问题的关键在于:为什么一句话就是一个模块?输入和输出的信息量是不对等的,也就是说 AI 不只在做同义转换,很大程度上它还在「猜」我们想要的是什么。这种「猜」又可以分为以下几种:

  1. 自然语言不可避免的语义模糊性,例如把 粉红色 转化为 EC4899。我们大脑里有一个明确的目标,知道自己要的是哪种粉红色,只是出于节能考虑不会精确表达。

  2. 自然语言包含的因果推断,例如 创建一个 .db 文件来接纳数据 ,自然也就包含了 构建相关的接口和组件

  3. 具体的工具思维。拿到 构建组件 的任务之后,能够判断是手搓代码实现,还是调用某个工具库。收到信息不充分的 error 之后,知道根据经验这大概率是什么情况,该怎么解决。这是目前的 AI 重点训练的部分,也是 Vibe Coding 之所以能爆火,能让「AI 替代初级人类程序员」的地方。初级程序员大部份的学习都耗费在了这里。

  4. 顶层架构和后端逻辑。这是人类也不容易想明白的地方,因为被海量的细节淹没的话,失去整体意识是自然而然的。因为 AI 读过很多代码,所以它可以猜出「连你自己都说不明白的架构实现」,但它的思维方式目前也是相当局部的,目前来说猜的不好。

  5. 产品需求。你的逻辑是为什么需求服务的?你这个软件为什么而存在,是为了解决什么痛点?如何解决?这个只有你自己知道,而 AI 没有办法帮你提取出你大脑深处那个想法。在一个 AI-free 的记事本里写一写、列一列笔记是十分必要的。只有这个逻辑链搞清楚了,才不会做到一半忘了自己在做什么。(但是,AI 可以一定程度上帮助你做市场调研,即「相比于其他产品 / 其他产品的组合,我这个产品有什么独特的价值?」)

    对于第 4 点和第 5 点的这两个方向上,我不看好 AI 的发展。AI 的训练逻辑注定了它生产的是「平均逻辑」和「平均想法」,而好的产品,特别是在这个编程门槛降低到零的时代,一定是要在 idea 上做一个离群点。这两点是必然冲突的。

  6. 审美。这是一个比较玄学的领域;AI 的前端能力有目共睹,但是对于前端的调试能力又十分拉跨。毕竟对美的感受是非常私人且多变的东西,就算 AI 可以按照你的指令改变任何内容,我们也很难做出认知之外的审美。很可能依旧是在屎上雕花,只不过花随心动而已——说到底还是屎。这再一次印证了审美是 AI 时代无法代劳的终极课题。

阅读代码的能力

这也是一个经常被忽略的问题。很多刚上手 vibe coding 的人都会觉得我不需要管任何代码实现,只需要不断重申自己的需求就好了。但是 vibe coding 之间亦有差距。对于一个懂代码和不懂代码的人来说,vibe coding 就是祈祷和命令之间的区别,一个合格的指挥官不可能坐在家里祈祷通过部下的忠诚和自觉来百战百胜——否则要他做什么呢?

我感觉大家很可能低估了能看懂代码对 vibe coding 能力的提升有多大,如果一个小小的需求,一个细节的调整都要通过AI来帮你实现,那么 AI 就不仅是代替长途奔袭的汽车,还是放在家里的电动轮椅——就连你从厨房去客厅都要它代劳,这种感觉是不可能好的。一方面,在越小的事情上 AI 会显得越笨重;另一方面,当 AI 成了你和你的项目的唯一接口时,这种失能感会慢慢的累积,如果AI突然抽风,那挫败感也会无限的放大。


基本想法(in progress)

  1. 我的出发点是,我觉得如果完全依赖 LLM 来做语义分析,会严重缺乏一致性。可能这次是这个结果,下次又是那个结果。传递性也难以保证。可能 A 和 B 的相关系数高,B 和 C 也高,却判定 A 和 C 几乎没有关联。

    在这个 LLM 盛行的时代,我觉得回归确定性的,llm-free 的算法,其实很有意思。

  2. 不同的文章,在我看来,就像是高维空间中的各种 view 镶嵌在不同的 event 的点阵图中。可能立场左 / 右是一个(或者 100 个)维度,经济问题 / 政治问题 / 环境问题又是一个维度。

  3. 我们人的大脑习惯性地以发散的视角看问题,我猜想语义分析可以帮助我们顺藤摸瓜,发现两个表面本无关联的 views,由第三个 view 相连接;或者由第三个 event 相连接。这种在混乱的世界中找规律的 idea,我是特别喜欢的。

  4. 我做这个 project 的另一个初衷就是效率。如果只看一个网站吧,可能陷入 “喂给你什么你就看什么” 的境地;看多个网站吧,又有点太多了,重复性高。从这两点上看,一个好的解决方案,很可能是「综合多个网站的数据,对于事实性内容这种有唯一现实模板的东西,只保留一份就好。」这个保留一份的动作,很适合由 LLM 来完成。

  5. 但是看太多新闻也有坏处,那就是不知道自己在看什么。好比那些「早上 60 秒了解世界」的 RSS,喂给你 20-30 个一句话新闻,你看了。然后呢?它们成了孤立的记忆点,没有整合进你的知识图谱中。你可能最多感叹一下,「哦,这事情发展到这个地步了」,也就是顺着时间轴串联一下,总的来说还是很难和整个「世界模型」联系起来,或者说要联系的话,也要日积月累。这种「左眼进 右眼出 不过脑子」的看法,是我认为现在新闻阅读的一大痛点。同样的理论适用于「兴之所至去啃几篇深度访谈」。是深度了,但它们还是散点的记忆。(这可能是第 3 点的一个更充分的解释)