2026-08-17 18:11

Claude 的文字水印,成功把人类套路了

author_path AppSo
头图

本文来自微信公众号: APPSO ,作者:发现明日产品的


上周,Anthropic宣布将为Claude生成的文本加入一种「隐形水印」,周末它终于补上了技术细节。


跟先前猜测的差不多,Claude的文本水印将采用Google DeepMind开发的SynthID。答案也比「往文字里塞几个特殊字符」更复杂,水印并不是写完以后再盖上去的,而是在Claude写下每一个token的过程中,被一点点「写」进文字里。


同一时间,反检测的工具已经出现。GitHub上开始有人制作专门针对文本水印的移除工具。



这的确不是一个抵抗力很强的技术,用大白话说,「拿其它模型洗一洗」,就能破坏隐形水印的效力。


这让Claude的水印一时间变得很尴尬,而且,细思极恐:Claude为了让一段文字以后能够被认出来,需要改变词语被选中的概率;而想让它不被认出来的人,最自然的反击方式之一恰恰就是,重新改写这些词。


Claude的水印,不是「藏」进去的,而是「写」进去的


理解这场攻防,首先得知道,早就已经出现的SynthID到底在做什么。



大语言模型生成文字时,并不是先在脑子里想好一个完整句子,再逐字输出。每一步,它都会根据已经出现的上下文,为下一个可能出现的token计算一组概率,然后从中完成一次选择。


为了方便理解,假设Claude正在补完「这部电影真____」这个句子。此时,它可能面对许多选项,其中几个概率较高的选择是:


「好看」40%


「厉害」20%


「精彩」10%


……


SynthID不会规定Claude必须选择某一个词,也不会删掉某个选项,它做的事情更像是在模型真正做选择以前,根据一套只有检查方知道的规则,轻微调整部分候选token的得分,让其中一些选项比原来更容易被抽中。


到了下一个token,因为上下文已经变化,概率会重新计算,被偏好的候选项也会跟着变化。因此,并不存在一张固定的「Claude水印词表」,即便某个词这一次可能有利于水印,换一个上下文就未必如此。


单独拿出其中任何一个词,人也几乎不可能看出问题。真正能够被检测的,是大量生成选择累积以后留下的统计模式。



可以简单粗暴的,理解成一场只有选择题的考试,老师没有直接「透题」,而是偷偷告诉自己偏心的学生:遇事不决,就选C。


一道题碰巧选中当然毫无意义,十道题也可能只是巧合,毕竟C选项确实存在。


但几百道题之后,如果只有这个学生的选择,无论正确还是错误,C选项的出现异常的高,而且一次又一次与「这个出题老师爱出C」的规则吻合,你就很难解释这是完全意外的。


水印检测做的事情类似,它并不是在寻找「这句话只有Claude才会写」的唯一性证据,而是在问:在一段足够长的文字里,每一个生成节点上都有许多种可能的选项,但为什么最终落下来的token,会持续呈现出与一套秘密规则相符的统计偏好?



「隐形」是在这个意义上的,水印并不对应一个肉眼可以定位的字符,依靠的是统计规律。但这同时留下了另一个问题——既然信号本身就寄生在token的选择上,那么重新选择一次token,也天然可能破坏这套统计关系。


Claude改一遍,用户再改一遍


如果水印藏在文件元数据里,攻击者可以删元数据;如果水印藏在不可见Unicode字符里,可以把特殊字符清理掉。但SynthID的麻烦恰恰在于,它和文字本身揉在了一起。


想把水印拿掉,又不能直接把整段话删除,那么最直接的思路就变成:在尽量保留原意的情况下,重新组织这串token。



换一个同义词、把主动语态改成被动语态,或者,更直接的——干脆交给另一个模型重新「洗」一遍,我洗我自己。


这些都可能让原本累积起来的统计关系被削弱,博主Daring Fireball为了解释这一点,以改写工具Declaude作为一个最直观的例子:原本它用途是「嫌AI味儿太重,洗一下」,这种改写其实就可以顺手把Claude刻意留下的痕迹也抹掉。


市面上也一直流传着Pangram之类工具,用来检测文本有多大程度有AI参与,则让这种攻防进一步从理论讨论变成了现成需求。具体攻击方法可以不同,但目标高度一致:尽可能保留内容,同时破坏检测器赖以判断的token序列。



好一场酣畅淋漓的捉迷藏啊。


为了查出有没有AI参与,模型在生成时得轻微调整词语选择;为了逃过检查,用户要重新选词。为了让水印经得起普通改写,水印系统又需要提高强度;用户就继续去找尽量不改动原意、却更有效破坏统计信号的方法。


从技术上看,这是一场很标准的攻防,防御方想让信号在复制、编辑、格式变化之后继续存在,攻击方则试图用最低成本让检测失效。


文本的情况又和图片、音频有一点很不一样。图片里的水印可以尽量藏在不影响观看的空间里,文字水印能够利用的「空间」,本身就是一个个具体词语、句式和表达选择。


图片来自:Atlasiko


因此,攻防每往前走一步,就需要把手伸向文章本身。


更尴尬的是,这套机制天然对有意规避的人和普通用户并不完全对称。真正决定作弊的人,可以主动寻找非水印模型、重写工具或者反复「洗稿」;没有规避意识的人,可能要默认接受带有水印约束的生成结果。


到头来,最容易被水印标记的,正是那些没想躲着它的人。


所有人都在改词,但谁还在乎这句话怎么写?


捉迷藏到最后,已经不是谁能抓到谁、谁能避免被抓到。


水印方和去水印方虽然站在完全相反的位置上,却共享了同一个前提:一句话似乎可以被拆成「需要保留的意思」和「可以修改的措辞」。


只要大意没有发生明显变化,具体词语,就可以成为技术系统的操作空间,不管是由水印系统操作,还是作者自己来操作。


技术博主、Daring Fireball的作者John Gruber对文本水印最大的质疑,其实可以换成一个更简单的问题:意思差不多,是否就代表文字没有改变?



我们可以来对比这样两句话:


「他终于答应了。」


vs


「他终于松口了。」


两句话都可以描述「一个人最终同意了某件事」,但第二句天然多了一层此前抗拒、经过拉扯才让步的味道。


这两句话同样在传达「意思」上的确差不多,但对真正在意写作的人来说,并不是可以随手互换的两句话。哪怕是在日常生活里,这两句话也承担了略微不同的意味。


Anthropic和Google都强调,水印设计目标是不改变文本的语义、质量和可读性;一个很轻的概率偏置,在实际输出里是否会造成能够被人感知的质量差异,也需要另外的证据。


但有一件事已经发生了变化,那就是模型在选择一个词时,多出了一个与「怎样把这句话写好」无关的优化目标。


过去,一个生成系统至少在理想状态下,是在准确、清楚、自然,在符合用户要求和符合人类书写习惯等目标之间做平衡。


加入文本水印以后,它还需要兼顾「这段文字未来能不能被水印系统认出来」;而当用户试图反制时,文字又多了一轮「怎样改到认不出来」的优化。无论是出于什么目的,双方都可以说,自己尽量没有改变「意思」。


但写作从来都不在于可以脱离词语、保留意思,它们是唇和齿的关系,唇齿相依,文本并不是先有了一团完整的「意思」,再随便挑一组近义词装进去。具体选择什么词,本身就在制造「意思」。


Claude想证明「这句话我碰过」,用户想做到「你认不出来」。当所有人都开始为了证明身份而修改一句话时,「这句话本来应该怎么写」——已经被挤到角落里去了。


这场争执到最后,争夺的并不是技术够不够隐形、无感,而是语言本身那些原本属于风格、节奏和对表达精确度的追求,还有没有容身之处。

本内容来源于网络 原文链接,观点仅代表作者本人,不代表虎嗅立场。
如涉及版权问题请联系 hezuo@huxiu.com,我们将及时核实并处理。