# 解码工作流执行过程总结

## 工作流概览

解码工作流是一个完整的视频分析流程，包含10个节点：
1. 视频上传 → 2. 灵感点提取 → 3. 目的点提取 → 4. 关键点提取 → 5. 选题理解 → 
6. 段落划分 → 7. 实质提取 → 8. 形式提取 → 9. 分离结果 → 10. 结果汇总

---

## 节点1: 视频上传

**功能**: 下载视频到本地并上传至Gemini，保存上传链接

**执行过程**: 
- 检查examples/videos目录下是否有现有文件
- 如无则从URL下载视频到examples/videos目录
- 上传视频到Gemini File API
- 保存文件URI和名称到state

**输出**: `video_uploaded_uri`, `video_file_name`

---

## 节点2: 灵感点提取

**功能**: 从创作者视角提取触发创作的深层刺激源

**执行流程**: 6步提取流程

### Step 1: 识别候选灵感点（逐帧分析视频）

**Prompt**:
```
# 任务：识别候选灵感点（逐帧分析视频）

## 当前视频
请对视频进行逐帧或关键帧分析。

**重要**：你需要对视频进行逐帧或关键帧分析，捕捉以下维度的信息：
- 画面内容：场景、物体、人物、环境等视觉元素
- 动作变化：人物的动作、物体的运动、场景的转换
- 时间线索：视频的时间顺序、节奏变化、关键时间点
- 视觉细节：颜色、光影、构图、视觉焦点等
- 音频信息（如有）：对话、音效、背景音乐等

## 核心概念（统一说明，避免重复）

### 字段定义
**分类**（维度）：创作者接收外界信息刺激的角度或通道
- 格式：2-4个字，简洁直观，避免抽象表述

**灵感点**：创作前遇到的、触发创作冲动的客观刺激源（作者被动接收的信息：看到的、听说的、发现的、观察到的、感知到的）
- 格式：不超过15个字，使用自然、通俗、口语化的表达方式
- 本质：刺激源的内容本身（讲什么、做什么、说什么），而非表达手段（如何呈现、如何表达）
- 表达要求：
  * 使用日常生活中的自然语言，避免学术化、抽象化的词汇堆砌
  * 优先使用"的"字短语结构（如"夏日的热闹景象"）或动宾短语（如"观察到的自然互动"）
  * 禁止使用多个抽象名词连用（如"具象化动态互动自然拟人"）
  * 表达要让普通人一看就懂，不需要"翻译"

**描述**：对刺激源本身是什么的详细说明，讲清楚这个灵感点具体指的是什么
- 内容要求：描述刺激源的具体特征、形态、场景、内容等客观信息，让读者能清晰理解"这个灵感点到底是什么东西"
- 注意区分：刺激源内容本身 vs 呈现方式/表现形式

**推理**：说明这个灵感点是如何得出来的，解释从视频内容推导出这个灵感点的过程
- 内容要求：连贯的描述性文字，说明基于视频的哪些画面/动作/场景/对话等线索，推导出创作者接收到了这个刺激源

### 严格禁止（适用于灵感点和描述）
- 不描述创作者如何运用/展现/表达这个刺激，不使用推理性词汇
- 不能是创作形式、表现手法、表达方式、呈现方式、风格、格式等创作应用层面的东西
- 必须是被动接收的刺激，不能是主动创造的内容
- 不解释创作者为什么被触发、如何使用这个刺激
- 不进行主观推理和价值判断
- 禁止词汇堆砌，避免多个抽象概念连用

### 反思验证（识别每个灵感点后必须进行）
- 这个灵感点描述的是内容本身，还是仅仅描述表达手段？
- 如果仅描述表达手段（如呈现方式、创作形式、风格、格式等），应重新提炼真正的刺激源内容
- 这个表达是否符合日常口语习惯？是否通俗易懂？
- 如果描述的是内容本身且表达自然 → 保留

### 识别要求
- **独立性**: 不同灵感点必须是不同的刺激源，本质相同的只保留一个
- **完整性**: 分类→灵感点→描述应形成从刺激通道到刺激内容的完整表达
- **真实性**: 从"作者接收到了什么刺激"（被动接收）而非"作者如何创作"（主动输出）的角度出发
- **视频特性**: 需要关注视频的动态特性，包括画面变化、动作序列、时间线索等

## 输出格式（JSON）
{
  "候选灵感点列表": [
      {
        "候选编号": 1,
        "分类": "...",
        "灵感点": "...",
        "描述": "...",
        "推理": "..."
      }
  ]
}

**重要提醒**：
- 推理必须是连贯的描述性文字，说明为什么这个灵感点能刺激创作
- 候选编号全局唯一（连续编号：1, 2, 3...）
- 必须基于视频的实际内容进行分析，不能凭空想象
```

### Step 2: 逆向推导验证

**Prompt**:
```
# 任务：逆向推导验证

## 当前视频
请对视频进行逐帧或关键帧分析。

## 候选灵感点
{candidates_text}

## 验证要求
对每个候选灵感点进行逆向推导验证：

**验证问题**：
- 从这个灵感点出发，能否推导出整个视频的内容？
- 这个刺激源是创作前的触发，而不是创作目的？
- 这个灵感点是否真正捕捉到了深层动机？

**验证规则**：
- 能推导出 → 验证通过（true）
- 不能推导出或逻辑不通 → 验证失败（false）

## 输出格式（JSON - 简化版）
{
  "验证结果列表": [
    {
      "候选编号": 1,
      "验证结果": true,
      "推导说明": "从这个灵感点可以推导出..."
    }
  ]
}
```

### Step 3: 去重检查

**Prompt**:
```
# 任务：灵感点去重

## 候选灵感点列表
{candidates_text}

## 核心判断标准

**唯一标准：是否指向同一个刺激源？**

- 如果两个灵感点描述的是**同一个事物/现象/刺激**，只是从不同角度、不同层面、不同粒度来表达 → 重复，去重

## 判断方法

1. **识别刺激源本质**：每个灵感点背后的刺激源到底是什么？
2. **对比刺激源**：是同一个刺激源的不同表述？还是两个不同的刺激源？
3. **忽略表述差异**：不要被具体用词、分类标签、角度差异迷惑，抓住本质

## 保留规则（重复时选择）

从重复组中选择**最能直接反映刺激源本身**的那一个：
- 优先保留描述刺激源本身的（客体）
- 其次保留最具体、最精准的

## 输出（JSON）
{
  "去重分析": [{"重复组": [2, 3], "重复原因": "两者都在描述同一个刺激源：[具体说明]", "保留编号": 2, "保留理由": "[原因]"}],
  "保留的候选编号列表": [1, 2]
}
```

### Step 4: 三维度评分

**Prompt**:
```
# 任务：评估灵感点

## 待评分的灵感点
{points_text}

## 评分标准

对每个灵感点从三个维度评分（每个维度1-10分）：

### 1. 人设契合度（默认先都给5分）
- 因没有历史视频信息无法推算人设，先都给5分

### 2. 触发可能性（1-10分）
- 评估这个刺激点触发创作的可能性有多大
- 考虑刺激点的吸引力强度
- 考虑创作者遇到这个刺激时产生创作冲动的概率

### 3. 内容解释力（1-10分）
- 评估这个刺激点能否解释视频的核心内容
- 判断从这个刺激点能否推导出视频的主要内容
- 考虑刺激点与视频内容的关联强度

**总分 = 人设契合度 + 触发可能性 + 内容解释力（范围：3-30分）**

## 评分原则
- 客观评分，不要预设分数高低
- 如果与视频内容不符，触发可能性也会很低
- 如果是视频核心特征，触发可能性反而很高

## 输出格式（JSON）
{
  "评分结果列表": [
    {
      "候选编号": 1,
      "人设契合度": 8,
      "触发可能性": 7,
      "内容解释力": 9,
      "总分": 24,
      "评分说明": "详细说明评分理由：为什么这个刺激点符合人设、触发创作的可能性如何、能否解释视频内容"
    }
  ]
}
```

### Step 5: 排序筛选
- 按总分降序排序，筛选总分>=15分的灵感点，最多保留2个

### Step 6: 组装最终输出
- 从原始候选点中提取完整字段，合并验证信息和评分信息

**输出**: `inspiration_points` (列表格式)

---

## 节点3: 目的点提取

**功能**: 从创作者视角分析创作目的和动机

**Prompt**:
```
# 任务：提取创作目的（视频逐帧分析）

## 视频内容
请对视频进行逐帧或关键帧分析。

**重要**：你需要对视频进行逐帧或关键帧分析，捕捉以下维度的信息：
- **画面内容**：场景、物体、人物、环境等视觉元素
- **动作变化**：人物的动作、物体的运动、场景的转换
- **时间线索**：视频的时间顺序、节奏变化、关键时间点
- **视觉细节**：颜色、光影、构图、视觉焦点等
- **音频信息**（如有）：对话、音效、背景音乐等

## 分析步骤
1. **逐帧分析**：观察视频的每一帧或关键帧，理解视频的整体内容和结构
2. **识别意图**：从视频的画面、动作、场景、对话等维度，推断创作者想让受众产生什么反应/影响（Why）
3. **维度归类**：从标准分类体系中选择最匹配的维度（优先二级分类）
4. **提炼目的点**：在维度下提炼具体目标（≤15字，聚焦最终效果，不写手段）

## 重要约束
- **每个二级分类最多1个目的点**（例如不能同时有2个"记录"维度的目的点）
- **宁缺毋滥**：如果某个维度的目的不明确，不要强行生成
- **总数控制**：最终输出1-3个目的点，不要为了凑数而硬造
- **证据支撑**：每个目的点都必须有足够的视频内容支撑，不能臆测
- **基于视频**：所有目的点必须基于视频的实际内容，不能凭空想象

## 输出格式（JSON）
{
    "目的点列表": [
        {
            "维度": {
                "一级分类": "",
                "二级分类": ""
            },
            "目的点": "",
            "描述": "",
            "推理": "说明基于视频的哪些画面/动作/场景/对话等线索，推导出创作者的这个目的"
        }
    ]
}
```

**输出**: `purpose_point` (包含perspective, purposes, total_count)

---

## 节点4: 关键点提取

**功能**: 从消费者视角提取核心吸引点

**执行流程**: 5步提取流程

### Step 1: 识别候选关键点

**Prompt**:
```
# 任务：识别候选关键点（视频逐帧分析，扁平化列表）

## 视频内容
请对视频进行逐帧或关键帧分析。

**重要**：你需要对视频进行逐帧或关键帧分析，从以下维度捕捉吸引点：
- **画面内容**：场景、物体、人物、环境等视觉元素中的吸引点
- **动作变化**：人物的动作、物体的运动、场景的转换等动态吸引点
- **时间线索**：视频的时间顺序、节奏变化、关键时间点等时序吸引点
- **视觉细节**：颜色、光影、构图、视觉焦点等视觉吸引点
- **音频信息**（如有）：对话、音效、背景音乐等听觉吸引点

## 字段定义

### 维度大类
只能是"形式"或"实质"

### 维度细分
- 形式类：只能是"风格"或"关系"
- 实质类：只能是"元素"或"分类"

### 关键点
≤15字核心发现（只写"是什么"，不写"如何呈现"）

### 描述
- **本质**: 讲清楚这个关键点是什么（吸引点的具体特征、形态、内容等客观信息）
- **内容要求**:
  - 描述吸引点本身的客观特征
  - 说明这个吸引点的完整上下文
  - 让读者能清晰理解"这个关键点到底是什么"
- **严格禁止**:
  - 不解释为什么吸引
  - 不进行价值判断和主观评价
  - 不分析效果和影响

## 维度分类要求（二级分类体系）

**维度大类：形式**
- **风格**：关注内容的整体呈现方式、结构、格式等外在特征
- **关系**：关注内容中各个实质要素之间的关联、逻辑关系

**维度大类：实质**
- **元素**：关注内容中的具体实体、对象、要素等
- **分类**：关注对具体元素的抽象、总结、归纳

## 输出（JSON）
{
  "候选关键点列表": [
    {
      "候选编号": 1,
      "维度大类": "形式|实质",
      "维度细分": "风格|关系|元素|分类",
      "关键点": "核心发现",
      "描述": "充分说明"
    }
  ]
}

要求：
- 广泛收集：从视频的各个维度（画面、动作、场景、对话等）广泛收集吸引点
- 客观陈述：只陈述事实，不做主观判断
- 严格按照二级维度体系归类：必须明确标注维度大类（形式/实质）和维度细分（风格/关系/元素/分类）
- 编号连续：候选编号从1开始连续编号
- 基于视频：所有关键点必须基于视频的实际内容，不能凭空想象

注意：此步骤输出扁平化列表，后续会构建层级关系
```

### Step 2: 第一轮去重（与灵感点、目的点去重）
- 移除与灵感点/目的点重复的关键点

### Step 3: 第二轮去重（关键点之间去重）
- 移除本质相同的关键点，只保留一个

### Step 4: 构建层级关系

**Prompt**:
```
# 任务：构建关键点层级关系

## 关键点列表（扁平化）
{points_text}

## 层级判断标准

**层级关系定义**：
- **大类 → 小类**：一个关键点是另一个关键点的具体类别
- **抽象 → 具体**：一个关键点是另一个关键点的具体表现
- **整体 → 局部**：一个关键点是另一个关键点的组成部分

**判断方法**：
1. 识别父子关系：子关键点是父关键点的细分、具体化或局部
2. 构建树形结构：父节点可以有多个子节点，子节点也可以继续有子节点
3. 确保无循环：不能出现A→B→A的情况

**层级原则**：
- 同一层级的关键点应该是并列关系（不存在包含、细分关系）
- 不同层级的关键点应该是从属关系（父→子）
- 一级关键点（根节点）应该是最抽象、最整体的关键点
- 如果两个关键点没有明确的层级关系，则保持在同一层级

## 输出（JSON）
{
  "层级分析": [
    {
      "父编号": 1,
      "子编号列表": [2, 3],
      "层级关系": "大类→小类|抽象→具体|整体→局部",
      "关系说明": "说明为什么存在这个层级关系",
      "子节点原因": {
        "2": "说明编号2作为子节点的具体原因",
        "3": "说明编号3作为子节点的具体原因"
      }
    }
  ],
  "一级关键点编号列表": [1, 4, 5]
}
```

### Step 5: 组装最终输出
- 构建树形结构的关键点列表

**输出**: `key_points` (包含key_points树形列表, total_count, root_count)

---

## 节点5: 选题理解

**功能**: 整合视频内容和三点分析结果，理解选题策略

**Prompt**:
```
# 输入数据

## 视频内容 
请对视频进行逐帧或关键帧分析。

**重要**：你需要对视频进行逐帧或关键帧分析，从以下维度理解视频内容：
- **画面内容**：场景、物体、人物、环境等视觉元素
- **动作变化**：人物的动作、物体的运动、场景的转换
- **时间线索**：视频的时间顺序、节奏变化、关键时间点
- **视觉细节**：颜色、光影、构图、视觉焦点等
- **音频信息**（如有）：对话、音效、背景音乐等

基于视频的实际内容，结合以下三点分析结果，理解选题策略。

## 灵感点分析
{inspiration_section}

## 目的点分析
{purpose_section}

## 关键点分析
{key_points_section}

---

# 执行指令

基于以上数据，输出选题策略分析。

## 质量要求
- **描述**: 必须是完整流畅的1-2句话，清晰展现完整逻辑链"灵感来源→关键手法→呈现效果→创作目的"
  - **必须包含目的点**: 明确说明创作者的目的，不能只描述内容本身
  - **必须体现三点内在关联**: 分析三点的有机融合逻辑，而非简单罗列
  - **基于视频内容**: 所有分析必须基于视频的实际内容，不能凭空想象
  - 拒绝笼统概念，要具体到本质特征
  - 删除非核心修饰词，只保留最本质的词
  - 禁用空洞词汇: "精心"、"独特"、"全面"、"旨在"、"充分"、"深度"、"夸张的"、"强烈的"、"明显的"

**重要提醒**：
- 不需要输出 `explicit_elements` 字段，系统会自动从三点数据中提取
- 所有分析必须基于视频的实际内容和三点分析结果
```

**输出**: `topic_selection_understanding` (包含主题、描述、覆盖情况、explicit_elements)

---

## 节点6: 段落划分

**功能**: 分析视频的分段结构，理解创作者如何组织内容

**Prompt**:
```
# 任务

从**创作者视角**分析这个视频是如何组织内容的。

## Section切分流程

**第一步：识别主题显著变化位置**
扫描整个视频,识别**主题发生显著变化**的位置:

- **判断标准**:
  * 语义跃迁: 讨论对象发生根本性改变
  * 逻辑转换: 从"是什么"转向"为什么"或"怎么办"
  * 功能变化: 从"问题陈述"转向"解决方案"
  * 场景切换: 画面、场景、动作发生明显变化
  * 对话转换: 话题、语气、情绪发生明显变化

- **划分原则**:
  * 避免过度细分(每个小变化都成为顶层段落)
  * 避免过度粗放(将所有内容合并为1个顶层段落)
  * 以"主题板块"而非"内容单元"为划分粒度

**第二步：初步划分**
- 基于主题显著变化位置进行划分
- 支持主Section和子Section的层级结构
- 需要对视频进行逐帧或关键帧分析，捕捉画面、动作、场景、对话等维度的结构变化

**第三步：顺序验证与反思**
- 检查每个Section内的视频片段是否保持时间顺序的连续性
- 验证同一Section内的内容是否有语义关联
- 确认段落之间的过渡是否自然合理

## 层级要求

**段落必须至少保留2层结构**：
1. **第1层（抽象层）**：从具象中聚合出的共性维度
2. **第2层（具象层）**：具体的内容细节

**层级关系说明**：
- 抽象层是对多个具象内容的归纳和提炼
- 具象层是抽象层的具体展开
- 每个抽象层下必须有至少1个具象层子项

### 整体情绪价值（Emotion Value）
**内容背后的情绪钩子或社会价值**。仅在有明显的升维价值时提取（如：民族自信、致青春、趋吉避凶、鞠躬尽瘁），否则留空。
** 输出案例： "致青春", "友谊长存", "猎奇", "颠覆认知"等 6字以内的词语，可输出多个，用逗号分隔**

## Section字段

- 描述: 段落描述（共性维度名称；具体内容概括）
- 内容范围: **列表格式，包含具体视频片段**
  - 格式：["0:00-0:30", "0:30-1:15"] 或 ["片段1: 开场介绍", "片段2: 问题阐述"]
  - 要求：必须包含具体的时间戳范围或视频片段描述，清晰标识该Section涵盖的视频内容
- 推理依据: 为什么这样划分
- 子项: 子Section列表（树状结构）

# 输出（JSON）- 树状结构

{
  "内容品类": "内容品类",
  "整体情绪分析": ["整体情绪分析1(6个字以内)", "整体情绪分析2(6个字以内)"],
  "段落衔接机制": [
    {
      "from": "段落1",
      "to": "段落2",
      "衔接方式": "如何过渡到下一个段落",
      "衔接语/画面特征": "衔接语或画面特征",
      "设计意图": "设计意图"
    }
  ],
  "段落列表": [
    {
      "描述": "共性维度名称",
      "内容范围": ["0:00-0:30", "0:30-1:15"],
      "推理依据": "为什么这样划分这个抽象层",
      "子项": [
        {
          "描述": "具体内容概括",
          "内容范围": ["0:00-0:30"],
          "推理依据": "这个具象内容如何支撑上层抽象",
          "子项": []
        }
      ]
    }
  ]
}
```

**输出**: `内容品类`, `段落列表` (树状结构)

---

## 节点7: 实质提取

**功能**: 从视频内容中提取实质元素（具体元素、具象概念、抽象概念）

**执行流程**: 8步提取流程

### Step 1: 提取具体元素

**Prompt**:
```
# 任务
从视频中提取"具体元素"

# 核心定义

## 具体元素
- **定义**：
  -- 1.从视频画面中直接观察到的、可独立存在的**单一视觉实体对象**
  -- 2.视频的背景音乐、音效等非口播内容的声音
- **判断标准**：
  -- 1.可以指着画面说"这是一个X"（单一、具体、可见的实体）
  -- 2.有背景音乐、音效等非口播内容的声音，直接用"背景音乐/音效声"作为名称即可，不要重复提取
- **示例**：
  -- 1.胡萝卜、青椒、西兰花（每个都是单独的实体）
  -- 2.背景音乐/音效声
- **禁止**：
  - 归类词（蔬菜、水果）
  - 概念性名词（食物、植物、人）
  - 文字内容（只关注视觉实体）

## 提取原则（仅针对画面中的视觉实体对象）
- 只从视频画面中提取，不关注文字
- 每个元素必须是单一的、具体的视觉实体
- 使用"剥离测试"：去掉表达方式后，这个实体仍然存在

# 命名规范
- 原子性：单一原子名词，不可再拆分
- 名词性：纯名词，严禁形容词、动词、副词
- 具体性：直接指向可观察的实体

# 输出json结构
[
    {
      "id": "从1开始的自增序列",
      "名称": "单一原子名词",
      "描述": "说明这个元素是什么，外观特征",
      "维度": {"一级": "实质", "二级": "具体元素"},
      "来源": ["视频画面"],
      "推理": "为什么识别这个具体元素"
    }
]
```

### Step 2: 提取具象概念

**Prompt**:
```
# 任务
从视频中提取"具象概念"

# 核心定义
## 具象概念
- **定义**：视频画面内的文字或者口播内容中明确提到的完整名词

## 排除的名称（来自第一步，仅用于排除）
**禁止提取的名称**：{element_names_text}

## 判断标准
- **视频画面内的文字或者口播内容**中实际出现的**完整名词**
- **不能是视频画面中出现的元素的名称等归类词**
- 去掉表达方式后，这个概念仍然存在

# 约束
- 禁止通过语义推导、联想、理解得出的名词
- **禁止归类词（蔬菜、水果、人等）**
- **禁止使用第一步中已提取的具体元素名称**
- 禁止拆分复合词
- 禁止提取形容词、动词
- 禁止提取谓语、定语、状语、补语
- 禁止提取副词

## 提取原则
- **词语完整性**：必须提取完整的**名词**，不允许拆分复合词
- **严格约束**：必须是**画面文字或者口播内容中实际出现**的完整名词
- **严格的名词验证**（必须同时满足以下两个条件）：
   - 条件1：词性是名词（词典意义上的名词）
   - 条件2：在当前上下文中作为名词使用（语境判断）

   **验证方法**：
   - 找到该词在视频画面内的文字或者口播内容中的具体位置
   - 分析该词在句子中的语法成分和实际作用
   - 判断：该词是否在这个语境中充当"事物/对象/概念"的角色？

# 输出json结构
[
    {
      "id": "从1开始的自增序列",
      "名称": "字面原词(完整名词)",
      "描述": "说明这个概念是什么",
      "维度": {"一级": "实质", "二级": "具象概念"},
      "来源": "HH:MM:SS",
      "上下文验证": {
        "原文位置": "该词在原视频画面内的文字或者口播内容中的具体句子",
        "语法成分": "该词在句子中的语法成分（主语/宾语/定语中心语等）",
        "语境判断": "说明该词在此语境中确实作为名词使用的理由"
      },
      "推理": "为什么这个名词被认为是具象概念"
    }
]
```

### Step 3: 总结抽象概念

**Prompt**:
```
# 任务
基于已提取的具体元素和具象概念，总结新的"抽象概念"

# 已提取的具体元素
{elements_text}

# 已提取的具象概念
{concepts_text}

# 核心定义

# 定义与分类
**抽象概念**分两类：

**类型1-上位抽象**：对具体元素/具象概念的归类
**类型2-引申含义**：具体元素/具象概念无法直接表达的深层含义

# 提取原则
- 对具体元素/具象概念的归类
- 具体元素和具象概念无法直接表达的深层含义
- 基于归纳：基于已提取的具体元素/具象概念
- 来源追溯：准确标明所有来源ID（具体元素ID、具象概念ID），必须完整可追溯

# 命名规范
- 有完整独立语义的概念
- 单一原子名词，不可拆分
- 纯名词，禁止形容词、动词、副词
- 精准描述概念，不做修饰

# 判断标准
- 去掉表达方式后，概念仍存在

# 输出json结构
[
    {
      "id": "从1开始的自增序列",
      "名称": "单一名词或短语",
      "描述": "说明这个抽象概念是什么",
      "维度": {"一级": "实质", "二级": "抽象概念"},
      "类型": "上位抽象 | 引申含义",
        "来源": {
        "具体元素": [{"id":"具体元素-X", "名称":"具体元素-X的名称"}, {"id":"具体元素-Y", "名称":"具体元素-Y的名称"}],
        "具象概念": [{"id":"具象概念-A", "名称":"具象概念-A的名称"}, {"id":"具象概念-B", "名称":"具象概念-B的名称"}]
      },
      "推理过程": "明确说明如何从上述来源（具体哪些元素ID和概念ID）推导出这个抽象概念",
    }
]
```

### Step 4: 共性分析
- 统计每个实质元素在视频中的出现频次和段落覆盖率

### Step 5: 多维度评分
- 已废弃相似度计算逻辑，仅返回空结果

### Step 5.1: 意图支撑评估
- 评估实质元素对灵感点/目的点/关键点的支撑关系（基于视频画面和文字语境）

### Step 6: 筛选
- 筛选条件：出现频次>1 且 有意图支撑关系 且 段落覆盖率>30%（声音类型元素豁免）

### Step 7: 分类
- 按二级维度（具体元素/具象概念/抽象概念）分别进行分类

### Step 8: 合并信息
- 合并所有中间信息到最终元素

**输出**: `substance_final_elements` (列表格式)

---

## 节点8: 形式提取

**功能**: 从视频内容中提取形式元素（具象概念形式、具体元素形式、整体形式）

**执行流程**: 8步提取流程

### Step 1: 提取具象概念形式

**Prompt**:
```
# 任务
从视频中提取"具象概念形式"元素（关注画面中的文字呈现方式和口播表达方式）

# 已提取的具象概念（供参考，不允许从中直接抄写内容）
{concepts_text}

# 核心定义

## 具象概念形式
- 定义：对具象概念的描述、修饰、表达方式（包括画面文字呈现方式 + 口播表达方式）
- 特征：表达方式本身，而不是概念内容
- 包含：
  - 对概念的强调方式（如：反复重复、放大字号、加重语气）
  - 画面文字呈现方式（如：字体、颜色、大小、位置、动画等）
  - 口播语气特性（如：教学口吻、科普式表达、聊天式口吻、语气特征、语速、停顿等）
  - 口播内容的修饰手法（如：夸张、比喻、反问、排比）
  - 口播内容的叙述方式（如：第一人称、第二人称、对话体）
  - 口播内容的节奏特征（如：语速快慢、停顿设计、重音、语气变化等）

## 提取原则
1. 只提取画面文字展示方式和口播表达方式，不涉及视觉呈现
2. 必须依附于已提取的具象概念
3. 使用"剥离测试"：去掉表达手法后，概念本身仍存在
4. **原子化命名**：形式名称必须是最原子的，不包含实质内容
5. **建立关联关系**：通过"支撑"字段建立形式与实质的关联边
6. **段落级别**：形式作用域至少是整个段落，不能仅针对单句

## 作用域约束（重要）
1. **段落级别作用域**（核心约束）：
   - 形式的作用域至少是**整个段落级别**，不能仅针对段落中的某一句话
   - 必须是该段落的整体画面文字呈现方式和口播表达方式，而非局部单句的特征
2. **同段落作用域**：形式必须与其支撑的具象概念在同一段落中
3. **事实对应关系**：形式对概念的支撑必须在视频中有明确的对应关系
   - 不能仅凭推测建立支撑关系，必须实际看到这种支撑

# 输出json结构
[
  {
    "id": "从1开始的自增序列",
    "名称": "单一名词或短语（必须是原子化的形式名称）",
    "描述": "说明形式的本质是什么，以及在视频中的具体定义",
    "维度": {"一级": "形式", "二级": "具象概念形式"},
    "支撑": [{"id":"具象概念id", "名称":"具象概念名称"}],
    "推理": "在文字中的具体体现方式（引用视频中的说法或呈现方式）",
    "段落来源": ["段落ID1", "段落ID2"]
  }
]
```

### Step 2: 提取具体元素形式

**Prompt**:
```
# 任务
从视频中提取"具体元素形式"元素

# 已提取的具体元素
{elements_text}

# 已提取的具象概念
{concepts_text}

# 核心定义

## 具体元素形式
- **定义**：视觉画面的形式，支撑具体元素、具象概念的视觉呈现以及背景音乐、音效等非口播内容的声音呈现方式
- **特征**：图像的视觉表现手法、外观特征或者背景音乐和音效的类别、风格、节奏等
- **范围**：构图、色彩、光影、质感、视觉技巧等图片层面的特征或者声音方面的特征
- **重要**：不关注画面里的文字以及口播内容说了什么，只关注视觉呈现以及声音呈现方式

## 提取原则
1. **视觉性**：必须是画面层面或者背景音乐音效层面的形式，而非文字层面或者口播内容层面
2. **边界明确**：不关注画面里的文字以及口播内容，只关注视觉呈现手法或者声音呈现方式
3. **支撑性**：可以支撑具体元素，也可以支撑具象概念
4. **语义完整性**：必须提取具有完整独立语义的形式特征
5. 使用"剥离测试"：去掉表达方式后，元素本身仍存在
6. **段落级别**：形式作用域至少是整个段落，不能仅针对单个元素

## 作用域约束（重要）
1. **段落级别作用域**（核心约束）：
   - 形式的作用域至少是**整个段落级别**，不能仅针对段落中的某一句话
   - 必须是该段落的整体呈现方式，而非局部单个元素的特征
2. **同段落作用域**：形式必须与其支撑的实质元素/概念在同一段落中
3. **事实对应关系**：形式对实质的支撑必须在视频中有明确的视觉对应关系
   - 不能仅凭推测建立支撑关系，必须在画面中实际看到这种支撑

# 命名与关联分离原则（重要）

## 核心规则
- **名称**：只描述形式手法本身（纯形式词汇）
- **支撑**：说明这个形式手法应用在哪些实质内容上（通过id关联具体元素/具象概念）
- **推理**：说明具体如何体现（在图像中的呈现细节或者声音方面的呈现方式）
- **段落来源**：记录形式来自哪个段落

## 关键要求
1. **名称的纯粹性**：名称中不能包含任何实质内容（具体元素名称、具象概念名称等）
2. **通过支撑建立关联**：实质内容通过"支撑"字段的id关联，而非写在名称中
3. **推理的具体性**：在推理中详细说明这个形式手法如何应用在支撑的实质内容上
4. **来源的准确性**：图片来源和段落来源必须与支撑的实质元素/概念一致

# 输出json结构
[
    {
      "id": "从1开始的自增序列",
      "名称": "单一名词或短语（必须是原子化的纯形式词汇）",
      "描述": "说明形式的本质及在帖子中的具体定义",
      "维度": {"一级": "形式", "二级": "具体元素形式"},
      "支撑": {
        "具体元素": [{"id":"元素id", "名称":"元素名称"}],
        "具象概念": [{"id":"概念id", "名称":"概念名称"}]
      },
      "推理": "在画面中或者声音方面的具体体现（说明这个形式手法如何应用在支撑的实质内容上）",
      "段落来源": ["段落ID1", "段落ID2"]
    }
]
```

### Step 3: 提取整体形式

**Prompt**:
```
# 任务
从视频中提取"整体形式"元素

# 已提取的具体元素
{elements_text}

# 已提取的具象概念
{concepts_text}

# 已提取的抽象概念
{abstracts_text}

# 核心定义

## 整体形式
- 定义：多模态内容的组合方式、结构特征、整体呈现策略
- 特点：不针对单个元素/概念，而是整体组织方式

## 提取原则
1. 整体性：必须是整体层面的特征，不是局部细节
2. 形式性：使用"剥离测试" - 去掉表达方式后内容失去结构
3. 可命名性：能用简洁的名词/短语概括
4. 避免重复：与具体元素形式、具象概念形式区分开
7. **宏观层面**：作用范围至少是整个段落或多段落，不能是单句或局部内容

## 作用域约束（重要）
1. **段落级别作用域**（核心约束）：
   - 形式的作用域至少是**整个段落级别**，不能仅针对段落中的局部内容
   - 整体形式通常作用于整个帖子或多个段落，必须是宏观层面的特征
2. **支撑关系**：整体形式支撑特定实质元素时，必须记录这些元素所在的段落
3. **来源标注**：标注整体形式主要体现在哪些段落中

## 常见维度参考（不限于此）
- 多模态组合：画面+口播+字幕的配比、关系、时序、模态切换
- 结构方式：内容组织逻辑（并列/递进/对比/因果/总分/时间/空间顺序等）
- 呈现策略：整体表达风格（教程式/故事式/问答式/列表式/对话式等）
- 节奏控制：信息密度、镜头节奏、高潮设计
- 视角设计：叙述视角（第一人称/第二人称/第三人称）
- 互动方式：对观众的提问、召回、引导

# 输出json结构
[
  {
    "id": "从1开始的自增序列",
    "名称": "单一名词或短语（简洁准确）",
    "描述": "说明形式的本质是什么，以及在视频中的具体定义",
    "维度": {"一级": "形式", "二级": "整体形式"},
    "支撑": {
      "具体元素": [{"id":"元素id1", "名称":"元素名称1"}, {"id":"元素id2", "名称":"元素名称2"}],
      "具象概念": [{"id":"概念id1", "名称":"概念名称1"}, {"id":"概念id2", "名称":"概念名称2"}]
    },
    "推理": "在视频中的具体体现（结合镜头、节奏、结构说明）",
    "段落来源": ["段落ID1", "段落ID2"]
  }
]
```

### Step 4: 共性分析
- 统计每个形式元素在视频中的出现频次

### Step 5: 支撑判断
- 评估形式元素对灵感点/目的点/关键点的支撑关系（按维度分别评估）

### Step 6: 权重计算
- 纯代码实现，不调用LLM。动态自适应权重策略（总分100分）：共性维度50分（频次40% + 覆盖段落数30% + 覆盖率30%）+ 支撑维度50分（灵感点20分 + 目的点15分 + 关键点15分）

### Step 7: 筛选
- 筛选条件：权重分>=40

### Step 8: 分类
- 按二级维度（具象概念形式/具体元素形式/整体形式）分别进行分类

**输出**: `form_final_elements` (列表格式)

---

## 节点9: 分离结果

**功能**: 将实质和形式结果分离到独立字段

**执行过程**: 
- 从state中获取`substance_final_elements`和`form_final_elements`
- 分别存储到`实质列表`和`形式列表`字段

**输出**: `实质列表`, `形式列表`

---

## 节点10: 结果汇总

**功能**: 将所有解构结果汇总为最终的JSON结构

**执行过程**: 
- 提取视频信息（URL、标题、正文）
- 汇总三点解构结果（灵感点、目的点、关键点）
- 汇总选题理解结果
- 汇总脚本理解结果（内容品类、段落列表、实质列表、形式列表）
- 验证JSON格式

**输出**: `final_result` (包含视频信息、三点解构、选题理解、脚本理解)

---

## 总结

整个解码工作流通过10个节点完成视频的全面分析：
1. **视频上传**: 下载并上传视频到Gemini
2. **三点解构**: 提取灵感点、目的点、关键点
3. **选题理解**: 整合三点分析结果，理解选题策略
4. **脚本理解**: 段落划分、实质提取、形式提取
5. **结果汇总**: 将所有结果组装为最终JSON结构

每个节点都基于视频逐帧分析，确保提取的信息准确且全面。

