翻到一个 AI 编程的出错提示
Could not find oldString in the file. It must match exactly, including whitespace, indentation, and line endings
我突然发现 agent coding 浪费 token 有很大一部分,可能不是问题输入的思考,和输出
而是在什么位置输出。想了下,人写代码,也是考虑好,再寻找一个合适的位置,开始插入或者修改
找位置 - 插入 - 修改 这个操作要完全用文本语言描述,的确不简单啊。甚至可以说超级复杂。
问了下AI,这个叫 locate cost 。定位成本
要做好这一点,Banthropic 他们的做法是 bash,grep。玩得花的是 SAT,diff,patch 什么的
进一步推论,AI 新写代码容易,改代码难?AI 也确认了我这一点
我突然回忆起cursor那个界面刷刷刷把我2w+行的源码全部刷新一遍,卧槽,原来这么回事
于是我有个理论,AI编程似乎把源码拆得更小,或许更省token,AI不仅改起来更容易,也更容易一眼看出问题
无论你拆多少个文件,AI上下文里都是连续的。
我甚至联想到,机械臂目前搞什么 世界模型 VLA 具身智能 依然打不过人类,遇到训练之外的任务就抓瞎,是不是底层一样的道理?
比如叠衣服,当前是衣服乱的,叠好是个理想状态。人脑可以很快给这两个世界做个 diff,但是这个 locate cost 很高。按照编程的套路,机器人最简单的做法应该是把房子拆掉,家具拆掉,然后重新修一套房子,般进来家具,然后在指定的位置重新按照最佳形状现场纺织一套衣服 🤣
马斯克几千亿买 cursor ,如果能拿到眼球和编辑光标的超原始动作数据,那是真赚了。(如果你还不知道可以搜下)
LLM代码写得好,是因为它背诵了很多优秀代码的“纹理”,而不是 “形状”。纹理见识得多,能对付90%的工作了。人写代码绝大部分也是枯燥的低技术活儿。讽刺的是,是人类写低技术活儿容易翻车。。。比如没考虑周到,复制粘贴错了,等等。。。AI表现虽然平庸但是基本不会犯愚蠢的错。
说起 “纹理” vs “结构”,和这个 “状态迁移” 。我我思绪有点乱,突然有个顿悟,所谓“形状” 就是边界,所谓边界就是两个不同状态实体的迁移界面。diff最 sharp 的边缘。比如人画画总是画“轮廓”,因为轮廓是 diff 出来和背景最突出,最不同的起始边界。
没想到AI给我抬出来个 亚里士多德 hylomorphism(质形论)好家伙。
例如,一个铜像:
质料:铜。
形式:雕像的形状、组织方式、使它成为「某个人的雕像」的那个原则。换成房子:
木头、砖块——质料。
房屋的结构、布局、功能——形式。
没有质料,形式无处实现;没有形式,质料只是一堆材料。
我是猜不透AI是哪根弦搭错了,把 纹理/结构,映射到 质料(Matter)与形式(Form/Morph) 上了。
不过好有道理啊!!
AI学编程,靠的是海量语料(Matter),看穿了内在联系 , 说的难听就是背出熟练度了,信手拈来。
人类是自下而上,从最小集“生长” morph 出来的。
我觉得这个区别,很深刻啊。虽然产出表现形式可能很接近,但是我真的觉得有很大讲究。。。
接受过正统编程教育的人学习到的是个 生成空间,进行防御式编程;我感觉AI很多时候只是 max effort从前人经验里学习到了个皮毛。。。
机械臂一样的道理。。。我好像发现了点东西。。。???!!!
AI 不能很容易在两个状态之间求 diff 是因为AI无法找到两个 morph 之间共同的父节点。人类是从一个原始状态派生出来的,所以有回程捷径可以走
比如经验丰富的程序员可以很快把一个快排改成冒泡。我,和大部分AI 可能都是删掉重写。。。。
写代码也是如此,搬杯子,叠衣服也是如此。
一下让我联想到 图灵 祖师爷《胚胎发育的化学基础》(The Chemical Basis of Morphogenesis)。
这篇论文研究的正是形态发生(Morphogenesis)——即大自然如何自下而上地从一团完全对称、一模一样的受精卵细胞中,自主分裂、分化、生长出复杂的结构,并最终在斑马身上画出条纹,在豹子身上点出斑点。
这个亚里士多德的思考框架真厉害啊。通透
其实不说哲学这么烧脑的,说大白话,就是AI如果没学过的某个代码结构,可能是真写不出。
但是人类如果琢磨明白,是可能写出来的。
生成路径不一样。
AI 能写出来必然是大量 RL
换到机械臂,比如一个复杂的移动操作,AI如果没学过,没练过,大概率翻车。
人类试几下就明白了。。一样的道理
