
现在用 AI 辅助写论文、写报告的同学越来越多了。但很多人不知道的是:当你让 Claude、Gemini、ChatGPT 帮你生成文字时,这些 AI 可能会在输出里偷偷埋下肉眼看不见的水印。
这些水印不会影响阅读体验,但如果你把 AI 生成的文本直接提交,理论上厂商或有权限的平台是可以检测出来的。于是问题来了——我合法用了 AI 辅助,又改了不少内容,凭什么还要被标记?
最近 GitHub 上爆火的一个开源项目watermarks-remover,就是冲着这个问题来的。
项目名称:watermarks-remover
仓库地址:github.com/guillaumemeyer/watermarks-remover
Star 数:11k+
作者:Guillaume Meyer
许可证:MIT(可自由使用)
最新版本:v0.5.0
核心依赖:Python 3.10+ 标准库,零第三方依赖
先搞懂:AI水印藏在哪?
大厂给 AI 内容加水印,目前主要走两条路:
第一条:硬水印(文件元数据)
在文件的元数据里直接写上"这是AI生成的"。比如 PNG/JPEG 图片里的 C2PA 标签、PDF 里的 EXIF 信息、DOCX 的文档属性。这类水印是"确定性的"——有就是有,没有就是没有。
第二条:软水印(统计标记)
藏在文字的"选词倾向"里。比如 Google 的 SynthID-Text 会在 AI 生成时对 token(词元)采样做微小的偏移,肉眼读起来完全正常,但用检测器+密钥就能统计出来。这类水印你改几个字可能还残留,必须大面积改写才可能清除。
还有一类更隐蔽的:不可见 Unicode 字符——零宽空格、双向控制符、异形空格等。它们不占显示宽度,但确确实实存在于文本中,可以用来追踪内容来源。
三层架构:能做什么、不能做什么
watermarks-remover 把工作分成三层,每一层的"可验证程度"完全不同——这也是它最值得说的地方:它对自己的能力边界诚实得不像一个三天冲上榜首的项目。
Layer A不可见字符清理
移除零宽空格、双向文本控制符、标签字符、异形空格等 Unicode 编辑型标记。
确定性清除——跑完脚本,数量都能统计出来,可以用 c2patool / exiftool 对比验证。干净利落。
Layer B统计水印改写
针对 SynthID-Text 这类基于 token 采样的统计水印,通过逐句重写(释义、换句式、换连接词)来打乱信号。
尽力而为(best-effort)——没有任何工具能保证官方检测器一定失效。而且改写会降低文本质量,用项目作者的话说:"扁平化语气、声音和精度。"
Files文件元数据剥离
从 PNG / JPEG / WebP / SVG / PDF / DOCX / ODT / HTML / Markdown 等格式中剥离 C2PA、EXIF、XMP、文档属性等来源标记。
确定性清除——删掉就能用工具验证。但注意:C2PA 软绑定(可重新链接远程凭证的水印)超出范围。
支持的厂商与格式一览
| 通道 | Claude | Gemini/SynthID | OpenAI | 开源LLM |
|---|---|---|---|---|
| Unicode/编辑型文本 | Layer A | Layer A | Layer A | Layer A |
| 统计采样文本 | 尽力而为 | 尽力而为 | 尽力而为 | 尽力而为 |
| C2PA/文件元数据 | ✓ | ✓ | ✓ | ✓ |
| 像素图像标记 | 超出范围 | 可选移除 | 超出范围 | 可选移除 |
注:绿色=确定性清除;橙色=尽力而为;灰色=超出范围
实际怎么用?几行命令的事
核心脚本零依赖,clone 下来就能跑。最简单的用法:
# 先检查文件里藏了什么标记
python3 service/scripts/inspect_file.py draft.md
# 清理文本(Layer A + 文件元数据)
python3 service/scripts/clean_file.py draft.md -o draft.cleaned.md
# 清理图片的 C2PA/EXIF
python3 service/scripts/clean_file.py photo.png -o photo.cleaned.png
# 单独清理文本层的不可见字符
python3 service/scripts/clean_text.py draft.md -o draft.clean.md --stats
# 启动 HTTP 服务(可选,支持 API 调用)
make serve # http://127.0.0.1:8765
如果你用 Docker,一行命令就能跑起来:
docker run --rm -p 127.0.0.1:8765:8765 \
--read-only --tmpfs /tmp \
ghcr.io/guillaumemeyer/watermarks-remover:latest
对于 PDF 文件,项目特别提醒:需要同时安装exiftool和qpdf。因为 exiftool 清理 PDF 元数据是"增量写入"——原始数据字节其实还留在文件里,只是被标记为释放。必须用 qpdf 重新序列化才能真正删干净。这个细节很能说明作者的态度:不糊弄。
最让人服气的部分:它劝你别用它
是的,你没看错。这个项目的 README 里花了整整一章告诉你它的局限,甚至帮你算了一笔账:
作者的灵魂拷问
"如果你本来就要用便宜模型把文本重写一遍来清除水印,那当初何必花钱用旗舰模型生成?直接用便宜模型生成,更简单、更便宜,产出相同或更好的结果。"
三个不能忽视的限制:
1. 改写有代价。统计水印藏在"用词本身"里,清除等于大面积改写。你用重写模型的词替换原始选择,语气和精度都会被"扁平化"。旗舰模型最值钱的语言质感,可能在改写中流失。
2. 不保证通过官方检测。在厂商公开检测器和密钥之前,没有任何工具能诚实地认证"这无法通过官方检查"。项目报告必须区分"可验证"和"尽力而为"。
3. 像素/音频/视频水印超出范围。C2PA 软绑定、音频视频水印、训练后门——都不碰。图像像素水印靠外部 CtrlRegen 做"再生式"移除,非保证。
那到底该不该用?
先说结论:它是给"内容所有者"的隐私工具箱,不是给"内容搬运工"的伪装道具。
什么场景适合用?
- 你合法用 AI 辅助写了份私人文件(简历、投稿、商业方案),改了不少内容后发出去——溯源标记不该一直跟着你
- 你做了张 AI 图片用于自己的项目,不想让文件里带着"AI生成"的元数据标签
- 你是研究者,想理解 AI 水印的工作原理和攻防逻辑
- 你关心内容隐私权——"谁有权决定你的内容要不要被标记"
什么场景不适合?
- 想靠它把 AI 生成的内容伪装成纯人类原创,骗过查重——它自己都不敢保证
- 对文字质量有执念——统计水印的清除会牺牲语言质感
- 学术不端场景——项目 MIT 许可证虽允许使用,但 README 明确写了"非学术欺诈或虚假'人类撰写'声明"
一句话总结:当"溯源"变成平台强加的义务,就必然有人把"擦除"做成开源产品。这个项目最值钱的地方,不是"100%去水印",而是把这场关于内容所有权的辩论,从大厂会议室搬到了你的终端里。
最后聊个话题:AI 生成的内容,到底该不该强制标"AI生成"?
站"必须标"的扣 1,站"内容所有者说了算"的扣 2——评论区聊聊。
项目地址:github.com/guillaumemeyer/watermarks-remover
许可证:MIT | 语言:Python | Star:11k+
— 开源开研 · 你发现值得看的开源项目 —
夜雨聆风