---
name: content-humanizer
description: 分析一段内容或一个文件的"人味"（即像不像人类自然写出来的，AI 生成痕迹有多重），给出 0-100 量化打分，并在低于目标线（默认 80 分，用户可指定其他数值如90分）时在不改变原意的前提下改写到目标分数以上。触发条件：用户提到"人味"、"AI味"、"AI感"、"降AI率"、"去AI化"、"人性化改写"、"像人写的"、"过人工检测"、"过AI检测"、"让文章更自然"、"这段话是不是AI写的"、"帮我把这篇文章改得不像AI写的"，或者给出一段文字/文件并希望知道"读起来自然不自然"、"会不会被认出是AI写的"。即使用户只说"这段话感觉很机器，帮我改一下"或"帮我看看这篇稿子像不像真人写的"，也应使用本 skill。输出为 Markdown 报告，保存到当前项目 markdown/ 目录。
---

# 内容人味分析与改写

## 这个 skill 在做什么，为什么这么设计

"人味"不是一个单一指标，而是好几种信号叠加的结果。如果只靠"读一遍感觉一下"打分，
分数会很不稳定、也没法跟用户解释清楚"为什么是 72 分而不是 85 分"。所以这个 skill
把人味拆成两层：

1. **统计层**（脚本算，客观、可复现）：句子/段落长度的节奏起伏、AI 高频套话密度、
   形式化过渡词密度、词汇重复度。这些是 AI 生成文本最容易暴露的"指纹"——句子长度
   异常均匀、爱用"综上所述/不可否认/值得注意的是"这类套话、过渡词用得像论文模板、
   措辞翻来覆去就那几种搭配。
2. **判断层**（Claude 通读后人工评分，主观但有据可依）：具体细节与个性化程度、
   情感/态度的真实感、结构是否机械对称、口语化与"不完美"痕迹。这几项没法靠规则
   硬算——比如"有没有具体的人名/数字/场景"，机器数不出"具体"这个概念，需要真正
   读懂内容才能判断。

两层各占 50% 权重，合成最终人味分。这样做的好处是：用户能看到分数是怎么来的，
而不是一个黑箱数字；改写之后也能用同一套标准复测，确保真的有提升，而不是"看起来
顺了但分数其实没变"。

## 第一步：拿到要分析的内容

- 如果用户直接在对话里粘贴了文本，直接用这段文本。
- 如果用户给的是文件路径：
  - 纯文本/Markdown 文件直接读取。
  - docx/pdf/pptx 等格式，先用对应的文档技能（docx/pdf-reading/pptx）把正文提取
    成纯文本，再继续下面的流程。不要把带格式标记的原始 XML 之类的东西直接拿去打分。
- 内容太短（少于约 150 字）时，统计层的句长/段落变异系数样本量不够，分数会不太
  稳定——继续分析，但在报告里提一句"样本较短，统计层指标参考价值有限，以判断层
  评分为主"。

## 第二步：跑统计层打分脚本

```bash
python3 /mnt/skills/user/content-humanizer/scripts/human_score.py <文件路径>
# 或者直接传文本：
python3 /mnt/skills/user/content-humanizer/scripts/human_score.py - --text "要分析的文本"
```

脚本输出一个 JSON，包含 `statistical_score`（0-100）以及每个子指标的分数和命中
证据（命中了哪些套话、密度多少）。这个分数先记下来，后面要用。

脚本算的是：句子/段落节奏（30%）+ 强 AI 套话密度（30%）+ 软性 buzzword 密度（10%）
+ 过渡词密度（10%）+ 词汇多样性（20%）。具体方法见脚本内注释，不用解释给用户听，
除非用户问。

## 第三步：通读内容，给判断层四个维度打分

完整读一遍原文（不要只看脚本摘要），针对下面四个维度分别打 0-100 分。每个维度都
要**引用原文里 1-2 处具体的句子或短语作为证据**，而不是凭空给分——这样用户能看懂
分数依据，你自己也更不容易瞎打分。详细的打分锚点（0-39/40-59/60-79/80-100 各代表
什么程度）见 `references/rubric.md`，拿不准的时候去对一下。

| 维度 | 在看什么 |
|---|---|
| 具体细节与个性化 | 有没有具体的人名、数字、时间、场景、个人经历，还是全是"很多企业""不少专家"这种空泛说法 |
| 情感与态度自然度 | 有没有真实的立场/情绪/吐槽/幽默，还是永远"一方面…另一方面…"四平八稳、不说一句得罪人的话 |
| 结构机械度 | 段落是不是整整齐齐三段论、标题/列表是不是过度对称、是不是每段都差不多长——人写东西很少这么工整 |
| 口语化与不完美痕迹 | 有没有口语词、插话、不那么"标准"的表达，还是每句话都像教科书例句一样完美 |

四项平均得到 `qualitative_score`。

## 第四步：合成最终人味分

```
final_score = round(0.5 × statistical_score + 0.5 × qualitative_score)
```

默认达标线是 **80 分**。如果用户在请求里明确说了别的目标（比如"要到90分以上"
"严格一点，95分"），按用户给的数字作为达标线；用户没说就用 80。这个阈值不是说
低于它就一定能被某个 AI 检测工具揪出来——没有哪个分数能 100% 对应任何具体检测器
的判定——而是一条相对宽松、留有余地的经验线：到了 80 分，统计层和判断层的大部分
信号都已经回到人类写作的常见区间。目标线设得越高（比如 95），改写的难度和迭代轮数
通常也会上升，必要时可以提前跟用户说一句"目标定这么高，可能要改好几轮，某些维度
（比如非常正式的文体很难做到很口语化）也未必能完全达到"。

## 第五步：判断要不要改写

- **final_score ≥ 目标线**：不用改写，直接出报告，告诉用户哪些地方已经做得不错。
- **final_score < 目标线**：在不改变原意、不增删事实信息的前提下改写，目标是把
  final_score 拉到目标线以上。改写时优先解决分数最低的那几项，常用手法：

  - 把套话替换成具体说法："综上所述，这是一个值得关注的趋势" → 直接给结论，
    不用"综上所述"这种总结腔起手。
  - 打散过度工整的结构：不是每段都要"首先/其次/最后"，该合并的合并，该用一句话
    带过的不用单独列一段。
  - 拉开句子长度的差距：长句之后接一个短句，或者反过来，别让每句话都差不多长。
  - 去掉"一方面…另一方面…"式的永远中立腔，如果原文本来就有明确立场，让立场
    更直接地表达出来（但不要替用户编造原文没有的观点或事实）。
  - 加一点口语化的连接，比如用"但"代替"然而"、用"说白了"代替"换言之"——
    根据原文语域判断合适的口语化程度，正式文档别改得太随便。
  - **绝对不能做的事**：编造原文没有的具体数字/人名/案例来"凑细节"；改变原文的
    论点、立场或事实结论；删掉原文关键信息只为了让结构看起来不对称。改写是换
    "怎么说"，不是换"说什么"。

  改写完之后，**重新跑一遍第二步的脚本 + 第三步的人工评分**，算出新的
  final_score。如果还没到目标线，再改一轮，最多改 3 轮。如果 3 轮之后还没到
  目标线，在报告里诚实说明卡在哪一项、原因可能是什么（比如原文本身就是高度
  结构化的规范文档，比如合同条款，这种文体本来就不太可能很"口语化"），不要
  硬编数据把分数做上去。

## 第六步：输出 Markdown 报告

保存到当前项目的 `markdown/` 目录（没有就创建），文件名格式：
`markdown/人味分析-<内容简短标识或时间戳>.md`

报告结构固定如下：

```markdown
# 人味分析报告：<标题/文件名>

## 总览

| 项目 | 分数 |
|---|---|
| 统计层得分 | xx.x |
| 判断层得分 | xx.x |
| **最终人味分** | **xx.x / 100** |
| 达标线 | 80（或用户指定的目标分数） |
| 是否达标 | 是 / 否 |

## 统计层细分（脚本计算）

| 子指标 | 分数 | 说明 |
|---|---|---|
| 句式/段落节奏 | xx | ... |
| 强AI套话密度 | xx | 命中 N 处：xxx、xxx |
| 软性buzzword密度 | xx | 命中 N 处：xxx |
| 过渡词密度 | xx | 命中 N 处 |
| 词汇多样性 | xx | ... |

## 判断层细分（人工评分）

| 维度 | 分数 | 依据（原文引用） |
|---|---|---|
| 具体细节与个性化 | xx | "……" |
| 情感与态度自然度 | xx | "……" |
| 结构机械度 | xx | "……" |
| 口语化与不完美痕迹 | xx | "……" |

## 原文

> （原文全文或合理摘录）

---

<!-- 以下部分仅当 final_score < 目标线时出现 -->

## 改写说明

本次改写共 N 轮，主要调整：
- ...
- ...

## 改写后内容

（改写后全文）

## 改写后复测

| 项目 | 改写前 | 改写后 |
|---|---|---|
| 统计层得分 | xx.x | xx.x |
| 判断层得分 | xx.x | xx.x |
| **最终人味分** | xx.x | **xx.x** |
```

如果 final_score ≥ 目标线（不需要改写），就省略"改写说明"之后的所有部分，报告到
"原文"那一节结束即可。

存完文件后用 present_files 把报告呈现给用户，简短说一句最终分数和是否达标，
不用把报告内容在对话里重复一遍。

## 边界情况

- **多篇/多文件批量分析**：对每篇分别走完整流程，最后可以汇总一张总分对比表，
  但每篇的详细报告仍按上面的结构分别呈现（或合并进同一个 md 文件的不同章节里，
  视用户偏好）。
- **诗歌、歌词、对话剧本等特殊文体**：节奏类指标天然就会偏"不均匀"，套话类指标
  天然就会偏低——这类文体基本不需要担心人味问题，可以提前跟用户确认是否真的需要
  走完整分析流程，还是只是想看看效果。
- **用户要求"过某个具体的 AI 检测工具"**：明确告诉用户这个 skill 给的是通用人味
  量化分析，不是针对某个具体检测器（如 GPTZero、Originality.ai 等）的逆向适配，
  分数高低和具体某个工具的判定结果不保证完全对应。
