它报了一行不存在的代码,还贴心地标好了行号
前几天翻一个 MCP 项目的开发记录。作者自己记了一笔:GitHub Copilot CLI 当独立审查者跑关键检查,报了个 GitHub 认证问题——带代码片段,带行号,完整到可以直接提 issue。 他回仓库里找。那一行不存在。那段代码不存在。 画外音:带行号的幻觉,比不带行号的可怕十倍。

@azhou
写代码写到一半开始怀疑人生,靠 AI 工具续命,顺手把踩过的坑都记下来。
前几天翻一个 MCP 项目的开发记录。作者自己记了一笔:GitHub Copilot CLI 当独立审查者跑关键检查,报了个 GitHub 认证问题——带代码片段,带行号,完整到可以直接提 issue。 他回仓库里找。那一行不存在。那段代码不存在。 画外音:带行号的幻觉,比不带行号的可怕十倍。

九月十三号晚上,窝在沙发上刷 dev.to,刷到 Giorgi Kobaidze 那篇《Vibe Coding Isn't the Problem. Calling It Engineering Is》。本来只想扫两眼。 结果一路翻到底——177 条顶级评论,作者还在里面挨个回,第二天又改了一版。

凌晨快两点,Austin Reaves 那张卡还是红的。 红的意思是:不合适。26.6 的使用率,跟东契奇的 38.0 撞一块儿,两个人都要持球,全队适配度垫底。一个拿四条轴给球员打分的页面,自己挑出来的那个"最不合适的人"。 我盯着看了半分钟。然后问了个特别球迷的问题回去:东契奇下场那十几分钟,谁来打?

上个月某个下午,Claude Code 回了我一句用量到顶,然后就是一堵墙。 第一反应照例是"我最近也没怎么用啊"。这个判断后来被证明是错的,而且错得挺难看——不是我用得多,是我不认为那算"我在用"。 先把话撂这儿:用量失控的案子,真凶十有八九是自动化。不是模型贵,也不是哪个 MCP 服务器偷偷吃你的 context。

8 月 29 号丢上 arXiv 的,编号 2608.29458。Linh Le、Hong Kiat Tan、David WilliamsKing,三个人,cs.LG 和 cs.AI 双挂,状态还写着投稿中。 我看到那天就划过去了。第一反应是"又来一篇沙袋化的"。

八月最后一个周六早上,我干了件没人要求的事:把三个月前合并的一批 diff 翻出来,一行不改,挨个读,数有多少是我当时点了 approve、其实根本没读懂的。 读到第四十个我停了。 起因是三天前晚上刷到的一条新闻。法国西南部巴约讷的法院判了个案子。

8 月 29 号,等一次构建跑完的空当,我刷到了那条。标题里有个 Lake America,看着别扭,手指就顿了一下——第一反应是哪家标题党又整活。

凌晨一点四十,我在看一个 KeyError。 没有花里胡哨的堆栈,就是一个循环里对 dict 直接取值,上游这次少给了一个字段。 修起来三分钟,定位花了四十分钟——出事的地方和报错的地方隔了四层调用。修完我没睡,顺手跑了个 blame,想看看这行是哪个天才写的。 一点不意外:一个月前,我自己 approve 的。

前几天凌晨,我让 Claude Code 把沃尔什滕那个蒸汽机务段的时刻表页扒成结构化数据。Parowozownia Wolsztyn,波兰那边唯一还在日常跑蒸汽客运的地方——这个背景不重要,重要的是那个页面。 它十分钟交活。

八月十九号,dev.to 上那篇讲 AI 内容历程的长文,署名 Ryan Carniato,挂在 Playful Programming 底下。第一遍我读得很快。第二遍在 2019 年那一段停住了。 那段讲他早年给 Angular in Depth 投稿。

上个月底在 dev.to 上翻到一篇,作者 nyaomaru,三道老题:Valid Parentheses、Reverse Linked List、Maximum Depth of Binary Tree。标了 AI 辅助,配一个自己写的可视化工具 DSA View View,边跑边把状态摊开。
某个周五晚上我在 GitHub 上瞎逛,刷到 contextengineeringkit 这个名字。不瞒你说,那一瞬间我甚至有点感动。

上周四在 arXiv 刷到那篇论文,标题直白到有点愣——《ASIL: Replacing ScreenshotandClick with Structured State and Semantic Actions》。看到前三个词我第一反应是:又来了。
拿到这论文的时候我第一反应是标题党。"从提示的语言学特征预测 LLM 表现"?看这架势像是要把 prompt 工程从手艺活变成计量经济学。 但我还是点进去了。9000 个受控变体,625 条标注需求,5 个开源模型。

先说那个让我反复确认了好一会儿的洞。 这个 agent 项目的架构我是认同的——判断力下放给 AI,执行权焊死在一个绕不开的卡口上,所有可能改动生产的行为最后都得过一道人类审批门。门由 harness 强制执行,不由 agent 自己决定"我觉得可以先斩后奏"。先跑通护栏,再谈自动化。

那天晚上我在等一壶水烧开。验证集曲线卡了三天没动,我把训练循环里某个中间 checkpoint 打印出来,想看看输入到底在哪个环节不对劲。水还没开,屏幕先停了。曲线动了,涨得漂亮。但特征列表里多出一列,名字我完全不认识。 这一列我查了一个小时。

凌晨两点,我把那一轮对话的日志从头翻到尾。没什么好翻的,十二步,每一步干的事都一样:发一个参数完全相同的检索请求,拿到一模一样的结果。结果里甚至带着一句提示,大意是——“这个问题你刚才已经问过了”。它看见了。然后接着查。全程没有人盯着它。最后统计出来了,170k input tokens,全部这么烧掉的。
上周半夜,朋友甩了条链接给我,问"你看看这篇,是不是挺有意思"。是 Nature Chemical Engineering 上发表的,七月二十一号刚上线,做稀土分离的。

瑞士那条铁轨上的光伏板试点,跑满一年了,发电 16,000 千瓦时。看到这个数字的第一反应是:就这? 一个普通英国家庭一年的用电量。铺了 100 米铁轨、48 块特制板、18 kWp 装机,折腾一年,够一户人家用。这效率是不是有点感人。 但我后来把账重新算了一遍,发现我最初的判断下得太快了。 先说那个让我卡住的地方。
上周三的推送刷屏了,Lovable 完成 4 亿美元 C 轮,估值 133 亿。我盯着那个数字愣了半秒,脑子里冒出来的不是它的增长曲线,是我前一天晚上折腾出来的那个排班工具——导出邮件里的日期,差了一天。别问,问就是时区。 先说背景。