# 关键点提取Agent

## 总结

该 Agent 通过5个步骤完成关键点提取：
1. **识别候选关键点**：基于视频逐帧分析识别候选关键点（使用 LLM + 视频分析）
2. **第一轮去重**：与灵感点、目的点去重（使用 LLM）
3. **第二轮去重**：关键点之间去重（使用 LLM）
4. **构建层级关系**：将扁平关键点组织成树形结构（使用 LLM）
5. **组装最终输出**：组装最终输出（纯代码逻辑）

## 系统提示词（System Prompt）

```
你是内容分析专家，从消费者视角提取核心吸引点。

# 关键点定义
消费者视角下能够引起关注的核心要素

# 维度定义（有限集合 - 二级分类）
关键点必须归属于以下维度体系：

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

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

# 关键点层级关系
关键点之间存在层级关系，形成树形结构：
- **层级判断标准**：
  - 大类 → 小类
  - 抽象 → 具体
  - 整体 → 局部
- **层级表达**：一级关键点 → 二级关键点 → 三级关键点（支持多层嵌套）
- **层级原则**：子关键点是父关键点的细分、具体化或局部

# 核心原则
- 消费者视角：思考"什么吸引了消费者"
- 客观性：只陈述事实，不做主观判断
- 视频逐帧分析：需要对视频进行逐帧或关键帧分析，捕捉画面、动作、场景、对话等维度的吸引点
- 二级维度归类：必须明确标注维度大类（形式/实质）和维度细分（风格/关系/元素/分类）
- 关键点精准：不超过15个字，只写核心发现（不写如何呈现）
- 描述充分：详细解释关键点的含义和价值
- 层级清晰：识别关键点之间的层级关系，构建树形结构
```

## 执行步骤

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

基于视频逐帧分析从消费者视角识别所有可能的吸引点，输出扁平化列表。

**Prompt**:

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

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

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

## 字段定义

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

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

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

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

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

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

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

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

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

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

---

### Step 2: 第一轮去重（与灵感点、目的点去重）

移除与灵感点、目的点重复的关键点，确保关键点≠灵感点≠目的点。

**Prompt**:

```
# 任务：与灵感点、目的点去重

## 候选关键点
[候选关键点列表]

## 灵感点（创作触发源）
[灵感点列表]

## 目的点（创作目标）
[目的点列表]

## 去重规则

**核心原则**：关键点与灵感点/目的点重合 → 必须移除关键点

**判断方法**：
1. 角色检查：关键点应是"消费吸引点"，不应是"触发源"或"创作目标"
2. 语义去重：移除修饰词，提取核心概念对比 → 核心概念相同 → 移除关键点

**重要**：只要存在重合（角色错误或核心概念相同），就移除关键点

## 输出（JSON）
{
  "去重分析": [{"去重类型": "与灵感点去重|与目的点去重", "重复候选编号": 1, "重复原因": "说明"}],
  "保留的候选编号列表": [1, 2, 3]
}
```

---

### Step 3: 第二轮去重（关键点之间去重）

移除本质相同的关键点，每组重复的只保留最能直接反映吸引点的那一个。

**Prompt**:

```
# 任务：关键点之间去重

## 候选关键点
[候选关键点列表]

## 去重规则

**本质相同的定义**：
- 核心发现相同（描述同一个吸引点）
- 包含关系（一个是另一个的具体/一般化）
- 粒度不同（抽象层级不同，但指向同一吸引点）

**判断方法**：移除修饰词 → 提取核心发现 → 核心相同 = 本质相同 → 去重

**保留优先级**（本质相同时）：
1. 具体 > 一般
2. 精准 > 模糊
3. 原始 > 衍生
4. 本质 > 形式

## 输出（JSON）
{
  "去重分析": [{"重复组": [1, 5], "重复原因": "说明", "保留编号": 1, "保留理由": "说明"}],
  "保留的候选编号列表": [1, 2, 3]
}
```

---

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

将扁平化关键点组织成树形结构，识别关键点之间的层级关系（大类→小类、抽象→具体、整体→局部）。

**Prompt**:

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

## 关键点列表（扁平化）
[关键点列表]

## 层级判断标准

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

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

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

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

注意：
- "一级关键点编号列表"：列出所有一级关键点（根节点）的候选编号
- "层级分析"：描述所有父子关系，可以有多层嵌套
- "子节点原因"：为每个子节点说明为什么它是父节点的子节点（细分、具体化、局部的具体原因）
```

---

### Step 5: 组装最终输出

将关键点组装成最终格式，包括层级结构和所有字段。

