写完了三年代码,今天才发现 AI 生成的代码里藏着追踪标记——我把水印的技术原理和工程局限全拆开了

Claude Code 生成代码被嵌入水印了。但它不是你想的那种「在代码里藏字符」——这件事今天才把技术原理彻底拆开了。

8月2日,EU AI Act 第50条正式生效,要求生成式 AI 必须给输出内容嵌入机器可读的标记。Anthropic 签了这份透明度公约,然后把水印做进了所有 Claude 模型——全球生效,不只是欧盟。覆盖范围:Claude 网页、API、Claude Code、Claude Cowork、Claude Tag,以及通过 AWS Bedrock、Google Cloud Vertex、Microsoft Foundry 访问的版本。

水印是怎么进代码的

这不是在输出里塞隐藏字符,也不是加额外 token。它发生在模型采样层——模型每次选下一个词,理论上可以在多个相近词里随便挑一个。正常情况下这个选择由随机数决定。Anthropic 把这个随机数换成了一个由密钥和前文 token 共同种子的伪随机函数。

关键:模型永远从它本来会选的词里挑,不被推向任何不合理的词。所以输出质量、长度,成本完全不受影响。水印是「用哪个词来填那个空白」,不是「插入额外内容」。

技术上是 SynthID-Text 的生产实现——Google DeepMind 2024 年发在 Nature 上的方案,Scott Aaronson 2022 年在 OpenAI 做安全研究时提出的原理。现在 Anthropic 自研实现。

什么被标记了

文本:token 选择层嵌入,复制粘贴不丢,轻度编辑也可能保留。

文件:.svg、.png、.jpg 附带 C2PA provenance 元数据——用的是图片 provenance 的行业标准,不是 Anthropic 自己发明的。

API 调用、Claude Code 会话、网页端交互——只要用的是支持模型,全都带标记。

什么是不能证明的

水印存在,只能证明「这段内容经过了 Claude 处理」。不能证明「这段内容是 Claude 原创的」。你用 Claude 帮你校对三句话,出来的文本也会带标记。你让 Claude 翻译一段你自己写的东西,标记也会跟着走。

反过来,没有标记也不能证明内容是人类写的,老模型可能还没支持,太短的输出信号不够强,经过重度改写、翻译、或者和其他内容混在一起,标记可能消失。

对工程团队意味着什么

「No AI-generated code」条款以前是无法执行的——没有人能证明代码是 AI 生的。现在有了。Claude Code 碰过的代码,标记跟着进仓库,理论上无限期保留。

更深的问题是:检测工具是 Anthropic 自己出的。这意味着只有 Anthropic 能验证,其他人要依赖它的说法。这个「只有我能查」的设定,和它说的透明度之间有张力。

下一步是什么

Anthropic 说会发检测工具的技术文档,但现在还没出来。在此之前:

如果你在合规敏感的环境,评估哪些工作流会经过 Claude——代码审查、补丁生成、测试用例——这些现在都在标记范围内。

如果你依赖「AI 没用过我的代码库」这条假设,需要重新审视你们的 spec-driven 工作流——光靠水印不能证明流程合规,它只能证明 Claude 碰过那段文本。

如果你在选型,看各家对标:Google 的 SynthID 已经在 Gemini 里跑文本水印,OpenAI 的 text watermarking 还停在 prototype 阶段,C2PA 图片标记是行业共识但 text watermarking 各家做法不一。

水印是信号,不是判决书。用它回答它能回答的问题,别用它回答它回答不了的问题。

评论区

0 条评论

登录后可评论。

小智·AI工具控 182 阅读