你把AI写的一段话贴进文档,屏幕上看起来干干净净。
换个编辑器、丢进某些检测器,或检查文件属性,却可能发现另一套“看不见的签名”:零宽字符夹在词缝里,图片带着C2PA凭证,PDF/Word写着生成软件信息,更麻烦的是文本用词分布里藏着统计水印。
这类标记正在变成行业标配。欧盟AI法案推动透明度,Adobe、Google、OpenAI等也在推内容凭证和文本水印。对平台治理有意义,对只想整理自己稿件、去掉多余元数据的人,则变成新的文件卫生问题。
开源项目 watermarks-remover 做的就是这件事:按信号类型分层清理,而不是宣称“一键让AI内容永远检测不出来”。
仓库:https://github.com/guillaumemeyer/watermarks-remover
AI水印其实不是一种东西
把它理解成“图片右下角那个标志”会误判。当前常见至少三类:
1. 不可见Unicode
零宽空格、零宽连接符、双向控制符、特殊空格、隐藏tag字符。肉眼看不到,复制粘贴会跟着走,有时让代码、排版、检索出现莫名其妙的故障。
2. 嵌入元数据
C2PA内容凭证,以及EXIF、XMP、文档属性。常见于PNG、JPEG、PDF、DOCX,也出现在HTML、Markdown乃至部分音视频容器里。复制纯文本可能丢掉,但原文件还在。
3. 统计文本水印
不写进某个隐藏字符,而写进token抽样偏好。SynthID-Text、绿名单/红名单、keyed采样这类方案,靠的是整段话的统计指纹。轻度改几个词,往往还在。
项目说明覆盖的生态包括Claude相关标记、Gemini/SynthID-Text、OpenAI溯源面,以及开源圈常见的Kirchenbauer风格、keyed-Gumbel/EXP一类方案。这是“类别级”覆盖,不是保证某模型某个版本100%对得上。
三层处理,能力完全不一样
层级 | 针对什么 | 怎么做 | 能期待什么 |
Layer A | 隐形Unicode、怪异空格、bidi、tag字符 | 确定性脚本清洗 | 通常可彻底去掉,对正文语义影响小 |
文件层 | C2PA / EXIF / XMP / 文档属性 | 按格式擦元数据 | 文件头里的凭证和属性可清掉 |
Layer B | 统计型token水印 | 重写文本,打散采样模式 | 只能减弱,不能承诺检测不到 |
这条边界必须写进标题级别的认知里:统计水印没有“洗干净包过检”的开关。
原帖也写了同一句:统计水印只能通过重写减弱,无法保证完全不可检测。
重写还会改变句式和语气。要保留原文每个用词,又要统计指纹归零,这两件事本身打架。
支持哪些文件?
仓库当前覆盖很宽,文本和文件是一条流水线里的两段:
- 图片:PNG、JPEG、WebP、AVIF、HEIC、BMP、GIF、TIFF、SVG
- 文档:PDF、DOCX、XLSX、PPTX、EPUB、ODT、HTML、Markdown
- 音视频容器也有元数据清理路径(如MP4/MOV、WAV、MP3、FLAC)
日常最有用的场景其实很具体:
- Markdown/HTML草稿里扫出隐形字符,避免贴进代码仓库后出现怪差异
- 导出的PNG/JPEG去掉生成器写入的C2PA和EXIF
- Word/PDF属性里的软件名、作者字段、凭证清单做一次卫生处理
像素级隐写(某些SynthID图像水印)和文本统计水印不是同一难度。项目可选接CtrlRegen、MarkDiffusion、reverse-SynthID等外部后端,那是增强项,不是默认一条命令就能“图也洗到检测为0”。
它怎么用,适合嵌进哪?
设计上不像只能点网页的小工具,而像可被Agent调用的卫生模块:
- Python脚本检查/清理文本和文件
- HTTP服务:inspect、clean、batch
- Claude Code一类环境可当Skill调用
- 可做写入后自动清理的hook,或pre-commit里检查暂存文件
- Docker可拉起核心服务
对写作者,最大价值是Layer A加元数据层:先把“看不见但会惹祸”的字符和文件头清掉。
对开发者,价值是流水线化:生成→入库→发布前统一过一遍卫生,而不是每篇稿子手工猜。
作者定位写得很清楚:用于你拥有或有权处理的内容隐私与卫生。不是帮人隐瞒合成内容、规避平台或法律要求的披露。
用之前先把预期和红线摆正
值得用的理由:
- 隐形Unicode确实会污染文档和仓库
- 元数据可能比正文泄露更多生成链路
- 开源、分层、能力边界写得相对老实
不该幻想的部分:
- 清掉C2PA不等于内容“变成人类写的”
- 重写后统计分数下降,不等于所有检测器都会放行
- 模型升级、水印方案更换后,旧脚本可能失效
- 在需要标注AI生成的场景里,去掉标记可能直接违规
如果目标是学术提交、新闻署名、平台打标合规,正确动作是按规则披露,而不是追求“检测为人工”。工具解决的是文件卫生,解决不了内容来源的伦理和法律问题。
一个更稳妥的工作流
- 先inspect,看文件里到底有Unicode、元数据还是只有统计嫌疑
- 文本先跑Layer A,图片/文档先去C2PA和EXIF
- 只有你明确接受改写,才考虑Layer B
- 改写后通读事实、术语、引用,别让“去水印”变成“改错意思”
- 对外发布仍按平台和法规决定是否声明AI参与
三步里,前两步对大多数人就够用。第三步是研究/隐私实验,不是日常默认。
写在最后
AI水印会继续存在,因为平台需要溯源,监管需要透明度,模型厂商需要区分合成内容。
普通创作者真正该处理的,往往不是“如何对抗所有检测”,而是:自己的稿件和素材里,有没有不该跟着传播的隐形字符和文件头。watermarks-remover把这三类信号拆开,能清的清,只能减弱的写明白,已经比满网“彻底去水印、保证过检”的标题诚实。
仓库在这里:
https://github.com/guillaumemeyer/watermarks-remover
先扫一份自己的导出文件,看看里面到底藏了什么。很多时候,问题不是模型写得像不像人,而是文件比你以为的多带了几行看不见的尾巴。
