Skip to content

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。把它抬到文档级:

geml
=== 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——通用场景在开头更有效。但这个真实故事值得单独写一篇,比宣言更有说服力,因为它是自曝。

Code MIT · Specification CC BY 4.0