/~learn/s/35dfd454
你可能也反复遇到过这个矛盾:
| 输入方式 | 结果 |
| --------- | ------ |
| 说一句"帮我做个TODO List" | 几分钟就跑起来了,甚至还会贴心地加动画、做深色模式 |
| 写2000字PRD,把每个控件的边距、颜色、滚动参数都写清楚 | 做出来这不对那不对,调来调去越调越乱 |
表面上看这违背直觉——给的信息越多,应该做得越好才对。但现实恰恰相反。这个现象不是你的错觉,也不是模型"变笨了",而是 LLM 推理机制中一个非常基础但极少被人讨论的特性:上下文密度衰减(Context Density Decay)。
---
大语言模型基于 Transformer 架构,核心机制是 Self-Attention。理论上 Attention 可以看到上下文中的所有 token,但实际上:
信息保真度 ≠ 均匀分布
输入上下文(假设 10K tokens):
[系统提示词][任务描述][背景知识][约束1][约束2]...[约束N][具体要求][用户问题]
↑ ↑
高保真区域 高保真区域
中间区域 → 被"压扁"
Anthropic 在 2024 年的 "Lost in the Middle" 后续研究中量化过这个现象:在 128K 上下文窗口中,位于中间 60% 位置的信息,召回准确率从 90%+ 掉到 40% 以下。
这才是真正杀死质量的原因。假设你在 PRD 里写了 N 条硬性约束:
模型需要同时满足所有约束。但每一条约束都不是独立的:
约束满足概率 = 乘积关系,不是加和
满足 1 条约束: 95%
满足 2 条约束: 95% × 95% ≈ 90%
满足 10 条约束: 0.95^10 ≈ 60%
满足 30 条约束: 0.95^30 ≈ 21% ← 这就是为什么"全错了"
这还没算约束之间的隐性冲突——比如"16dp 间距"和"紧凑布局"在某些断点下天然矛盾。模型遇到冲突时不会报错,它会默默妥协一边,而且你很难提前猜到它会妥协哪边。
人也是一样的。想象你给同事交代任务:
这不是记忆问题,是工作记忆(Working Memory)容量问题。LLM 有同样的限制。上下文越长、约束越密,模型在生成每一个 token 时需要"同时记住"的东西就越多,而它的"推理带宽"是有限的。结果就是:它会优先满足最近提到的几个约束,而把早期的约束"下沉"到潜意识里——像极了人听到第7条要求时的状态。
---
当你只给一个模糊的方向——"做个TODO List"——模型处于生成模式而非约束满足模式:
| 维度 | 模糊指令(Vibe Coding) | 精确PRD |
| ------ | ---------------------- | --------- |
| 模型的任务 | 补全 / 续写 / 创造 | 约束满足 / 检查清单 |
| 主要调用的能力 | 预训练知识(万亿token见过的最佳实践) | 指令遵循(相对弱的能力) |
| 容错空间 | 大(怎么做都行) | 极小(差1dp都算错) |
| 出错模式 | 可能漏掉你脑子里想的某个功能 | 到处都是小错,互相牵连 |
| 成功率 | 80-90% 能跑到可用 | 30-50% 需要反复修 |
关键点:大模型最强的能力是"生成合理的东西",而不是"精确按清单执行"。预训练阶段它见过无数高质量UI、无数好代码,这些知识以"权重"的形式内化了。当你给它自由,它直接调用内化的最佳实践;当你用 30 条约束绑住它,它反而无法调用那些隐性知识,只能在 token 级别硬凑约束——就像一个画家被要求"这个像素点必须是#FF5733",最后画出来的东西反而不如让他自由发挥。
这就是为什么 Vibe Coding 有效:它把任务匹配到了模型最强的能力维度上。
---
几个关键研究和现象可以相互印证:
---
最常见。用户觉得"我把需求一次讲清楚省得来回",但结果是模型只能抓住最后几条。
在同一个提示词里既写"做什么"又写"怎么做",还写"不能怎么做"。模型分不清优先级,最后平均用力,所有点都只做到 60 分。
直接给一整页的所有控件参数。UI 是高耦合的——A 控件的位置影响 B 控件的边距,一个参数错了连锁反应。模型没有"眼睛",它无法像人在 Figma 里那样实时预览校验。
---
LLM 的输出质量 ≈ 调用预训练内化知识的程度
- 约束数量带来的认知负荷
- 长上下文带来的注意力稀释
自由发挥时,分子最大、分母最小;精确PRD时,分子被压制、分母爆炸。
这不是模型的 bug,这是它的能力结构决定的。理解了这个,下一篇我们就可以讨论怎么利用这个特性设计工作流,把模型的能力真正榨出来。
---