2433 字
约 8 分钟
22
S24-A13 · AI 与文档:失真是怎么累积的

一个模块的设计文档半年内被三个人用助手"润色"过。每次改动都不大:补一句说明、调一次结构、扩写一段背景。半年后新同事读这份文档,得到的印象与代码实际情况有三处不一致——而每一处都能追溯到某次"润色"里一个小小的概括。

AI 辅助写文档的风险不在"写错",而在平滑的失真:它把不确切的地方写得更像确定的,把有争议的地方写得更像共识。单次改动看不出来,累积起来就把一份"记录决策"的文档变成了一份"看起来完整的说明文"。


1. 失真的四种形态

形态 机制
确定性升级 "我们倾向于 A" → "我们采用 A"
范围扩大 "这个模块的接口" → "本系统的接口"
因果简化 省略前提,只留结论
细节补全 原文没写的数字被"合理"补齐

四种形态还能叠加:先扩大范围,再把"倾向"升级为"采用",最后删掉前提——一次改写就能把一条有条件的经验变成一条无条件的规范,而读者看不出它曾经有条件。

第二项最隐蔽:范围词是模型的常见放大器,"本模块"变成"本系统"只差两个字,但责任范围扩大了一个量级。

第三项是"读起来更顺"的代价:因果链里的前提被删掉后,结论变成了无条件断言。

2. 为什么助手会做这种升级

原因 说明
训练目标偏好连贯 转折与限定会让文本"不顺"
缺少系统上下文 不知道哪些词是精确的
倾向于补全模式 见到"设计文档"就按模板补
无责任约束 它不承担后果

还有一个更隐蔽的机制:助手会补齐"应该有"的章节。设计文档"通常有"风险与备选方案,于是它补上一段——内容合理但与实际不符,而读者会以为这些是当初真的考虑过的。

第三项最实际:你让它"润色",它就会把一段话改得更像这类文档通常的样子,而"通常的样子"里包含大量它不知道真假的填充。

// 同一段话的两种改写
原文:目前只在订单模块使用该机制,其它模块暂未接入。
改写后(失真):该机制已在系统中广泛使用。
// 差别:范围词从"订单模块"变成"系统","暂未"变成"已"

3. 三类内容不该交给助手改写

内容 为什么
决策与取舍 措辞就是决策本身
数字与指标 补全与取整都会改事实
边界与例外 限定词被删就成了绝对断言

第一项最要紧:"我们决定不做 X,因为 Y"这句话里,去掉 Y 就不是同一个决策了。助手很可能把 Y 精简掉,因为它读起来像铺垫。

可以给这类句子加一个固定句式,让限定词不容易被删:

// 三种不允许被改写的句式
"仅支持 X,不支持 Y"          → 不允许合并成"支持 X/Y"
"在 A 条件下成立,否则……"     → 不允许删掉后半句
"当前只用于 Z 模块"           → 不允许换成"系统内"
// 复核时先搜这三类句式,比通读有效

第三项是事故来源:文档写"该接口不支持并发调用",被改成"该接口对并发有一定要求",下游就可能按错误理解去用。

4. 可用的分工

任务 交给助手 人负责
结构梳理 是 确认取舍
语言润色(不改变事实) 是 复核范围词
补示例 视情况 验证示例正确
写决策与数字 否 全部

第二项与第四项的分工也值得说清:"补示例"看起来无害,实际上示例会成为下游的参照。一个编造的示例比一段模糊的描述更危险,因为它看起来是可执行的。

第二项的关键是"不改变事实"这个限定:润色应当只动语序与措辞,不动断言强度。判断方法是改写前后对比"断言的范围与确定性有没有变"。

// 改写前后的三项核对
1. 范围词:模块/系统/全局 有没有被放大
2. 确定性:倾向/采用/必须 有没有被升级
3. 前提:因为/在…条件下 有没有被删
三项任一变化 → 不是润色,是改事实,须人工确认

失真还有一层时间维度:越旧的段落越危险。因为它经过更多次改写,累积的偏差更多,而它在文档里位置更靠前、看起来更权威。所以"老文档更可信"这个直觉在这里恰好是反的。

5. 让失真可见的三种做法

做法 效果
保留原文(diff 可查) 改动可见
标注"AI 辅助"与复核人 责任可见
定期与代码对照 事实可验证

第二项不是形式主义:"这段是助手改的、我复核过范围词" 这句话会让复核真的发生。没有它,复核往往退化成"通读一遍觉得没问题"。

// 文档头部元信息:三行,成本低
doc: order-module-design
assisted: true          # 是否经 AI 改写
reviewed_by: 张三       # 复核范围词与数字的人
last_fact_check: 2026-11-10   # 最近一次与代码对照的日期

核对也可以半自动化:把文档里的接口签名、配置键、表名抽出来,与代码对一遍。这类"命名级"断言最容易失配,也最容易用脚本检查。

// 抽出文档中的配置键,与代码中的实际键对比
grep -oE '[a-z]+(\.[a-z_]+)+' docs/*.md | sort -u > doc_keys.txt
grep -rhoE '"[a-z]+(\.[a-z_]+)+"' src/ | tr -d '"' | sort -u > code_keys.txt
comm -23 doc_keys.txt code_keys.txt    # 文档有、代码没有 → 失配候选

第三项是最硬的手段:每季度挑三处关键断言,去代码里核对。核不上就修文档,核得上就把日期往后推。

6. 排错:五种"文档与代码不符"

现象 成因 处理方向
文档说支持,代码不支持 范围词被放大 对照代码,收紧措辞
数字对不上 被补全或取整 数字必须来自可查来源
前提消失只剩结论 因果被简化 补回前提
多份文档互相矛盾 各自被独立润色 建立单一来源
新同事按文档做错 缺少"不适用"说明 补边界段落

第五项是最终代价:文档的读者会照它做事。所以"文档失真"不是文风问题,它是会转化成事故的输入。

7. 边界:什么情况可以放手

场景 为什么 做法
会议纪要(原始记录在) 可回溯 放手改写
内部草稿 不对外 放手
纯操作手册(有测试验证) 可被验证 放手,但保留验证
对外文档 责任重大 逐句复核

还有一条与协作有关的边界:不要让两个人分别润色同一份文档的两半。各自独立改写会让措辞与范围词产生分歧,而全文读起来仍然通顺——这种矛盾比明显的错误更难发现。

最后一条与版本管理有关:把文档放进仓库并保留 diff,是唯一能让失真可追溯的手段。放在共享文档里的文件,每次改写覆盖前一次,"这句话是谁改的、改之前是什么"就永远查不到了。

判断口径一句话:这段文字会不会被当成事实依据去执行。会,范围词与数字必须人工核对;不会,改写只是效率工具。

文档失真的校正成本也有一个规律:越晚发现越贵。一周内发现,只需改一句话;半年后发现,已经有人按它做过设计,改动会牵出讨论与返工。所以"定期核对"的频率应当与文档被引用的频率挂钩。


8. 自测

  1. 失真的四种形态中,哪一种只差两个字却扩大了责任范围?
  2. 为什么"读起来更顺"常常意味着前提被删掉?
  3. 三类不该交给助手改写的内容里,哪一类是事故的直接来源?举一个例子。
  4. "润色"的界限是什么?改写前后该核对哪三项?
  5. 为什么"标注 AI 辅助与复核人"能让复核真的发生?
  6. 判断"能否放手改写"的那个问题是什么?
S24-A13 · AI 与文档:失真是怎么累积的
https://www.clxhxhhr.top/posts/6440/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。