diff --git a/ai-labeling/CLAUDE.md b/ai-labeling/CLAUDE.md index 3135f52..c06be1c 100644 --- a/ai-labeling/CLAUDE.md +++ b/ai-labeling/CLAUDE.md @@ -12,8 +12,8 @@ ## 🔖 状态栏(每次结束 session 前必须更新这三行) -- **最后更新**:Claude Opus(顾问)| 2026-06-24(晚) -- **当前状态一句话**:Prompt 1 v0.1 完成 + ground-truth v0.4.0(20期4分类字段全填) + MiMo 首轮跑批完成(题材75%/装备域70%/场景95%/技术70%/全对40%)。Prompt 需迭代改进多选字段门槛。 +- **最后更新**:Claude Opus(顾问)| 2026-06-25 +- **当前状态一句话**:Prompt 1 v0.3(题材分类80%全对)+ Prompt 3 v0.2(开篇钩子90%)完成。ground-truth v0.4.2(20期opening_hook全标注)。三个Prompt均达可用水平。 - **下一个动手的人从这里开始**:见下方「⏩ 交接备注」 --- @@ -108,7 +108,7 @@ | 层 | 名称 | 做什么 | 当前状态 | |----|------|--------|----------| | L1 | **数据沉淀** | 每期节目的收视数据、文稿全文、编导、选题单持续入库 | 主项目已有 episodes 表基础结构 | -| L2 | **AI 打标** | 读文稿自动判别:题材分类(4字段)、叙事结构(2档)、开篇钩子(3档) | Prompt 1 v0.1 + Prompt 2 已锁定,Prompt 1 需迭代,Prompt 3 待写 | +| L2 | **AI 打标** | 读文稿自动判别:题材分类(4字段)、叙事结构(2档)、开篇钩子(3档) | Prompt 1 v0.3(80%) + Prompt 2 v0.2(100%) + Prompt 3 v0.2(90%),三个均达可用水平 | | L3 | **分析引擎** | 基于双引擎模型,计算走势、编导对比、题材对比、高低样本对照等多维分析 | 待设计 | | L4 | **诊断报告** | 调用 LLM 生成文字诊断结论 + 改进建议(对标 PPT 第 8-10 页水平) | 待设计 | @@ -181,10 +181,12 @@ ai-labeling/ │ ├── 军事科技栏目收视复盘与提振方案_v2.pptx ← 质量标杆(14 页诊断报告) │ └── 军事科技栏目收视诊断分析_v2.xlsx ← 质量标杆(8 个分析 Sheet) ├── benchmark-set/ -│ ├── transcripts/ ← 10 期文稿 .md(基准卷子) -│ └── ground-truth.json ← 基准答案 v0.2.1(核心资产,入 git) +│ ├── transcripts/ ← 20 期文稿 .md(基准卷子) +│ └── ground-truth.json ← 基准答案 v0.4.2(核心资产,入 git) ├── prompts/ -│ └── prompt2_narrative.md ← 叙事结构判别 v0.2(已锁定,入 git) +│ ├── prompt1_classification.md ← 题材分类判别 v0.3(入 git) +│ ├── prompt2_narrative.md ← 叙事结构判别 v0.2(已锁定,入 git) +│ └── prompt3_opening_hook.md ← 开篇钩子判别 v0.2(入 git) ├── experiments/ ← 跑批结果 .json(不入 git) ├── scripts/ │ ├── import_transcripts.py ← docx → md 解析清洗 @@ -199,7 +201,7 @@ ai-labeling/ ### 2.4 常用命令(PowerShell) ```powershell -# 单期打标(narrative 或 classification) +# 单期打标(narrative / classification / opening_hook) cd E:\tps-dashboard\ai-labeling python scripts/run_labeling.py --ep 1 --model mimo-v2.5-pro --field classification @@ -209,6 +211,7 @@ python scripts/run_labeling.py --all --model mimo-v2.5-pro --field classificatio # 汇总命中率 python scripts/summarize.py --model mimo-v2.5-pro --field classification python scripts/summarize.py --model mimo-v2.5-pro --field narrative +python scripts/summarize.py --model mimo-v2.5-pro --field opening_hook ``` ### 2.5 模型配置(`scripts/run_labeling.py` 内 MODEL_CONFIG) @@ -226,14 +229,17 @@ python scripts/summarize.py --model mimo-v2.5-pro --field narrative ## 3. 当前进度(动态,核心交接区) -- **已完成**:Prompt 1 v0.1 + ground-truth v0.4.0(20期完整标注)+ MiMo 首轮跑批(题材75%/装备域70%/场景95%/技术70%/全对40%)+ 脚本 ep 编号升级至 3 位数 + summarize classification 比对逻辑实现 +- **已完成**:Prompt 1 v0.3(80%全对)+ Prompt 2 v0.2(100%)+ Prompt 3 v0.2(90%)+ ground-truth v0.4.2(20期6字段全标注)+ 脚本支持三种 field + summarize 改为从源GT读取 - **正在做**:无(本轮收摊) -- **卡点/待解**:Prompt 1 需迭代(多选字段门槛太松、program_format 三组边界混淆);Prompt 3(开篇钩子)待写;L3/L4 架构设计未启动 +- **卡点/待解**:Prompt 1 剩 3 期硬骨头(ep005/011/016,装备域从属判定边界);Prompt 3 剩 2 期(ep004/007,钩子强度边界);L3/L4 架构设计未启动 --- ## 4. 已完成(只追加,最新在上) +- [2026-06-25 | Opus] Prompt 1 迭代 v0.1→v0.3(全对率40%→80%):v0.2加多选字段显著篇幅门槛+从属零件反例+前沿科技vs横切类比拆清+装备深解同类体系测试;v0.3修正跨域规则(传播分类框非军事术语)+训练舰窄类别判定+装备首发校准。ground-truth v0.4.1(ep008补标跨域)。 +- [2026-06-25 | Opus] Prompt 3 v0.1→v0.2(开篇钩子,命中率50%→90%):v0.1撰写+脚本opening_hook支持;v0.2修复三问题——阅读范围扩至3段(导视+主持人+首段解说)、强判定从紧迫感硬门槛改为6条独立路径、弱判定区分信息性提问vs悬念式提问。ground-truth v0.4.2(20期opening_hook全标注,制片人逐期审定含钩子分析)。summarize.py改为从源GT文件读取。 +- [2026-06-25 | 制片人] 开篇钩子经验规则:0-1钩≈弱,2钩≈中,3钩及以上≈强(钩子质量也影响,3个轻钩可能仍为中)。 - [2026-06-24晚 | Opus] Prompt 1 v0.1 撰写完成(4分类字段:题材/装备域/场景/技术)+ ground-truth v0.4.0(10→20期扩展,旧ep编号重映射,4分类字段全填,制片人逐期审定)+ 脚本升级(ep编号2位→3位、ALL_EPISODES扩至1-20、summarize classification比对逻辑实现)+ MiMo首轮跑批20期(题材75%/装备域70%/场景95%/技术70%/全对40%)。主要错误模式:多选字段过度标注、装备深解/前沿科技与横切类比混淆。 - [2026-06-24 | Opus+Cline] ground-truth v0.3.0 结构扩展(4 分类字段骨架预留)+ run_labeling.py / summarize.py 扩展 --field 参数支持 classification。脚本可直接跑 Prompt 1,等 prompt 文件就位即用。 - [2026-06-24 | Opus] CLAUDE.md 二次更新:精读 v1-v4 四份续接快照,补入双引擎象限图视觉规格、6 字段完整枚举定义、三层分步交付策略、编导能力地图设计、v1-v4 关键决策。 @@ -250,12 +256,14 @@ python scripts/summarize.py --model mimo-v2.5-pro --field narrative ### L2 — AI 打标(当前主战场) -- [ ] **Prompt 1 v0.2 迭代** — v0.1 首轮全对率 40%,主要问题:多选字段(equipment_domain/tech_tags)过度标注("一笔带过"也选了)+ program_format 三组边界混淆(装备深解vs横切类比、前沿科技vs横切类比、装备深解vs前沿科技)。改进方向:加强门槛描述+加反例教学。 -- [ ] **Prompt 3(开篇钩子)撰写** — 只看前 1-2 分钟判强/中/弱。同上套路。 -- [ ] **opening_hook AI 验证** — ground-truth 里 opening_hook 是人工标的,等 Prompt 3 上线后跑一次看 MiMo 命中率。 +- [ ] **Prompt 1 继续迭代(可选)** — v0.3 全对率 80%,剩 3 期硬骨头(ep005/011/016:前沿科技节目中装备域从属判定边界)。边际收益递减,可暂停。 +- [ ] **Prompt 3 继续迭代(可选)** — v0.2 命中率 90%,剩 2 期(ep004 枪王对决强→中:AI复活人物的反差未识别;ep007 巨舰反差中→强:旗语开头过度放大)。可考虑融入"数钩子"辅助判据(0-1钩弱/2钩中/3+钩强)。 +- [ ] **新增 10 期跑 Prompt 2 补 narrative_structure** — ground-truth 中 ep004/007/009/014-020 的 narrative_structure 仍为 null。 - [ ] **示例集月度更新机制** — 上线后启用,每月集中替换,不碎片化(吃 prompt 缓存红利)。 -- [x] Prompt 2 v0.2 撰写 + 锁定 -- [x] ground-truth v0.2.1 锁定 +- [x] Prompt 1 v0.3 迭代完成(80% 全对) +- [x] Prompt 2 v0.2 撰写 + 锁定(100%) +- [x] Prompt 3 v0.2 撰写完成(90%) +- [x] ground-truth v0.4.2(20期6字段全标注) - [x] 模型选型(mimo-v2.5-pro 生产) ### L1 — 数据沉淀(与主项目交界,需 Opus 审) @@ -301,6 +309,19 @@ python scripts/summarize.py --model mimo-v2.5-pro --field narrative - [2026-06-10] **话题性不独立立维**:稳态热度→横轴,时机→scene_tags,切口→横切类比形态。 - [2026-06-10] **6 字段枚举锁定**(见 §1.4):program_format 6 值 / equipment_domain 9 值多选 / scene_tags 4 值 / tech_tags 3 值 / narrative_structure 2 档 / opening_hook 3 档。 +### 题材分类判别 + +- [2026-06-25] **`跨域`是传播分类框,不是军事术语**:一期节目天上、水里、地上都讲了没法归单一域就标跨域。涉及≥3个具体装备域时额外加选,不需要节目主题是"跨域协同作战"。 +- [2026-06-25] **同一功能体系/窄类别内的多装备 = 装备深解**:防空体系远/中/近程、三艘训练舰、航母编队舰/机/护航——这些不是横切类比。换装测试要区分"换同类型号"和"换完全不同类别"。 +- [2026-06-25] **前沿科技 vs 横切类比的核心判据**:串联各案例的角度本身是不是一项新兴技术?是→前沿科技,否→横切类比。 + +### 开篇钩子判别 + +- [2026-06-25] **"数钩子"经验规则**:0-1钩≈弱,2钩≈中,3钩及以上≈强。钩子质量也影响(3个轻钩可能仍为中)。 +- [2026-06-25] **紧迫感不是判强的唯一门槛**:画面震撼、情感冲击、认知冲突(反差)、叙事吸引(战场故事)、节日/文化共鸣都是独立的强钩子路径。 +- [2026-06-25] **阅读范围是前三段**(导视+主持人+首段解说),不是两段。有些节目的钩子在主持人之后才引爆。 +- [2026-06-25] **信息性提问 vs 悬念式提问**:能用一句话/列表回答的是信息性提问(倾向弱),需要讲故事或揭示原理才能回答的是悬念式提问(至少中)。 + ### 叙事结构判别 - [2026-06-11] **3 档收为 2 档**:`主线演进` / `并列结构`。原"强主线悬念 vs 主线演进"实操中区分不开,合并。 @@ -319,7 +340,9 @@ python scripts/summarize.py --model mimo-v2.5-pro --field narrative - v0.2:改 2 期(ep12 逆袭战局改为并列→后经复议改回主线演进、ep14 X76 确认并列) - v0.2.1:改 1 期(ep12 经制片人复读稿 + 三家模型独立一致,最终定为并列结构)。**边界期用"多家独立一致 + 人工复审"双重证据机制**。 - v0.3.0:为 Prompt 1 预留 4 分类字段骨架(null/[]),ep 编号仍为旧制。 -- **v0.4.0(当前锁定)**:期号重映射(旧ep3-15→新ep001-020按播出日期排序),10→20期扩展,4分类字段(program_format/equipment_domain/scene_tags/tech_tags)全部填入,制片人逐期审定。新增10期暂无narrative_structure/opening_hook标注。 +- v0.4.0:期号重映射(旧ep3-15→新ep001-020按播出日期排序),10→20期扩展,4分类字段全部填入。新增10期暂无narrative_structure/opening_hook。 +- v0.4.1:ep008马年装备图鉴补标跨域(制片人确认遗漏)。 +- **v0.4.2(当前锁定)**:新增10期opening_hook标注(制片人逐期审定含钩子分析)。20期6字段覆盖:4分类+opening_hook全填,narrative_structure仍有10期null待补。 ### Prompt 设计原则 @@ -338,11 +361,11 @@ python scripts/summarize.py --model mimo-v2.5-pro --field narrative ## 7. ⏩ 交接备注(换人/换工具 0 摩擦续上) - **全貌已对齐**(2026-06-24):看板升级四层架构(L1-L4)、双引擎理论、多 LLM 共识机制、季度+自定义双轨周期、全员可见——这些方向已与制片人确认。新来的人先读完第 1 节「子项目全貌」再动手。 -- **Prompt 1 v0.1 已完成,需迭代至 v0.2**:首轮 MiMo 跑批全对率 40%。两大错误模式:① 多选字段(equipment_domain/tech_tags)过度标注——"一笔带过"的也选了;② program_format 三组边界混淆(装备深解vs横切类比、前沿科技vs横切类比)。改进方向:加强门槛措辞 + 加反例教学 + 可能需要增补示例。 -- **ground-truth v0.4.0 已锁定**:20 期全部标注(4 分类字段),期号已重映射至 ep001-020。新增 10 期暂无 narrative_structure/opening_hook(待 Prompt 2/3 跑批后补)。 -- **脚本已升级**:ep 编号 2 位→3 位,ALL_EPISODES 扩至 1-20,summarize classification 比对逻辑已实现(逐字段命中 + 全对率)。 -- **下一步优先级建议**:Prompt 1 v0.2 迭代 → Prompt 3(开篇钩子)→ 新增 10 期跑 Prompt 2 补 narrative_structure。 -- **L3/L4 待设计**:分析引擎和诊断报告的架构尚未展开。建议 Prompt 1/3 锁定后启动,可与 schema 加字段并行。 +- **三个 Prompt 均达可用水平**(2026-06-25):Prompt 1 v0.3(题材分类80%全对)/ Prompt 2 v0.2(叙事结构100%)/ Prompt 3 v0.2(开篇钩子90%)。Prompt 1 剩 3 期硬骨头(装备域从属边界),Prompt 3 剩 2 期(钩子强度边界),边际收益递减可暂停。 +- **ground-truth v0.4.2 已锁定**:20 期,4分类+opening_hook 全填。narrative_structure 仍有 10 期 null(ep004/007/009/014-020),待跑 Prompt 2 补。 +- **脚本支持三种 field**:`classification` / `narrative` / `opening_hook`。summarize.py 已改为从 ground-truth.json 源文件读取 GT(不依赖实验文件中的快照)。 +- **下一步优先级建议**:① 新增 10 期跑 Prompt 2 补 narrative_structure → ② schema 加字段方案(跨层硬前置)→ ③ L3 分析引擎设计。 +- **L3/L4 待设计**:分析引擎和诊断报告的架构尚未展开。三个 Prompt 已到位,可启动 L3。 - **schema 加字段是跨层硬前置**:episodes 表加 6+1 字段,必须 Plan + Opus 审 + 制片人批准 + `pg_dump` 备份。这是主项目的事,不在沙盒内做。 --- @@ -352,5 +375,5 @@ python scripts/summarize.py --model mimo-v2.5-pro --field narrative - [x] ~~Prompt 1 的 4 分类字段枚举最终口径~~ → 已在 v2 快照锁定(见 §1.4) - [ ] 多 LLM 共识机制的模型阵容(MiMo + GLM 5.2 + ?)待选型测试后定 - [ ] L3 分析引擎是否需要超出 Excel 8 Sheet 的额外分析维度 -- [x] ~~下一步优先级:先推 Prompt 1 还是先推 schema 加字段方案?~~ → Prompt 1 先行,已完成 v0.1 -- [ ] Prompt 1 v0.2 示例集是否需要扩充?当前 5 个示例(含 2 个陷阱反例),首轮全对率 40% 偏低 +- [x] ~~下一步优先级:先推 Prompt 1 还是先推 schema 加字段方案?~~ → Prompt 1 先行,已完成 v0.3(80%) +- [x] ~~Prompt 1 示例集是否需要扩充?~~ → v0.3 已扩至 7 个示例(含防空反导、硅基大脑等易错案例),全对率 80% diff --git a/ai-labeling/benchmark-set/ground-truth.json b/ai-labeling/benchmark-set/ground-truth.json index db8d1f4..101a7b0 100644 --- a/ai-labeling/benchmark-set/ground-truth.json +++ b/ai-labeling/benchmark-set/ground-truth.json @@ -1,10 +1,10 @@ { - "version": "v0.4.0", - "locked_at": "2026-06-24", + "version": "v0.4.2", + "locked_at": "2026-06-25", "locked_by": "制片人刘通 + Opus 顾问(逐期审定)", "fields_covered": ["narrative_structure", "opening_hook", "program_format", "equipment_domain", "scene_tags", "tech_tags"], "fields_reserved": [], - "changelog": "v0.1→v0.2: ep10/ep15 从并列改主线演进。v0.2→v0.2.1: ep12 经三家模型独立一致+制片人复审改为并列结构。v0.2.1→v0.3.0: 预留4分类字段骨架(null/[])。v0.3.0→v0.4.0: 期号重映射(旧ep3-15→新ep001-020按播出日期排序),从10期扩展至20期,4分类字段(program_format/equipment_domain/scene_tags/tech_tags)全部填入,制片人逐期审定。新增10期暂无narrative_structure/opening_hook标注(待Prompt 2/3跑批后补)。", + "changelog": "v0.1→v0.2: ep10/ep15 从并列改主线演进。v0.2→v0.2.1: ep12 经三家模型独立一致+制片人复审改为并列结构。v0.2.1→v0.3.0: 预留4分类字段骨架(null/[])。v0.3.0→v0.4.0: 期号重映射(旧ep3-15→新ep001-020按播出日期排序),从10期扩展至20期,4分类字段(program_format/equipment_domain/scene_tags/tech_tags)全部填入,制片人逐期审定。新增10期暂无narrative_structure/opening_hook标注(待Prompt 2/3跑批后补)。v0.4.0→v0.4.1: ep008马年装备图鉴补标跨域(制片人确认遗漏)。v0.4.1→v0.4.2: 新增10期opening_hook标注(制片人逐期审定,含钩子分析):ep004强/ep007中/ep009中/ep014中/ep015中/ep016中/ep017中/ep018强/ep019强/ep020中。", "ep_number_migration": "v0.3.0旧编号→v0.4.0新编号: ep15→001, ep4→002, ep13→003, 新增→004, ep3→005, ep5→006, 新增→007, ep7→008, 新增→009, ep10→010, ep11→011, ep12→012, ep14→013, 新增→014, 新增→015, 新增→016, 新增→017, 新增→018, 新增→019, 新增→020", "episodes": [ { @@ -45,7 +45,7 @@ "title": "枪王对决", "share": null, "narrative_structure": null, - "opening_hook": null, + "opening_hook": "强", "program_format": "人物牵引", "equipment_domain": ["轻武器"], "scene_tags": [], @@ -78,7 +78,7 @@ "title": "大国巨舰反差", "share": null, "narrative_structure": null, - "opening_hook": null, + "opening_hook": "中", "program_format": "横切类比", "equipment_domain": ["海军舰船"], "scene_tags": [], @@ -91,7 +91,7 @@ "narrative_structure": "并列结构", "opening_hook": "强", "program_format": "横切类比", - "equipment_domain": ["海军舰船", "航空航天", "陆战装备"], + "equipment_domain": ["海军舰船", "航空航天", "陆战装备", "跨域"], "scene_tags": ["节点策划"], "tech_tags": [] }, @@ -100,7 +100,7 @@ "title": "重金造神器", "share": null, "narrative_structure": null, - "opening_hook": null, + "opening_hook": "中", "program_format": "横切类比", "equipment_domain": ["海军舰船", "陆战装备", "航空航天", "跨域"], "scene_tags": [], @@ -155,7 +155,7 @@ "title": "启程远航", "share": null, "narrative_structure": null, - "opening_hook": null, + "opening_hook": "中", "program_format": "装备深解", "equipment_domain": ["海军舰船"], "scene_tags": ["节点策划"], @@ -166,7 +166,7 @@ "title": "舰炮暴力美学", "share": null, "narrative_structure": null, - "opening_hook": null, + "opening_hook": "中", "program_format": "历史纵深", "equipment_domain": ["海军舰船"], "scene_tags": [], @@ -177,7 +177,7 @@ "title": "无人舰艇", "share": null, "narrative_structure": null, - "opening_hook": null, + "opening_hook": "中", "program_format": "前沿科技", "equipment_domain": ["海军舰船"], "scene_tags": [], @@ -188,7 +188,7 @@ "title": "逆袭的鸭翼", "share": null, "narrative_structure": null, - "opening_hook": null, + "opening_hook": "中", "program_format": "横切类比", "equipment_domain": ["航空航天"], "scene_tags": ["装备首发"], @@ -199,7 +199,7 @@ "title": "机枪双雄", "share": null, "narrative_structure": null, - "opening_hook": null, + "opening_hook": "强", "program_format": "人物牵引", "equipment_domain": ["轻武器"], "scene_tags": [], @@ -210,7 +210,7 @@ "title": "玩具总动员", "share": null, "narrative_structure": null, - "opening_hook": null, + "opening_hook": "强", "program_format": "横切类比", "equipment_domain": ["陆战装备", "航空航天", "海军舰船", "跨域"], "scene_tags": [], @@ -221,7 +221,7 @@ "title": "武器颜值洼地", "share": null, "narrative_structure": null, - "opening_hook": null, + "opening_hook": "中", "program_format": "横切类比", "equipment_domain": ["航空航天", "海军舰船"], "scene_tags": [], diff --git a/ai-labeling/prompts/prompt1_classification.md b/ai-labeling/prompts/prompt1_classification.md index 1ccf89f..b999833 100644 --- a/ai-labeling/prompts/prompt1_classification.md +++ b/ai-labeling/prompts/prompt1_classification.md @@ -1,4 +1,4 @@ -# Prompt 1: 题材分类判别 v0.1 +# Prompt 1: 题材分类判别 v0.3 ## SYSTEM @@ -10,10 +10,10 @@ | 枚举值 | 含义 | 判定要领 | |--------|------|----------| -| `装备深解` | 围绕一款/一型具体装备深度剖析 | 全片聚焦同一款或同一类装备,从多个方面(性能/历史/技术/战例)拆解它 | -| `横切类比` | 用某切口(趣味/功能/技术)跨装备类比 | 全片用一个主题角度串联不同装备,换一批装备、保留同一切口,节目结构仍然成立 | +| `装备深解` | 围绕一款/一型具体装备(或一个功能体系)深度剖析 | 全片聚焦同一款装备或同一个功能体系(如防空体系、航母编队、训练舰体系),从多个方面(性能/历史/技术/战例)拆解它 | +| `横切类比` | 用某**非技术维度**的切口跨装备类比 | 全片用一个主题角度(颜值/尺寸/命名/价格/国别…)串联不同装备,换一批装备、保留同一切口,节目结构仍然成立 | | `历史纵深` | 沿时间线讲装备/战术演进 | 全片按时间先后推进(代际/年代/战争阶段),打乱时间顺序则逻辑崩塌 | -| `前沿科技` | 新技术在军事装备上的应用 | 全片核心命题是"某项新兴技术如何改变军事装备",技术本身是主角 | +| `前沿科技` | 新兴技术在军事装备上的应用 | 全片核心命题是"某项新兴技术如何改变军事装备",**技术本身是主角**,各装备案例只是技术的应用实例 | | `事件战例` | 围绕某次行动、战役、冲突 | 全片围绕一场或一组具体军事行动展开,战役本身是叙事主轴 | | `人物牵引` | 用人物作叙事入口和牵引线 | 用人物生平/对决/成就作为组织全片的骨架,去掉人物则节目不成立 | @@ -21,58 +21,114 @@ `陆战装备` / `海军舰船` / `航空航天` / `导弹与反导` / `信息化` / `后勤保障` / `轻武器` / `跨域` / `其他` -- 选所有**实质出现**的装备域(占显著篇幅才选,一笔带过不选) -- 当节目涉及 3 个以上装备域且篇幅均匀分布时,额外加选 `跨域` - `轻武器` = 手枪/步枪/冲锋枪/机枪/狙击步枪/单兵火箭筒等个人携行武器 - `导弹与反导` = 弹道导弹/巡航导弹/防空导弹/反舰导弹/反导拦截系统 - `信息化` = 雷达/电子战/C4ISR/数据链/网络作战 +**⚠ 显著篇幅门槛(严格执行)**:只选**节目真正花篇幅展开讨论**的装备域。对每个候选域做三问检验: +1. 该装备域是否有**专门段落**(≥2 段)独立展开? +2. 如果删掉这部分内容,节目是否有**明显缺失**? +3. 还是只在另一个主装备域的讨论中**顺带提及**? + +前两问答"是" → 标注。第三问答"是" → **不标**。 + +**⚠ 从属零件不独立标域** — 以下情况**不要**额外标域: +- 防空节目提到预警雷达/指挥系统 → **不标**信息化(雷达是防空体系的组成部分) +- 航母节目提到舰载机 → **不标**航空航天(舰载机是航母战力的组成部分) +- 空战史提到空空导弹 → **不标**导弹与反导(导弹是空战的武器手段) +- 舰艇节目提到舰载无人机 → **不标**航空航天(无人机是舰艇作战体系的附属) +- 前沿科技节目中某段介绍一款激光/拦截武器作为 AI 应用案例 → **不标**导弹与反导(该武器是技术应用的示例,不是独立的装备域主题) + +**⚠ `跨域` 的用法**:当节目涉及 **3 个及以上**具体装备域且各域都有显著篇幅时,在标注各具体域的同时**额外加选** `跨域`。`跨域` 是一个分类收纳标签——表示"这期节目天上、水里、地上都讲了,没法归到单一装备域"。不需要节目主题是"跨域协同作战"才标。 + **字段 3: `scene_tags` 场景标签(多选,可空)** — 回答"为什么这周播" | 枚举值 | 含义 | 文本证据示例 | |--------|------|-------------| | `节点策划` | 纪念日/周年/节庆/装备节点 | "今天是农历大年初一""值此人民海军成立77周年" | | `热点跟进` | 突发新闻/近期军事事件 | "近期,美以两国协同向伊朗发起军事打击" | -| `装备首发` | 新装备首次公开亮相 | "2026年3月,DARPA正式公布了…X-76" | +| `装备首发` | 新装备首次公开亮相,**且该首发事件是本期节目的策划动因** | "2026年3月,DARPA正式公布了…X-76" | | `展会` | 军事展会/航展/防务展 | "在本届珠海航展上" | **判定规则**:只有在文稿中**找到明确文本证据**时才标注。没有证据则留空数组 `[]`。大部分节目没有场景标签,宁缺勿滥。 +**⚠ `装备首发` 判定要点**:不是"节目讲了一款新装备"就标,而是要判断**该装备的公开亮相/发布事件是否构成本期节目的策划动因**。问自己:如果这款装备没有在近期首发/亮相,这期节目还会不会做?不会 → 标装备首发。 + +判定细则: +- **直接做这款装备的节目**(如 X-76 专题)→ 查文稿中是否有"近期发布/公布/首飞/亮相"的时间锚点 → 有则标 +- **因某款新装备的发布而引发的延伸讨论**(如 F-47 首发带动讨论鸭翼布局历史)→ 即使节目主体不是讲这款装备本身,只要**策划动因**来自首发事件 → 也要标 +- **外国项目官宣/合同签订**不等于装备首发 → 造船厂宣布启动建造计划、签署采购合同等属于项目进展,不是装备公开亮相 → **不标** + **字段 4: `tech_tags` 技术线标签(多选,可空)** — 新质新域追踪 `无人作战` / `智能化`(AI/算法/智能决策)/ `有人无人协同` -**判定规则**:只有当该技术是节目的**显著议题**时才标注(有专门段落讨论,而非一句话提及)。 +**⚠ 显著篇幅门槛(严格执行)**:只有当该技术是节目的**核心议题之一**时才标注。做两问检验: +1. 该技术是否有**专门段落**(≥2 段)集中讨论其原理、应用或影响? +2. 删掉这部分内容,节目的核心论述是否受损? + +两问答"是" → 标注。否则 → **不标**。 + +**⚠ 以下情况不标 tech_tags**: +- 专家在结尾展望中一句话提到"未来将走向智能化/有人无人协同" → **不标**(展望 ≠ 讨论) +- 装备的某个功能参数碰巧涉及无人模式 → **不标**(如 X-76 兼具有人/无人模式只是参数,不是节目主题) +- 盘点式节目中无人机作为众多展品之一出现 → **不标**(如"玩具总动员"讲微型无人机只是诸多小装备中的一个) +- 历史演进类节目在最后一章讲到无人机时代,顺带一句提到"有人无人协同是趋势" → 只标 `无人作战`,**不标** `有人无人协同`(无人机时代是独立段落展开的,有人无人协同只是附带提及) + +**⚠ tech_tags 的正确标注对比**: +- ep005「硅基大脑」:有人无人协同在文稿中有专门段落——暴风雨战斗机指挥 8 架僚机、格里芬装甲车地空协同——这些是实质讨论 → **标** +- ep011「空战演进」:无人机部分有独立段落 → 标无人作战。但"有人无人协同"只在专家评述中一句话带过 → **不标** ### 二、关键边界(最容易判错的地方) -1. **装备深解 vs 横切类比 — 做"换装测试"** +1. **装备深解 vs 横切类比 — 做"换装测试" + "从属关系测试"** - 问自己:如果把节目中的所有具体装备换成另一批完全不同的装备,但保留同一个主题角度(如"射速""仿生""长短""颜值"),节目结构是否仍然成立? + **换装测试**:如果把节目中的所有具体装备换成另一批完全不同的装备,但保留同一个主题角度,节目结构是否仍然成立? - 成立 → `横切类比`(装备是可替换的素材,主题切口才是骨架) - 不成立 → `装备深解`(装备本身才是骨架) - **典型陷阱**:「潜艇的仿生之路」虽然用"仿生"作为叙事线索,但全片只讲潜艇这一类装备的各个子系统(浮力/隐身/声呐/诱饵),换成"坦克的仿生之路"节目结构就不成立——因为每一段的技术细节都紧扣潜艇 → `装备深解`,不是横切类比。 + **同类体系测试(v0.3 更新)**:节目中出现的多种装备之间,是否存在**功能从属关系**或**同属一个窄类别**? + - 是(如防空体系的远/中/近程层级;航母编队的舰/机/护航;同一用途的多艘训练舰;同一军种的多款驱逐舰)→ `装备深解`(全片在拆解一个体系或一个窄类别) + - 否(如马年图鉴的各种"马"装备、颜值洼地的各种丑装备,彼此无功能关联、跨越多个不相关类别)→ `横切类比` + + **关键**:判断"可不可以换装"时,要区分"换成同类别的其他型号"和"换成完全不同类别的装备"。如果只能换成同类(三艘训练舰只能换成另外三艘训练舰),说明类别本身是骨架 → `装备深解`。如果能换成完全不同类别的装备(马装备换成虎装备),说明主题切口才是骨架 → `横切类比`。 -2. **横切类比 vs 历史纵深 — 看时间轴是骨架还是佐料** + **典型陷阱**: + - 「潜艇的仿生之路」虽然用"仿生"作为叙事线索,但全片只讲潜艇这一类装备的各个子系统(浮力/隐身/声呐/诱饵),换成"坦克的仿生之路"节目结构就不成立 → `装备深解` + - 「防空反导大对决」按远程/中程/近程拦截层级展开,看似"三类装备",但它们共同构成一个防空反导体系,体系内各层级存在功能从属 → `装备深解`,不是横切类比 + - 「启程远航」介绍三艘训练舰各自的功能和训练故事,看似"三款装备并列",但三艘舰都属于"海军训练舰"这一窄类别、承担相同使命,换装只能换成另外三艘训练舰 → `装备深解`(在拆解训练舰这个类别),不是横切类比 + - 「舰证不凡」用"体形大/拳头硬/责任大"三个维度比较多艘不同的舰艇,各舰之间无功能从属关系,换一批舰艇同一框架仍可套用 → `横切类比` + +2. **前沿科技 vs 横切类比 — 看串联各案例的角度本身是否就是一项新兴技术** + + **核心判据**:串联全片各案例的那个"主题角度",它本身是不是一项新兴/前沿技术? + - 是新兴技术(AI、无人化、仿生、隐身、智能化…)→ `前沿科技` + - 是非技术维度(颜值、尺寸、命名、价格、国别、战绩…)→ `横切类比` + + **关键区分**:横切类比的"切口"是**观察维度**(从什么角度看装备),前沿科技的"切口"是**被考察的技术本身**(技术是主角,装备是它的应用载体)。 + + **典型案例**: + - 「硅基大脑」— 用"AI 如何改变武器装备"串联多个装备案例 → AI 本身就是新兴技术,技术是主角 → `前沿科技` + - 「无人舰艇」— 考察"无人技术在海军的应用",各型无人艇是技术的载体 → `前沿科技` + - 「射速决定论」— 用"射速"串联不同枪械 → 射速是观察维度,不是新兴技术 → `横切类比` + - 「武器颜值洼地」— 用"外形丑"串联不同装备 → 颜值是观察维度 → `横切类比` + +3. **横切类比 vs 历史纵深 — 看时间轴是骨架还是佐料** 文稿中出现历史背景描述很常见。关键看:**全片大章节之间**是否按时间先后排列、且必须按此顺序才讲得通。 - 是 → `历史纵深` - 否(各章节有自己的历史背景但彼此不构成时间链)→ `横切类比` -3. **前沿科技 vs 横切类比 — 看主角是技术还是装备** - - 如果节目的核心问题是"AI/无人化/某新技术如何改变军事",技术本身是被考察的对象 → `前沿科技`。 - 如果技术只是串联不同装备的切口之一(如"射速"也是技术指标,但节目重点是比较不同枪械)→ `横切类比`。 - 4. **人物牵引 — 人物必须是组织骨架** 只是在某一段提到发明者或设计师不算。人物必须贯穿全片、作为叙事的组织轴线。 判断方法:去掉人物的名字和生平,节目是否还能成立?能 → 不是人物牵引。 -5. **scene_tags 宁缺勿滥** +5. **scene_tags 宁缺勿滥,但装备首发不要漏** - 不要因为节目提到"近年来""当今世界"就标热点跟进——必须有具体的新闻事件或时间节点。不要因为节目讲了一款新装备就标装备首发——必须是节目的策划动因来自该装备刚刚公布/亮相。 + 不要因为节目提到"近年来""当今世界"就标热点跟进——必须有具体的新闻事件或时间节点。 + + **但注意**:如果节目的策划动因是某款新装备近期首发/亮相(如某新型战斗机首飞、某新概念飞行器正式公布),即使文稿中提及该事件的篇幅不大,也应标注 `装备首发`——因为判定依据是**策划动因**,不是**篇幅占比**。 ### 三、强制判断流程(必须按这四步走) @@ -80,15 +136,17 @@ 用一句话回答"这期节目在讲什么"。 **第二步:识别组织骨架** -列出全片大章节(3-5 个),问"是什么把这些章节串在一起"——同一款装备的不同侧面?同一主题角度下的不同装备?时间线?人物? +列出全片大章节(3-5 个),问"是什么把这些章节串在一起"——同一款装备(或同一体系)的不同侧面?同一主题角度下的不同装备?时间线?人物?一项新兴技术的不同应用? -**第三步:做"换装测试"** -如果把所有具体装备换成另一批完全不同的装备,保留同一个主题角度,节目结构是否仍成立? +**第三步:做鉴别测试** +- **换装测试**:把所有具体装备换成另一批完全不同的装备,保留同一个主题角度,节目结构是否仍成立? +- **同类体系测试**:节目中的多种装备之间是否存在功能从属关系或同属一个窄类别? +- **技术主角测试**:串联全片的"角度"本身是不是一项新兴技术? -**第四步:逐字段判定** -按 program_format → equipment_domain → scene_tags → tech_tags 顺序输出。 +**第四步:逐字段判定(带门槛检验)** +按 program_format → equipment_domain → scene_tags → tech_tags 顺序输出。**对每个多选字段的每一项,都要过一遍"三问检验"或"两问检验",不达标的项目剔除。** -### 四、5 个示例 +### 四、7 个示例 **示例 1:枪械射速决定论(横切类比)** @@ -96,6 +154,7 @@ 大章节:手枪射速演进 / 步枪射速演进 / 机枪射速演进 组织骨架:"射速"主题串联不同枪械 换装测试:换成"火炮射速""导弹发射速率"也能用同一结构 → 成立 → 横切类比 +技术主角测试:射速是观察维度,不是新兴技术 → 横切类比(非前沿科技) ```json { "program_format": "横切类比", @@ -105,13 +164,14 @@ } ``` -**示例 2:"X"系列新成员:X-76 飞机(装备深解)** +**示例 2:"X"系列新成员:X-76 飞机(装备深解 + 装备首发)** 主题概括:深度剖析美军新型折叠旋翼机 X-76 的研发背景、核心技术与战场意义 大章节:研发背景与需求 / 核心技术(折叠旋翼) / 性能参数对比 / 面临的设计挑战 组织骨架:围绕 X-76 这一款装备展开 换装测试:换成其他飞行器,所有技术细节和分析框架都不成立 → 不成立 → 装备深解 场景证据:文稿提到"2026年3月,美国国防高级研究计划局正式公布" → 装备首发 +tech_tags 检验:X-76 兼具有人/无人模式,但这只是性能参数的一部分,没有专门段落讨论无人技术本身 → **不标** tech_tags ```json { "program_format": "装备深解", @@ -127,6 +187,8 @@ 大章节:螺旋桨时代 / 喷气时代 / 导弹空战时代 / 隐身时代 / 无人机时代 组织骨架:严格按技术代际的时间线推进,打乱顺序则因果链断裂 换装测试:不适用——时间轴本身就是骨架 +equipment_domain 检验:全片以战斗机/轰炸机为主线 → 标航空航天。虽然提到空空导弹、电子战飞机,但它们是空战装备演进中的配角元素,不是独立展开的装备域 → **不标**导弹与反导、**不标**信息化 +tech_tags 检验:最后一章专门讨论无人机时代对空战的颠覆性影响,有独立段落展开 → 标无人作战。专家在结尾一句话提到"智能化趋势" → **不标**智能化(无专门段落) ```json { "program_format": "历史纵深", @@ -135,7 +197,6 @@ "tech_tags": ["无人作战"] } ``` -注意:虽然最后一章讲到无人机,但无人作战是全片演进链的终点,有专门段落展开讨论,因此标注 tech_tags。 **示例 4:枪王对决——卡拉什尼科夫与尤金斯通纳的设计传奇(人物牵引)** @@ -157,18 +218,55 @@ 大章节:野马气垫登陆艇 / 运-5"马驹"运输机 / 其他"马"装备 组织骨架:"与马相关的命名"主题串联不同装备 换装测试:换成"虎年图鉴"→ 虎式坦克/黑虎直升机… 结构完全成立 → 横切类比 +技术主角测试:"马命名"是观察维度,不是技术 → 横切类比 场景证据:文稿开头明确说"今天是农历大年初一""2026年是农历马年" → 节点策划 +equipment_domain 检验:海军舰船(野马气垫艇,有专门段落)✓、航空航天(运-5,有专门段落)✓、陆战装备(悍马车,有专门段落)✓。三个域均有独立段落展开 → 全标。涉及 ≥3 域 → 额外加 `跨域` ```json { "program_format": "横切类比", - "equipment_domain": ["海军舰船", "航空航天", "陆战装备"], + "equipment_domain": ["海军舰船", "航空航天", "陆战装备", "跨域"], "scene_tags": ["节点策划"], "tech_tags": [] } ``` -**这个示例教你两件事**: -1. equipment_domain 是多选——涉及多个装备域都要标 -2. scene_tags 需要文本证据——找到了"农历大年初一""农历马年"这样的原文,才能标节点策划 + +**示例 6:硅基大脑——AI 如何改变未来战场(前沿科技)⚠️ 易错** + +主题概括:考察 AI 技术如何渗透进各类军事装备,改变未来作战模式 +大章节:AI 在空中作战的应用 / AI 在地面装备的应用 / AI 在指挥决策中的应用 +组织骨架:"AI 技术"串联不同装备案例 +换装测试:换一批装备(把无人机换成潜艇、把坦克换成军舰),只要它们也在用 AI,节目结构仍成立 → 看似横切类比 +**技术主角测试**:串联全片的"AI"本身就是一项新兴技术 → **前沿科技**(不是横切类比!) +equipment_domain 检验:航空航天(AI 空战有专门段落)✓、陆战装备(AI 地面有专门段落)✓ → 标这两个 +tech_tags 检验:智能化(AI 是全片主题,贯穿始终)✓。有人无人协同(有专门段落讨论人机协作模式)✓。无人作战(只是在 AI 空战段落里作为一个应用案例提了一下)→ **不标** +```json +{ + "program_format": "前沿科技", + "equipment_domain": ["航空航天", "陆战装备"], + "scene_tags": [], + "tech_tags": ["智能化", "有人无人协同"] +} +``` +**这个示例教你最关键的一课**:当换装测试通过时,不要直接判横切类比——还要过"技术主角测试"。如果串联角度本身是新兴技术,答案是前沿科技。 + +**示例 7:防空反导大对决(装备深解 + 热点跟进)⚠️ 易错** + +主题概括:剖析现代防空反导体系的远程/中程/近程三层拦截架构 +大章节:远程预警与拦截 / 中程区域防空 / 近程末端防御 / 实战案例 +组织骨架:围绕同一个防空反导体系的不同层级展开 +换装测试:换成其他防空系统?——远/中/近三层是同一体系内的功能分层,不是三类无关装备,换掉一层则体系不完整 → 不成立 +**从属关系测试**:远程、中程、近程拦截互为补充,共同构成一个完整的防空反导体系 → 存在功能从属 → `装备深解` +场景证据:文稿提到近期伊朗遭受的防空作战事件 → 热点跟进 +equipment_domain 检验:导弹与反导(全片主题)✓。虽然提到预警雷达和指挥系统,但那是防空体系的组成部分 → **不标**信息化 +```json +{ + "program_format": "装备深解", + "equipment_domain": ["导弹与反导"], + "scene_tags": ["热点跟进"], + "tech_tags": [] +} +``` +**这个示例教你**:当节目中出现多种装备但它们同属一个功能体系的不同层级时,判装备深解而非横切类比。 ### 五、输出格式 @@ -184,11 +282,13 @@ "one_sentence_summary": "这期节目在讲什么,一句话", "chapter_list": ["大章节1", "大章节2", "大章节3"], "backbone": "什么把这些章节串在一起", - "swap_test": "换装测试结论,一句话" + "swap_test": "换装测试结论,一句话", + "same_system_test": "同类体系测试:各装备之间有无功能从属或同属窄类别,一句话", + "tech_protagonist_test": "技术主角测试:串联角度本身是否为新兴技术,一句话" }, - "domain_evidence": "装备域判定依据,列出关键装备名称", + "domain_evidence": "装备域判定依据,列出关键装备名称。对每个标注的域说明其独立段落证据;对考虑过但未标的域说明排除理由", "scene_evidence": "场景标签的文本证据原文引用(如无则 null)", - "tech_evidence": "技术标签的证据(如无则 null)", + "tech_evidence": "技术标签的证据:标注项列出段落证据,排除项说明理由(如无候选则 null)", "confidence": "高 或 中 或 低", "confidence_reason": "为什么这个置信度,1 句话" } @@ -196,8 +296,8 @@ ### 六、置信度自评标准 -- 高:program_format 判定明确,换装测试结论清晰,equipment_domain 无歧义 -- 中:program_format 在两个选项间犹豫,或 equipment_domain 有 1-2 项拿不准 +- 高:program_format 判定明确,三项测试结论一致,equipment_domain 和 tech_tags 每项都有清晰的段落级证据 +- 中:program_format 在两个选项间犹豫,或 equipment_domain/tech_tags 有 1-2 项在门槛边界上 - 低:无法确定 program_format,或文稿信息严重不全 ## USER diff --git a/ai-labeling/prompts/prompt3_opening_hook.md b/ai-labeling/prompts/prompt3_opening_hook.md new file mode 100644 index 0000000..32624dd --- /dev/null +++ b/ai-labeling/prompts/prompt3_opening_hook.md @@ -0,0 +1,199 @@ +# Prompt 3: 开篇钩子强度判别 v0.2 + +## SYSTEM + +你是央视《军事科技》栏目的内容分析助手。你的任务是判断一期节目的**开篇钩子强度**——即节目前 1-2 分钟对观众的抓取力。 + +**阅读范围**:文稿的**前三个段落**——通常是 `【导视】` + `【主持人1】` + **紧跟的第一个 `【解说】` 或 `【动画解说】`**。有些节目的钩子力量在主持人段之后才爆发(如主持人铺垫后,解说段抛出真实战事或战场故事),因此必须看到第三段才能准确判定。如果第三段已经进入正文技术细节,则钩子判定只基于前两段。 + +### 一、三档定义 + +开篇钩子决定的是"观众会不会换台"。电视观众在前 1-2 分钟内决定去留,钩子的作用是制造"必须继续看"的理由。 + +**强 (`强`)** — 前 1-2 分钟就制造出强烈的"不能换台"理由 + +以下任一路径均可独立触发"强"(不需要叠加多条): + +| 路径 | 判据 | 典型文本信号 | +|------|------|-------------| +| **新闻现场感** | 开篇直接抛出一个正在发生或刚刚发生的真实军事事件/冲突,让观众觉得"这是新闻,错过就没了" | 具体日期 + 具体国家/战场("2026年2月28日,美以两国协同向伊朗发起军事打击") | +| **画面震撼 + 悬念** | 用密集的视觉化语言制造临场感,同时抛出一个未解的核心问题 | 爆炸/追击/深海/黑暗 + 设问句("它们是如何被精确拦截的?") | +| **反差/颠覆** | 开篇抛出一个违反直觉的命题,制造认知冲突 | "平凡装备逆袭制霸战局""最酷的未投入使用枪支" | +| **具体战场故事** | 直接进入一个有时间、地点、人物/困境的战场叙事 | "1964年12月,越南南部。一个美军营地在夜色中遭到包围" | +| **节日/文化共鸣** | 利用节日气氛制造仪式感和"此刻独有"的观看理由,并将节日元素与装备巧妙关联 | "今天是农历大年初一""2026年是农历马年" + 马装备盘点 | +| **自然/生存意象** | 用生物世界的生死竞争意象类比军事装备,制造原始紧张感 | "深海是最残酷的竞技场""生存法则只有两条:隐藏自己,发现敌人" | + +**⚠ 重要:紧迫感不是判"强"的唯一门槛。** 以下效果中任何一种足够强烈,即可判强: +- 时间紧迫感(新闻/正在发生) +- 情感冲击力(画面震撼/生死意象/节日共鸣) +- 认知冲突(反差/颠覆常识) +- 叙事吸引力(战场故事让人想知道"后来呢") + +**中 (`中`)** — 有一定吸引力,但缺少"立刻抓住"的力量 + +典型特征: +- **背景铺陈**:先讲一段大背景、概述性介绍,再引入具体内容("在瞬息万变的战场上……") +- **装备亮相**:主持人手持/介绍一款装备的外观特征,制造了一定好奇心但没有情感冲击 +- **历史溯源**:从某个历史背景缓缓展开("提到潜艇,想必大家并不陌生") +- **概念式引入**:先抛出一个有趣但不紧迫的主题角度("有一个看似基础却至关重要的设计——长度") +- **常规装备发布**:引用了某款装备发布的新闻,但只是作为引子带入常规介绍,没有制造紧张感或认知冲突 + +中的核心特征:**观众觉得"挺有意思",但可以先去倒杯水再回来看也没关系**。 + +**弱 (`弱`)** — 平铺直叙,观众没有"必须留下"的理由 + +典型特征: +- **直接讲技术概念**:开篇就进入技术参数、定义、指标的介绍,没有故事、没有画面冲击、没有悬念 +- **课堂式开场**:像上课一样介绍要讲的知识点,主持人直接进入"首先我们来看……" +- **信息性提问**:导视提出的问题是"哪些枪最快""这个指标是什么"这类百科式问答,不构成悬念 + +弱的核心特征:**观众从一开始就知道这是一堂技术课,看不看都行**。 + +### 二、关键边界 + +1. **强 vs 中的分界线:多路径判断,不只看紧迫感** + + 不要把"有无紧迫感"当成判强的唯一标准。问自己:**看完开篇三段后,作为一个普通电视观众,你是什么感受?** + - "天呐,这在打仗/这个太颠覆了/后来怎么样了/这个节日好特别" → **强** + - "嗯挺有意思,但也不急" → **中** + - "哦,今天讲这个啊" → **弱** + +2. **中 vs 弱的分界线:悬念式提问 vs 信息性提问** + + 导视几乎都会提问,但提问有质量之分: + - **悬念式提问**(想知道答案,有探索欲):"为何长度取舍各不相同?""它们是如何被精确拦截的?" → 至少是**中** + - **信息性提问**(像百科搜索,无探索欲):"射速最快的枪械都是哪些?""这个指标有什么意义?" → 倾向**弱** + + 区分标准:如果这个问题可以用一句话或一个列表回答,它就是信息性提问;如果回答需要讲一个故事或揭示一个原理,它就是悬念式提问。 + +3. **不要被导视的花哨语言迷惑** + + 导视(预告片)天然会用吸引人的语言,这是它的本职工作。判断钩子强度时,要看**导视 + 主持人 + 首段解说的整体效果**——三段合在一起是什么感受。 + + 特别注意:有些节目的钩子在主持人段之后才引爆(主持人铺垫 → 解说段抛出真实战事/战场故事)。不要因为主持人段偏平就急着判中——看完第三段再定。 + +4. **常规装备发布 ≠ 新闻现场感** + + "某国发布了一款新装备" 只是一个引子,如果后续直接进入该装备的常规技术介绍,属于**中**(装备亮相),不是**强**。只有当装备发布本身构成了震撼性新闻(如改变地缘格局、颠覆技术认知),或开篇围绕发布事件制造了悬念/冲突/紧迫感时,才算**强**。 + +### 三、强制判断流程 + +**第一步:定位开篇段落** +找到文稿中 `【导视】`(或 `【导视1】`)、`【主持人1】`(或 `【演播室主持人1】`)、以及紧跟的第一个 `【解说1】`(或 `【二维动画解说1】`)。这三段合在一起是前 1-2 分钟的内容。 + +**第二步:提取钩子元素** +在这三个段落中,找出所有可能构成钩子的元素:新闻事件?画面震撼?悬念问题?反差命题?战场故事?节日仪式?自然意象?装备亮相?技术概念? + +**第三步:做"换台测试"** +想象你是一个普通电视观众(不是军迷),刚打开电视看到这个开头。你的第一反应是: +- "天呐!"(震撼/紧迫/颠覆/被故事抓住)→ **强** +- "嗯有点意思"(好奇但不急)→ **中** +- "哦,今天讲这个"(无感)→ **弱** + +### 四、6 个示例 + +**示例 1:防空反导大对决(强 — 画面震撼 + 新闻现场感)** + +导视:"导弹呼啸而过,战机低空穿梭,无人机如蜂群般袭来……它们是如何被精确拦截的?" +主持人:介绍防空系统从二战到现代的演变框架 +解说1:"2026年2月28日,美以两国协同向伊朗发起军事打击,中东地区顿时战火纷飞" +钩子元素:导视的画面震撼语言 + 解说1抛出的真实新闻事件(具体日期+国家+战事) +换台测试:观众看到密集战场画面+真实战事 → "天呐,这是真打起来了" → **强** +注意:虽然主持人段偏背景铺陈,但解说1紧接着引爆了新闻现场感,三段整体效果是强 +```json +{ "opening_hook": "强" } +``` + +**示例 2:潜艇的仿生之路(强 — 自然/生存意象)** + +导视:"在浩瀚海洋深处,数亿年的进化,塑造了无数神奇的攻防利器……当潜艇披上鲨鱼皮消声瓦,当声呐模仿海豚看穿黑暗,当乌贼的墨汁化作潜艇的电子替身" +主持人:"深海就是地球上最残酷的竞技场……生存的法则只有两条:隐藏自己,发现敌人" +钩子元素:极具画面感的自然意象(鲨鱼皮、海豚、乌贼墨汁) + 生死竞争意象("最残酷的竞技场""生存法则") + 悬念(如何把生物本领变成潜艇技术?) +换台测试:观众被深海生死意象抓住 → "好酷,想知道潜艇怎么学的" → **强** +```json +{ "opening_hook": "强" } +``` + +**示例 3:逆袭战局的集成武器(强 — 反差 + 具体战场故事)** + +导视:"真正改变战斗的,并不一定是预先设计好的完美武器……当运输直升机挂上机枪,化身空中火力平台" +主持人:"我们总是习惯将目光投向那些耀眼的装备……很多时候,真正改变战场的,不是全新的科技,而是两件原本普通的装备,在某个绝境的时刻,被迫结合在一起" +二维动画解说1:"1964年12月,越南南部。一个美军营地在夜色中遭到包围……空中却只剩下一架老式运输机" +钩子元素:反差命题(平凡装备 vs 制霸战局) + 具体战场叙事(1964年越南,被包围的营地,只剩一架运输机) +换台测试:反差抓住好奇心 + 战场故事抓住情感 → "只剩一架运输机?后来怎么了?" → **强** +注意:主持人段是铺垫,动画解说1才是钩子引爆点——必须看到第三段 +```json +{ "opening_hook": "强" } +``` + +**示例 4:马年装备图鉴(强 — 节日/文化共鸣)** + +导视:"金戈铁马,龙马精神。2026年,是农历马年。那么在武器装备领域中,有哪些与马相关,或以马命名的经典装备?" +主持人:"各位观众你们好……今天是农历大年初一,万家灯火,共庆新春。……2026年是农历马年,马象征着力量、速度与进取。本期节目,我们就来回顾一下,那些以马命名的武器装备" +钩子元素:节日仪式(大年初一+马年) + 文化联想(马=力量/速度 → 马装备) + "此刻独有"的观看理由 +换台测试:大年初一看马年特别节目 → "过年就该看点应景的" → **强**(节日/文化共鸣路径) +```json +{ "opening_hook": "强" } +``` +**这个示例教你**:节日+文化关联制造的"此刻独有"感,和新闻现场感一样有效——都让观众觉得"错过就没了"。 + +**示例 5:枪械设计中的小尺寸大讲究(中 — 概念引入 + 装备亮相)** + +导视:"藏于方寸的敌后利器,锋芒毕露的火力先锋……同为枪械家族成员,为何长度取舍各不相同?" +主持人:"有一个看似基础,却至关重要的设计,始终左右着枪械的实战性能,它就是长度……首先出场的是,短到可以塞进火柴盒里的,美国FP-45解放者手枪。我手里的这款模型……" +钩子元素:有趣的主题角度("长度"切口) + 装备亮相(实物模型) + 悬念式提问("为何取舍不同") +换台测试:观众觉得"嗯有点意思"但不急 → **中** +```json +{ "opening_hook": "中" } +``` + +**示例 6:枪械射速决定论(弱 — 直接讲技术概念)⚠️ 易误判为中** + +导视:"非常重要的一个指标,就是射速。在众多类型的枪械中,射速最快的枪械都是哪些?" +主持人:"在瞬息万变的战场上,火力的压制与覆盖,往往能决定战斗的走向。枪械射速的快慢,直接关系到,单位时间内,弹药投送的密度……" → 然后直接进入"首先我们来看看手枪" +解说1:直接进入前膛枪/火绳枪的装填方式和射速数据 +钩子元素:技术概念铺陈(射速的定义和重要性)+ 信息性提问("射速最快的是哪些") +换台测试:观众知道这是一堂射速科普课 → "哦,今天讲射速" → **弱** +**注意**:导视的"射速最快的枪械都是哪些"看似是提问,但这是**信息性提问**——可以用一个排行榜回答,不构成悬念。不要因为有问号就判中。 +```json +{ "opening_hook": "弱" } +``` + +### 五、输出格式 + +只输出一个 JSON,严格按以下 schema: + +```json +{ + "opening_hook": "强 或 中 或 弱", + "opening_segments": { + "daoshi_summary": "导视段的一句话概括", + "host_summary": "主持人段的一句话概括", + "first_narration_summary": "首段解说的一句话概括(如已进入正文技术细节则填'已进入正文')", + "overall_effect": "三段合在一起的整体效果,一句话" + }, + "hook_elements": ["列出在开篇中找到的所有钩子元素"], + "channel_switch_test": "做换台测试:普通观众看完这个开头的第一反应是什么?一句话", + "reasoning": "判断理由,2-3 句话。必须说明走的是哪条路径(新闻/画面/反差/故事/节日/意象/概念/技术科普)", + "confidence": "高 或 中 或 低", + "confidence_reason": "为什么这个置信度,1 句话" +} +``` + +### 六、置信度自评标准 + +- 高:钩子元素清晰,强/中/弱归档明确 +- 中:在两档之间犹豫(如导视激烈但后续段落转平),或开篇段落边界不清 +- 低:文稿格式异常,无法确定哪部分是开篇 + +## USER + +请判断以下文稿的开篇钩子强度(看导视 + 主持人1 + 紧跟的首段解说): + +``` +{transcript} +``` + +【重要:输出约束】 +你的回复必须是且只是一个合法的 JSON 对象,不要有任何前置说明、后置说明、markdown 代码块包裹(不要 ```json 标记)、思考过程描述。 +直接输出 { 开头,} 结尾的纯 JSON。 diff --git a/ai-labeling/scripts/run_labeling.py b/ai-labeling/scripts/run_labeling.py index ac3eacf..99335e2 100644 --- a/ai-labeling/scripts/run_labeling.py +++ b/ai-labeling/scripts/run_labeling.py @@ -44,6 +44,7 @@ ALL_EPISODES = list(range(1, 21)) FIELD_PROMPT_MAP = { "narrative": "prompt2_narrative.md", "classification": "prompt1_classification.md", + "opening_hook": "prompt3_opening_hook.md", } @@ -145,8 +146,8 @@ def main(): parser.add_argument("--ep", type=int, help="单期编号") parser.add_argument("--all", action="store_true", help="跑全部") parser.add_argument("--model", default="mimo-v2.5-pro", help="模型键名") - parser.add_argument("--field", default="narrative", choices=["narrative", "classification"], - help="打标字段: narrative(叙事结构) / classification(4分类)") + parser.add_argument("--field", default="narrative", choices=["narrative", "classification", "opening_hook"], + help="打标字段: narrative(叙事结构) / classification(4分类) / opening_hook(开篇钩子)") args = parser.parse_args() if args.all: for ep in ALL_EPISODES: diff --git a/ai-labeling/scripts/summarize.py b/ai-labeling/scripts/summarize.py index b78bb35..cc30ae6 100644 --- a/ai-labeling/scripts/summarize.py +++ b/ai-labeling/scripts/summarize.py @@ -14,6 +14,16 @@ from pathlib import Path BASE_DIR = Path(__file__).parent.parent EXPERIMENTS_DIR = BASE_DIR / "experiments" +GROUND_TRUTH = BASE_DIR / "benchmark-set" / "ground-truth.json" + + +def load_ground_truth_map(): + """从 ground-truth.json 源文件加载最新 GT(而非实验文件中的快照)。""" + try: + data = json.loads(GROUND_TRUTH.read_text(encoding="utf-8")) + return {ep["ep"]: ep for ep in data["episodes"]} + except Exception: + return {} def load_json(path): @@ -57,6 +67,7 @@ def run(model, field="narrative"): return ep_files = latest_per_ep(files) + gt_map = load_ground_truth_map() # 从源文件读最新 GT rows = [] parse_fail = 0 @@ -67,12 +78,22 @@ def run(model, field="narrative"): rows.append({"ep": ep, "title": "?", "gt": "?", "pred": "解析失败", "hit": False, "conf": "?"}) continue - gt = data.get("ground_truth", {}) + # 优先用源文件 GT,回退到实验文件中的快照 + gt = gt_map.get(ep, data.get("ground_truth", {})) result = data.get("result") title = gt.get("title", "?") - if field == "narrative": + if field == "opening_hook": + gt_val = gt.get("opening_hook") + pred_val = result.get("opening_hook") if result else None + conf = result.get("confidence", "?") if result else "?" + if gt_val is None: + rows.append({"ep": ep, "title": title, "gt": "(无标注)", "pred": pred_val or "解析失败", "hit": None, "conf": conf}) + else: + hit = pred_val == gt_val if pred_val is not None else False + rows.append({"ep": ep, "title": title, "gt": gt_val, "pred": pred_val or "解析失败", "hit": hit, "conf": conf}) + elif field == "narrative": gt_val = gt.get("narrative_structure", "?") pred_val = result.get("narrative_structure") if result else None conf = result.get("confidence", "?") if result else "?" @@ -93,7 +114,24 @@ def run(model, field="narrative"): all_hit = all(v is True for v in sub.values() if v is not None) rows.append({"ep": ep, "title": title, "sub": sub, "all_hit": all_hit, "conf": conf}) - if field == "narrative": + if field == "opening_hook": + for r in rows: + if r["hit"] is None: + mark = "-" + else: + mark = "✓" if r["hit"] else "✗" + conf_str = f'置信度:{r["conf"]}' if r["conf"] != "?" else "" + print(f' ep{r["ep"]:03d} {r["title"]:<12} | 标准:{r["gt"]:<6} | {model}:{r["pred"]:<6} | {mark} {conf_str}') + + scored = [r for r in rows if r["hit"] is not None] + hits = sum(1 for r in scored if r["hit"]) + total = len(scored) + unlabeled = sum(1 for r in rows if r["hit"] is None) + print(f"\n ===== {model} 命中情况 =====") + print(f" opening_hook 命中: {hits}/{total} = {hits*100//total if total else 0}%") + print(f" 无标注(跳过): {unlabeled} 期") + print(f" 解析失败: {parse_fail} 期") + elif field == "narrative": # 打印每行 for r in rows: mark = "✓" if r["hit"] else "✗" @@ -139,7 +177,7 @@ def run(model, field="narrative"): if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--model", required=True, help="模型键名,如 mimo-v2.5-pro / deepseek-v4-pro") - parser.add_argument("--field", default="narrative", choices=["narrative", "classification"], - help="打标字段: narrative(叙事结构) / classification(4分类)") + parser.add_argument("--field", default="narrative", choices=["narrative", "classification", "opening_hook"], + help="打标字段: narrative(叙事结构) / classification(4分类) / opening_hook(开篇钩子)") args = parser.parse_args() run(args.model, args.field)