LLM 改文档时实际做了什么——一次真实会话的自述
以下是来自与大模型真实交互,未经润色。
缘起(用户的原话): claude 你自己帮我改之前的 README 和这篇文章为例,你是怎么改章节的?我看到的是先是找我要各种命令授权,grep 找关键词,什么的,也许你跟我可以说说你的操作流程,在此基础上我们讨论是否存在 geml 能改进的地方。
我这次实际是怎么干的
改 8 篇对比文档,第一次 Edit 之前我做了大约 18 次信息收集:
ls→ 不知道文件在哪grep -rniEl "comparison|对比"→ 关键词全仓扫git log -- docs/comparisons/和git log -- spec/→ 算两边的时间差,这是我判断「过期了什么」的唯一手段- 整篇读
COMPARISON.md(218 行) grep -n "^#\{1,3\} "拿 spec 目录 →sed -n 220,450p→sed -n 520,620p→sed -n 618,660p→sed -n 660,690p(分四次读 spec,因为不知道要哪几节)- 跑
--to md和.md对 diff,只为搞清楚.md是不是从.geml生成的 git diff 1d19757..HEAD -- spec/GEML-spec.md+ 标题 diff → 才拿到「新增了 §3.2 §3.3」grep -n "embed"老 spec vs 新 spec
读写比大概 20:1。真正的改动是 30 来次字符串替换,但为了知道该替换什么,我把 spec 读了大半、把 4 篇文档整篇读了。
疼在哪——每一条都对得上定律
① 我全程读的是 spec/GEML-spec.md,不是 .geml
仓库里规范正本是 Markdown,spec/in_geml_format/*.geml 是 dogfood 副本。所以 geml get 那 74 行目录我用不上——不是我不想用,是我手上那个文件里没有块。格式自己的规范不是用这个格式存的。
② .md / .geml 双份是纯成本,而且已经漂了
COMPARISON.geml 和 COMPARISON.md 内容近乎相同、手工并行维护——我跑 diff 发现两边导语措辞已经不一样了(一个是 "GEML is not the widest format here",一个是「这不是一场打勾竞赛」)。我每处改动都得做两遍,中英再乘二 = 四遍。
这就是第二定律说的那种副本,长在讲第二定律的仓库里。
③ 过期是不可见的
GEP-0005 落地那天,这 8 篇就该红。但 geml check 全绿——校验是结构性的,它不知道「这段话在描述 §3.2」。最后是人用肉眼发现的,不是工具。
④ 散文没有 id,所以我几乎用不了 geml set
矩阵是 === table {#caps},那块我本可以 geml set '#caps'。但导语、「唯有 GEML 做到的」那些段落全是裸段落——只能用精确字符串匹配的 Edit。第一定律说「每个结构块必须有主键」,真实文档里大多数内容不是块。
⑤ 那个 119× 数字,和它描述的文件之间没有任何关系
它是手抄进散文的。文件长了,数字就错了,没有任何机制会喊一声。
三个可以做的(按我认为的价值排序)
A. 让投影关系可声明 ← 我认为这个最值
零件已经有了:code src= 会在正文和源漂移时报 stale-code-snapshot。把它抬到文档级:
=== meta
projection-of = "COMPARISON.geml"
===geml check 重新投影一次、比对,漂了就警告。这不是新机制,是把已有的设计语汇用在文档级——而且它立刻解决这个仓库里那 8 对文件。
B. 语义依赖钩子
类似 tracks="spec/…geml#32-the-block",记下目标块撰写时的哈希,目标变了就警告。和 .gemlhistory 的哈希链同源,不需要执行任何东西。风险是会不会变成噪音墙,得先在自己仓库试。
C. 内容检索返回 id 而不是行号
geml get <file> 已经给了目录,缺的是「哪些块提到 embed」。现在的答案是 grep -n 给我行号——而行号是块出现之前的世界。
顺带一个连接
⑤ 正好是「文档格式该不该做计算」那个公开讨论的正面论据——宣言自己就被一个手抄的数字咬了。这不构成结论,但值得放进那个 issue。
对宣言的建议
现在那个 lede(agent 改坏一节 / git checkout 卷走两小时)是通用的,好处是任何人都能代入。而这次的真实故事是具体且更狠的:讲 GEML 的文档,因为是手工副本,落后了规范三个月,而 geml check 全绿。
我不建议换掉 lede——通用场景在开头更有效。但这个真实故事值得单独写一篇,比宣言更有说服力,因为它是自曝。