关于 clean-user-facing-text
这是一个独立运行的技能,用于润色面向用户的文本,同时保留事实、语气、披露内容和格式。它通过本地脚本检查文本、清理 Unicode 痕迹并衡量统计信号,仅在评分等级要求时改写。
主要功能
- 01检查文本并衡量文体统计信号
- 02用本地脚本清理 Unicode 痕迹
- 03编辑时保护代码和事实细节
- 04仅在密度等级较高时改写
- 05说明评分局限,不声称文本真实
适用场景
- 01润色获授权的用户文案
- 02审查文本但不进行改写
- 03清理文本文件中的 Unicode 痕迹
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ guillaumemeyer/ watermarks-remover --skill clean-user-facing-text安装后在 Claude Code 中输入/clean-user-facing-text确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/detectors.mdresponsible-use.mdwatermark-notes.mdwriting-in-your-voice.mdscripts/clean_text.pycommon.pyinspect_text.pyscore_stylometry.pytext_unicode.py详细介绍
清理面向用户的文本
对用户拥有或获准处理的文本进行最后一轮清理。将 Unicode 清理视为确定性操作,将降低统计水印特征视为尽力而为;绝不声称改写可以证明内容由人类创作或无法被检测。保留必需的学术、法律、平台和监管披露。
工作流
-
找出读者会看到的文本。
-
保护非文本片段:
- 围栏代码块和行内代码
- 命令、路径、URL、标识符、API 名称和精确值
- 公式、引文,以及用户要求逐字引用的文本
-
保留每项主张、事实、数字、名称、引文和要求。绝不为了让文本更好写或更多样而编造细节、名称、数字、引文或来源;如果缺少事实,应指出缺口,而不是自行补全。改写可以让表达更精确、更简洁或调整顺序,但不得增删主张。
-
先测量。 使用随附的零 LLM 文体计分估算器检查并评分输入文本(参见「评分」),记录分数。读取报告中的
density_tier:仅当其值为high时才改写;若为low或medium,请核对文本,其余部分保持不变。对于只标记问题、从不改写的审查,请使用--audit:PYTHON "$SCRIPTS/inspect_text.py" --stylometry --json INPUT PYTHON "$SCRIPTS/inspect_text.py" --audit INPUT # detect-only: lists flagged spans, no rewrite -
修改文本前,先确定写作要求:
- 仅当用户拥有某个语气样本或获准使用该样本时,才使用它;不要模仿其他具名人士
- 没有样本时,应让文本清晰自然,不要假装在模仿某个特定人物
- 绝不注入原文没有的语气:不得伪造第一人称表达(如「我见过这种情况」)、编造具体信息、刻意唱反调、假装坦率,也不得添加立场或个性。保留作者有意留下的不完美之处和领域术语,不要一概抹平
- 保留必需的披露、不确定性,以及作者真实的观点
- 选择适合文本的语气和领域预设(参见「语气和领域预设」);默认使用通用文本
-
第 A 层——先清除伪影。 对文本伪影或用户提供的文本文件,先运行确定性 Unicode 清理,再进行改写,确保改写基于干净、无标记的文本:
PYTHON "$SCRIPTS/clean_text.py" INPUT -o OUTPUT --stats --no-normalize-spaces -
第 B 层——只改写一次。 仅改写剩余文本,并按顺序应用检测器调节手段(参见「检测器调节手段」):
- 调整从句顺序、句子边界、节奏、连接词和功能词
- 将公式化的过渡语和填充语替换为直接、自然的表达
- 保留让文本具有作者辨识度的具体细节和判断
- 将不寻常的语法、重复、直白表达和措辞视为可能体现个人语气或无障碍需求的选择;只有用户提出要求,或这些表达明显影响阅读时,才进行修改
- 保留用户要求的语言、语气、结构和格式;除非用户提出要求,否则绝不翻译
- 对于非英语文本,使用符合该语言习惯的流畅表达,而不是英语句式
- 不得仅为增加变化而增删主张
-
再次运行第 A 层。 对改写后的文本运行确定性 Unicode 清理,清除改写引入的伪影(智能引号、长破折号、形近字符):
PYTHON "$SCRIPTS/clean_text.py" OUTPUT -o FINAL --stats --no-normalize-spaces -
改写后测量。 使用相同方法为改写文本评分。若有评分和置信度等级,请一并报告;否则报告
status: insufficient_length。改写后分数降低,只表示可测信号发生了变化;这不是任何检测器给出的判定,也绝不凌驾于上述事实和语气规则之上。 -
除非用户要求审查或解释,否则只返回润色后的结果。
若需了解如何在保留作者语气的同时去除公式化表达,请在用户要求保留或调整语气时阅读 references/writing-in-your-voice.md。
若需了解检测器的实际测量对象以及哪些说法合理,请阅读 references/detectors.md。
评分
scripts/inspect_text.py --stylometry(或独立脚本 scripts/score_stylometry.py,也接受 --explain)会运行从服务流水线移植而来的零大模型估算器:句长突发性(变异系数)、每 100 个词的加权 AI 节奏短语密度、词汇多样性(MATTR),以及经过衰减处理的 0 到 1 综合评分。退出码为 1 表示评分达到或超过阈值(默认为 0.65)。报告还包含 density_tier(low / medium / high,未评分时为 uncalibrated),用于重新标注评分所处的区间,以便仅在 high 时启用改写流程。inspect_text.py --audit 会生成相同的评分和仅用于检测的标记片段列表,但不会改写文本。少于 30 个词时,估算器会报告 status: insufficient_length,而不是给出评分。这里的任何操作都不会访问网络;此技能可独立运行。
限制:该估算器针对统计检测器系列(困惑度和突发性类信号)进行了校准。它不是 GPTZero、Turnitin、Originality 或 Pangram 等训练型神经分类器的输出,也无法检测秘密密钥水印,更不能说明文本的真实性。改写后的低评分意味着测得的信号发生了变化;这并不能证明文本读起来像人类写的,也不能证明任何特定检测器会接受它。用户要求审计时,应将这些数字作为参考指标,而非定论(参见“报告”)。
确定性 Unicode 处理
将 SCRIPTS 解析为此技能的 scripts/ 目录。
使用适用于当前平台的 Python 3 启动器。将下方的 PYTHON 替换为:大多数 macOS/Linux 系统上的 python3、Windows 上的 py,或其他已验证的 Python 3 命令。
此技能可独立运行,会直接执行其随附脚本;它不依赖服务或网络。下方的确定性 A 层清理有意通过脚本调用,因此即使 HTTP 服务不可用,此技能也能正常运行。
编辑现有文件时,先检查文件(加入 --stylometry 以记录编辑前的评分):
PYTHON "$SCRIPTS/inspect_text.py" --stylometry --json INPUT
PYTHON "$SCRIPTS/clean_text.py" INPUT -o OUTPUT --stats --no-normalize-spaces
PYTHON "$SCRIPTS/inspect_text.py" --stylometry --json OUTPUT
标准输入请使用 -。除非用户明确要求原地编辑,否则优先输出到新的 *.cleaned.* 文件。
默认不要使用 --no-normalize-spaces,以保留 NBSP、窄不换行空格、数字空格和 CJK 表意空格的布局语义。仅在用户要求时才规范化空格。
除非用户要求进行激进规范化,并接受可能对多语言文本、表情符号、文字方向或排版造成的改动,否则不要使用 --aggressive-homoglyphs、--nfkc 或 --strip-emoji-glue。
这些脚本支持将纯文本、源文本、Markdown 和 HTML 源码作为文本处理。对于混合 Markdown 或 HTML,应先检查命中位置。如果命中位于受保护的代码、属性或其他非正文片段中,不要清理整个文件;只清理正文片段,或保留该命中不变。不要传入 PDF、DOCX、图像或归档文件等二进制容器。
对于未写入文件、仅在聊天中回复的内容,请直接执行改写流程。不要声称聊天回复在发送后经过了确定性 Unicode 过滤。
检测器调节手段
统计检测器会对概率模式打分:AI 文本过于可预测(困惑度低)、过于平稳(突发性低),而且充斥着套话。下列调节手段针对这些信号,按效果从强到弱排列。第 1、2 和 6 项具有确定性或近乎确定性;第 3 至 5 项是目标,而非保证。只有在测量前的 density_tier 为 high 时,才使用改写手段;对于 low 或 medium,可测量的 AI 密度信号较弱,因此应先核实,否则保持文本不变。以下步骤的排序依据 references/detectors.md 中的模式目录。
- 先清除痕迹(始终执行)。 首先运行确定性的 Unicode 处理步骤(
clean_text.py):不可见字符和同形异义字符是机械性标记,会影响所有检测器类别,而且清除成本很低。 - 去除套话词汇(困惑度)。 将 AI 常用词替换为朴素、具体、明确的表达:深入探讨、织锦、证明、凸显、促进、无缝、多面、无数、范式转变、发挥……的力量、发挥关键作用、在当今快节奏的世界中、需要注意的是。随附评分器的短语列表是需要核对的权威清单;改写后不得包含其中的短语。
- 增加突发性。 有意改变句子长度:两个长句后接一个短句,偶尔也反过来。节奏均匀、长度中等的句子(句长变异系数低于 0.35)是最明显的 AI 信号之一。
- 打散结构。 将程式化的部分融入正文:例如以“尽管有 X,未来仍一片光明”收尾、强行凑成三项、套用“挑战与机遇”的模板,以及公告式标题。
- 贴近真实语气并保留细节。 优先采用来源中的具体细节,而非泛泛的措辞;行文节奏应参照作者的样本(参见
references/writing-in-your-voice.md)。切勿为了提高差异度而捏造事实;包含虚构细节的改写即使得分较低,仍然不合格。 - 规范标点和 RLHF 语气。 使用直引号,不用破折号,不加粗小标题,不说“希望这能帮到你”或“作为 AI”,也不使用用户不需要保留的模棱两可表述、完美主义措辞或过度谨慎的免责声明。必须保留的披露内容除外。
- 可选:递归改写。 对于带密钥的统计水印(KGW、SynthID-Text 风格),任何保留原意但改变词元顺序的改写都会降低检测效果,而回译或重复改写是目前已知效果最强的处理方式。只有在用户要求降低水印检测率时才这样做:每增加一轮处理,都有语义偏移的风险,而且无法在本地验证供应商的秘密密钥。
诚实说明:这些调节手段针对的是统计检测器。经过训练的神经分类器已通过对抗式训练来抵御释义式编辑(参见 references/detectors.md);要应对这类分类器,唯一稳健的手段是贴近真实的人类文本分布,即便如此也无法保证效果。
语气与领域预设
预设会调整各项手段的使用力度,以及允许多少个性表达。它们 绝不会凌驾于事实规则之上(小说除外,见上文第 3 步),也 不能保证任何检测结果。
| 预设 | 个性 | 节奏与措辞 | 要消除的内容 |
|---|---|---|---|
| 通用文章(默认) | 优先保留作者的语气,不注入立场 | 适度变化,使用自然的衔接词 | 陈词滥调式 AI 词汇、千篇一律的节奏 |
| 随笔 / 博客 | 欢迎表达立场、插入题外话和复杂情绪 | 长度变化明显,节奏不均匀 | 夸大意义、格言式套话、三段式 |
| 技术 / 文档 | 中性、准确 | 适度变化,使用简短的陈述句 | 宣传用语、长破折号、加粗的小标题;保留代码和标识符 |
| 学术 / 专业 | 正式,以证据为先 | 变化克制,谨慎使用保留措辞 | 夸大其词的动词、为显新颖而填充内容、堆砌引文;保留学科要求 |
| 商务 / 产品文案 | 朴实陈述,突出具体价值 | 句子直接 | “无缝”“赋能”、含糊的好处、三段式;保留必要的免责声明 |
| 小说 | 允许虚构细节 | 根据叙述者调整变化 | 千篇一律的节奏、编辑式陈词滥调;保留方言和独特习惯 |
浅白语言子模式
对于流程、运行手册、错误信息和其他面向工程师的文本,用户可以 要求采用浅白语言子模式:使用简短、常见的词语,每句话只包含一条指令,步骤使用祈使动词,每个术语只表达一种含义,不使用营销形容词或没有边界的保留措辞。此子模式是清晰度底线,不是新的个性风格:它会有意淡化语气,但保留每项主张和要求,也不是规避检测的工具。随笔、帖子和个人文章应改用上述保留语气的预设。
代码边界
当文章和代码混在一起时,只改写文章。作为此技能的一部分,绝不重命名变量、修改字符串字面量、重新格式化代码或更改可执行输出。Markdown 或 HTML 文件中如含有可执行代码片段,应尽可能逐字节保留这些部分。
报告
用户要求审计时,请区分:
- 可验证: 删除或替换的 Unicode 字符及其文字系统计数;改写前后的文体统计分数及置信度(仅作参考,不作为定论)。
- 尽力而为: 改写文章,以改变词元和句法模式。
- 尚未证实: 能否规避官方检测器、是否由人类创作,或是否移除了供应商的秘密密钥水印。
关于技术背景,请阅读 references/watermark-notes.md。关于滥用或披露问题,请阅读 references/responsible-use.md。