AI 水印能洗干净吗?
AI 输出的内容自带水印,复制粘贴就被识别为机器生成?1746 星项目 watermarks-remover 用 Unicode 字符清洗 + 统计改写硬刚 OpenAI/Anthropic/Google,开发者实测拆解套路、避坑方案全记录。
watermarks-remover:硬刚 AI 水印的开源屠龙刀
项目是啥? 它是一个 Python 小工具,专门把 OpenAI、Anthropic、Google 等厂商嵌入到 LLM 输出里的「水印」剥掉。所谓水印分两类:一类是藏在 Unicode 字符里的隐形标记(零宽空格、不可见分隔符等),肉眼看不见;另一类是基于 token 概率分布的统计指纹,靠比特序列模式识别追溯来源。这个项目 2026 年 8 月 13 日登顶 GitHub Trending,斩获 1746 星,主要原因是 ChatGPT / Claude / Gemini 给文本「盖章」越来越激进,内容农场、独立作者、教育圈怨声载道,watermarks-remover 一出现就成了刚需。
问题一:AI 水印到底藏在文本哪里?
现象:把 ChatGPT 输出复制到 VSCode,开「显示所有字符」会发现行尾冒出一串 \u200B(零宽空格)或 \u202F(窄不换行空格);Gemini 偏好 \u2060,Anthropic 偶尔塞 \uFEFF(BOM)。这些字符人眼看不出来,但任何 CJK 渲染管线、Markdown 解析器都可能把它们当成异常字符处理。
根因:厂商在推理后处理阶段,按伪随机规则在低熵 token 之间插入隐形分隔符,作为可追溯标记。OpenAI 早期论文称之为 green list tokens 模式。
解法:watermarks-remover 用正则把可疑 Unicode 区段全部替换或剥离:
import unicodedata
HIDDEN_RANGES = [
(0x200B, 0x200F), # 零宽字符
(0x202A, 0x202E), # 双向控制
(0x2060, 0x2064), # 不可见算子
(0xFEFF, 0xFEFF), # BOM
]
def strip_hidden(text: str) -> str:
cleaned = []
for ch in text:
if any(start <= ord(ch) <= end for start, end in HIDDEN_RANGES):
continue
cleaned.append(ch)
return unicodedata.normalize("NFKC", "".join(cleaned))
跑一遍再粘贴到 Notepad,幽灵字符一扫而光。
问题二:统计水印怎么破?
现象:有些平台即便文本里看不到任何特殊字符,照样 99% 命中「AI 生成」。这是基于 token 概率分布的统计水印——watermark key 决定哪些 token 属于「绿色列表」,绿色 token 概率被人为抬高。
根因:要在不解密 key 的前提下破除统计水印,几乎只能「重写」。重写会打破原始 token 的概率模式,但新文本要保持语义。
解法:项目集成了一组 LLM 后处理脚本,用 Claude / GPT 本地重写一遍:
from watermarks_remover import StatisticalRewriter
rewriter = StatisticalRewriter(
model="claude-haiku-4",
strength=0.7, # 改写强度
preserve_terms=["API", "kubectl", "WebSocket"],
)
out = rewriter.process(open("draft.txt").read())
strength 越高,破除水印越彻底,但可读性越受影响。0.6–0.8 是社区公认的甜区。
问题三:改写后语义会跑偏吗?
现象:很多用户反映跑完工具,原文那种「程序员味儿」淡了,更像 SEO 流水账。
根因:默认改写 prompt 没给 LLM 锁定语气、人设、领域术语,模型按「通用流畅风格」重写一遍,自然丢失原味。
解法:传 style_guide + preserve_terms,或在配置里加一段 system prompt:
rewrite_prompt: |
你是技术博主,保持第一人称、口语化、断句短。
不要添加原文中不存在的链接。
保留所有代码块原样不动。
术语表:API、K8s、LangChain 不许改写。
之后再跑,文本「人味儿」能恢复七七八八。
问题四:能识别并拆除所有厂商的水印吗?
现象:作者声称 multi-vendor,但实测发现 Anthropic Claude 在 Sonnet 4.5 之后换了算法,命中率掉到 60% 左右。
根因:厂商会持续升级水印方案,开源工具天然滞后。
解法:项目里有 vendor_profiles/ 目录,把每个厂商的清洗规则做成独立模块,更新只需改对应文件,社区维护者每周都在补 PR。生产环境建议同时跑 Unicode 清洗 + 统计改写双通道:
from watermarks_remover import pipeline
result = pipeline.run(
text,
unicode=True,
statistical=True,
vendors=["openai", "anthropic", "google"],
)
问题五:用了这个工具合规吗?
现象:Reddit r/ClaudeAI 和 HN 评论区吵翻了——有人说「用户对自己输出的权利」,有人说「教唆逃避溯源」。
根因:水印本质是 metadata,去除 metadata 在大多数司法辖区并不违法;但部分 ToS 把「绕过安全机制」明确列为违规。
解法:商业用途前建议查平台 ToS;个人写作、学习笔记、二次创作基本没问题。代码里加一行注释表明「用于内容可读性修复」,避免误用即可。
Sources
- GitHub Trending 2026-08-13:guillaumemeyer/watermarks-remover
- r/ClaudeAI:Removing watermarks from Claude output 讨论串
- Hacker News:watermarks-remover hits 1700 stars 主帖
- OpenAI 论文 A Watermark for Large Language Models
- 项目 README 与
vendor_profiles/源码