---
name: text-condenser
description: >-
  字数裁剪/摘要：把长文本压缩到指定字数，保留核心信息。支持硬裁剪（严格字数）、
  摘要（保留要点）、金句提取（只保留最精华的句子）三种模式。
  特别适合从长文生成平台适配的短文。
  使用时机：用户说"裁到 140 字"、"压缩一下"、"太长了"、"摘要"、"精简"、
  "缩写"、"字数裁剪"、"帮我缩短"、"提炼要点"。
  和 text-polisher 的区别：polisher 润色文案不改长度，condenser 压缩篇幅不做质量提升。
layer: produce
---

# 字数裁剪/摘要

> 把长文本压缩到指定字数，保留核心信息，适配不同平台的字数限制。

## 输入

| 字段 | 必填 | 说明 |
|------|------|------|
| `text` | 是 | 待压缩的原文 |
| `target_length` | 否 | 目标字数（如 `140`、`280`、`500`）；不指定则自动压缩到原文 30%-50% |
| `mode` | 否 | 压缩模式：`strict` / `summary` / `extract`（默认 `summary`） |
| `platform` | 否 | 目标平台（自动设定字数限制）：`weibo`(140) / `twitter`(280) / `xiaohongshu`(1000) / `zhihu_answer`(自由) |
| `preserve` | 否 | 必须保留的关键信息/关键词列表 |
| `tone` | 否 | 压缩后的语气倾向：`neutral`（默认）/ `punchy`（有力）/ `soft`（柔和） |

### 压缩模式说明

| 模式 | 行为 | 适用场景 |
|------|------|----------|
| `strict` | 严格控制在目标字数 ±5%，逐字斟酌 | 有硬性字数限制的平台（微博、Twitter） |
| `summary` | 保留所有要点，允许字数浮动 ±15% | 生成摘要、文章导语 |
| `extract` | 只提取原文中最精华的原句，不改写 | 金句提取、精华摘录 |

## 输出

- 压缩后的文案
- 压缩报告：原文字数、目标字数、实际字数、压缩率、保留的核心要点列表
- 写入 `outputs/` 目录

## 执行步骤

> **字数以脚本为准**：字数统计和达标判定一律用 `skills/shared/scripts/wordcount.py`，
> 不靠自己数。LLM 负责改写，脚本负责判定。
> 社媒计数口径（`social_count`）= 中文字符 + 英文单词 + 数字串 + 标点。

### Step 1 — 原文分析

1. 统计原文字数：`python3 skills/shared/scripts/wordcount.py count -f <原文>`（或经 stdin 传入）
2. 提取核心信息结构：
   - 中心论点 / 核心事实
   - 关键论据 / 支撑数据
   - 次要信息 / 补充说明
   - 修饰性内容 / 过渡句
3. 对每条信息标注优先级（P0 必留 / P1 尽量留 / P2 可删）

### Step 2 — 裁剪策略

根据保留率（目标字数 / 原文字数）选择策略：

| 保留率 | 策略 | 说明 |
|--------|------|------|
| > 70% | 轻度删减 | 删冗余修饰、合并重复表达 |
| 40%-70% | 中度压缩 | 删 P2 信息、精简句式、合并相似段落 |
| 20%-40% | 重度压缩 | 只留 P0/P1、改写为高密度表达 |
| < 20% | 极限压缩 | 只留 P0、一句话概括 |

### Step 3 — 执行压缩

按 `mode` 执行：

**strict 模式（脚本兜底，闭环调整）：**
1. 先裁到目标字数的 120%
2. 逐句精简，去掉每句中可删的词
3. **调用脚本校验**：`python3 skills/shared/scripts/wordcount.py check --target <N> -f <文件>`（或经 stdin 传入）
   - 退出码 0 = 达标；非 0 = 未达标，脚本会给出「还需增/删 X 字」
   - 平台硬限制默认 ±5%，可用 `--tolerance` 调整（如 `--tolerance 0.1`）
4. **未达标则继续改写并重新 check，直到脚本判定 pass（退出码 0）**，不得凭感觉收尾
5. 确认无断句、无残句

**summary 模式：**
1. 按信息优先级筛选内容
2. 用自己的话重写，不受原文句式约束
3. 确保逻辑连贯、可独立阅读

**extract 模式：**
1. 对每句打分（信息密度 x 表达质量）
2. 按得分降序选句，直到接近目标字数
3. 调整句序使其连贯
4. 不改写原句（最多做衔接过渡）

### Step 4 — 质量检查

- 字数是否达标：**strict 模式必须以 `wordcount.py check` 退出码 0 为准**；其他模式用 `wordcount.py count` 核对是否落在容差范围
- `preserve` 中的关键信息是否全部保留
- 压缩后是否可独立阅读（不需要看原文就能理解）
- 是否有信息失真（压缩导致意思改变）
- 句子是否完整（无残句、无悬空指代）

### Step 5 — 输出压缩报告

```
压缩报告:
- 原文: 2,350 字
- 目标: 500 字
- 实际: 487 字 (压缩率 79.3%，压缩率 = 已删减比例 = 1 − 实际/原文)
- 模式: summary
- 保留要点:
  1. [P0] 核心论点 — 已保留
  2. [P0] 关键数据 — 已保留
  3. [P1] 案例说明 — 已精简
  4. [P2] 背景介绍 — 已删除
```

## Profile 感知

- **有 Profile**：从 `style.md` 读取品牌调性，压缩时保持一致的语言风格；参考 `platforms.md` 中的平台偏好，自动匹配最常用平台的字数规范
- **无 Profile**：按用户指定的参数压缩；未指定平台时默认 `summary` 模式，压缩到原文 30%-50%

> 自研溯源与参考项目见同目录 `EASEL-META.md`。
