一、一条让人困惑的新闻
8月11日,Anthropic宣布:从8月2日起,所有新的Claude模型会在生成的文本中嵌入一种"不可见的水印"。复制粘贴之后依然存在。全球生效。
我第一反应是:水印?在纯文本里?
图片可以加水印,我理解。PDF可以嵌元数据,我也理解。但一段纯文字,你复制出来就是一串字符,粘贴到任何地方都只是字符。字符就是字符,"你好"就是"你好",你怎么可能在里面藏东西?
它又说水印"不改变文本的含义、质量和可读性"。也就是说你读起来跟没加水印时一模一样,但里面就是有一个隐形的标记。
这听起来几乎像是在变魔术。
所以我就很想搞清楚一件事:这个魔术的机关到底在哪里?
二、一个必须先理解的前置知识
要理解水印,得先理解语言模型生成文本的方式。
很多人以为AI写字的过程是:想好要说什么,然后一句话一口气写出来。
不是的。它是一个词一个词往外蹦的。每一步都在做一件事:根据前面已经有的内容,算出下一个词最可能是什么。
但"算出来"不是说它直接给一个确定答案。它给出的是一个概率表,词表里的每个词都有一个分数。
比如它写到"今天天气真",下一个词的概率分布可能是:
"好" 35%
"不错" 20%
"棒" 12%
"舒服" 8%
……
然后系统掷一次骰子,从这个分布里随机抽一个词。假如这次抽到了"不错",文本就变成"今天天气真不错",然后继续往下算下一个位置。
注意这里有一个细节,等会儿非常关键:"不错"被选中,有很大的随机成分。 下次碰到同样的位置,骰子可能掷出不同的结果,就选了"好"。这两个选择都完全合理。
记住这个随机性。水印的全部秘密都藏在这里。
三、第一种思路:偷偷调高某些词的概率
最容易想到的水印方案是什么?
既然每一步都要掷骰子选词,那我在骰子上做手脚不就行了?让模型更倾向于选某些词,只要我知道"做了什么手脚",事后检查文本就能验证水印是否存在。
2023年的一组研究者就是这么干的。他们的方案叫KGW,俗称"绿色词表"方案。
过程是这样的:模型每要生成一个新词,系统就拿前面已经有的内容和一个秘密密钥做一次哈希运算,用运算结果把整个词表随机劈成两半。一半叫绿色组,一半叫红色组。然后给所有绿色词的分数人为抬高一截。
还是那个例子。假设这一步的哈希结果把"好""棒""舒服"分到了绿色,把"不错""差"分到了红色。抬分之后:
"好"从35%变成了45%,"不错"从20%降到了10%。
"不错"本来是个很好的答案。它被压低的唯一原因,就是秘密算法碰巧把它分到了红色组。
检测的时候,拿同一个密钥对文本里的每个位置重新算绿红划分,然后数:有多少词落在了绿色里。比例显著高于50%,就是有水印。
原理就这么简单。
但想到这里,你可能会觉得哪里不对。
四、等一下,这不是在让AI说"不太对的话"吗?
这正是我一开始的反应。
你想想看。模型原本认为"不错"有20%的概率,是一个完全合格的好答案。现在它被压低了,不是因为它不好,而是因为一个跟用户提问毫无关系的算法把它归到了红色组。
这意味着什么?模型在回答问题的同时,还在满足另一个额外的任务:让绿色词多出现一些。这两个目标不一定冲突,但也不一定兼容。
它相当于给模型加了一个约束,但这个约束的目的不是帮用户回答问题,而是打水印。
这一定会影响生成质量吧?
确实有学术实验量化了这个影响。加了水印之后,翻译任务的BLEU分数从21.8降到19.5,摘要任务的BERTScore从32.70降到31.21。不是理论上的担忧,是实测出来的退化。
所以结论似乎很清楚了:水印本质上是在"检测能力"和"生成质量"之间做取舍。想要水印更可靠,就得把绿色词的分数抬得更高,但质量损失也更大。你不可能同时拥有完美的水印和完美的输出。
对吧?
如果你觉得这个推理没问题,那接下来的东西可能会让你有点意外。
五、一种反直觉的可能:加了水印,但什么都没变?
有一种更精巧的水印方案,直接挑战了上面的逻辑。
回到那个生成过程。模型算出"好"35%、"不错"20%、"棒"12%。然后要掷骰子选一个。
绿色词表方案动的是分数本身。
这种新方案什么都不动。概率分数一个数字都没改。它动的是骰子。
什么意思呢?
原来模型掷的是一个真正的随机骰子。现在换成了一个由密钥控制的"假骰子"。这个假骰子的统计性质跟真骰子完全一样,长期来看每一面朝上的概率相等。但具体每次掷出几,是密钥说了算。
效果是什么?
一个不知道密钥的人,观察模型的大量输出,会发现"好"出现大约35%,"不错"出现大约20%,跟没有水印时一模一样。看不出任何异常。概率分布完全不变。
但知道密钥的检测者,可以验证每一次选词是否与密钥指定的"应该选的那个"一致。如果一致率高得不可能是巧合,那就是有水印。
这就奇怪了。概率分布没变,质量怎么可能下降呢?
确实可以不下降。这类方案在学术上叫"无失真水印"(distortion-free watermark),理论上可以证明它不改变模型的边际输出分布。
但等等。如果什么都没变,信息从哪里来?凭什么就能检测出水印?总得有什么东西变了吧?
六、变的不是分布,是"自由"
这是我觉得整个话题里最微妙的一个点。
没有水印的时候,模型面对"好"35%、"不错"20%,它是真的在随机选。这次可能选"好",下次可能选"不错",没有规律。
有了水印之后,同一个位置,密钥指定了选"好",那就一定选"好"。模型失去了"碰巧选中'不错'"的自由。
但这种"自由"重要吗?
对用户来说,"今天天气真好"和"今天天气真不错"没有任何区别。你问天气怎么样,模型说"真好"还是"真不错",你根本不在乎。
这就触及了一个关于语言的有趣事实。
自然语言有大量的冗余。同一个意思,可以有几十种说法:"因此"和"所以","但是"和"不过","首先"和"第一","这个方案效果不错"和"该方案表现良好"。用户对具体选哪个几乎没有偏好。
模型每遇到一个这样"怎么说都行"的位置,水印就可以偷偷占用一点自由度,编入一点信号。
单个位置的信号极其微弱,看一个词什么都看不出来。但一篇两千字的文章可能有几百个这样的位置。几百个微弱信号累积起来,统计置信度极高。
所以长文本反而是水印最舒服的场景:每个位置的干预轻到几乎不存在,靠数量取胜。而一条几十字的短回复,位置太少,信号不够,检测反而不可靠。
想到这里,我觉得可以重新回答前面那个问题了:水印到底有没有在"让AI说不太对的话"?
更准确的说法是:水印没有让AI说错话,它只是在AI本来就无所谓的地方替它做了选择。
不是在"正确答案"和"错误答案"之间为了水印选后者,而是在大量"同样正确"的表达之间,选了满足密钥规则的那一个。
七、那如果AI"不是无所谓"呢?
前面说水印利用的是模型"怎么说都行"的位置。但不是所有位置都有这种自由度。
"中华人民共和____",后面只能是"国"。
"2 + 3 =",后面只能是"5"。
写Python的时候,def main(后面的结构高度受限。
这些地方,模型的概率分布极其集中,几乎全部概率都堆在一个词上。学术上叫"低熵位置"。
在这些位置,如果水印的密钥碰巧要求模型选一个不同的词,怎么办?
一个合理的水印算法会选择放弃。宁可这个位置不嵌水印,也不能让模型输出"中华人民共和军"。
所以水印的工作模式其实是这样的:在高熵位置("怎么说都行"的地方)安静地嵌入信号,在低熵位置("只能这么说"的地方)安静地沉默。
这也引出了一个有意思的推论:如果一整段文本全是低熵内容,比如一张纯数字的表格、一段JSON、一串严格的代码,水印几乎无处可嵌,检测也就基本失效。
代码比散文难打水印,散文比口语难打水印。不同类型的内容,可水印性天差地别。
八、那我把水印洗掉不就行了?
这大概是所有人听到水印之后的第一个实用问题。
答案是:可以洗,而且不难。
原理也很直接。水印的信号存在于特定的选词里,那只要把词换掉,信号就没了。
最简单的方法:把Claude的输出扔进另一个没有水印的模型,让它理解原文的意思,然后用自己的话重新说一遍。新模型的选词过程不受Claude密钥的控制,生成出来的文本自然不带原来的统计模式。
来回翻译也有效。中文翻成英文再翻回来,大量措辞被替换,原来的信号就稀释了。
大幅度的人工改写同样可以。你把一段话拆散重组,换掉足够多的词,信号就低于检测阈值了。
学术上把这类攻击叫"改述攻击",有研究针对七种文本水印方案设计了定向重写,报告了接近100%的攻击成功率。
这也是为什么Anthropic自己的措辞非常克制:"可能在一些编辑后仍然存在。"(may persist through some editing。)"可能""一些",每个字都在留余地。
不过有一点值得注意。如果Anthropic用的不是基于单个词的统计水印,而是更高级的"语义水印"(学术上已有原型,比如SemStamp),那简单的同义词替换可能不够。因为语义水印的检测器看的不是"你用了'因此'还是'所以'",而是"这句话的整体语义落在了空间里的哪个区域"。换几个词而意思不变,它可能还是检测得到。
Anthropic具体用了哪种方案?目前不知道。技术文档仍然是"即将发布"的状态。
这件事有趣的地方在于:如果未来所有主流AI都加了水印,"去水印"本身就会变成一种产业需求,进而催生一轮持续的技术攻防。水印方案越来越鲁棒,去水印工具越来越精细,双方不断升级。就像杀毒软件和病毒的关系。
九、比技术更有意思的:水印暴露了语言的什么秘密?
到这里技术层面的东西基本讲完了。但我觉得最值得多想一步的,不是水印本身怎么做,而是它能做成这件事所揭示出的一个关于语言的事实。
水印之所以能成立,前提是:自然语言的冗余度远比我们平时感受到的要大得多。
我们说话写字的时候,感觉每个词都是自己"选"出来的。但仔细想想,大量的选择其实是无意识的、随意的。你写"因此"而不是"所以",说"比较显著"而不是"相当明显",先摆论据再给结论还是反过来,这些决定在大多数时候对你想传达的意思没有任何影响。你只是碰巧选了一个。
而水印证明的是:在这些"碰巧"的选择里,可以偷偷藏进一整套隐形的信息系统,读者完全不会察觉。
这其实就是经典的隐写术。自然语言天然是一个绝佳的隐写载体,因为它的表层容量(有多少种说法)远大于它实际需要承载的语义信息量(要表达什么意思)。这中间的差值,就是可以被悄悄征用的空间。
你平时读到的每一段文字,理论上都可能在你毫无感知的情况下,额外编码着一层你看不见的信息。你以为你读到的只是作者的意思,但词语的选择本身可能还承载着另一层信号。水印只是这个原理的一个具体应用。
想到这里其实有一点点让人不安。
十、跟"AI味"检测是一回事吗?
我之前写过一篇文章《连AI味是什么都说不清,凭什么用它卡我论文?》讨论"AI味"的本质。那篇文章里我的核心观点是:所谓AI味,本质上不是AI太平庸,而是AI走了人类从来不走的语言通道。语法没错,语义也通,但就是没人会那么说话。比如我们说"大雾"不说"小雾",说"提高水平"不说"增加水平"。AI恰恰就会踩到这种地方。
现在回头看,水印的技术原理跟AI味的问题恰好形成了一个对照。
水印利用的是什么?是语言中"怎么说都行"的区域。"因此"和"所以"都可以,模型选哪个对用户没影响,水印就在这里做文章。
AI味暴露的是什么?是语言中"只能这么说,但AI不知道"的区域。"大雾"可以但"小雾"不行,这条规则没有写在任何语法书里,是人类约定俗成的,但AI的泛化本能会让它越界。
一个是冗余,一个是约定。它们是语言这枚硬币的两面。
而市面上的那些AI检测工具(困惑度、爆发度之类的)做的事情跟水印完全不同。它们手里没有任何密钥,只能从文本的表面统计特征去猜"这像不像AI写的"。
打个比方。水印检测就像魔术师拿着暗号对照牌序,一看就知道你是不是按规则翻的。AI味检测则像一个观众,没有暗号,纯粹靠观察你翻牌的"感觉"来猜你有没有作弊。前者是数学题,后者是概率猜测。误判率完全不在一个量级。
但有意思的是,水印解决了"检测可靠性"的问题,却没有解决一个更根本的问题:检测到了,然后呢?
十一、水印证明的到底是什么?
Anthropic自己说得非常小心:检测到水印意味着文本"经过了Claude处理",不等于"Claude写了这段话"。
你自己写了一篇论文,只是让Claude帮你润色了几个句子,最终文本可能就带上了水印。
你自己写了98%的内容,Claude碰了2%,检测结果显示"有水印"。
这个"有水印"和"100%由Claude从零生成"在检测层面是一回事。水印可以告诉你"Claude参与过",但不能告诉你Claude参与了多少。
这是一个很重要的区别。如果将来有人拿水印检测结果来做判断,比如学校拿它来判定学生是否用AI写论文,"经过AI处理"和"由AI撰写"之间的鸿沟就会成为一个核心争议点。
还有一个不太有人讨论但技术上完全可行的方向:如果水印的密钥和用户账号关联,那检测到水印就不仅仅是"这是AI写的",而是"这是某个特定用户让AI写的"。Anthropic目前没有说会这么做,但原理上没有任何障碍。
十二、AI的文字需要盖章的时代
写到最后,我觉得水印这件事最值得感慨的,不是技术本身多精巧。
而是我们已经走到了一个需要给AI的文字盖章的时代。
AI写的东西越来越像人,人写的东西(有时候是因为受了AI的影响)越来越像AI。两边在靠拢。面对这个局面,水印至少提供了一个比困惑度检测靠谱得多的思路:不去猜"这像不像AI",而是从源头打上一个可验证的标记。
但它依然解决不了最根本的那个问题。
当一个人用AI帮忙修改了自己写的文章,这篇文章到底是谁写的?
这个问题,大概不是任何技术能够回答的。

如果你也在自己跑模型、写代码、做项目,
或者使用Claude和Claude code,
欢迎点赞关注转发一键三连,然后加我微信,备注写清"你在做的AI方向",聊得来的话我拉你进群。纯围观的和小白就不加了,有一定门槛。当然你也可以简单粗暴的甩给我999元,我拉你进群,这个没门槛。
