# Comparative Review Skill

> Comparative Review Skill

- Skill: `supreme-ultimate/comparative-review-skill` (Agent Skill)
- Install (CLI): `npx skillmds@latest add supreme-ultimate/comparative-review-skill`
- Raw SKILL.md: https://api.skillmd.com/api/skills/supreme-ultimate/comparative-review-skill/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: supreme-ultimate (https://skillmd.com/u/supreme-ultimate)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/supreme-ultimate/comparative-review-skill

---


# 对比审核技能

## 必读

1. `../../references/00-first-principles.md` — 第一性原则（可拍性、留存性、一致性、可验证性）
2. `../../references/03-script-writing-standard.md` — 剧本写作标准（对话比、视觉标记、网文感、节奏控制）
3. `../../references/04-review-gates.md` — 审核门槛（PASS/FAIL标准、回改流程）

## 功能

对比生成剧本与参考的爆款剧本，从多个维度进行分析，防止AI味，确保剧本质量。

## 对比维度

### 1. 节奏对比

**统计指标**：
- 场景数（scene_count）
- 冲突密度（conflict_density）= 冲突次数 / 总字数
- 平均场景时长（avg_scene_duration）
- 时长方差（duration_variance）
- 情绪强度（emotion_intensity）

**对比方法**：
```python
# 统计生成剧本
generated = analyze_rhythm(generated_script)

# 统计参考剧本（5个的平均值）
reference = average([analyze_rhythm(ref) for ref in reference_scripts])

# 对比
rhythm_score = compare_metrics(generated, reference)
```

**判断标准**：
- 场景数：±2个场景内为PASS
- 冲突密度：±0.01内为PASS
- 情绪强度：±0.01内为PASS

### 2. 对话风格对比

**统计指标**：
- 平均句长（avg_sentence_length）
- 对话比（dialogue_ratio）= 对话字数 / 总字数
- 视觉标记密度（visual_markers_per_100）
- 短句比例（short_sentence_ratio）< 10字符的句子占比
- 网文感关键词密度（wanwen_keywords_per_100）

**网文感关键词**：
```python
wanwen_keywords = [
    '冷笑', '嗤笑', '冷哼', '冷声', '冷冷',
    '眼神一冷', '眸光一沉', '嘴角勾起',
    '不屑', '轻蔑', '讥讽', '嘲讽',
    '霸气', '强势', '凌厉', '锐利'
]
```

**判断标准**：
- 句长：12±3字符为PASS
- 对话比：70%±10%为PASS
- 视觉标记：3-5个/100字为PASS

### 3. 情绪冲击力对比

**统计指标**：
- 情绪词汇密度（emotion_word_density）
- 情感极性摆动（emotion_polarity_swing）
- 高潮点数量（climax_count）
- 悬念设置（suspense_count）

**情绪词汇**：
```python
emotion_words = {
    '愤怒': ['愤怒', '暴怒', '怒火', '气愤', '恼怒'],
    '悲伤': ['悲伤', '难过', '伤心', '痛苦', '绝望'],
    '惊讶': ['惊讶', '震惊', '惊愕', '愕然', '惊呆'],
    '恐惧': ['恐惧', '害怕', '惊恐', '畏惧', '胆寒'],
    '喜悦': ['喜悦', '高兴', '欣喜', '愉悦', '兴奋']
}
```

**判断标准**：
- 情绪词汇：1.5-2.5个/100字为PASS
- 情感摆动：至少2次明显摆动为PASS
- 高潮点：至少1个为PASS

### 4. 框架结构对比

**结构要素**：
- 开局（hook）：前10%是否有强钩子
- 发展（development）：中间60%是否有持续冲突
- 高潮（climax）：是否有明显高潮点
- 反转（twist）：是否有意外反转
- 结局（ending）：是否有强悬念/钩子

**判断标准**：
- 5个要素至少满足4个为PASS

### 5. 跨集内容重复检查

**检查对象**：当前集与前一集的内容对比

**检查项**：
- 场景重复：当前集与前一集是否有相同的场景
- 剧情点重复：当前集与前一集是否有相同的剧情点
- 对话重复：当前集与前一集是否有相似的对话
- 事件重复：当前集与前一集是否是同一个事件

**判断标准**：
- 发现任何重复内容，必须 FAIL
- 必须指出具体的重复位置
- 必须要求删除或重写重复内容

**示例**：
```python
# 检查场景重复
ep01_scenes = extract_scenes(ep01_script)
ep02_scenes = extract_scenes(ep02_script)
duplicate_scenes = find_duplicates(ep01_scenes, ep02_scenes)

if duplicate_scenes:
    feedback.append({
        'dimension': '跨集内容重复',
        'issue': '发现重复场景',
        'location': f'第{N}集与第{N-1}集',
        'duplicates': duplicate_scenes,
        'suggestion': '删除重复场景，或改为新的场景'
    })
```

### 6. 事件完整性检查

**检查对象**：当前集的事件结构

**检查项**：
- 事件完整性：当前集是否是一个完整的事件（有开始、发展、结束）
- 剧情线完整性：当前集是否有未完成的剧情线
- 逻辑连贯性：当前集与下一集的规划是否有逻辑断层

**判断标准**：
- 事件不完整（如只有开始没有结束），必须 FAIL
- 有未完成的剧情线，必须 FAIL
- 与下一集的规划有逻辑断层，必须 FAIL

**示例**：
```python
# 检查事件完整性
event_structure = analyze_event_structure(script)

if not event_structure['has_beginning']:
    feedback.append({
        'dimension': '事件完整性',
        'issue': '事件缺少开始',
        'suggestion': '添加事件的触发点'
    })

if not event_structure['has_ending']:
    feedback.append({
        'dimension': '事件完整性',
        'issue': '事件缺少结束',
        'suggestion': '添加事件的结果或转折'
    })
```

## 执行流程

### Step 1: 加载剧本

```python
# 加载生成剧本
with open(generated_script_path, 'r') as f:
    generated_script = f.read()

# 加载参考剧本（之前检索的Top 5）
reference_scripts = []
for ref_path in reference_paths:
    with open(ref_path, 'r') as f:
        reference_scripts.append(f.read())
```

### Step 2: 统计指标

```python
# 生成剧本指标
gen_rhythm = analyze_rhythm(generated_script)
gen_style = analyze_style(generated_script)
gen_emotion = analyze_emotion(generated_script)
gen_structure = analyze_structure(generated_script)

# 参考剧本平均指标
ref_rhythm = average([analyze_rhythm(ref) for ref in reference_scripts])
ref_style = average([analyze_style(ref) for ref in reference_scripts])
ref_emotion = average([analyze_emotion(ref) for ref in reference_scripts])
ref_structure = average([analyze_structure(ref) for ref in reference_scripts])
```

### Step 3: 对比分析

```python
feedback = []

# 节奏对比
if abs(gen_rhythm['scene_count'] - ref_rhythm['scene_count']) > 2:
    feedback.append({
        'dimension': '节奏',
        'issue': f"场景数偏{'少' if gen_rhythm['scene_count'] < ref_rhythm['scene_count'] else '多'}",
        'generated': gen_rhythm['scene_count'],
        'reference': ref_rhythm['scene_count'],
        'suggestion': f"建议调整为{ref_rhythm['scene_count']}个场景"
    })

# 对话风格对比
if gen_style['dialogue_ratio'] < 0.6:
    feedback.append({
        'dimension': '对话风格',
        'issue': '对话比偏低',
        'generated': f"{gen_style['dialogue_ratio']:.1%}",
        'reference': f"{ref_style['dialogue_ratio']:.1%}",
        'suggestion': '增加对话，减少叙述性文字'
    })

# 跨集内容重复检查
if previous_script:
    duplicate_scenes = find_duplicate_scenes(generated_script, previous_script)
    if duplicate_scenes:
        feedback.append({
            'dimension': '跨集内容重复',
            'issue': '发现重复场景',
            'location': f'第{N}集与第{N-1}集',
            'duplicates': duplicate_scenes,
            'suggestion': '删除重复场景，或改为新的场景',
            'severity': 'CRITICAL'  # 必须修复
        })

# 事件完整性检查
event_structure = analyze_event_structure(generated_script)
if not event_structure['is_complete']:
    feedback.append({
        'dimension': '事件完整性',
        'issue': event_structure['issue'],
        'suggestion': event_structure['suggestion'],
        'severity': 'CRITICAL'  # 必须修复
    })

# ... 其他维度对比
```

### Step 4: 生成审核报告

```python
report = {
    'verdict': 'PASS' if len(feedback) == 0 else 'FAIL',
    'overall_score': calculate_overall_score(gen, ref),
    'dimensions': {
        'rhythm': rhythm_score,
        'style': style_score,
        'emotion': emotion_score,
        'structure': structure_score
    },
    'feedback': feedback,
    'reference_examples': find_best_examples(feedback, reference_scripts)
}
```

## 输出格式

```markdown
【综合审核报告】

判定：FAIL
综合得分：72/100

## 维度得分
- 节奏：65/100 ⚠️
- 对话风格：70/100 ⚠️
- 情绪冲击力：80/100 ✓
- 框架结构：85/100 ✓
- 跨集内容重复：FAIL ❌
- 事件完整性：FAIL ❌

## 详细反馈

### 跨集内容重复问题（CRITICAL）
1. 发现重复场景
   - 位置：第2集与第1集
   - 重复内容：搜身 + 签字 + 离开
   - 建议：删除第2集的重复内容，改为新的场景（如拍卖会、修炼等）

### 事件完整性问题（CRITICAL）
1. 事件不完整
   - 位置：第2集
   - 问题：第2集重复了第1集的事件，没有新的完整事件
   - 建议：第2集应该是一个新的完整事件，如"拍卖会展示实力"（入场 → 竞拍 → 展示 → 震惊）

### 节奏问题
1. 场景数偏少
   - 生成剧本：6个场景
   - 参考平均：8.5个场景
   - 建议：增加2个过渡场景，建议在第3场景后和第5场景后各增加一个

2. 冲突密度偏低
   - 生成剧本：0.015
   - 参考平均：0.035
   - 建议：在第3、5场景增加对抗情节

### 对话风格问题
1. 对话比偏低
   - 生成剧本：45%
   - 参考平均：72%
   - 建议：增加对话，减少叙述。将叙述性文字改为对话形式

2. 句长偏长
   - 生成剧本：18字符
   - 参考平均：12字符
   - 建议：拆分长句，增加短句比例

3. 视觉标记不足
   - 生成剧本：1个/100字
   - 参考平均：4个/100字
   - 建议：增加视觉标记（冷笑、嗤笑、冷哼等）

## 参考示例

请参考以下爆款剧本的处理方式：

1. 《封总的复仇娇妻》第15集
   - 对抗场景结构：先铺垫→冲突爆发→反转→钩子
   - 对话节奏：短句+高密度+情绪化

2. 《霸总的替身新娘》第8集
   - 打脸场景：层层递进，每次打脸都有新信息
   - 视觉标记：冷笑、嗤笑、眼神一冷等高频使用

## 修改建议

优先级1（必须修改 - CRITICAL）：
- **删除第2集的重复内容，改为新的完整事件**
- **确保每集是一个独立的故事单元**

优先级2（必须修改）：
- 增加2个过渡场景
- 提高对话比到70%以上

优先级3（建议修改）：
- 拆分长句
- 增加视觉标记

优先级4（可选优化）：
- 增强情绪词汇密度
- 优化悬念设置
```

## 成功标准

- 综合得分 ≥ 80分为PASS
- 4个维度得分均 ≥ 70分
- 无优先级1的问题
- **跨集内容重复检查：PASS（无重复内容）**
- **事件完整性检查：PASS（事件完整、无逻辑断层）**

## 注意事项

1. **对比基准**：使用检索到的Top 5爆款剧本作为基准
2. **动态调整**：根据实际效果调整判断标准
3. **具体建议**：必须引用具体的参考剧本示例
4. **可操作性**：建议必须具体、可执行

