Claude 水印攻防:watermarks-remover 六天攒到 12,574 星

Claude开源AI

8 月 11 日,Anthropic 发布文章《How Claude's text watermark works》,第一次完整解释了 Claude 文字水印的技术原理。六天后,GitHub 上一个专门清洗 AI 水印的开源工具 watermarks-remover 攒到 12,574 颗星。这个 8 月 11 日当天创建的仓库, Contributors 已有 22 人,fork 数超过一千;而 Anthropic 用来检测水印的官方 API,至今还停在「正在确定实现细节」的阶段。

清洗工具跑在了检测器前面。这场攻防的起点,是欧盟 AI 法案的透明度条款:Anthropic 与 Google、Meta、Microsoft、Mistral、OpenAI 等约 190 家签署方在 2026 年 7 月签下《AI 生成内容透明度行为准则》,承诺对 AI 生成内容进行标记。8 月 2 日之后发布的 Claude 新模型,输出全部携带水印,且全球生效,没有仅限欧盟的区域开关。

Anthropic 水印公告配图

水印埋在哪里

Claude 的文字水印是 Google DeepMind 2024 年发表在 Nature 上的 SynthID-Text 方案的一个版本,属于 2022 年 Scott Aaronson 提出的技术谱系。原理用一句话概括:模型生成每个词时都要在多个候选里做选择,水印技术只改变这个随机选择的来源。

Anthropic 官方给了一个大富翁类比:玩家每回合掷骰子决定走几步,现在把骰子换成圆周率数字表,从第 1,012,845 位开始逐位取用。对玩家来说结果依然随机,游戏体验没有任何变化;但事后如果拿到完整的走步序列,并且知道圆周率的值,就能反推这局游戏用的是数字表还是真骰子。水印同理:Claude 选词依然随机,但随机的来源从任意数发生器换成了密钥和前文共同决定的函数,持有密钥的人检查一段文字的选词序列,就能给出「这段文字由 Claude 参与生成」的概率判断。

Daring Fireball 的 John Gruber 在 8 月 16 日的长文里把机制拆得更细:模型在每个生成点把候选词动态分成「绿表」和「红表」,带水印的采样会略微提高绿表词被选中的概率。同一个词在不同位置可能属于不同的表,所以不存在一份固定的「Claude 偏爱词清单」;检测依赖的统计信号随着文本变长而增强,文本太短则无法得出任何结论。这与抛硬币判断公平性的逻辑一致:抛的次数越多,对硬币是否做了手脚的判断越可靠。

Anthropic 强调水印不影响输出质量。他们引用 DeepMind 在 SynthID-Text 论文中的实验:向部分 Gemini 流量提供带水印模型,对比用户点赞点踩率,没有统计显著差异;人工对照评审也看不出质量区别。水印在事实性强的段落更稀疏,因为像「牛顿最著名的著作是《原理》」的下一个词没有选择余地;代码中要求精确的部分同样不适用,水印主要存在于注释等存在自由选择空间的区域。翻译是个例外:Claude 产出的翻译每个词都由它选择,因此携带完整水印。

三条标记通道

Anthropic 的标记体系实际覆盖三条通道。第一是嵌入文字的统计水印,随复制粘贴传播,轻度编辑后仍可能保留,完全重写才会消失。第二是文件元数据:Claude 生成 PNG、JPG、SVG 等受支持格式时,会在文件里附加符合 C2PA 开放标准的加密签名,声明该文件由 Claude 制作或处理,相机厂商和图片编辑软件用同一标准记录来源。第三是适用范围。据 Gruber 转述 Ben Thompson 在 Stratechery 付费更新中的梳理,欧盟规定适用于超过 200 token(约 150 词)的文本,且服务商必须在服务条款中要求用户不得移除水印。

这个时间点上标记义务正在快速扩散。7 月,YouTube 对三类「AI 假原创」内容切断变现通道;8 月初,Suno 宣布给 AI 生成音乐加水印;8 月 11 日轮到 Claude 的文字输出。据台湾科技媒体动区报道,欧盟透明度规定 7 月开始执行,不主动标记 AI 身分的内容最高可罚全球营收 3%。

清洗工具的三层设计

watermarks-remover 由开发者 Guillaume Meyer 创建,仓库描述直白:剥离多厂商 AI 溯源标记,覆盖 Claude、Gemini 的 SynthID-Text、OpenAI 的来源标记以及开源模型常用的 Kirchenbauer 式标记。据鉅亨号报道,Meyer 的 X 推文介绍这个项目的浏览量已接近 200 万。

watermarks-remover GitHub 仓库

工具把清洗分成三层,对应三种标记通道。Layer A 处理不可见 Unicode:零宽空格、零宽连接符、双向文本控制符、异形空格等夹在正文里不占宽度的字符,用确定性 Python 脚本逐字符检查并删除,结果可以验证,能列出清除了哪些码点。文件层处理 C2PA、EXIF、XMP 和文档属性,支持 PNG、JPEG、WebP、BMP、GIF、TIFF、SVG、PDF、DOCX、EPUB、ODT、HTML、Markdown 共 13 种格式。PDF 有个值得展开的细节:ExifTool 对 PDF 的编辑是增量式的,删掉元数据后原始字节仍留在文件里,官方工具可以还原;所以工具在 exiftool 之后追加 qpdf 线性化重写,从对象图重新序列化整个文档,才把未被引用的元数据对象真正丢弃。

Layer B 是最难的部分,对付统计水印的方式是整段重写:调用另一个模型对原文做大幅改写、回译或重新措辞,破坏原有的选词统计规律。仓库文档明确建议重写时使用非同源模型,拿 Claude 重写 Claude 的文本,很可能洗完旧水印又盖上一层新水印。

整套机制封装为标准库 HTTP 服务,暴露 /inspect 和 /clean 两个端点,自动生成 OpenAPI 3.0.3 契约,也发布了带 exiftool、qpdf、c2patool 的 Docker 镜像。它同时以 Agent skill 的形式分发,安装后一句 /remove-ai-marks 即可调用。

工具自己承认做不到的事

这个仓库的 README 有一段少见的长免责声明,核心是:在厂商公开检测器和密钥之前,没有任何工具能诚实地证明「这段文字已通过官方检测」。它要求报告必须区分可验证的清除(Unicode 计数、元数据操作)和 best-effort 的 Layer B 重写。

关于 Layer B 的代价,文档写得同样直白:统计水印的信号分布在几乎每个句子的选词里,清除意味着逐句重写,调整段落顺序或改标题几乎不动信号;而任何重写都会把原文的措辞换成重写模型的措辞,损耗语气、风格和精确度,用于生产环境的文案时,这种降级对最在意文字的人是可见的。文档最后把这个逻辑推到头:如果计划本来就用更便宜的模型重写一遍,为什么不一开始就直接用便宜模型生成。

验证方面,工具集成了清华 THU-BPM 的 MarkLLM 框架(Apache-2.0)做受控实验:给测试文本加水印,执行 Layer B 重写,再检测 KGW 或 SynthID-Text 标记是否消失,评分模型默认 facebook/opt-1.3b。但 README 反复强调这是验证工具,没有预言能力:MarkLLM 的检测只对生成时使用的同一套方案配置和密钥有效,无法证明厂商检测器会漏判。图像侧的像素水印清除依赖外部 CtrlRegen 后端,需要下载约 10 GB 模型,官方 Google SynthID 检查仍是最终裁判。

动区的总结点出了当前局面的实质:厂商没公开检测器,无法证明水印扛得住清洗;工具作者也没有检测器,无法证明自己洗得掉。在检测器公开之前,双方都拿不出证据。BleepingComputer 的观察是,这类水印移除工具正在大量涌入互联网,几乎没有一个能证明自己真的有用。

争议的焦点不在技术

Gruber 的反对代表了一种写作立场:Anthropic 最初的帮助文档声称水印「不可感知」且「不改变含义、质量与可读性」,实际方案是让模型在统计上偏向特定选词,这在他看来属于掺假。他的原话很重:模型本应把推理预算全部用于选出最精确的词,现在却要为一个对用户没有任何好处的标记目的让路。Michael Lopp 在 Rands in Repose 的回应标题是《RIP Claude》,称这是水印战略里「聋得离谱的第一枪」。

误伤场景是更实际的担忧。Jeff Gamet 指出,水印会附着在 Claude 处理过的一切文本上,包括校对和摘要;一个全部手写的作者引用了一段 Anthropic 网站的文字,如果那段文字本身出自 Claude,整篇文章就可能被标记为 AI 生成。Anthropic 官方 FAQ 也承认:水印只能判断 Claude「可能参与过」,无法区分「Claude 写的」和「Claude 大改过的」,检测不到标记也不代表内容出自人类。

Anthropic 表示检测 API「即将推出」。在那之前,水印攻防的双方都在盲打:埋标记的一方无法证明标记的鲁棒性,洗标记的一方无法证明清洗的有效性,中间隔着一份谁也看不到的密钥。

来源:AnthropicDaring Fireballwatermarks-remover README动区 BlockTempo