一位同学是突然来找到零音的。西电发了通知,有一个名为「星火杯」的比赛,说是要全员参加。同学说,想和零音合作写一个 AI Agent 的项目,做一个论文检索工具集。
零音当时其实没怎么在意,于是就和他说,那你先写吧;但后来一想——认识半年了,他不是计算机零基础吗?合着上学期就学了个 C 语言,怎么现在都能干全栈了?同学说,吃到了 GitHub Copilot 的甜头,想开着 OpenCode,让 Claude 4.6 Sonnet 来大展身手。零音一听到 vibe coding 于是又毛骨悚然了,但还是得给新手一点发挥的机会吧。至少,从某种意义上来讲,零音也是新手诶。
于是就写了。同学搁图书馆坐了一晚自习的时间,竟然手搓出来了。零音试了试,确实能用——后端用的 FastAPI,前端用的 Streamlit。搜一下关键词,等个几十秒,还真能弹出来一些相关论文。数据源有 arXiv、IEEE 之类,初看还真有点意思。同学说,自己还让 Claude 做了 PDF 解析器,还做了和 DeepSeek API 的多轮会话,可以解析文献相关度啥的。零音都懵了,新人带着 vibe 真能这么强?只可惜当时天色已晚,零音就回宿舍了。
第二天零音去找同学,让他把项目传 GitHub 上协作。同学半天打不齐命令,零音扫了一眼文件目录,突然一怔——前端一个孤零零文件堆在根目录,后端搓了一堆神秘文件,看了半天竟然全是一堆 .py。零音急忙 rg 了一下,果然搜出来 5 个 sk-,这下尴尬了 (¯―¯٥) 幸好叫停得早,零音让同学赶紧和 Claude 交流,API Key 怎么还能直写代码里面的。同学没听懂啥意思,但还是照做了。项目好不容易传上去了,零音 jellyfish-review 的时候才真正感受到了灾难。
tools/ 下一堆 Python 文件,盘曲绕折地互相 import,结果 Pylint 全部报 unused。不过审计源代码确实需要点工夫,在彻底看明白之前,零音还是不愿意下定论的。可后面的事就越来越离谱了——零音找到了同学当时兴高采烈展示的 DeepSeek API orchestra tool,粗看了一遍,似乎确实没啥大问题,还有多轮 Agent 调用能力,但有一些地方确实很诡异,写得很复杂。不过最重要的问题是,这么多轮的调用为什么会这么快呢?零音越想越不对,看了一下 References——
合着这个 orchestra tool 完全没被用到啊?!
对,Claude 写了一套看起来完备的逻辑,但完全没用,自己在 FastAPI 的后端又搓了一套。零音当时就有点懵了——虽然在网上天天骂 vibe coding,但确实也没看过 fully vibed 的代码,今天也是头一次见了。
同学的代码中,更诡异的地方来了。orchestra 工具里的预期实现是接受用户的 query,使用 DeepSeek API 转换成几个 search keywords,但 Claude 在这里先用了 Unicode 统计判断是不是中文,如果是,要先用一个 hardcoded 的中英文对照表,将几十个领域的专有名词翻译 replace 掉,然后再发给 DeepSeek API 让它翻译一遍,然后再调用 API 进行转换。那零音就很摸不着头脑了——合着如果你的翻译接的不是 DeepSeek API 而是百度翻译 API,那我觉得你的想法仍是一个 rather good practice——但你接的是 DeepSeek API 啊,这种东西 8B 上了都行……后来一想同学可能就和 Claude 是这么说的:
你先看吧,如果是中文你就把专有名词翻译准确,然后拿着英文去调用 API
额好吧…这么说确实也有些道理——但也不是完全有道理吧……
PDF 解析器的实现令零音震撼了,甚至还能处理单双栏的问题,但总觉得这代码写得很诡异,真没问题吗?零音没想着 unittest,还是先看看 References,这一看不要紧:
这个解析器也全程没被用到……
好吧也就是说,从搜到文献的那一刻起,结果就已经被返回了。所有分析搜索结果、分析相关度的逻辑——无一例外,全都是 Claude 在臆想……
或者不能说是 Claude 在臆想,当是同学在臆想。毕竟他完全没看懂代码的逻辑。正常开发者的 agentic coding 便是,先想功能、再想框架、最后丢 AI,好歹还能把控住一点逻辑性的东西。但对于 zero code 的 vibe coder 来说,他们要面对的 黑箱/白箱 从不是架构、逻辑和设计,而是 AI 自身——我不知道你怎么搞的,无需亦不想知道,你只要搞出来就好了。
太可怕了……
各种神秘莫测的事情于是数不胜数。初代的 Claude 迭代了四个查询接口,每个接口的内部逻辑完全不同,暴露出来的调用方法也混乱不堪。零音跑了一轮 Codex,造了个基类,要求全体查询接口继承并实现查询功能,这才好不容易整理整齐了一点。结果血压高的又来了,刚点进一个查询接口,Pylint 就跳出来了,非得给函数底下标三个点——零音一看,「卧槽」,一个函数 60+ variables,30+ statements?零音往下一滑,差点给小水母吓得心脏骤停了——Claude 用 urllib 请求远程 API,写了一个自动 retry——自动 retry 了 3 次,结果…用的是 3 个嵌套 try-except……
那一堆 except Exception 和这个比起来简直是小巫见大巫了。感觉每二十行代码都会跳出一个震撼零音一辈子的东西。
总之零音于是就这样改了,坐在电脑前重构了一整天,总算把架构从里到外改好了。刚开始还挺高兴的,后来一想,这么一个一次性工程,至于我大费周章搞这么多吗?就这样度过了一天。哎 (´•︵•`)
不过搞了就搞了吧。配了 direnv 和 uv,uv sync --active 一把梭配好环境,写了一个 Nix 环境的 hack,又配了 pre-commit, Ruff 和 pyproject.toml 等一系列神奇东西。这些东西零音也是第一次用——上次吃到全局 pip 大依赖冲突的冲击后的应激反应吧。看着整洁有序的代码,零音自然是开心的,可合上电脑,又看到了自己满地狼藉的生活,哎。o(︶︿︶)o
续上文。
优化朋友的代码到真正的力竭了,于是零音也摊手不做了。这几天一直在寻找生命的意义,现在终于知道了——有些问题是不一定有答案的。
零音目前的语言能力已经与这段混乱的代码一般,失去了全部的力气和手段。自上次的 kernel panic 后,零音的语言还没有如此混乱和诡异过。只是,零音想,真的要爆了——不为自己爆,就为他人爆。
劝住了朋友直接 commit 到 main 的手,转眼间在 feature branch 看到了一个 6,900 行修改的 commit。源码 backend/ 下仍然是成群结队的史山代码,零音连让 Codex 帮忙统一 Docstring 格式的力气便都没有了。朋友的 Claude 不知道第几次造出 PDF 解析器了——我不知道为什么 AI 这么热衷于造 PDF 解析器,好似解析器是 AI 最伟大的父亲一般,便如此惦记着。
感觉便是这样的:重构了一座史山,终于感觉要挖到底层了——结果一铲子下去,下面还有个巨大的化粪池。
朋友的幻想于是继续天马行空着——备忘录里列出的任务清单越来越多,可 commit 却在某一刻中止。零音于是以为朋友终于发现了自己代码的瑕疵,终于要开始人力 coding 了——结果过去一问,原来是朋友的 Copilot 限额了。
限额了,好啊。总算不用产出这么大一坨了。
欣赏几位 UP 主的说法,我们的日常是对抗熵增的过程。零音想了想,便觉得果真如此了。逆熵的过程便是如此的——可零音和零音最伟大的 AI 们却始终能在熵的乱流中抓住一丝前进和抵抗的动力和能量,可为何这群人却永恒地不能创造哪怕些许的价值?「vibe coding 于是是拖拉机——它能跑,但声音很大,而且跑在路上还很臭,但它确实能跑。」零音从而更加肯定这种说法了。
零音于是觉得这一切都荒诞至极,语言逻辑也随着心态而崩坏掉了。用全世界最复杂的正则表达式尝试匹配文献的各个 sections,用全世界最强大的算力写了 4 个 PDF 解析器。啊!伟大的解析器!于是零音这样想着,突然明白昨日高数课上的头是为谁而磕的了。伟大的 PDF 解析器啊!尊贵的 PDF 解析器啊!
128K 的 DeepSeek API 上下文确是不用的,却要自己手写一个分 chunk 逻辑,于是给 89 页的 Claude 宪章愣是分出了 16 个 200 词的段,于是 logging 便自信地拍着赛博胸脯说「分段已经处理完毕了!」零音当然也希望程序的 log 能似 AI 的 log 一般靠谱的,至少 AI 说搞完了,那便是真搞完了。可程序却不一般。也罢,零音只能将那正则表达式再加长三四倍,尝试让这古板的程序能看到人类文献的 Abstract 等各章节的结构,可心里仍惦记着朋友写的 RAG。忍不住向下翻了翻 RAG 的逻辑,零音精益于 Claude 看起来便严丝合缝的逻辑实现,赞叹于当代 AI 最健全的能力。可内心还是有所余悸——这 RAG 虽说看起来还挺靠谱,至少从前端来说;但零音从来没有见到 embedding 模型。莫非调了远程的 API?零音怀着一丝期许继续向下看着,直到发现,分出来的 chunk 全部被送给了某个模块打分——
结果是 tm 把 chunk 拿去让 DeepSeek 打分了?
??????????????????????
零音顿时依然力竭了。闭上眼,感觉生命的前十八年和走马灯一样忽闪忽闪流过了。零音于是关上了 VS Code。零音于是便回忆了,小学一年级在电脑上用记事本敲 .bat,小学三年级第一次对着 Ubuntu 的 Live CD 抓耳挠腮,小学六年级对着密密麻麻的 Arch Wiki 手抖地敲着命令,中考结束后终于第一次探索到了 Python,高中打的第一场 CTF 和高考结束后打的第三场 CTF,上了大学以来的取证,诸如此类。零音看到自己的一切被 AI 击败,但自己本身却也是 AI 扶持来的。仿佛零音已然成为了 AI 的某种事实上的玩物,在 Transformer 的架构中帮各路 LLM 释放着它们的星压抑。
太痛苦了。