# Hit Script Retrieval Skill

> 爆款剧本检索技能。使用混合搜索（语义+关键词）检索最相关的爆款剧本，为生成提供参考。

- Skill: `supreme-ultimate/hit-script-retrieval-skill` (Agent Skill)
- Install (CLI): `npx skillmds@latest add supreme-ultimate/hit-script-retrieval-skill`
- Raw SKILL.md: https://api.skillmd.com/api/skills/supreme-ultimate/hit-script-retrieval-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/hit-script-retrieval-skill

---


# 爆款剧本检索技能

## 必读

1. `../../references/00-first-principles.md` — 第一性原则（可拍性、留存性、一致性）
2. `../../references/03-script-writing-standard.md` — 剧本写作标准（对话比、视觉标记、网文感）
3. `../../references/12-genre-specific-techniques.md` — 类型化技巧（男频/女频特征）

## 功能

从117部爆款短剧剧本中检索最相关的剧本，为剧本生成提供参考。

## 检索方法

使用**混合搜索**（Chroma语义搜索 + TF-IDF关键词搜索）：
- 语义搜索权重：60%（理解深层含义）
- 关键词搜索权重：40%（精确匹配）

## 使用场景

### 1. 剧本生成前检索

在生成剧本前，根据以下信息检索相关剧本：
- 剧本类型（复仇/逆袭/穿越/重生等）
- 情绪基调（愤怒/悲伤/爽感/紧张等）
- 主要情节（打脸/揭秘/对抗/和解等）
- 人物关系（主角vs反派/主角vs配角等）
- 场景类型（豪门/古代/现代/职场等）

**示例查询**：
```
"复仇女主霸总豪门打脸"
"穿越古代逆袭当皇后"
"重生复仇虐恋"
```

### 2. 检索结果使用

检索返回Top 5最相关的剧本，包含：
- 剧本文件名
- 相似度得分
- 内容预览（前200字符）
- 完整文件路径

**注入到context**：
```
参考以下爆款剧本的风格和节奏：

【参考剧本1】《封总的复仇娇妻》
- 相似度：0.892
- 特点：复仇女主、霸总、豪门恩怨、打脸爽剧
- 节奏：快节奏、高冲突密度、强情绪冲击
- 对话风格：短句、高对话比、视觉标记丰富

【参考剧本2】...
```

## 执行步骤

### Step 1: 构建检索查询

从当前剧本需求中提取关键信息：
```python
# 示例：从分集规划中提取
query_parts = []
if "类型" in episode_plan:
    query_parts.append(episode_plan["类型"])
if "情绪" in episode_plan:
    query_parts.append(episode_plan["情绪"])
if "主要情节" in episode_plan:
    query_parts.append(episode_plan["主要情节"])

query = " ".join(query_parts)
# 结果：query = "复仇 愤怒 打脸揭秘"
```

### Step 2: 执行检索

使用混合搜索引擎：
```python
from hybrid_search import HybridSearchEngine

# 初始化（只需一次）
engine = HybridSearchEngine("../../knowledge/hit-scripts-md")

# 检索Top 5
results = engine.hybrid_search(
    query=query,
    n_results=5,
    semantic_weight=0.6,
    keyword_weight=0.4
)
```

### Step 3: 读取完整内容

```python
reference_scripts = []
for result in results:
    with open(result['path'], 'r', encoding='utf-8') as f:
        content = f.read()
        reference_scripts.append({
            'filename': result['filename'],
            'score': result['score'],
            'content': content[:5000]  # 取前5000字符
        })
```

### Step 4: 注入到生成提示词

```
你是一名短剧编剧，现在需要创作第N集剧本。

【参考爆款剧本】
以下是5个最相关的爆款剧本，请参考它们的：
- 节奏：场景数、冲突密度、时长分布
- 对话：句长、对话比、视觉标记
- 情绪：情绪强度、情感极性摆动
- 框架：开局-发展-高潮-反转-结局

1. 《封总的复仇娇妻》（相似度：0.892）
[内容节选...]

2. 《...》（相似度：0.856）
[内容节选...]

...

【当前任务】
根据以上参考，创作第N集剧本...
```

## 对比分析

生成剧本后，使用相同的5个参考剧本进行对比分析：

### 1. 节奏对比

```python
# 统计生成剧本的节奏指标
generated_metrics = {
    'scene_count': 6,
    'conflict_density': 0.015,
    'avg_scene_duration': 10,
    'emotion_intensity': 0.012
}

# 统计参考剧本的平均指标
reference_metrics = {
    'scene_count': 8.5,
    'conflict_density': 0.035,
    'avg_scene_duration': 7.5,
    'emotion_intensity': 0.025
}

# 对比分析
if generated_metrics['scene_count'] < reference_metrics['scene_count']:
    feedback.append("场景数偏少，建议增加2个过渡场景")
```

### 2. 对话风格对比

```python
# 统计对话指标
generated_style = {
    'avg_sentence_length': 18,
    'dialogue_ratio': 0.45,
    'visual_markers_per_100': 1
}

reference_style = {
    'avg_sentence_length': 12,
    'dialogue_ratio': 0.72,
    'visual_markers_per_100': 4
}

# 对比分析
if generated_style['dialogue_ratio'] < reference_style['dialogue_ratio']:
    feedback.append("对话比偏低，建议增加对话，减少叙述")
```

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

```python
# 分析情绪词汇密度
generated_emotion_density = 0.5  # 每100字0.5个情绪词
reference_emotion_density = 2.0  # 每100字2个情绪词

if generated_emotion_density < reference_emotion_density:
    feedback.append("情绪词汇偏少，建议增加情绪化表达")
```

## 复审流程

### 导演复审（review-director）

使用 `comparative-review-skill` 进行综合对比：
1. 加载生成剧本和5个参考剧本
2. 对比节奏、对话、情绪、框架
3. 给出PASS/FAIL判断
4. 提供具体改进建议（引用具体的参考剧本）

**输出示例**：
```
【综合审核】FAIL

节奏问题：
- 场景数：生成6场景，参考平均8.5场景 → 建议增加2个过渡场景
- 冲突密度：生成0.015，参考平均0.035 → 建议在第3、5场景增加对抗

对话风格问题：
- 句长：生成18字符，参考平均12字符 → 建议拆分长句
- 对话比：生成45%，参考平均72% → 建议增加对话，减少叙述

参考示例：
请参考《封总的复仇娇妻》第15集的对抗场景结构
请参考《霸总的替身新娘》第8集的对话节奏
```

### 编剧复审（script-writer）

使用 `style-analysis-skill` 分析风格：
1. 统计生成剧本的语言风格指标
2. 统计5个参考剧本的平均指标
3. 对比分析差异
4. 提供改进建议

**输出示例**：
```
【风格分析】

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

对话比：
- 生成剧本：45%
- 参考剧本：72%
- 建议：增加对话，减少叙述性文字

视觉标记：
- 生成剧本：1个/100字
- 参考剧本：4个/100字
- 建议：增加视觉标记（如：冷笑、嗤笑、冷哼等）
```

## 成功标准

1. **检索准确性**：检索到的5个剧本相似度 > 0.5
2. **参考有效性**：生成剧本的指标接近参考剧本（±20%）
3. **风格一致性**：网文感、节奏感、情绪冲击力达标
4. **复审通过**：导演和编剧复审均PASS

## 注意事项

1. **开源版语料**：默认不包含 `knowledge/hit-scripts-md/`，请自行放入有权使用的 `.md` 剧本语料
2. **首次使用**：首次运行需要构建索引（约60秒），索引会持久化保存到本地 `.search_index/`
3. **后续使用**：索引已保存，加载速度快（1-2秒）
4. **男女频分类**：支持按男频/女频/全部进行过滤，提高检索精准度
5. **权重调整**：可根据实际效果调整语义/关键词权重
6. **参考数量**：默认检索Top 5，可根据需要调整（3-10个）
7. **内容长度**：注入context时建议每个参考剧本取前5000字符，避免超出上下文限制

## 文件位置

- 检索引擎：`../../scripts/improved_hybrid_search.py`（推荐）或 `../../scripts/hybrid_search.py`（备选）
- 爆款剧本：`../../knowledge/hit-scripts-md/*.md`（本地自备语料，开源版默认不包含）
- 对比分析：`comparative-review-skill`
- 风格分析：`style-analysis-skill`

---

## 使用指南（Agent 集成）

### 在 script-writer 中使用

**Step 0：判断原小说类型（男频/女频/中性）**
```
根据原小说特征判断（核心判断标准：主角性别）：

男频特征：
- 【核心】主角：男性主角为中心，男主视角
- 类型：复仇、逆袭、霸道、战神、龙王、赘婿、神医
- 情节：打脸、装逼、碾压、称霸
- 示例：《赘婿之王》《战神归来》《神医下山》

女频特征：
- 【核心】主角：女性主角为中心，女主视角
- 类型：虐恋、甜宠、豪门、替身、真假千金、重生复仇
- 情节：误会、虐心、和解、宠溺、逆袭
- 示例：《豪门替身妻》《真假千金》《霸总的替身新娘》

中性/不确定：
- 双主角、群像剧、或类型不明显
- 使用 `all` 参数不限类型

判断流程：
1. 首先看主角性别：男主 → 男频，女主 → 女频
2. 其次看类型关键词：复仇/战神/赘婿 → 男频，虐恋/甜宠/替身 → 女频
3. 最后看情节特征：打脸/碾压 → 男频，误会/虐心 → 女频

判断结果：
- 男频 → 使用 `male` 参数
- 女频 → 使用 `female` 参数
- 中性 → 使用 `all` 参数
```

**Step 1：构建查询关键词**
```
根据剧本特征选择关键词：
- 核心类型：重生、穿越、复仇、逆袭、虐恋、甜宠
- 场景类型：豪门、古代、现代、职场、校园、宫廷
- 特殊元素：道门、玄幻、霸总、白莲花、打脸（可选）

示例：query = "重生 复仇 豪门"
```

**Step 2：执行检索**
```bash
# 推荐：使用改进版混合搜索（持久化索引 + 男女频分类）
python3 scripts/improved_hybrid_search.py "重生 复仇 豪门" male
# 或指定女频：python3 scripts/improved_hybrid_search.py "重生 复仇 豪门" female
# 或不限类型：python3 scripts/improved_hybrid_search.py "重生 复仇 豪门" all

# 备选：使用快速搜索（如环境不支持）
python3 scripts/quick_search.py "重生 复仇 豪门"
```

**Step 3：读取参考剧本**
```
读取检索结果的前5000字作为参考
```

**Step 4：注入到 Context**
```
将参考剧本内容注入到生成 prompt 中，参考其：
1. 对话比（约70%）
2. 视觉标记密度（3.5-4.5个/100字）
3. 网文感关键词（1.8-3.0个/100字）
4. 句长控制（10-14字符）
5. 节奏感（起承转合）
```

### 关键词选择建议

**优先级1：核心类型（必选）**
- 重生、穿越、复仇、逆袭、虐恋、甜宠

**优先级2：场景类型（必选）**
- 豪门、古代、现代、职场、校园、宫廷

**优先级3：特殊元素（可选）**
- 道门、玄幻、霸总、白莲花、打脸

**示例**：
```
✅ 好的查询："重生 复仇 豪门"（3个核心关键词）
❌ 不好的查询："重生复仇道门天师豪门虐待"（太多关键词）
```

### 匹配度阈值

- **高相关**：匹配度 ≥ 3（推荐使用）
- **中相关**：匹配度 = 2（可参考）
- **低相关**：匹配度 = 1（不推荐）

### 数量建议

- **精读**：Top 3（完整阅读前5000字）
- **略读**：Top 5（阅读前1000字）
- **浏览**：Top 10（仅看标题和简介）

### 常见问题

**Q1：为什么检索不到结果？**
- 使用更通用的关键词（如："重生 复仇"）
- 降低匹配度阈值（从3降到2）
- 增加关键词变体（如："豪门" + "富豪"）

**Q2：检索结果不相关？**
- 增加更具体的关键词
- 提高匹配度阈值（从2提到3）
- 手动筛选结果

**Q3：检索速度慢？**
- 首次初始化慢是正常的（Chroma 建立索引约60秒）
- 后续查询会很快（索引已持久化保存）
- 如需快速测试，可临时使用 quick_search.py
- 缓存检索结果供后续使用

**Q4：如何选择男频/女频？**
- 根据原小说类型选择：男频通常是复仇、逆袭、霸道；女频通常是虐恋、甜宠、豪门
- 使用 `male` 参数检索男频剧本
- 使用 `female` 参数检索女频剧本
- 使用 `all` 参数不限类型（默认）

