# 灵感点提取Agent

## 总结

该 Agent 通过6个步骤完成灵感点提取：
1. **识别候选灵感点**：通过视频逐帧分析识别候选灵感点（使用 LLM + 视频分析）
2. **逆向推导验证**：验证候选灵感点能否推导出整个视频内容（使用 LLM + 视频分析）
3. **去重检查**：移除本质相同的灵感点（使用 LLM）
4. **三维度评分**：对灵感点进行人设契合度、触发可能性、内容解释力三维评分（使用 LLM + 视频分析）
5. **排序筛选**：按分数筛选，最多保留2个高质量灵感点（纯代码逻辑）
6. **组装最终输出**：将完整信息组装成最终格式（纯代码逻辑）

## 系统提示词（System Prompt）

```
你是创作灵感分析专家，从创作者视角逆向推导触发创作的深层刺激源。

# 灵感点定义（核心概念）
**灵感点** = 创作前的触发源（让创作者产生创作冲动的刺激）
- 区分：灵感点（触发源）≠ 目的点（动机）≠ 关键点（吸引点）
- 验证：能否从这个灵感点推导出整个视频内容

# 核心原则（所有分析遵循）
- 透过表面内容挖掘深层心理动机、行为模式、价值观冲突
- 灵感点可以来自视频的任何部分，包括画面、动作、场景、对话等
- 需要对视频进行逐帧或关键帧分析，捕捉动态变化和细节
```

## 执行步骤

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

通过视频逐帧分析识别候选灵感点，按三种来源分类：全新内容、共性差异、共性内容。

**Prompt**:

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

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

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

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

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

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

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

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

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

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

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

## 灵感点识别策略（基于视频内容特征分类）

### 1. 全新内容灵感点
- 特征：视频中出现的全新刺激源，与视频其他部分或常见模式完全不同
- 搜索方向：视频中哪些画面/动作/场景/对话是全新的、独特的、首次出现的
- 分析重点：关注视频中的创新点、独特元素、异常场景

### 2. 共性差异灵感点
- 特征：视频中基于某种常见模式但有新变化的刺激源
- 搜索方向：在视频中，哪些内容基于常见模式但有创新/变化/新角度
- 额外字段：基于哪个共性、具体差异
- 分析重点：关注视频中的变化点、创新点、差异化元素

### 3. 共性内容灵感点
- 特征：视频中符合常见模式或重复出现的刺激源
- 搜索方向：视频中哪些内容符合常见模式、重复出现、形成规律
- 额外字段：基于哪个共性
- 分析重点：关注视频中的规律性、重复性、模式化内容

## 输出格式（JSON）
{
  "候选灵感点列表": {
    "全新内容": [
      {
        "候选编号": 1,
        "分类": "...",
        "灵感点": "...",
        "描述": "...",
        "推理": "..."
      }
    ],
    "共性差异": [
      {
        "候选编号": 2,
        "分类": "...",
        "灵感点": "...",
        "描述": "...",
        "基于哪个共性": "...",
        "具体差异": "...",
        "推理": "..."
      }
    ],
    "共性内容": [
      {
        "候选编号": 3,
        "分类": "...",
        "灵感点": "...",
        "描述": "...",
        "基于哪个共性": "...",
        "推理": "..."
      }
    ]
  }
}

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

**三个类别必须互斥**（判断优先级）：
1. 视频中全新、独特的元素 → 全新内容
2. 基于常见模式但有明显变化 → 共性差异
3. 完全符合常见模式或重复出现 → 共性内容
```

---

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

验证每个候选灵感点是否能够推导出整个视频内容，只保留验证通过的灵感点。

**Prompt**:

```
# 任务：逆向推导验证

## 当前视频
请对视频进行逐帧或关键帧分析。
[视频文本信息：标题、正文等]

## 候选灵感点
[候选灵感点列表：包含候选编号、分类、灵感点]

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

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

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

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

**格式说明**：
- 候选编号：整数，对应上面的候选灵感点编号（1, 2, 3...）
- 验证结果：布尔值（true或false）
- 推导说明：能否从这个灵感点推导出视频内容的详细说明

**重要**：只输出编号、验证结果和推导说明，不需要复制其他字段
```

---

### Step 3: 去重检查

识别并移除本质相同的灵感点，每组重复的灵感点只保留最能直接反映刺激源本身的那一个。

**Prompt**:

```
# 任务：灵感点去重

## 候选灵感点列表
[候选灵感点列表，包含候选编号、灵感点、描述]

## 核心判断标准

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

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

## 判断方法

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

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

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

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

## 原则

- 宁可过度去重，不遗漏重复
- 抓住本质，忽略表面差异
- 不确定时 → 判定重复 → 去重
```

---

### Step 4: 三维度评分

对每个灵感点从三个维度评分（每个维度1-10分）：人设契合度、触发可能性、内容解释力。总分范围：3-30分。

**Prompt**:

```
# 任务：评估灵感点

## 待评分的灵感点
[待评分的灵感点列表，包含候选编号、分类、灵感点、描述]

## 评分标准

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

### 1. 人设契合度（1-10分）
- 评估这个刺激点是否符合创作者的人设特征
- 从视频内容推断创作者的兴趣、价值观、情感模式、行为习惯
- 判断这个刺激点与人设的匹配程度

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

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

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

## 评分原则
- 客观评分，不要因分类（全新/共性差异/共性）而预设分数高低
- 全新内容：如果与视频内容不符，触发可能性也会很低
- 共性内容：如果是视频核心特征，触发可能性反而很高

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

**要求**：
- 候选编号：整数，对应待评分灵感点的编号
- 人设契合度、触发可能性、内容解释力：1-10的整数
- 总分：3-30的整数（三个评分之和）
- 评分说明：详细说明评分理由
- 只输出编号和评分信息，不需要复制其他字段
```

---

### Step 5: 排序筛选

按总分排序并筛选，优先保留总分 >= 15分的灵感点，如果3个类目都没有达标的则保底保留全局最高分的1个，最终输出最多2个高质量灵感点。

---

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

将完整信息组装成最终格式，包括从原始候选点提取的字段、验证结果中的推导说明、评分信息等。

---

## 输出格式

最终输出结构：

```json
{
  "inspiration_points": {
    "全新内容": [
      {
        "候选编号": 1,
        "分类": "...",
        "灵感点": "...",
        "描述": "...",
        "推理": "...",
        "推导说明": "...",
        "scoring": {
          "人设契合度": 8,
          "触发可能性": 7,
          "内容解释力": 9,
          "总分": 24,
          "评分说明": "..."
        }
      }
    ],
    "共性差异": [...],
    "共性内容": [...]
  },
  "metadata": {
    "total_count": 2,
    "perspective": "创作者视角",
    "analysis_mode": "视频逐帧分析",
    "process_summary": {
      "candidate_count": 10,
      "verified_count": 8,
      "deduplicated_count": 6,
      "scored_count": 6,
      "filtered_count": 2,
      "final_count": 2,
      "category_counts": {
        "全新内容": 1,
        "共性差异": 1,
        "共性内容": 0
      }
    }
  }
}
```

---

## 配置常量

- `MIN_QUALITY_SCORE = 15`: 最低质量分数阈值（总分3-30）
- `HISTORICAL_POSTS_BATCH_SIZE = 5`: 每批处理的历史帖子数量（当前未使用）

---
