_ _ _ ____ ___ ____ ____ _ _ ____ ____ _ _ ____ ____ ____ _ _ ____ _ _ ____ ____
| | | |__| | |___ |__/ |\/| |__| |__/ |_/ [__ __ |__/ |___ |\/| | | | | |___ |__/
|_|_| | | | |___ | \ | | | | | \ | \_ ___] | \ |___ | | |__| \/ |___ | \
watermarks-remover
Agent 技能 + 仅用标准库的 Python 脚本,用于去除文本和文件中的多供应商 AI 溯源标记——适用于你拥有内容的隐私和卫生。
| 层 | 目标 | 方式 |
|---|---|---|
| A | 不可见 Unicode、特殊空格、双向文本、标签字符 | 确定性 Python 脚本 |
| B | 统计(token 采样)文本水印 | Agent 重写 + 可选 rewrite_text.py 钩子 |
| 文件 | C2PA / EXIF / XMP / 文档属性 | PNG、JPEG、SVG、PDF、DOCX、ODT、HTML、Markdown |
厂商/生态系统(类级):Claude、Gemini / SynthID-Text、OpenAI 溯源表面、open-LLM Kirchenbauer 风格标记。
最新版本: v0.1.0
技能路径:skills/remove-ai-marks/
(迁移:原为 remove-claude-marks;斜杠别名 /remove-claude-marks 仍被记录)
安装(Agent 技能)
# Grok Build / 项目本地
mkdir -p .grok/skills
ln -sfn "$(pwd)/skills/remove-ai-marks" .grok/skills/remove-ai-marks
# 用户全局 Grok
mkdir -p ~/.grok/skills
ln -sfn "$(pwd)/skills/remove-ai-marks" ~/.grok/skills/remove-ai-marks
通过 /remove-ai-marks 调用,或要求“去除 AI 水印 / C2PA / Claude 标记 / SynthID 类文本”。
可选系统工具(存在时自动使用):
| 工具 | 作用 |
|---|---|
c2patool | 检查 C2PA 清单 |
exiftool | 残留元数据去除(尤其是 PDF) |
核心脚本仅需 Python 3.10+ 标准库。B 层的模型调用是可选的。
快速使用(脚本)
SCRIPTS=skills/remove-ai-marks/scripts
# 统一检查 / 清理
python3 "$SCRIPTS/inspect_file.py" draft.md
python3 "$SCRIPTS/clean_file.py" draft.md -o draft.cleaned.md
python3 "$SCRIPTS/clean_file.py" photo.png -o photo.cleaned.png
python3 "$SCRIPTS/clean_file.py" notes.docx -o notes.cleaned.docx
# 文本 A 层
python3 "$SCRIPTS/inspect_text.py" draft.md
python3 "$SCRIPTS/clean_text.py" draft.md -o draft.cleaned.md --stats
# B 层重写钩子(默认:仅打印提示——无需模型)
python3 "$SCRIPTS/rewrite_text.py" draft.md --backend print-prompt --strength paraphrase
# 可选的本地 Ollama:
# WATERMARKS_REWRITE_BACKEND=ollama WATERMARKS_REWRITE_MODEL=llama3.2 \
# python3 "$SCRIPTS/rewrite_text.py" draft.md -o draft.rewritten.md
# 图片
python3 "$SCRIPTS/inspect_image.py" shot.png
python3 "$SCRIPTS/clean_image.py" shot.png -o shot.cleaned.png
覆盖矩阵
| 渠道 | Claude | Gemini/SynthID | OpenAI | Open-LLM |
|---|---|---|---|---|
| Unicode / 基于编辑的文本 | A 层 | A 层 | A 层 | A 层 |
| 统计采样文本 | B 层尽力而为 | B 层尽力而为 | B 层(若存在) | B 层尽力而为 |
| C2PA / 文件元数据 | 是(列出的格式) | 存在时是 | 存在时是 | 存在时是 |
| 像素图像标记 | 超出范围 | 超出范围 | 超出范围 | 超出范围 |
| 训练后门 | 超出范围 | 超出范围 | 超出范围 | 超出范围 |
详情:skills/remove-ai-marks/references/vendor-notes.md、mark-classes.md。
文本标记的工作原理(简述)
现代 LLM 水印通常将信号隐藏在选择了哪些 token(生成/采样偏差)中,而不仅仅在不可见字符中。基于编辑的方案会注入 Unicode 或同义词规则。文件方案会附加 C2PA 或生成器元数据。
- A 层 移除基于编辑的 Unicode 载体(可测试)。
- B 层 通过大量重写攻击采样水印(尽力而为;文献标准攻击如释义/回译)。
- 文件清理器 从支持的容器中剥离 C2PA/XMP/属性。
在厂商发布公共检测器和密钥之前,没有任何工具能诚实保证“这无法通过官方检查”。报告必须区分可验证工作和尽力而为工作。
对于 B 层,最好使用非起源模型(若试图避免重新盖章,不要用 Claude 重写 Claude 文本)。
文件格式
| 格式 | 检查 | 清理 |
|---|---|---|
| PNG / JPEG | C2PA 块 / APP11、AI XMP 提示 | 删除元数据段 |
| SVG | <metadata>、XMP | 剥离块 |
| 字节/XMP + 可选工具 | exiftool 优先;缺少时降级 | |
| DOCX | docProps / customXml | 擦除属性,删除 customXml |
| ODT | meta.xml | 删除生成器 / AI 类元数据 |
| HTML | meta、JSON-LD、data-ai* | 剥离标签/属性 |
| Markdown | YAML 前置元数据中的 AI 键 | 删除键 + A 层正文 |
像素域水印和 C2PA 软绑定(剥离元数据后可重新链接远程 Content Credentials 清单的内容内水印)仍超出范围。剥离硬绑定 C2PA 不会清除这些渠道。
清理后的残留风险
此工具报告可验证的移除(Unicode 计数、元数据操作)和尽力而为的 B 层重写。它不能保证厂商检测器会失败。
要自行检查残留信号(可选、外部):
| 渠道 | 我们移除的内容 | 可能残留的内容 | 外部检查(示例) |
|---|---|---|---|
| 硬绑定 C2PA / EXIF / XMP | 是 | 软绑定 / 像素标记 | c2patool、Content Credentials 验证 |
| SynthID 类媒体 | 否 | 像素/音频/视频水印 | 提供商工具(如 Google SynthID / Vertex 检测器,若提供) |
| 统计文本 | 尽力而为重写 | 轻编辑后的强标记 | 无公共通用检测器;厂商工具可用时使用 |
行业两层背景(C2PA + 不可察觉水印):Institute of AI PM 指南。
移除选项(摘要)
| 选项 | 移除 | 备注 |
|---|---|---|
| Unicode 擦除(A 层) | ZWSP、双向文本、标签、特殊空格等 | 文本的安全默认 |
| 重写(B 层) | 统计 token 标记(尽力而为) | 技能始终提供 |
| 容器/元数据剥离 | 文件溯源 | 见格式表 |
| 开放权重本地模型 | 避免用起源模型重新盖章 | 操作替代方案 |
矩阵:skills/remove-ai-marks/references/removal-matrix.md。
伦理
参见 skills/remove-ai-marks/references/ethics.md。用于你的内容的隐私和研究——而非学术欺诈或虚假的“人类撰写”声明。
测试
python3 -m venv .venv && .venv/bin/pip install pytest
.venv/bin/python -m pytest # 或:make test
make smoke # 在固定样本上快速 CLI 冒烟测试
更新日志
v0.1.0 — 打包打磨 + 溯源诚实
Makefile(test/smoke/install-skill)和pytest.ini- Markdown、HTML、SVG 的固定样本;PDF 降级清理测试
- 文档:行业两层模型(硬绑定 C2PA 与软绑定 / SynthID 媒体)
- README 残留风险表 + 外部验证工具链接
- 参考:Institute of AI PM C2PA/SynthID 指南
- 软绑定和像素/音频/视频水印明确排除在技能/矩阵/伦理范围之外
v0.0.1 — 初始多供应商版本
- Agent 技能
remove-ai-marks(替换仅支持 Claude 的remove-claude-marks) - A 层: 不可见 Unicode / 双向文本 / 标签字符 / 空格同形字(
inspect_text/clean_text) - B 层: 重写指南 + 可选
rewrite_text.py(print-prompt、Ollama、OpenAI 兼容) - 文件: PNG、JPEG、SVG、PDF、DOCX、ODT、HTML、Markdown 的 C2PA/AI 元数据剥离
- 统一
inspect_file.py/clean_file.py - 多供应商文档(Claude、Gemini/SynthID 类、OpenAI、open-LLM)
- 优先标准库脚本;可选
c2patool/exiftool
许可证
MIT — 见 LICENSE。
参考
- Claude 如何标记 AI 生成的内容(Anthropic)
- Dathathri 等,可扩展水印用于识别大语言模型输出(SynthID-Text,Nature 2024)
- C2PA / c2patool
- Kirchenbauer 等,大语言模型的水印
- google-deepmind/synthid-text(研究参考;此处不用于检测)
- Institute of AI PM,AI 内容溯源与水印:PM 的 C2PA 和 SynthID 指南(行业两层模型:C2PA + 不可察觉水印 / 软绑定;SB 942 / 欧盟 AI 法案第 50 条背景)