Think Deep,Work Lean

照着文档抄,第一行就报错?让AI写个最小例子,38秒验真

Posted on By zack

大家好,我是Zack。

先说个场景:你想用个 Python 库,不知道某个函数怎么调,去搜文档。搜到一篇写得挺全的,抄下来,一跑,炸了。

报错还不算完。你把报错粘去搜,出来五个答案,三个说法不一样。你得分辨哪个过时了、哪个是抄它的、哪个压根没跑过。

这事我常撞上,这次顺手拿 PyYAML 做了个对照实验:同样一个「怎么读 YAML 配置」的问题,照文档抄,和让 AI 写个最小例子直接跑,各走一遍,掐表。

先看照文档抄的下场

任务很简单:Python 读一个 config.yaml,打印整个配置。

网上大量教程给你的代码长这样:

import yaml

cfg = yaml.load(open('config.yaml'))
print(cfg)

我原样跑了一遍,第一行就炸:

TypeError: load() missing 1 required positional argument: 'Loader'

exit 1,一个字结果都没有。

翻译成大白话:yaml.load 现在必须多传一个 Loader 参数。为什么?旧版它能把「构造任意 Python 对象」的代码写进 YAML 里执行,有安全洞,新版本干脆逼你选。

接下来就是排错时间。你搜这个报错,会看到一堆答案:有说写 Loader=yaml.Loader 的,有说 SafeLoader 的,有说干脆换 full_load 的。哪个安全?哪个过时了?这些答案本身可能就是 AI 写的,从没被跑过。你分辨它们花的时间,比抄代码长多了。

换成让 AI 写例子直接跑

同样的问题,我换了个问法,直接问 AI:

用 PyYAML 读 /tmp/doc_demo/config.yaml 并打印整个配置。
别解释,直接给我一个最小可运行的 Python 例子。

38.8 秒,它给了例子,还顺手检查了我的环境,提醒我先装 pyyaml。

例子存成 read_cfg.py,长这样:

import yaml

with open('config.yaml') as f:
    config = yaml.safe_load(f)

print(config)

0.08 秒,完整配置打出来了,一次过。

它给的是 safe_load——「只解析数据、不执行对象」的安全版本,就是上面那堆答案吵了半天的那个正确选项,它直接给你选好了。

这趟的完整账:问 AI 38.8 秒 + 跑 0.1 秒,见真结果。对照组照文档抄,第一跑就是报错,后面的排错时间不封顶。

更狠的还在后头

AI 给例子的时候,顺手写了句「装好后输出会是」,里面有这么一项:

{'service': {'name': 'order-api', 'version': 3.10, ...}}

注意那个 version: 3.10。

我实际跑出来是:

{'service': {'name': 'order-api', 'version': 3.1, ...}}

3.10 变成了 3.1。AI 预测的输出是错的,真跑的结果是对的。

为什么?YAML 里不带引号的 3.10 会被当成浮点数,末尾那个 0 直接丢了。你配置里写的是版本号 3.10,程序拿到的是 3.1。拿它拼 API 路径、做字符串比较,全是坑,而且一行报错都不会有。

我顺手把整个配置翻了一遍,还逮着一个同伙:debug: off,YAML 会把它解析成布尔值 False,不是字符串 “off”。也是静默的。

这两个坑,光看文档发现不了,光看 AI 给的答案也发现不了。全是跑出来的。

前后对比,算笔账

照文档抄:第一跑就是 TypeError,零结果。后面排错时间不封顶,还要分辨网上答案的真伪,分辨完那两个静默坑也照样在。

问 AI 要最小例子:38.8 秒出例子,0.1 秒见真结果,一次过。跑的过程顺带验出两个静默坑,连 AI 自己预测的输出都被纠正了。

省的不只是排错那十几分钟。照文档抄的话,3.10 和 off 这两个坑会跟着代码进项目,等哪天版本号对不上号,你排查的方向根本不会往 YAML 解析上想——因为它不报错。

这招怎么搬到你自己活里

两句话,都能直接用:

一,问 AI 要例子,把「最小可运行」和「别解释」说出来。不让它解释,省掉一堆客套话,例子拿来直接抄。

二,例子给了必须真跑,别看。AI 的答案要跑,AI 预测的输出也要跑——我这次它连输出都给错了一个数。跑完把结果和配置里的字面值对一眼,类型变了的当场现形。

aphyr(Jepsen 的作者,专治分布式系统翻车)前几天刚说了段话:LLM 让「文档写得像真的」变得太容易,人对文档的信任正在被磨掉。我现在的做法跟他一样:没用过的东西,先让 AI 写个十行的小例子直接跑。跑不通的,文档写得再漂亮也不碰。

诚实说两句局限:这次只拿 PyYAML 一个库做的实验,38.8 秒是我这次掐的表,不保证每次都这么快;3.10 那个坑是 YAML 1.1 规范的老毛病,换 YAML 1.2 的解析器行为会不一样。但这招便宜啊——一次 38 秒,比排错便宜多了。

你上一次照文档抄然后炸了是什么时候?评论区聊聊,说不定别人一眼就看出毛病在哪。