现象一:AI 忘了半小时前的约定
有天晚上,我跟 AI 已经连续对话了三个多小时,正在处理博客的主题系统(亮色和暗色切换)。前半小时,我们详细讨论并确定了一套 CSS 变量命名规范:
--vibe-text: #1a1a2e;
--vibe-bg: #ffffff;
--vibe-card-border: rgba(255, 255, 255, 0.1);
/* ... 二十几个变量 */
两个小时之后,我正在调整评论区的暗色适配。AI 给出的代码里出现了这样的样式:
.comment-box {
background: var(--text-color); /* 这个变量根本不存在! */
}
我提醒它:“这个变量之前没定义过,我们用的是 --vibe-text。“它回复:“抱歉,我重新检查了对话上下文。让我用之前定义的变量名重新生成。”
它确实”忘记”了。不是故意忘记,而是它的”记忆”受限于上下文窗口(Context Window)的大小。
Token 是什么:用数据库连接池来类比
Token 是 LLM 处理文本的基本单位:一个英文单词约等于 0.75 个词,一个中文字约 1-2 个 Token,一段代码里的几个字符也可能算一个。
| 概念 | 数据库 | LLM |
|---|---|---|
| 存储容量 | 磁盘空间 | 上下文窗口(Token 上限) |
| 读写内容 | SQL 查询结果 | 对话历史 + 当前回复 |
| 容量耗尽 | 磁盘满,拒绝写入 | 窗口溢出,旧内容被丢弃 |
| 扩容方式 | 加磁盘 | 换更大上下文窗口的模型 |
当前一些模型(2026 年中)的上下文窗口大约在 128K-200K Token。当然也有1M的但更适合长任务一般消耗积分也会更多,听起来长度很多,但跟 AI 连续对话3小时,中间会夹杂大量已无价值的内容,很容易就塞满了。
窗口满了之后,AI 会把最早的对话内容”丢弃”,就像缓存淘汰一样。它不会告诉你”我忘了”,它只是基于剩下的上下文继续回答,根本不知道自己把关键东西丢了。
最可怕的是它不表现困惑。跟人聊天,对方忘了你能从回答里察觉出来;AI 不会,它会基于不完整的上下文,自信地给出一个看似合理的答案。比如你之前决定用 MongoDB,窗口溢出后你问 AI 怎么设计数据存储,它基于当前能看到的上下文,自信地建议你用 PostgreSQL。你说”不是之前说了用 MongoDB 吗”,它说”您说得对,我之前确实建议过 MongoDB”。它并不是真的”记起来了”,而是根据你这句话顺势往下接。这是一种顺着你的话往下编,不是真想起来了。
现象二:同一个 bug 问三遍,三个答案
中文搜索为空这个 bug,我连续换三种问法问 AI,得到了三个不同的答案:
- 用
encodeURIComponent编码再搜索 → 不行 - 换 lunr.js → 不行
- 是
substring截断多字节字符导致的 → 这个对了
后端类比:同一个查询每次返回不同结果,像普通 SELECT 语句里混进 ORDER BY RAND()。LLM 是概率预测引擎,不是知识库,temperature 决定随机性,同一个问题措辞不同、上下文不同,答案可以完全不同。
现象三:批处理幻觉与伪修复
改”人生瞬间”照片瀑布流的动画,遇到了三个性质不同的现象:
- 换一批照片没有淡入(体验问题):React 把”换图”和”解除淡出”两个 setState 批处理合并,吞掉了中间帧,不是 onLoad 异步问题
- 往回滚时整片闪(体验问题):IntersectionObserver 的回调不带方向信息,滚回去也当新元素触发
- 末排空缺(布局 bug):只有手机两列 + 照片数不是 2 的倍数才暴露,
column-count按列填而grid按行填
AI 第一版对这三个现象全是瞎蒙。最关键的方法论是:现象消失不等于解决。伪修复是最大的 token 泄漏点,每轮伪修烧掉整轮 token。用后端二分法的求解方法:断网复现证伪”加载”假设、查事件是否带方向字段。
根因:确定性工程 vs 概率生成
后端的一切根基是 ACID、幂等、一致性协议,每条路都有对错线。AI 只有”像不像”的连续统,没有对错线。它有三个不可接受的特质:
- 不可复现:同一个 prompt 问两次,答案可能不同
- 黑盒不可调试:你没法走进 AI 的推理过程
- 无保证:AI 说”能跑”不等于真能跑
应对:把 AI 当需管理的智能体,而非可预测的机器
- 可验证性大于可信度。AI 说找到根因,先要证据:日志、响应、变量实际值。证据不到位,结论就是猜测。
- 多次采样大于单次信任。一个问题多问几遍、换措辞,交叉验证。
- 最小可验证单元。每次只让它改一点,能验证再继续。
- 外部记忆补上下文。CODEBUDDY.md、System Prompt、开新会话聚焦,别让窗口溢出。System Prompt 里写死规则:“CSS 变量前缀统一”,“所有修改先分析影响范围”。
- 测试即文档。关键逻辑写测试锁住行为,伪修复一测就现形。
游客评论无需登录,昵称和邮箱为选填项(邮箱仅用于回复通知)。什么是 Waline?