最近在做大模型训练的数据集整理时,需要处理 1400 多个原始文件,按某种规则转成 Alpaca 格式。文件少的话直接用大模型处理就行,但文件太多了,显然行不通,原因有三:
- Token 消耗过多的问题;
- 耗时太久;
- 由于不确定这类数据集到底有没有效果,总得先摸索看看,什么样的数据集对模型结果是有益的,才有必要做出大投入(精力、钱和时间)的决定。
所以采用了让 Claude4 用 Python 代码生成的思路。
- dataset-generator.py —— 处理一个小文件(1/1400)。
- process_desc_files.sh —— 调用 py 处理所有文件。
两个文件都是 Claude4 生成的,有模有样。真是 “生成 1 分钟,调试半小时”。
主要的体验和问题是:
- AI 生成的大量代码,程序员是不会去 review 的。因为量太大,实现一个小功能就动辄几百行,没空看、没耐心看;再加上日渐形成的 “懒惰和依赖”,就更不会去苛刻地 review 了。即便 review,在一些可改可不改的地方,往往选择 “迎合它”。只要能跑通就万事大吉,可实际上里面可能蕴含着致命风险。
- 对 dataset-generator.py 生成的内容进行若干严肃、必要的调整时,担心 AI 重新生成或修改会导致已验证的部分损坏,或是一次搞不定。反正用 vim 改一下也很快,于是就切入了手工维护模式。手工维护多了之后,似乎就回不去了,只能在 “AI 主宰、设计的框架(说不准是不是陷阱?)里小修小改”。这会让 “有点责任心” 的人陷入自我创建的包袱里。那为什么不继续用 AI 持续改动呢?反正能跑通就行,里面的 “炸弹”“雷区” 不关我的事(最好在本人“跑路”后爆炸)。
- process_desc_files.sh 的生成用了不到 1 分钟,debug 却花了我 20 多分钟。只要一跑就退出,Claude 好的地方是确实在一些代码上吸收了 “全宇宙精华”,比如:它设置了一个 trap function EXIT,在程序退出时进行 cleanup,还善用大量图标,在 BASH 输出成功或报错时显示一些小图标,体验确实不错。但这些复杂的 “屎上雕花” 导致我还要花时间跟踪 cleanup 是从哪来的。这个我用一次就会扔掉的脚本,其实是我自己懒惰了 —— 本来可能 5 分钟用 10 行代码就能写好,却贪图了 Claude 一分钟生成的快感,结果浪费了半小时。
那为什么不把报错丢给 Claude 让它帮忙解决呢?关键是它没有报错啊,程序直接接收退出信号了。到现在也不知道为啥,也许有报错,但它的复杂代码 “完美地” 把报错压制了,或是转存到了文件里。我看到它提到了 error-log,但打开后是空的。此时我也不想研究为啥 error-log 没有内容了,因为已经在它的 “歪路” 上走得有点远了。这时是从零自己写,还是继续修缮一下?我觉得还可以再修修……
加上 set -x 打日志后,发现 ((current++)) 指令执行完就退出了。坦白讲,我有段时间没敲代码了,发现 bash 居然支持这种语法,在外面 CLI 上手搓试了一下,没问题啊。我的老经验告诉我,这个不可能有问题。用 “包围式” 打日志后,发现就是这个 ((current++)) 出了问题,不知为啥。不理它了,改为 current=expr $current + 1,问题解决。
当然,一执行又在另外一处 “屎上雕花” 的 FAILED_FILES++ 处出错,我只能用 vim 把所有类似的用法全改掉。
核心逻辑的错误更离谱,我在处理数据集时,AI 想当然地帮我加了大量合成数据,造成了数据污染,我在训练过程中才发现……
到这里,我的体验是:仿佛在修改一个 “不太用心” 的前同事留下的 “屎山代码”,偶尔惊叹于 “屎上雕花” 处的精美,同时又疑惑为什么核心逻辑错得如此离谱 ——“AI 听不懂需求吗?”
即便在一些小的用法上,因为每位程序员有自己的习惯,我用 expr 做 + 1 用了 20 年,从来没错过。但这位 “大牛” Claude 给我引入了大量新鲜用法,关键是它遵循 “三不原则”:不主动、不拒绝、不负责。把问题丢给我来兜底,这条路走下去,恐怕很危险。
当然,也有一些好的思路值得借鉴,比如它吸收了不少全宇宙的编程技巧:设置 trap 信号、退出时 cleanup,这些东西我自己弄可能不会搞太细,还得去查信号量,但我也不确定它写的 trap 能否对所有信号进行合适处理,也没精力深究。它放在那里我也不知道是不是 100% 没问题。还有输出小图标这事,我不确定是不是在所有 Terminal 上都能正常显示,会不会乱码,这些我也没精力折腾,反正现在是 OK 的,以后出了事,以后再说!
我感觉这种 “氛围编程”,似乎不是我期待的样子。感受是:
工具类、非生产业务,最好是即用即弃且结果可验证的,这种情况可以用 AI 生成的代码来搞定。比如:我需要把 1500 个小 json 合成一个大 json,生成的代码直接跑,没报错,打开一看大体上 OK,就过了。
我也知道提示词之类的还可以进一步优化,但我真的开始有点担心,“氛围编程” 下是否埋下了质量的风险?
这么多代码,哪有空 review 啊!
能跑就行了,不用折腾,还有一堆活儿等着我呢!
公司大佬都在用 AI 生成,我等小弟为啥还要手写,手写又不加钱!
最后出了事 AI 背锅啊,实在不行我跑路……
所以有时候在想,AI 编程的 “出路” 是什么?
或者说,AI 编程要真正落地到企业业务场景里,还差什么?
我想,答案就在大学学的软件工程课程里。
至今,软件工程依旧是大学计算机学科的重要体系教学。
时代不断发展,可软件工程依然屹立不倒。
AI 时代,各行各业信息化的发展仿佛坐上了火箭。但是,万变不离其宗,软件工程依然是基座,是中流砥柱,而 AI 是加持,是助力,但绝不会取代软件工程。