# Humanize Chinese

> 中文去 AI 腔一整套（装完即用，零 API Key —— 装了本 skill 的 agent 自己就是那个 LLM）。 六个流程：① 生成即去 AI —— 写中文时按本 skill 的写作指南落笔，初稿就不带 AI 腔； ② 复查改写 —— 产出后对照本 skill 的清单再过一遍，定点拆模板句式； ③ Python 词语替换 —— ./humanize replace 按文体自动路由词表（学术 120+ 条 / 通用 220+ 条），只做短语级、只在子句边界替换，改完自动核对数字/专名/段落； ④ Claude 腔转中文 —— 把 Claude 助手腔的中文改写成平实中文， 规则提炼自 gvzdv/claudish-to-english 并本地化； ⑤ 去水印 —— ./humanize watermark 扫清零宽字符/双向控制符/同形替身， 并对照 guillaumemeyer/watermarks-remover 说明统计水印的边界； ⑥ 纠错顺句 —— 修错词、病句、标点，拗口和用词不准处轻手顺一顺；改动范围有硬校验。 另有检测（0-100 分）、风格转换、学术降重等 CLI。 Use when user says: "去AI味", "降AIGC", "人性化文本", "humanize chinese", "AI检测", "AIGC降重", "去除AI痕迹", "文本改写", "论文降重", "知网检测", "维普检测", "AI写作检测", "让文字更自然", "detect AI text", "humanize text", "make text human-like", "去ai化", "改成人话", "去机器味", "长文本改写", "小说改写", "写一篇", "claudish", "去claude腔", "助手腔", "去水印", "watermark remover", "remove watermark"

- Skill: `swaylq/humanize-chinese` (Agent Skill, multi-file: 7 files)
- Install (CLI): `npx skillmds@latest add swaylq/humanize-chinese`
- Raw SKILL.md: https://api.skillmd.com/api/skills/swaylq/humanize-chinese/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: swaylq (https://skillmd.com/u/swaylq)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/swaylq/humanize-chinese

---


# Humanize Chinese AI Text v6

一整套中文去 AI 腔流水线。装完直接用：你（agent）负责 ①②④⑥，Python 脚本负责 ③⑤。

| 流程 | 什么时候 | 怎么做 |
|---|---|---|
| **① 生成即去 AI** | 用户让你**写**中文时 | 按下方「流程 ①：写作指南」落笔，初稿就不带 AI 腔 |
| **② 复查改写** | 拿到初稿（自己写的或用户给的）| 按下方「流程 ②：改写清单」定点过一遍，只动踩线的句子 |
| **③ 词语替换** | ② 完成后 | `./humanize replace 稿.txt -o 出稿.txt --compare` —— 自动识别文体路由词表，离线 |
| **④ Claude 腔转中文** | 稿子带 Claude 助手腔（对话残留、客套、解释癖） | 读 `skills/declaude-cn/SKILL.md` 照做，规则来自 gvzdv/claudish-to-english 的中文本地化 |
| **⑤ 去水印** | 要清文本里的 AI 水印 | `./humanize watermark inspect/clean/survive`，边界见「流程 ⑤」 |
| **⑥ 纠错顺句** | ③ 完成后 | 按下方「流程 ⑥：纠错清单」修错词、病句、标点，拗口处**轻手**顺一顺，其余不动 |

中文主线是 ①→②→③→⑥，**顺序执行**；稿子带 Claude 助手腔就在 ② 之后加跑 ④；⑤ 独立，需要时随时跑。
人味在 ① 产生，② 只能修不能补，③ 是机械替换，⑥ 纠错顺句、动作最轻。
为什么是这个顺序：实测从零写能把句长节奏做进人类区间（变异系数 0.62 vs 人类 0.52），
而事后改写只能到 0.31 —— 节奏补不回来，必须落笔时就有。

## CLI Tools

### 统一 CLI（推荐）

```bash
./humanize replace 文本.txt -o 改后.txt --compare    # 流程 ③：按文体路由的词语替换（离线）
./humanize replace 论文.txt --scene academic         # 显式指定文体（auto/general/academic/social/novel）
./humanize rewrite 文本.txt -o 改后.txt              # 离线断句节奏
./humanize rewrite 文本.txt --llm -o 改后.txt        # 用外部 API 跑 ②+③（可选，需 OPENROUTER_API_KEY）
./humanize write "写一篇讲复利的科普" -o 出稿.txt      # 用外部 API 跑 ①→③（可选，需 key）
./humanize rewrite 文本.txt --legacy                 # 旧版全量改写器（降分多但会写病句）

# 检测与其它
./humanize detect 文本.txt -v                        # 检测 + 详细（分数怎么看见下方说明）
./humanize academic 论文.txt -o 改后.txt --compare    # 学术降重
./humanize style 文本.txt --style xiaohongshu        # 风格转换
./humanize compare 文本.txt -a                       # 前后对比

# 水印（两层是两回事，见下方说明）
./humanize watermark inspect 稿子.txt                # 扫零宽字符/双向控制符/汉字同形替身
./humanize watermark clean 稿子.txt -o 干净.txt       # 清掉，全角标点和首行缩进原样保留
./humanize watermark survive 原文.txt 改写后.txt      # 采样水印还剩多少
```

**水印那两层别混。** 看得见的载体（零宽字符、康熙部首冒充汉字之类）能删干净也能验证，
`inspect` 完 `clean` 完再 `inspect` 一遍就是证明。Claude 从 2026-08-02 起用的是另一层：
拿密钥和前 4 个字算哈希去偏置采样，信号在选词里，本地删不掉也证明不了删掉了。
`survive` 报的是能测的那部分 —— 原文的 5 字计分窗口在改写后还剩多少个原封不动。

实测本仓库自带的学术样本（288 字）：`replace` 剩 73%，`academic` 剩 54%，
`style` 剩 44%，`rewrite --llm` 剩 42%。**没有一档够。**
真要去掉只有一条路：`write`，拿原文当素材重新写。跟用户说这件事的时候要说实话，
不要说「已经清干净了」——谁都没法验证这句。

**离线那档很保守**：只移动标点，去掉标点后前后文字必须一模一样，程序每次都校验。
找不到能安全断开的位置时它会直接说「没有可以安全修改的地方」并原样输出 ——
这是设计，不是失败。AI 写的句子结构均匀，硬断会产生残句。

**需要 key 的两档**走 OpenRouter：
`secret exec OPENROUTER_API_KEY -- ./humanize rewrite 文件.txt --llm`

### 独立脚本形式（等价）

所有脚本在 `scripts/` 目录下，纯 Python，无依赖。

```bash
# 检测 AI 模式（20+ 规则维度 + 8 统计特征，0-100 分）
python scripts/detect_cn.py text.txt
python scripts/detect_cn.py text.txt -v          # 详细 + 最可疑句子
python scripts/detect_cn.py text.txt -s           # 仅评分
python scripts/detect_cn.py text.txt -j           # JSON 输出

# 改写（默认 best-of-10，scene-aware）
python scripts/humanize_cn.py text.txt -o clean.txt
python scripts/humanize_cn.py text.txt --scene social -a   # 社交 + 激进
python scripts/humanize_cn.py text.txt --quick             # 18× 速度，纯替换
python scripts/humanize_cn.py text.txt --cilin             # 启用 CiLin 同义词扩展

# 风格转换（先自动 humanize 再套风格）
python scripts/style_cn.py text.txt --style zhihu -o out.txt

# 前后对比
python scripts/compare_cn.py text.txt --scene tech -a

# 学术论文 AIGC 降重（10 学术维度 + scene-aware academic LR + 双评分）
python scripts/academic_cn.py paper.txt -o clean.txt --compare
python scripts/academic_cn.py paper.txt -o clean.txt -a --compare  # 激进
python scripts/academic_cn.py paper.txt -o clean.txt --quick       # 快速模式
```

### 评分标准

| 分数 | 等级 | 含义 |
|------|------|------|
| 0-24 | LOW | 基本像人写的 |
| 25-49 | MEDIUM | 有些 AI 痕迹 |
| 50-74 | HIGH | 大概率 AI 生成 |
| 75-100 | VERY HIGH | 几乎确定是 AI |

### 参数速查

| 参数 | 说明 |
|------|------|
| `-v` | 详细模式，显示可疑句子 |
| `-s` | 仅评分 |
| `-j` | JSON 输出 |
| `-o` | 输出文件 |
| `--scene`（replace）| auto / general / academic / social / novel，词表路由 |
| `--compare`（replace）| 打印改写前后检测分 |
| `-a` | 激进模式 |
| `--seed N` | 固定随机种子 |
| `--scene` | general / academic / novel / auto（detect_cn）—— auto 按 ≥1500 字切 longform LR |
| `--style` | casual / zhihu / xiaohongshu / wechat / academic / literary / weibo / **novel** |
| `--best-of-n N` | humanize N 次取 LR 最低（默认 10） |
| `--compare` | 前后对比（学术双评分） |
| `--quick` | 快速模式（跳过统计优化 + best-of，18× 速度） |
| `--cilin` | 启用 CiLin 同义词扩展（humanize，38873 词，含碰撞 blacklist） |
| `--no-humanize` | style 转换前不先去 AI 词 |
| `--rule-only` | detect 只用规则层（跳 LR 融合） |
| `--fullwidth-latin` | 全角拉丁字母改半角（watermark clean，默认不动）|
| `--keep-bidi` | 保留双向控制符（watermark clean，文里真夹了阿拉伯语时用）|

### 工作流（中文主线）

```bash
# ① 写：按「流程 ①：写作指南」产出 draft.txt（agent 自己完成，无命令）
# ② 改：按「流程 ②：改写清单」定点过一遍，存 revised.txt（agent 自己完成）
# ③ 词表替换：
./humanize replace revised.txt -o step3.txt --compare
# ⑥ 纠错（agent 按「流程 ⑥：纠错清单」自己完成；走 API 也可以: rewrite --llm 已含 ⑥）
# 可选：检测 / 转风格
./humanize detect final.txt -v
./humanize style final.txt --style zhihu -o styled.txt

# ④ Claude 腔转平实中文：agent 读 skills/declaude-cn/SKILL.md 直接改，无命令
# ⑤ 去水印（独立，随时可跑）：
./humanize watermark inspect 稿子.txt
./humanize watermark clean 稿子.txt -o 干净.txt
```

### HC3-Chinese 基准测试

阈值基于 [HC3-Chinese](https://github.com/Hello-SimpleAI/chatgpt-comparison-detection) 300+300 人类/AI 样本的 Cohen's d 校准，scene-aware LR 在 500+500 训练：

- 句长变异系数 CV: d = 1.22（最强单信号）
- 短句占比 (< 10 字): d = 1.21
- 段落长度 CV: d = -1.49（v5 长文本新信号）
- 段内句长 CV: d = -2.08（v5 长文本最强信号）
- 跨段 trigram 重复: d = +1.13（v5 长文本新信号）
- 困惑度: d = 0.47
- GLTR top-10 bucket: d = 0.44
- DivEye skew / kurt: d = 0.41 / 0.29
- 逗号密度: d = -0.47

⚠️ 上面这些效应量测于 HC3（2022 年的 ChatGPT 语料）。2026-08 用五个当前模型重测，同题同长度对照下：区分 2024 年模型准确率 96%，区分今年的模型只剩 64%（瞎猜 50%）。**这些 d 值对 HC3 仍然成立，但不能外推到今天的模型。**

**v6 实测（三模型通顺度评审 1-5 分；结果存疑时加跑一轮取并集）**：

仓库五份样例（刻意夸张的 AI 腔样本）：

| | 通顺度中位数 | 多数票病句 |
|---|---|---|
| v6 三段流水线 | 4.0 - 5.0 | **未发现** |
| 旧版纯规则改写 | 2.0 | 5 - 17 处 |

2026-08 新语料里的真实模型产出（更接近实际输入）：
社交 350 字 → 5.0 / 未发现；学术 736 字 → 5.0 / 未发现；科普 571 字 → 4.0 / **1 处**。
写「未发现」不写「0 处」是有意的：评审对真实病句存在漏报，「未发现」只说这一轮没抓到，不承诺不存在。
**三篇里两篇干净，样本太小不能当合格率**，但真实文本确实比夸张样本难改。

旧版被三个评审各自独立点出的句子，例如「智能评估系统能够各个层面地评判学习者的综合素质」
「整合人工智能与教育教学已成为更好地推进的必由之路」—— 这些不是中文。

---

## 流程 ①：写作指南 —— 生成时就别写出 AI 腔

用户让你写中文时（而不是改现成的），先读 `skills/write-cn/SKILL.md`，照那份备忘落笔。它讲四件事：动笔前先凑齐真材料，带参照的数字、能点名的人事物、反直觉的事实、真场景、会有人不同意的判断，凑不齐就问用户要，材料必须是真的，宁可空泛不可捏造；有些话整套都不能说，按语姿绕开而不是按词躲；句长要有起伏、段落别等厚、用词从材料里取而不是顺着上一个词接；还有几条英文圈教条在中文里方向是反的，别照抄。写完自查一遍，再反着查有没有洗成白开水。

## 流程 ②：改写清单 —— 拿到稿子后定点过一遍

对 ① 的产出或用户给的任何稿子，读 `skills/deai-rewrite/SKILL.md` 照做。要领是定点修改不是重写：没踩线的句子一个字不碰，数字专名引文一个不动，原文没有的内容一个不加。见到抬轿子的句式就拆，贴金的词换成后果或删掉，空转的过渡直接删。改完过四道核对——事实、信息（排除关系不改成正面断言，相关不升级成因果，犹疑不改成确定）、通顺、反向查平庸化——一道不过就回滚。

### 先扫一遍：检测 AI 写作模式

扫描文本中的以下模式，按严重程度分类：

#### 🔴 高危模式（一眼就能看出是 AI）

**三段式套路：**
- 首先…其次…最后
- 一方面…另一方面
- 第一…第二…第三

**机械连接词：**
值得注意的是、综上所述、不难发现、总而言之、与此同时、由此可见、不仅如此、换句话说、更重要的是、不可否认、显而易见、不言而喻、归根结底

**空洞宏大词：**
赋能、闭环、数字化转型、协同增效、降本增效、深度融合、全方位、多维度、系统性、高质量发展、新质生产力

#### 🟠 中危模式

**AI 高频词：** 助力、彰显、凸显、底层逻辑、抓手、触达、沉淀、复盘、迭代、破圈、颠覆

**填充废话：** 值得一提的是、众所周知、毫无疑问、具体来说、简而言之

**模板句式：**
- 随着…的不断发展
- 在当今…时代
- 在…的背景下
- 作为…的重要组成部分
- 这不仅…更是…

**平衡论述套话：** 虽然…但是…同时、既有…也有…更有

#### 🟡 低危模式

- 犹豫语过多（在一定程度上、某种程度上 出现 >5 次）
- 列举成瘾（动辄①②③④⑤）
- 标点滥用（大量分号、破折号）
- 修辞堆砌（排比对偶过多）

#### ⚪ 风格信号

- 段落长度高度一致
- 句子长度单调
- 情感表达平淡
- 开头方式重复
- 信息熵低（用词可预测）

### 逐条拆：命中什么改什么

按以下顺序处理：

**1. 砍掉三段式**
把"首先…其次…最后"打散，用自然过渡代替。不是每个论点都要编号。

**2. 替换 AI 套话**
- 综上所述 → 总之 / 说到底 / （直接删掉）
- 值得注意的是 → （直接删掉，后面的话自己能说清楚）
- 赋能 → 帮助 / 支持 / 提升
- 数字化转型 → 信息化改造 / 技术升级
- 不难发现 → 可以看到 / （删掉）
- 助力 → 帮 / 推动

**3. 句式重组**
- 过短的句子合并（"他很累。他决定休息。" → "他累了，干脆歇会儿。"）
- 过长的句子拆开（在"但是""不过""同时"等转折处断开）
- 打破均匀节奏（长短句交替，不要每句差不多长）

**4. 减少重复用词**
同一个词出现 3 次以上就换同义词。比如"进行"可以换成"做""搞""开展""着手"。

**5. 注入人味**
- 加一两句口语化表达（场景允许的话）
- 用具体的例子代替抽象概括
- 偶尔加个反问或感叹
- 不要每段都总分总结构

**6. 段落节奏**
打破每段差不多长的格局。有的段落 2 句话，有的 5 句话，像人写东西时自然的长短变化。

### 学术论文特殊处理（不能口语化）

当文本是学术论文时，改写规则不同——不能口语化，要保持学术严谨性：

**学术专用检测维度：**
1. AI 学术措辞（"本文旨在""具有重要意义""进行了深入分析"）
2. 被动句式过度（"被广泛应用""被认为是"）
3. 段落结构过于整齐（每段总-分-总）
4. 连接词密度异常
5. 同义表达匮乏（"研究"出现 8 次）
6. 引用整合度低（每个引用都是"XX（2020）指出…"）
7. 数据论述模板化（"从表中可以看出"）
8. 过度列举（①②③④ 频繁出现）
9. 结论过于圆满（只说好不说局限）
10. 语气过于确定（"必然""毫无疑问"）

**学术改写策略：**

- **替换 AI 学术套话（保持学术性）：**
  - 本文旨在 → 本文尝试 / 本研究关注
  - 具有重要意义 → 值得关注 / 有一定参考价值
  - 研究表明 → 前人研究发现 / 已有文献显示 / 笔者观察到
  - 进行了深入分析 → 做了初步探讨 / 展开了讨论
  - 取得了显著成效 → 产生了一定效果 / 初见成效

- **减少被动句：**
  - 被广泛应用 → 得到较多运用 / 在多个领域有所应用
  - 被认为是 → 通常被看作 / 一般认为

- **注入学术犹豫语（hedging）：**
  在过于绝对的判断前加"可能""在一定程度上""就目前而言""初步来看"

- **增强作者主体性：**
  - 研究表明 → 笔者认为 / 本研究发现
  - 可以认为 → 笔者倾向于认为

- **补充局限性：**
  如果结论段没有提到局限，补一句"当然，本研究也存在一定局限…"

- **打破结构均匀度：**
  调整段落长度，避免每段都一样。合并过短的段落，拆分过长的。

## 流程 ④：Claude 腔 → 平实中文

稿子带着 Claude 助手腔（对话残留、客套、解释癖）时，读 `skills/declaude-cn/SKILL.md` 照做。
要领：日常的词、短句子；事实、名字、数字、文件路径一个不动；代码块不碰；只输出改写后的正文。
和 ② 的分工：模板句式、套话归 ② 拆，助手腔归这段；稿子带助手腔就在 ② 之后加跑这段。
规则提炼自 [gvzdv/claudish-to-english](https://github.com/gvzdv/claudish-to-english)（2.4k star）
的内置改写 prompt —— 那个仓库本身是个 Claude Code 显示插件（把助手消息实时改写成平实文字显示），
我们借的是它的改写规则，本地化成中文，由 agent 直接执行，不装插件。

## 流程 ⑤：去水印

两层水印是两回事（详见上方 CLI 说明）：

- **看得见的载体**（零宽字符、双向控制符、汉字同形替身）：`./humanize watermark inspect` 扫、
  `clean` 清，清完再 `inspect` 一遍验证。这层能删干净。
- **统计水印**（密钥 + 前文哈希偏置采样，信号在选词里）：本地删不掉，也证明不了删掉了。
  `survive` 报的是能测的那部分。真要去掉只有一条路：`write` 拿原文当素材重写。
  跟用户说这件事要说实话，不说「已经清干净了」。

外部参照：[guillaumemeyer/watermarks-remover](https://github.com/guillaumemeyer/watermarks-remover)
（1.9w star，小红书「Claude 水印被破解」那帖说的就是它）。它比我们多两块：多厂商统计水印
（Gemini SynthID-Text、OpenAI 溯源、开源绿名单/Aaronson 系）的改写式去除，和文件级溯源元数据
清理（C2PA / EXIF / XMP，覆盖 PNG/JPEG/PDF/DOCX/MP4 等）。文本里的零宽字符用自家
`watermark clean` 就够；用户要清文件元数据或对付多厂商统计水印时，指向那个仓库。

## 流程 ⑥：纠错清单 —— 修错误、顺拗口，动作要轻

③ 跑完后把稿子再读一遍，修四类：错词/错别字（的地得、搭配错误）、
真病句（成分残缺、前后不接 —— 最小修复，改到通顺就停）、
标点（中文语境半角逗号句号、括号引号不配对、重复标点）、
拗口/语义不畅/用词不准（读出声会磕绊的，换一两个词、微调一处语序，好读即可）。
**风格平淡不是错误；信息不许增删；句序段落不许动；本来就通顺的句子不碰。**
判断口诀：错误要修；拗口要顺；通顺的再「可以更好」也不动。
完整版见 `skills/proofread-cn/SKILL.md`。实测参考：四份产出跑 ⑥，
两份零错误逐字原样返回，两份各修若干处标点和一处缺字病句，检测分不变。

### 改完自查 —— 验的是通顺，不是分数

中文主线四段（①②③⑥）过完，跑流程 ③ 收尾：

```bash
./humanize replace 稿.txt -o 出稿.txt --compare
```


改写完成后先自己读一遍，逐条过：

1. **事实核对**：原文每一个数字、单位、年份、人名、地名、专有名词，改后还在吗？
   少一个就把那句还原。
2. **信息核对**：原文说过的每件事，改后还说了吗？删掉的应该只有套话。
3. **通顺核对**：改动过的每一句单独读一遍。有搭配不当、成分残缺、前后不接的，
   把那句还原。**宁可不改，也不写病句。**
4. **平庸化核对（反向）**：段落是不是变薄了？句子是不是整体变短且变齐了？
   原文里锋利的判断是不是被磨成了中性说明书？中了任意一条就回滚。

想看检测分可以跑，但**不要把它当验收标准**：

```bash
./humanize detect output.txt -s
```

---

## 关于检测分

这个工具带一个 0-100 的检测分。**不要以压低它为目标。** 它的可用性**分文体差别极大**。

2026-08 实测：五个当前模型各 50-100 篇 vs 真人公开语料 50 篇，两侧长度对齐后算区分度
（随机取一篇模型的和一篇真人的，模型那篇分数更高的概率；0.5 是抛硬币）：

| 文体 | 区分能力 | 怎么用 |
|---|---|---|
| 科普 / 新闻类短文 | 0.837 | 可以参考 |
| 社交笔记 | 0.771 | 可以参考 |
| 学术摘要 | 0.621 | 已经很弱，别当依据 |
| 小说 | 0.479 | 等于抛硬币，别用 |
| 长篇博客 | 0.155 | **方向是反的，用了会误判** |
| 职场汇报 | 无数据 | 没有可用的真人公开语料做对照 |

**长文场景（博客 0.155、小说 0.479）不要用这个分数做判断。**
博客那格的意思是：拿它挑「哪篇像 AI 写的」，它会更多地挑中真人写的。

**另外：真人写的论文也会被判成 AI。** 60 篇真实知网论文摘要（发表早于大模型），
平均 60 分，35% 落在「几乎确定是 AI」档。上面那张评分标准表的档位名称，
在学术和长文场景下不准。

外面的商用检测器也一样不稳：同一批文字有的工具给 0 分、有的给 99.9 分。

**所以：把检测分当参考信号可以，当优化目标不行。** 上一版为了压分去乱换同义词、
插入过渡句、打乱句序，分数确实降得多，代价是写出不是中文的句子。

## 配置说明

所有检测模式和替换规则在 `scripts/patterns_cn.json`，可自定义：
- 添加新 AI 词汇
- 调整权重
- 增加替换规则
- 修改正则匹配

## 外部配置字段

```
critical_patterns    — 高权重检测（三段式、连接词、空洞词）
high_signal_patterns — 中权重检测（AI 高频词、模板句）
replacements         — 替换词库（正则 + 纯文本）
academic_patterns    — 学术专用检测与替换
scoring              — 权重和阈值配置
```

