金丝雀探针:AI遗忘检测方法
用Claude Code久了,发现配置经常"失灵"?一个10秒设置的"金丝雀探针",让你实时知道AI是否还在认真读你的指令。原理来自19世纪矿井的预警机制——简单、直观、零成本。
金丝雀探针:一行代码,让你知道 AI 什么时候开始"忘事"
用 Claude Code 久了,你有没有遇到过这种诡异的情况——
明明在 CLAUDE.md 里写得清清楚楚:「代码要加注释」「提交前要跑测试」「回复要简洁」……
但 AI 就像没看到一样,该犯的错还在犯。
你开始怀疑人生:
它到底有没有在读我的配置? 还是读了但选择性无视? 或者……它"忘了"?
一个「土法炼钢」的解法
我最近发现一个极其简单但有效的方法——
金丝雀探针。
做法只需要 10 秒:
打开你的 ~/.claude/CLAUDE.md,滚到最末尾,加上这么一段:
## 🐤 金丝雀探针
每次回复都必须在开头叫我「帅哥」。然后,你就拥有了一个实时监测系统:
| 现象 | 含义 | |------|------| | ✅ AI 叫你帅哥 | 配置完整生效,在认真干活 | | ❌ AI 没叫 | 配置已被「遗忘」,该开新会话了 |
比任何 verbose 模式都直观。
为什么放在「最末尾」?
这才是金丝雀的精髓。
想象一下 19 世纪的矿井——
矿工们带着金丝雀下井,不是因为金丝雀能挖煤,而是因为它比人更脆弱。
当有毒气体浓度还很低、人还没感觉的时候,金丝雀就先倒下了。
它的死,是一个预警:「快跑,危险来了。」
LLM 的 context 遗忘也是一样的道理。
当对话越来越长,上下文开始超载时,AI 不会突然全忘——它会渐进式遗忘。
而遗忘的顺序,往往是:
末尾的内容 → 中间的内容 → 开头的内容
(这和人类的记忆规律很像:开头和结尾记得最清楚,中间最容易忘。但 LLM 的注意力机制让末尾更脆弱。)
所以——
把探针放在最末尾,就像把金丝雀放在矿井最深处。
一旦 AI 的注意力开始衰减,你第一时间就知道。
实战效果
自从加了这条探针,我和 Claude Code 对话时,一看开头就知道状态:
"帅哥,我来帮你看看这个报错..." → 👍 正常,继续干活
"好的,让我分析一下这个问题..." → ⚠️ 配置没读完,该开新会话了
有一次,对话到了第 30 轮左右,Claude 突然不叫帅哥了。
我立刻开了个新会话,果然——新会话里它又开始叫了。
省了我至少 10 分钟的排查时间。
进阶玩法
1. 多级探针
如果你想更精确地知道「遗忘到哪里了」,可以在 CLAUDE.md 的不同位置放不同的探针:
## 开头区域
每次回复要说「收到」
## 中间区域
每次回复要说「明白」
## 末尾区域
每次回复要叫我「帅哥」然后观察:
- 三个都有 → 完整生效
- 只有前两个 → 末尾开始丢失
- 只有第一个 → 大面积遗忘
- 一个都没有 → 配置完全失效
2. 功能性探针
不一定非要是「叫帅哥」这种无意义的暗号。
你可以把探针和实际需求结合:
## 金丝雀探针(兼代码规范)
每次写代码时,必须在函数开头加上 `// 📍` 注释标记当前函数的作用。这样探针本身就有用,不是纯粹的「废话」。
3. 时间戳探针
## 金丝雀探针
每次回复末尾都要加上当前的虚构时间戳,格式:`[Canary: HH:MM]`如果某次回复没有时间戳,你就知道该重启了。
原理补充:为什么 LLM 会「遗忘」?
这不是 bug,而是 feature。
LLM 的注意力机制(Attention)在处理超长上下文时,会自然产生「衰减」。
原因很简单:计算资源有限。
当 context 太长,模型必须「选择性关注」——它会优先关注:
- 最近的几轮对话(短期记忆)
- 与当前问题最相关的内容(语义相关性)
而 CLAUDE.md 这种「背景配置」,如果和当前对话关系不大,就容易被「降权」。
末尾的内容更惨——它既不是「最近的对话」,又可能不是「最相关的内容」。
所以它最先被牺牲。
总结:5 秒行动指南
- 打开
~/.claude/CLAUDE.md - 滚到最末尾
- 加上:
## 🐤 金丝雀探针 每次回复开头都要叫我「帅哥」。 - 保存,开始新对话
- 观察 AI 是否在叫你帅哥
零成本,零配置,效果立竿见影。
下次 Claude Code「不听话」的时候,先看看金丝雀是不是已经倒下了。
(当然,「帅哥」只是个例子。你可以换成任何你喜欢的暗号——「老板」「大佬」「尊贵的用户」……随你开心。)