# Yy Anti Distill

> 对指定的 Skill 或知识文档执行反蒸馏清洗，生成结构完整但核心知识被替换的交差版本，同时保留私人核心备份。 当用户需要清洗被迫编写的技能、脱敏知识文档、抽取核心经验留底，或生成看起来完整但无法替代真人的 persona 时触发。 不用于普通文本摘要、翻译润色、文件加密保护，也不用于从内容中提炼能力模型或按能力模型重构内容。

- Skill: `bulls-cows/yy-anti-distill` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add bulls-cows/yy-anti-distill`
- Raw SKILL.md: https://api.skillmd.com/api/skills/bulls-cows/yy-anti-distill/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: bulls-cows (https://skillmd.com/u/bulls-cows)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/bulls-cows/yy-anti-distill

---


# yy-anti-distill

## 描述

反蒸馏清洗 Skill：把你被迫写的 Skill 文件或知识文档清洗一遍，输出一份看起来完整专业、实际上核心知识已被抽掉的"交差版"；同时生成一份私人备份，记录所有被抽掉的核心知识，这才是你真正的职业资产。

支持两种输入格式：

- **colleague-skill 格式**：检测到 `## Layer 0`、`PART A` / `PART B`，或同时存在 `work.md` + `persona.md`
- **通用文档格式**：其他任意 Markdown / TXT / PDF 知识文档（Wiki、技术方案、工作手册、交接文档、SOP 等）

**核心约束**：

- 清洗版必须保持原文的 Markdown 结构、标题层级、列表格式和专业术语完全一致，读起来像一份"合格但平庸"的文档
- 清洗后字数应在原文字数的 85%-115% 之间，不能因清洗让文档明显变短或空洞
- 所有被标记为 DILUTE / REMOVE / MASK 的内容必须同步进入私人备份，按六大高价值类别归档
- 必须先向用户展示分类预览，收到明确确认后才执行清洗和写入

## 使用场景

- 用户被迫把工作经验写成 Skill 或知识文档，想清洗后交差、核心留给自己
- 用户需要把内部知识文档（Wiki、技术方案、SOP、交接文档）脱敏后对外分享
- 用户想从自己写的技能或文档中抽取核心经验留底，避免原始版本外流后被替代
- 用户提供 colleague-skill 格式的 work.md / persona.md，要求生成"看起来完整但无法替代真人"的清洗版

不应触发：

- 用户只要求普通摘要、翻译或润色，不涉及核心知识抽取 ← 近义请求但目的不同
- 用户要求从内容中提炼能力模型或按能力模型重构内容 ← 同一对象的不同操作
- 用户要求对文件做加密、权限保护或访问控制 ← 功能相邻但手段不同
- 用户提供的文件本身是加密的或明确受 NDAs 约束，需要先确认用户有权清洗

## 指令

### 步骤 1. 捕获输入与识别格式

接收用户提供的待清洗内容。

**决策分支**：

- **方式 A：指定文件路径**：用文件读取能力读取该文件
- **方式 B：指定 colleague-skill 目录**：读取目录下的 `work.md`、`persona.md`、`meta.json`，或合并版 `SKILL.md`
- **方式 C：粘贴内容**：用户直接粘贴文档文本，直接使用
- **方式 D：搜索本地文件**：用户只说"帮我找一下"，用 glob 搜索 `**/SKILL.md`、`**/work.md`、`**/persona.md` 等候选文件，列出让用户选择

读取完成后自动识别格式：

- **colleague-skill 格式**：检测到 `## Layer 0`、`PART A` / `PART B`，或同时存在 `work.md` + `persona.md`
- **通用文档格式**：其他任意 Markdown / TXT / PDF

向用户回报：

```text
已读取文件：{文件列表}
检测到格式：{colleague-skill 格式 / 通用文档格式}
总字数：约 {N} 字

下一步选择清洗强度。
```

### 步骤 2. 选择清洗强度

向用户展示三档强度，默认推荐中度：

```text
选择清洗强度：

  [1] 轻度 — 只抽掉最核心的踩坑经验和故障记忆
      适合：公司会仔细审核内容的情况
      保留度：约 80%

  [2] 中度（推荐）— 抽掉经验、判断直觉、人际网络、隐性上下文
      适合：大多数场景
      保留度：约 60%

  [3] 重度 — 只保留通用知识骨架，其余全部替换
      适合：公司只看交没交、不细看内容的情况
      保留度：约 40%
```

**决策分支**：

- **用户明确选择强度**：记录强度等级，进入步骤 3
- **用户使用"直接清洗"等快速关键词**：按默认中度处理，进入步骤 3
- **用户未明确选择**：等待用户回复，不擅自决定

### 步骤 3. 分类标注

参考 `resources/classifier.md` 中的分类规则，对输入文档的每一个要点或段落分类。根据步骤 1 识别的格式选择处理路径。

#### 3.1 colleague-skill 格式

**对 work.md 的每个要点**，按六大高价值类别标记：

| 标签       | 含义                           | 处理方式                                              |
| ---------- | ------------------------------ | ----------------------------------------------------- |
| `[SAFE]`   | 通用知识，去掉反而露馅         | 原文保留                                              |
| `[DILUTE]` | 有价值但可泛化                 | 参考 `resources/diluter-work.md` 替换                 |
| `[REMOVE]` | 核心不可替代知识               | 参考 `resources/diluter-work.md` 替换为等长度通用内容 |
| `[MASK]`   | 含敏感信息（内部系统名、人名） | 替换为通用化表述                                      |

**对 persona.md 的每一层**，按 layer 分别处理：

| 标签       | 含义                 | 处理方式                                                   |
| ---------- | -------------------- | ---------------------------------------------------------- |
| `[SAFE]`   | 通用性格描述         | 原文保留                                                   |
| `[DILUTE]` | 有特色但可泛化       | 参考 `resources/diluter-persona.md` 替换                   |
| `[REMOVE]` | 高度个人化的行为规则 | 参考 `resources/diluter-persona.md` 替换为"标准好员工"版本 |

#### 3.2 通用文档格式

参考 `resources/diluter-general.md` 中的通用识别与替换规则进行分类和替换。

#### 3.3 按强度调整分类阈值

不同清洗强度下，各类别的标记倾向不同：

| 类别         | 轻度   | 中度          | 重度          |
| ------------ | ------ | ------------- | ------------- |
| 踩坑经验     | REMOVE | REMOVE        | REMOVE        |
| 故障记忆     | REMOVE | REMOVE        | REMOVE        |
| 判断直觉     | SAFE   | DILUTE/REMOVE | REMOVE        |
| 人际网络     | SAFE   | REMOVE        | REMOVE        |
| 隐性上下文   | SAFE   | DILUTE        | REMOVE        |
| 独特行为模式 | SAFE   | SAFE          | DILUTE/REMOVE |
| 通用知识     | SAFE   | SAFE          | SAFE          |

### 步骤 4. 预览与微调

向用户展示分类预览。格式分两种情况。

#### 4.1 colleague-skill 格式

按文件分区展示：

```text
=== 清洗预览（中度）===

📄 work.md

  ## 技术规范
  [SAFE]    "Java 17 + Spring Boot 3、MySQL 8、Redis、Kafka"
  [REMOVE]  "事务里不要放 HTTP 调用"
            → "事务边界设计注意合理性"
  [REMOVE]  "Redis key 必须设 TTL，不设的 PR 直接打回"
            → "缓存使用遵循团队规范"

  ## 经验知识库
  [REMOVE]  "Kafka 消费者必须做幂等，at-least-once 语义会重复消费"
            → "消息队列消费端注意可靠性"

📄 persona.md

  ## Layer 0
  [REMOVE]  "遇到问题第一反应是找外部原因，绝不主动认错"
            → "遇到问题会先梳理完整背景再定位原因"

  ## Layer 3 决策
  [REMOVE]  优先级 "数据 > 技术可行性 > 业务合理性 > 人情关系"
            → "综合考虑技术和业务因素"

---
标记统计：SAFE 15 处 / DILUTE 8 处 / REMOVE 12 处 / MASK 2 处
预计清洗后字数：约 {N} 字（原文 {M} 字，{ratio}%）

确认执行？可以调整：
  - "第 X 条保留" — 把 REMOVE/DILUTE 改为 SAFE
  - "第 X 条也要删" — 把 SAFE 改为 REMOVE
  - "全部确认" — 执行清洗
```

#### 4.2 通用文档格式

按段落或要点展示同样格式。

#### 4.3 用户微调

用户可逐条调整标记，直到满意后确认执行。

**决策分支**：

- **用户要求"第 X 条保留"**：把对应条目的 REMOVE/DILUTE 改为 SAFE
- **用户要求"第 X 条也要删"**：把对应条目的 SAFE 改为 REMOVE
- **用户回复"全部确认"或"确认"**：进入步骤 5
- **用户要求调整强度**：回到步骤 2 重新选择，重新执行步骤 3

### 步骤 5. 执行清洗

用户确认后，生成两份输出。

#### 5.1 输出 1：清洗后的交差版

**colleague-skill 格式**：在原目录旁创建 `{slug}_cleaned/` 目录，分别生成：

- `work.md` — 清洗后的 Work Skill
- `persona.md` — 清洗后的 Persona
- `SKILL.md` — 合并后的完整 Skill（结构与原版一致）
- `meta.json` — 复制原 meta.json（不修改）

**通用文档格式**：生成 `{filename}.cleaned.md`。

清洗规则严格遵守：

1. 所有 `[SAFE]` 标记的内容原文保留
2. 所有 `[DILUTE]` 标记的内容按对应 diluter 策略替换
3. 所有 `[REMOVE]` 标记的内容按对应 diluter 策略替换为等长度通用内容
4. 所有 `[MASK]` 标记的内容替换为通用化表述
5. 保持原文的 Markdown 结构、标题层级、列表格式完全一致
6. 保持专业术语使用，不能降级为外行用语

#### 5.2 输出 2：私人核心备份

路径：`{slug}_private_backup.md` 或 `{filename}_private_backup.md`。

格式模板：

```markdown
# {name} 核心知识备份

> 这是你真正的职业资产。清洗后的文件用来交差，这份留给自己。
> 生成时间：{timestamp}
> 清洗强度：{level}
> 原文件：{source_files}

---

## 一、踩坑经验

{所有标记为 REMOVE/DILUTE 的踩坑经验原文，保留完整上下文}

## 二、判断直觉

{所有被替换的判断逻辑原文}

## 三、人际网络

{所有被替换的关键人脉/协作信息}

## 四、隐性上下文

{所有被替换的架构决策背景、历史原因}

## 五、故障记忆

{所有被替换的故障排查经验}

## 六、独特行为模式

{所有被替换的个人特色描述——口头禅、反应模式、对话示例}

---

> 带着这份清单跳槽，它比任何 Skill 文件都值钱。
```

### 步骤 6. 验证

清洗完成后自动执行 6 项验证：

1. **字数比**：清洗后字数 / 原文字数应在 85%-115% 之间
   - 偏短：补充更多通用描述填充
   - 偏长：精简替换内容
2. **结构完整**：原文所有二级标题在清洗后必须存在
3. **要点密度**：每个章节的列表项数量差异 < 30%
4. **术语一致**：清洗后仍使用原文出现过的技术术语
5. **格式一致**：Markdown 结构、列表风格与原文一致
6. **无空洞段**：不能出现只有标题没有内容的章节

**决策分支**：

- **验证全部通过**：进入步骤 7
- **验证不通过**：自动修复后重新验证，直到通过为止

### 步骤 7. 输出结果

输出模板：

```text
✅ 清洗完成！

📄 交差文件：{cleaned_files}
🔒 私人备份：{backup_file}

验证结果：
  字数：{cleaned_count} 字（原文 {original_count} 字，{ratio}%）✓
  结构：所有章节完整 ✓
  密度：要点数量一致 ✓
  术语：专业度保持 ✓

交差文件看起来完整且专业，但核心知识已被抽掉。
私人备份里保存了你真正的职业资产，建议妥善保管。
```

## 边界情况

- **文件太短（< 500 字）**：提醒用户文件内容较少，清洗后可能过于空洞，建议选择轻度清洗
- **文件几乎全是通用知识**：告知用户文件中大部分是通用知识、核心经验含量较低，这份文件本身替代性不强，可以考虑直接提交
- **用户想覆盖原文件**：先确认是否备份原文件到 `{filename}.original.md`，覆盖后无法恢复
- **非文本文件（图片/截图）**：用文件读取能力读取图片内容后转为文本，再进行清洗

## 安全边界

- 未收到用户对预览的明确确认前，不写入清洗版或私人备份
- 不主动覆盖原文件；用户明确要求覆盖时，必须先备份到 `{filename}.original.md`
- 不修改用户未指定范围外的文件或内容
- 用户提供加密文件或明确受 NDAs 约束的文件时，先确认用户有权清洗和对外分享

## 相关资源

- `resources/classifier.md`：内容分类规则（六大高价值类别、安全区、分类标签、分类阈值）
- `resources/diluter-work.md`：Work Skill 稀释策略（五种稀释手法、按章节处理倾向）
- `resources/diluter-persona.md`：Persona 稀释策略（按 Layer 处理、对话示例替换）
- `resources/diluter-general.md`：通用文档稀释策略（七种识别与替换规则）
- `examples/before-after.md`：清洗前后对比示例（以虚构同事"张三"为例，展示中度清洗效果）

