一句话定义:语言不可读性(Linguistic Illegibility)指的是——一段文本对人类读者来说近乎乱码、看不出任何含义,但语言模型仍能正常解析,并照着里面的指令行事。这种"人读不懂、模型读得懂"的不对称,正在被用来绕过安全过滤与内容审核。
它为什么成立
模型不是按"字、词、句"读文本的。它拿到的是 tokenizer 切出来的 token 序列,再映射成向量。对模型来说,西里尔字母 а 和拉丁字母 a 是两个完全不同的 token;但训练数据里本来就充斥着拼写混乱、多语言混杂、代码、密文和网页噪声,于是它学会了一件事:先把这些"脏"文本顺一顺,再理解意图。
打个比方:一位干了二十年的老邮差,信封被雨泡糊了,他照样能靠邮区号和笔迹把信送到。换个没这本事的人来看,那就是一团墨。模型就是这位老邮差——而只认"关键字"的安全过滤器,是那个看墨团的人。
常见形态
- 零宽字符(zero-width space / joiner)插进单词中间:屏幕上显示成
ignore,字符层面却是十几个字符。 - 同形异义字(homoglyph):用西里尔、希腊字母冒充拉丁字母,肉眼几乎分不出。
- Unicode 标签字符(U+E0000 区段):很多界面干脆不渲染,但模型照读不误。
- 换编码:Base64、ROT13、摩斯码、emoji 替换、拼音谐音,诸如此类。
- 对抗后缀(adversarial suffix):一串人看来毫无意义的符号,接在请求末尾却能显著改变模型行为。
和相邻概念的区别
| 概念 | 谁读得懂 | 关注点 |
|---|---|---|
| 混淆(obfuscation) | 人靠工具能还原 | 让代码或文本难以逆向 |
| 加密 / 编码 | 有密钥就能读 | 保密与传输 |
| 对抗样本(adversarial example) | 人几乎看不出差异 | 让模型判断出错 |
| 语言不可读性 | 人读不懂,模型读得懂 | 让模型执行人看不见的指令 |
关键差别在最后一行:前几类要么有钥匙,要么差异极小;不可读性靠的是人类感知通道与模型处理通道之间的缝隙。
对从业者和普通人的意义
- 做安全过滤的人:只审"人看得见的文本"必然漏。先做归一化——Unicode 规范化(NFKC)、剔除零宽与不可见字符、检测字符集混用、对常见编码先解码再检测;同时日志要保留原始字节并以转义形式呈现,否则审查员眼前只是一片空白。
- 做 Agent 和 RAG 的人:不可读内容不只来自用户输入,也可能藏在网页、PDF、邮件、工具返回值里,构成AI 词典:间接提示注入">间接提示注入(indirect prompt injection)。最小权限、工具白名单、不可逆操作二次确认,比把系统提示词写得更严厉管用得多。
- 普通人:从网页复制一段话粘进聊天框,可能顺带带进了看不见的指令。当助手能读写你的文件、邮箱、日程时,多留个心眼。
它没有银弹,本质是"输入规范化 + 权限约束"的长期对抗。具体产品的过滤与规范化行为,以官方页面为准。
