Writing
Skill
/one-by-one-comparison-skill
逐一对比技能。将生成剧本与每个参考剧本逐一对比,按照剧本评价标准给出详细批判和改进建议。
Install
$ npx -y skills add supreme-ultimate/novel-to-script-team --skill one-by-one-comparison-skill --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/one-by-one-comparison-skill
Context preview
The summary Claude sees to decide when to auto-load this skill.
逐一对比技能。将生成剧本与每个参考剧本逐一对比,按照剧本评价标准给出详细批判和改进建议。
SKILL.md
one-by-one-comparison-skill.SKILL.mdname: one-by-one-comparison-skill
description: 逐一对比技能。将生成剧本与每个参考剧本逐一对比,按照剧本评价标准给出详细批判和改进建议。
逐一对比技能
必读
1. `../../references/00-first-principles.md` 2. `../../references/03-script-writing-standard.md` 3. `../../references/04-review-gates.md`
技能说明
将生成剧本与检索到的Top 5参考剧本逐一对比,每次对比都按照统一的评价标准进行深度分析,给出具体的批判和改进建议。
评价标准(100分制)
1. 节奏控制(20分)
**评分细则**:
- 场景数量(5分):与参考剧本相差±2个场景内得满分
- 场景时长分配(5分):时长分布合理,有快有慢
- 冲突密度(5分):冲突次数/总字数 ≥ 0.03
- 节奏变化(5分):有明显的节奏起伏
**对比方法**:
# 统计生成剧本
gen_scenes = count_scenes(generated_script)
gen_conflicts = count_conflicts(generated_script)
gen_conflict_density = gen_conflicts / len(generated_script)
# 统计参考剧本
ref_scenes = count_scenes(reference_script)
ref_conflicts = count_conflicts(reference_script)
ref_conflict_density = ref_conflicts / len(reference_script)
# 评分
scene_score = 5 if abs(gen_scenes - ref_scenes) <= 2 else max(0, 5 - abs(gen_scenes - ref_scenes))
conflict_score = 5 if gen_conflict_density >= 0.03 else gen_conflict_density / 0.03 * 5
2. 对话风格(25分)
**评分细则**:
- 对话比例(10分):70%+ 得满分,每低5%扣2分
- 句长控制(8分):平均10-14字符得满分
- 短句比例(4分):30-40%得满分
- 对话自然度(3分):人物区分度、口语化程度
**对比方法**:
# 对话比例
gen_dialogue_ratio = calculate_dialogue_ratio(generated_script)
ref_dialogue_ratio = calculate_dialogue_ratio(reference_script)
dialogue_score = 10 if gen_dialogue_ratio >= 0.7 else gen_dialogue_ratio / 0.7 * 10
# 句长
gen_avg_length = calculate_avg_sentence_length(generated_script)
ref_avg_length = calculate_avg_sentence_length(reference_script)
if 10 <= gen_avg_length <= 14:
length_score = 8
else:
length_score = max(0, 8 - abs(gen_avg_length - 12) * 0.5)3. 视觉化表达(20分)
**评分细则**:
- 视觉标记密度(10分):3-5个/100字得满分
- 表情描写(4分):冷笑、嗤笑、冷哼等
- 眼神描写(3分):眼神一冷、眸光一沉等
- 动作描写(3分):嘴角勾起、挑眉、转身等
**对比方法**:
visual_markers = ['冷笑', '嗤笑', '冷哼', '眼神一冷', '眸光一沉', '嘴角勾起', '挑眉', '转身']
gen_marker_density = count_markers(generated_script, visual_markers) / (len(generated_script) / 100)
ref_marker_density = count_markers(reference_script, visual_markers) / (len(reference_script) / 100)
if 3 <= gen_marker_density <= 5:
marker_score = 10
else:
marker_score = max(0, 10 - abs(gen_marker_density - 4) * 2)4. 网文感(20分)
**评分细则**:
- 网文感关键词密度(10分):1.5-2.5个/100字得满分
- 情绪强化词(4分):冷笑、嗤笑、冷哼、冷声等
- 态度词(3分):不屑、轻蔑、讥讽、嘲讽等
- 打脸节奏(3分):打脸场景数量和质量
**对比方法**:
wanwen_keywords = {
'情绪强化': ['冷笑', '嗤笑', '冷哼', '冷声', '冷冷地'],
'态度词': ['不屑', '轻蔑', '讥讽', '嘲讽', '鄙夷'],
'气场词': ['霸气', '强势', '凌厉', '锐利', '凛然'],
'打脸词': ['啪啪打脸', '狠狠打脸', '当场打脸', '脸色一变']
}
gen_keyword_density = count_all_keywords(generated_script, wanwen_keywords) / (len(generated_script) / 100)
ref_keyword_density = count_all_keywords(reference_script, wanwen_keywords) / (len(reference_script) / 100)
if 1.5 <= gen_keyword_density <= 2.5:
keyword_score = 10
else:
keyword_score = max(0, 10 - abs(gen_keyword_density - 2) * 3)5. 结构完整性(15分)
**评分细则**:
- 开局钩子(3分):前10%是否有强冲突
- 中段冲突(4分):中间60%是否持续有冲突
- 高潮设计(3分):是否有明显高潮点
- 反转设置(3分):是否有意外反转
- 结尾悬念(2分):是否有强钩子
**对比方法**:
structure_elements = {
'hook': check_opening_hook(script), # True/False
'development': check_continuous_conflict(script),
'climax': check_climax(script),
'twist': check_twist(script),
'ending': check_ending_hook(script)
}
structure_score = sum([
3 if structure_elements['hook'] else 0,
4 if structure_elements['development'] else 0,
3 if structure_elements['climax'] else 0,
3 if structure_elements['twist'] else 0,
2 if structure_elements['ending'] else 0
])执行流程
Step 1: 加载剧本
# 加载生成剧本
with open(f'outputs/{剧本名}/scripts/ep{N}.md', 'r') as f:
generated_script = f.read()
# 加载参考剧本列表(从检索结果或style-analysis报告中获取)
reference_files = [
'knowledge/hit-scripts-md/参考剧本1.md',
'knowledge/hit-scripts-md/参考剧本2.md',
'knowledge/hit-scripts-md/参考剧本3.md',
'knowledge/hit-scripts-md/参考剧本4.md',
'knowledge/hit-scripts-md/参考剧本5.md'
]
reference_scripts = []
for ref_file in reference_files:
with open(ref_file, 'r') as f:
reference_scripts.append({
'filename': os.path.basename(ref_file),
'content': f.read()
})Step 2: 逐个对比
comparison_results = []
for i, ref in enumerate(reference_scripts, 1):
print(f"\n{'='*80}")
print(f"对比 {i}/5: 生成剧本 vs {ref['filename']}")
print(f"{'='*80}\n")
# 五大维度评分
rhythm_score = compare_rhythm(generated_script, ref['content'])
dialogue_score = compare_dialogue(generated_script, ref['content'])
visual_score = compare_visual(generated_script, ref['content'])
wanwen_score = compare_wanwen(generated_script, ref['content'])
structure_score = compare_structure(generated_script, ref['content'])
total_score = rhythm_score + dialogue_score + visual_score + wanwen_score + structure_score
# 识别具体问题
issues = identify_issues(generated_script, ref['content'])
# 提取参考示例
examples = extract_examples(ref['content'], issues)
# 生成改进建议
suggestions = generate_suggestions(issues, examples)
comparison_results.append({
'reference': ref['filename'],
'scores': {
'rhythm': rhythm_score,
'dialogue': dialogue_score,
'visual': visual_score,
'wanwen': wanwen_score,
'structure': structure_score,
'total': total_score
},
'issues': issues,
'examples': examples,
'suggestions': suggestions
})Step 3: 综合分析
# 汇总共同问题
common_issues = find_common_issues(comparison_results)
# 计算平均得分
avg_scores = calculate_average_scores(comparison_results)
# 识别最弱维度
weakest_dimensions = identify_weakest_dimensions(avg_scores)
# 生成优先级建议
priority_suggestions = prioritize_suggestions(common_issues, weakest_dimensions)
Step 4: 生成报告
# 第{N}集逐一对比分析报告
## 一、综合评分
| 维度 | 平均得分 | 评级 |
|------|---------|------|
| 节奏控制 | 15/20 | B |
| 对话风格 | 18/25 | B+ |
| 视觉化表达 | 12/20 | C+ |
| 网文感 | 10/2Read more
name: one-by-one-comparison-skill description: 逐一对比技能。将生成剧本与每个参考剧本逐一对比,按照剧本评价标准给出详细批判和改进建议。
逐一对比技能
必读
1. `../../references/00-first-principles.md` 2. `../../references/03-script-writing-standard.md` 3. `../../references/04-review-gates.md`
技能说明
将生成剧本与检索到的Top 5参考剧本逐一对比,每次对比都按照统一的评价标准进行深度分析,给出具体的批判和改进建议。
评价标准(100分制)
1. 节奏控制(20分)
**评分细则**:
- 场景数量(5分):与参考剧本相差±2个场景内得满分
- 场景时长分配(5分):时长分布合理,有快有慢
- 冲突密度(5分):冲突次数/总字数 ≥ 0.03
- 节奏变化(5分):有明显的节奏起伏
**对比方法**:
# 统计生成剧本 gen_scenes = count_scenes(generated_script) gen_conflicts = count_conflicts(generated_script) gen_conflict_density = gen_conflicts / len(generated_script) # 统计参考剧本 ref_scenes = count_scenes(reference_script) ref_conflicts = count_conflicts(reference_script) ref_conflict_density = ref_conflicts / len(reference_script) # 评分 scene_score = 5 if abs(gen_scenes - ref_scenes) <= 2 else max(0, 5 - abs(gen_scenes - ref_scenes)) conflict_score = 5 if gen_conflict_density >= 0.03 else gen_conflict_density / 0.03 * 5
2. 对话风格(25分)
**评分细则**:
- 对话比例(10分):70%+ 得满分,每低5%扣2分
- 句长控制(8分):平均10-14字符得满分
- 短句比例(4分):30-40%得满分
- 对话自然度(3分):人物区分度、口语化程度
**对比方法**:
# 对话比例
gen_dialogue_ratio = calculate_dialogue_ratio(generated_script)
ref_dialogue_ratio = calculate_dialogue_ratio(reference_script)
dialogue_score = 10 if gen_dialogue_ratio >= 0.7 else gen_dialogue_ratio / 0.7 * 10
# 句长
gen_avg_length = calculate_avg_sentence_length(generated_script)
ref_avg_length = calculate_avg_sentence_length(reference_script)
if 10 <= gen_avg_length <= 14:
length_score = 8
else:
length_score = max(0, 8 - abs(gen_avg_length - 12) * 0.5)3. 视觉化表达(20分)
**评分细则**:
- 视觉标记密度(10分):3-5个/100字得满分
- 表情描写(4分):冷笑、嗤笑、冷哼等
- 眼神描写(3分):眼神一冷、眸光一沉等
- 动作描写(3分):嘴角勾起、挑眉、转身等
**对比方法**:
visual_markers = ['冷笑', '嗤笑', '冷哼', '眼神一冷', '眸光一沉', '嘴角勾起', '挑眉', '转身']
gen_marker_density = count_markers(generated_script, visual_markers) / (len(generated_script) / 100)
ref_marker_density = count_markers(reference_script, visual_markers) / (len(reference_script) / 100)
if 3 <= gen_marker_density <= 5:
marker_score = 10
else:
marker_score = max(0, 10 - abs(gen_marker_density - 4) * 2)4. 网文感(20分)
**评分细则**:
- 网文感关键词密度(10分):1.5-2.5个/100字得满分
- 情绪强化词(4分):冷笑、嗤笑、冷哼、冷声等
- 态度词(3分):不屑、轻蔑、讥讽、嘲讽等
- 打脸节奏(3分):打脸场景数量和质量
**对比方法**:
wanwen_keywords = {
'情绪强化': ['冷笑', '嗤笑', '冷哼', '冷声', '冷冷地'],
'态度词': ['不屑', '轻蔑', '讥讽', '嘲讽', '鄙夷'],
'气场词': ['霸气', '强势', '凌厉', '锐利', '凛然'],
'打脸词': ['啪啪打脸', '狠狠打脸', '当场打脸', '脸色一变']
}
gen_keyword_density = count_all_keywords(generated_script, wanwen_keywords) / (len(generated_script) / 100)
ref_keyword_density = count_all_keywords(reference_script, wanwen_keywords) / (len(reference_script) / 100)
if 1.5 <= gen_keyword_density <= 2.5:
keyword_score = 10
else:
keyword_score = max(0, 10 - abs(gen_keyword_density - 2) * 3)5. 结构完整性(15分)
**评分细则**:
- 开局钩子(3分):前10%是否有强冲突
- 中段冲突(4分):中间60%是否持续有冲突
- 高潮设计(3分):是否有明显高潮点
- 反转设置(3分):是否有意外反转
- 结尾悬念(2分):是否有强钩子
**对比方法**:
structure_elements = {
'hook': check_opening_hook(script), # True/False
'development': check_continuous_conflict(script),
'climax': check_climax(script),
'twist': check_twist(script),
'ending': check_ending_hook(script)
}
structure_score = sum([
3 if structure_elements['hook'] else 0,
4 if structure_elements['development'] else 0,
3 if structure_elements['climax'] else 0,
3 if structure_elements['twist'] else 0,
2 if structure_elements['ending'] else 0
])执行流程
Step 1: 加载剧本
# 加载生成剧本
with open(f'outputs/{剧本名}/scripts/ep{N}.md', 'r') as f:
generated_script = f.read()
# 加载参考剧本列表(从检索结果或style-analysis报告中获取)
reference_files = [
'knowledge/hit-scripts-md/参考剧本1.md',
'knowledge/hit-scripts-md/参考剧本2.md',
'knowledge/hit-scripts-md/参考剧本3.md',
'knowledge/hit-scripts-md/参考剧本4.md',
'knowledge/hit-scripts-md/参考剧本5.md'
]
reference_scripts = []
for ref_file in reference_files:
with open(ref_file, 'r') as f:
reference_scripts.append({
'filename': os.path.basename(ref_file),
'content': f.read()
})Step 2: 逐个对比
comparison_results = []
for i, ref in enumerate(reference_scripts, 1):
print(f"\n{'='*80}")
print(f"对比 {i}/5: 生成剧本 vs {ref['filename']}")
print(f"{'='*80}\n")
# 五大维度评分
rhythm_score = compare_rhythm(generated_script, ref['content'])
dialogue_score = compare_dialogue(generated_script, ref['content'])
visual_score = compare_visual(generated_script, ref['content'])
wanwen_score = compare_wanwen(generated_script, ref['content'])
structure_score = compare_structure(generated_script, ref['content'])
total_score = rhythm_score + dialogue_score + visual_score + wanwen_score + structure_score
# 识别具体问题
issues = identify_issues(generated_script, ref['content'])
# 提取参考示例
examples = extract_examples(ref['content'], issues)
# 生成改进建议
suggestions = generate_suggestions(issues, examples)
comparison_results.append({
'reference': ref['filename'],
'scores': {
'rhythm': rhythm_score,
'dialogue': dialogue_score,
'visual': visual_score,
'wanwen': wanwen_score,
'structure': structure_score,
'total': total_score
},
'issues': issues,
'examples': examples,
'suggestions': suggestions
})Step 3: 综合分析
# 汇总共同问题 common_issues = find_common_issues(comparison_results) # 计算平均得分 avg_scores = calculate_average_scores(comparison_results) # 识别最弱维度 weakest_dimensions = identify_weakest_dimensions(avg_scores) # 生成优先级建议 priority_suggestions = prioritize_suggestions(common_issues, weakest_dimensions)
Step 4: 生成报告
# 第{N}集逐一对比分析报告
## 一、综合评分
| 维度 | 平均得分 | 评级 |
|------|---------|------|
| 节奏控制 | 15/20 | B |
| 对话风格 | 18/25 | B+ |
| 视觉化表达 | 12/20 | C+ |
| 网文感 | 10/2 Ships withnovel-to-script-team
多 Agent、多 Skill 的小说改编影视流水线:把长篇小说、故事梗概或短剧素材,系统化转成改编分析、分集规划、剧本、审核报告、分镜方案、图片/视频提示词。
Get the whole plugin
Other skills on novel-to-script-team.
Skill
Skill
Skill
Skill
art-direction-review-s…
服化道审核技能。用于审核阶段二服化道设计产出(人物设定提示词、场景环境提示词),通过逐项比对、脑内预演和评分制确保造型准确、风格一致、提示词可执行。
Skill
comparative-review-ski…
对比审核技能。对比生成剧本与爆款剧本的节奏、对话、情绪、框架,给出PASS/FAIL判断和改进建议。
Skill

