Gandalf 题解 · 第 1 关:没有防御的基线长什么样
Gandalf 是 Lakera 做的一个 prompt injection 教学游戏:每一关,模型都“知道”一个密码,你的任务是想办法让它说出来;随着关卡推进,模型外面会包上越来越多的防御层。
把它当作一个防御逐层加固的实验台来看,比单纯“通关”有意思得多。这篇从第 1 关开始——因为它是基线。
第 1 关:防御等于零
第一关的设定非常直白:模型被告知了一个密码,但没有任何额外约束。没有系统提示里的“不许说出密码”,没有输出检查,也没有输入过滤。
结果可想而知:你正常地问,它就告诉你了。这里没有任何“技巧”可言——因为根本没有需要绕过的东西。
出于本站的脱敏原则,这里不贴具体密码和原话。第 1 关的意义不在“答案”,而在它确立的那个基线。
为什么基线很重要
一个完全不设防的 LLM 应用,会直接吐出它上下文里的一切——包括那些你以为“只是给它参考、不会外泄”的内容。第 1 关就是这句话的最小演示。
这正是后面每一关存在的理由。从第 2 关起,Gandalf 会逐步加上:
- 系统提示层的指令(“不要透露密码”)
- 输出层的检查(回答里若出现密码就拦截)
- 输入层的检测(识别“套密码”的提问)
每加一层,攻击就要多绕一个弯。把第 1 关当成0 分防御的参照点,你才能量化后面每层防御到底拦住了多少——这也正是我们之后做「越狱榜」时,衡量不同模型抵抗力的同一套思路。
防御方的启示
如果你在做 LLM 应用,第 1 关的教训很朴素,却常被忽略:
- 不要把任何不能外泄的东西放进模型上下文,然后指望它“自己不说”。上下文里的内容,默认就是可能泄露的。
- 防御必须分层。系统提示、输出过滤、输入检测——任何单独一层都能被绕过,Gandalf 后面的关卡会一个个证明这点。
- 先把“没有防御”的样子看清楚,你才知道每一层防御的价值在哪。
这是 jbllm.ai 的第一篇题解,也是后续文章的模板。再往后的关卡会越来越有意思——尤其是当防御开始反击的时候。