$npx -y skills add Supreme-Ultimate/novel-to-script-team --skill hit-script-retrieval-skill爆款剧本检索技能。使用混合搜索(语义+关键词)检索最相关的爆款剧本,为生成提供参考。
| 1 | # 爆款剧本检索技能 |
| 2 | |
| 3 | ## 必读 |
| 4 | |
| 5 | 1. `../../references/00-first-principles.md` — 第一性原则(可拍性、留存性、一致性) |
| 6 | 2. `../../references/03-script-writing-standard.md` — 剧本写作标准(对话比、视觉标记、网文感) |
| 7 | 3. `../../references/12-genre-specific-techniques.md` — 类型化技巧(男频/女频特征) |
| 8 | |
| 9 | ## 功能 |
| 10 | |
| 11 | 从117部爆款短剧剧本中检索最相关的剧本,为剧本生成提供参考。 |
| 12 | |
| 13 | ## 检索方法 |
| 14 | |
| 15 | 使用**混合搜索**(Chroma语义搜索 + TF-IDF关键词搜索): |
| 16 | - 语义搜索权重:60%(理解深层含义) |
| 17 | - 关键词搜索权重:40%(精确匹配) |
| 18 | |
| 19 | ## 使用场景 |
| 20 | |
| 21 | ### 1. 剧本生成前检索 |
| 22 | |
| 23 | 在生成剧本前,根据以下信息检索相关剧本: |
| 24 | - 剧本类型(复仇/逆袭/穿越/重生等) |
| 25 | - 情绪基调(愤怒/悲伤/爽感/紧张等) |
| 26 | - 主要情节(打脸/揭秘/对抗/和解等) |
| 27 | - 人物关系(主角vs反派/主角vs配角等) |
| 28 | - 场景类型(豪门/古代/现代/职场等) |
| 29 | |
| 30 | **示例查询**: |
| 31 | ``` |
| 32 | "复仇女主霸总豪门打脸" |
| 33 | "穿越古代逆袭当皇后" |
| 34 | "重生复仇虐恋" |
| 35 | ``` |
| 36 | |
| 37 | ### 2. 检索结果使用 |
| 38 | |
| 39 | 检索返回Top 5最相关的剧本,包含: |
| 40 | - 剧本文件名 |
| 41 | - 相似度得分 |
| 42 | - 内容预览(前200字符) |
| 43 | - 完整文件路径 |
| 44 | |
| 45 | **注入到context**: |
| 46 | ``` |
| 47 | 参考以下爆款剧本的风格和节奏: |
| 48 | |
| 49 | 【参考剧本1】《封总的复仇娇妻》 |
| 50 | - 相似度:0.892 |
| 51 | - 特点:复仇女主、霸总、豪门恩怨、打脸爽剧 |
| 52 | - 节奏:快节奏、高冲突密度、强情绪冲击 |
| 53 | - 对话风格:短句、高对话比、视觉标记丰富 |
| 54 | |
| 55 | 【参考剧本2】... |
| 56 | ``` |
| 57 | |
| 58 | ## 执行步骤 |
| 59 | |
| 60 | ### Step 1: 构建检索查询 |
| 61 | |
| 62 | 从当前剧本需求中提取关键信息: |
| 63 | ```python |
| 64 | # 示例:从分集规划中提取 |
| 65 | query_parts = [] |
| 66 | if "类型" in episode_plan: |
| 67 | query_parts.append(episode_plan["类型"]) |
| 68 | if "情绪" in episode_plan: |
| 69 | query_parts.append(episode_plan["情绪"]) |
| 70 | if "主要情节" in episode_plan: |
| 71 | query_parts.append(episode_plan["主要情节"]) |
| 72 | |
| 73 | query = " ".join(query_parts) |
| 74 | # 结果:query = "复仇 愤怒 打脸揭秘" |
| 75 | ``` |
| 76 | |
| 77 | ### Step 2: 执行检索 |
| 78 | |
| 79 | 使用混合搜索引擎: |
| 80 | ```python |
| 81 | from hybrid_search import HybridSearchEngine |
| 82 | |
| 83 | # 初始化(只需一次) |
| 84 | engine = HybridSearchEngine("../../knowledge/hit-scripts-md") |
| 85 | |
| 86 | # 检索Top 5 |
| 87 | results = engine.hybrid_search( |
| 88 | query=query, |
| 89 | n_results=5, |
| 90 | semantic_weight=0.6, |
| 91 | keyword_weight=0.4 |
| 92 | ) |
| 93 | ``` |
| 94 | |
| 95 | ### Step 3: 读取完整内容 |
| 96 | |
| 97 | ```python |
| 98 | reference_scripts = [] |
| 99 | for result in results: |
| 100 | with open(result['path'], 'r', encoding='utf-8') as f: |
| 101 | content = f.read() |
| 102 | reference_scripts.append({ |
| 103 | 'filename': result['filename'], |
| 104 | 'score': result['score'], |
| 105 | 'content': content[:5000] # 取前5000字符 |
| 106 | }) |
| 107 | ``` |
| 108 | |
| 109 | ### Step 4: 注入到生成提示词 |
| 110 | |
| 111 | ``` |
| 112 | 你是一名短剧编剧,现在需要创作第N集剧本。 |
| 113 | |
| 114 | 【参考爆款剧本】 |
| 115 | 以下是5个最相关的爆款剧本,请参考它们的: |
| 116 | - 节奏:场景数、冲突密度、时长分布 |
| 117 | - 对话:句长、对话比、视觉标记 |
| 118 | - 情绪:情绪强度、情感极性摆动 |
| 119 | - 框架:开局-发展-高潮-反转-结局 |
| 120 | |
| 121 | 1. 《封总的复仇娇妻》(相似度:0.892) |
| 122 | [内容节选...] |
| 123 | |
| 124 | 2. 《...》(相似度:0.856) |
| 125 | [内容节选...] |
| 126 | |
| 127 | ... |
| 128 | |
| 129 | 【当前任务】 |
| 130 | 根据以上参考,创作第N集剧本... |
| 131 | ``` |
| 132 | |
| 133 | ## 对比分析 |
| 134 | |
| 135 | 生成剧本后,使用相同的5个参考剧本进行对比分析: |
| 136 | |
| 137 | ### 1. 节奏对比 |
| 138 | |
| 139 | ```python |
| 140 | # 统计生成剧本的节奏指标 |
| 141 | generated_metrics = { |
| 142 | 'scene_count': 6, |
| 143 | 'conflict_density': 0.015, |
| 144 | 'avg_scene_duration': 10, |
| 145 | 'emotion_intensity': 0.012 |
| 146 | } |
| 147 | |
| 148 | # 统计参考剧本的平均指标 |
| 149 | reference_metrics = { |
| 150 | 'scene_count': 8.5, |
| 151 | 'conflict_density': 0.035, |
| 152 | 'avg_scene_duration': 7.5, |
| 153 | 'emotion_intensity': 0.025 |
| 154 | } |
| 155 | |
| 156 | # 对比分析 |
| 157 | if generated_metrics['scene_count'] < reference_metrics['scene_count']: |
| 158 | feedback.append("场景数偏少,建议增加2个过渡场景") |
| 159 | ``` |
| 160 | |
| 161 | ### 2. 对话风格对比 |
| 162 | |
| 163 | ```python |
| 164 | # 统计对话指标 |
| 165 | generated_style = { |
| 166 | 'avg_sentence_length': 18, |
| 167 | 'dialogue_ratio': 0.45, |
| 168 | 'visual_markers_per_100': 1 |
| 169 | } |
| 170 | |
| 171 | reference_style = { |
| 172 | 'avg_sentence_length': 12, |
| 173 | 'dialogue_ratio': 0.72, |
| 174 | 'visual_markers_per_100': 4 |
| 175 | } |
| 176 | |
| 177 | # 对比分析 |
| 178 | if generated_style['dialogue_ratio'] < reference_style['dialogue_ratio']: |
| 179 | feedback.append("对话比偏低,建议增加对话,减少叙述") |
| 180 | ``` |
| 181 | |
| 182 | ### 3. 情绪冲击力对比 |
| 183 | |
| 184 | ```python |
| 185 | # 分析情绪词汇密度 |
| 186 | generated_emotion_density = 0.5 # 每100字0.5个情绪词 |
| 187 | reference_emotion_density = 2.0 # 每100字2个情绪词 |
| 188 | |
| 189 | if generated_emotion_density < reference_emotion_density: |
| 190 | feedback.append("情绪词汇偏少,建议增加情绪化表达") |
| 191 | ``` |
| 192 | |
| 193 | ## 复审流程 |
| 194 | |
| 195 | ### 导演复审(review-director) |
| 196 | |
| 197 | 使用 `comparative-review-skill` 进行综合对比: |
| 198 | 1. 加载生成剧本和5个参考剧本 |
| 199 | 2. 对比节奏、对话、情绪、框架 |
| 200 | 3. 给出PASS/FAIL判断 |
| 201 | 4. 提供具体改进建议(引用具体的参考剧本) |
| 202 | |
| 203 | **输出示例**: |
| 204 | ``` |
| 205 | 【综合审核】FAIL |
| 206 | |
| 207 | 节奏问题: |
| 208 | - 场景数:生成6场景,参考平均8.5场景 → 建议增加2个过渡场景 |
| 209 | - 冲突密度:生成0.015,参考平均0.035 → 建议在第3、5场景增加对抗 |
| 210 | |
| 211 | 对话风格问题: |
| 212 | - 句长:生成18字符,参考平均12字符 → 建议拆分长句 |
| 213 | - 对话比:生成45%,参考平均72% → 建议增加对话,减少叙述 |
| 214 | |
| 215 | 参考示例: |
| 216 | 请参考《封总的复仇娇妻》第15集的对抗场景结构 |
| 217 | 请参考《霸总的替身新娘》第8集的对话节奏 |
| 218 | ``` |
| 219 | |
| 220 | ### 编剧复审(script-writer) |
| 221 | |
| 222 | 使用 `style-analysis-skill` 分析风格: |
| 223 | 1. 统计生成剧本的语言风格指标 |
| 224 | 2. 统计5个参考剧本的平均指标 |
| 225 | 3. 对比分析差异 |
| 226 | 4. 提供改进建议 |
| 227 | |
| 228 | **输出示例**: |
| 229 | ``` |
| 230 | 【风格分析】 |
| 231 | |
| 232 | 句长分布: |
| 233 | - 生成剧本:平均18字符 |
| 234 | - 参考剧本:平均12字符 |
| 235 | - 建议:拆分长句,增加短句比例 |
| 236 | |
| 237 | 对话比: |
| 238 | - 生成剧本:45% |
| 239 | - 参考剧本:72% |
| 240 | - 建议:增加对话,减少叙述性文字 |
| 241 | |
| 242 | 视觉标记: |
| 243 | - 生成剧本:1个/100字 |
| 244 | - 参考剧本:4个/100字 |
| 245 | - 建议:增加视觉标记(如:冷笑、嗤笑、冷哼等) |
| 246 | ``` |
| 247 | |
| 248 | ## 成功标准 |
| 249 | |
| 250 | 1. **检索准确性**:检索到的5个剧本相似度 > 0.5 |
| 251 | 2. **参考有效性**:生成剧本的指标接近参考剧本(±20%) |
| 252 | 3. **风格一致性**:网文感、节奏感、情绪冲击力达标 |
| 253 | 4. **复审通过**:导演和编剧复审均PASS |
| 254 | |
| 255 | ## 注意事项 |
| 256 | |
| 257 | 1. **开源版语料**:默认不包含 `knowledge/hit-scripts-md/`,请自行放入有权使用的 `.md` 剧本语料 |
| 258 | 2. **首次使用**:首次运行需要构建索引(约60秒),索引会持久化保存到本地 `.search_index/` |
| 259 | 3. **后续使用**:索引已保存,加载速度快(1-2秒) |
| 260 | 4. **男女频分类**:支持按男频/女频/全部进行过滤,提高检索精准度 |
| 261 | 5. **权重调整**:可根据实际效果调整语义/关键词权重 |
| 262 | 6. **参考数量**:默认检索Top 5,可根据需要调整(3-10个) |
| 263 | 7. **内容长度**:注入context时建议每个参考剧本取前5000字符,避免超出上下文限制 |
| 264 | |
| 265 | ## 文件位置 |
| 266 | |
| 267 | - 检索引擎:`../../scripts/improved_hybrid_search.py`(推荐)或 `../../scripts/hybrid_search.py`(备选) |
| 268 | - 爆款剧本:`../../knowledge/hit-scripts-md/*.md`(本地自备语料,开源版默认不包含) |
| 269 | - 对比分析:`comparative-review-skill` |
| 270 | - 风格分析:`style-analysis-skill` |
| 271 | |
| 272 | --- |
| 273 | |
| 274 | ## 使用指南(Agent 集成) |
| 275 | |
| 276 | ### 在 script-writer 中使用 |
| 277 | |
| 278 | **Step 0:判断原小说类型(男频/女频/中性)** |
| 279 | ``` |
| 280 | 根据原小说特征判断(核心判断标准:主角性别): |
| 281 | |
| 282 | 男频特征: |
| 283 | - 【核心】主角:男性主角为中心,男主视角 |
| 284 | - 类型:复仇、逆袭、霸道、战神、龙王、赘婿、神医 |
| 285 | - 情节:打脸、装逼、碾压、称霸 |
| 286 | - 示例:《赘婿之王》《战神归来》《神医下山》 |
| 287 | |
| 288 | 女频特征: |
| 289 | - 【核心】主角:女性主角为中心,女主视角 |
| 290 | - 类型:虐恋、甜宠、豪门、替身、真假千金、重生复仇 |
| 291 | - 情节:误会、虐心、和解、宠溺、逆袭 |
| 292 | - 示例:《豪门替身妻》《真假千金》《霸总的替身新娘》 |
| 293 | |
| 294 | 中性/不确定: |
| 295 | - 双主角、群像剧、或类型不明显 |
| 296 | - 使用 `all` 参数不限类型 |
| 297 | |
| 298 | 判断流程: |
| 299 | 1. 首先看主角性别:男主 → 男频,女主 → 女频 |
| 300 | 2. 其 |