# 高消耗素材策略学习入库与周更方案

## 背景

自动投放账户近期跑量弱的问题,不能只从出价、预算、版位解释。人工账户在相近出价下可以起量,说明素材竞争力、创意差异化、创意数量和冷启动素材供给是核心变量之一。

当前已经完成最近 30 天高消耗素材 Top5000 拉取,并对 Top100 做了标题、视觉模板、风险标签和素材风格归纳。下一步不能只把这些结果放在本地文件里,否则每次分析都会丢上下文,也无法支撑后续每周自动更新、人工 review 和 AI 生成 prompt 的稳定迭代。

本方案目标是把“素材表现快照、图片结构化标注、可学习创意模式、人工审核结论”沉淀到数据库,让后续 AI 生成素材可以读取经过审核的策略,同时保留历史版本用于回溯。

## 设计原则

- 高消耗素材是学习样本,不是直接复制对象。
- 入库内容分为原始表现快照、结构化标注、策略模式三层,不要混在一张表里。
- 每周生成新的数据快照,历史快照不覆盖。
- 同一素材图片可以复用历史标注,避免重复下载和重复理解。
- 策略模式必须经过人工审核后才能进入生成链路。
- 生成素材时仍以承接视频内容为主,高消耗素材模式只提供标题钩子和视觉表达方法。
- 合规优先级高于 CTR。历史高消耗中出现的伪按钮、假界面、强诱导、政策承诺、医疗恐吓、涉政民族情绪等模式不能直接学习。

## 表设计

### material_performance_snapshot_run

记录每次素材表现数据拉取任务。

```sql
CREATE TABLE material_performance_snapshot_run (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  run_id VARCHAR(64) NOT NULL,
  window_start DATE NOT NULL,
  window_end DATE NOT NULL,
  top_n INT NOT NULL DEFAULT 5000,
  source VARCHAR(64) NOT NULL DEFAULT 'odps',
  sql_file VARCHAR(255) DEFAULT NULL,
  row_count INT NOT NULL DEFAULT 0,
  total_cost_fen BIGINT NOT NULL DEFAULT 0,
  status VARCHAR(32) NOT NULL DEFAULT 'SUCCESS',
  error_message TEXT DEFAULT NULL,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY uk_run_id (run_id),
  KEY idx_window (window_start, window_end)
);
```

### material_performance_snapshot_item

记录每次快照下的创意级表现。该表是事实快照,允许同一个 `creative_id` 在不同周重复出现。

```sql
CREATE TABLE material_performance_snapshot_item (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  run_id VARCHAR(64) NOT NULL,
  rank_no INT NOT NULL,
  account_id BIGINT NOT NULL,
  ad_id BIGINT NOT NULL,
  creative_id BIGINT NOT NULL,
  creative_name VARCHAR(255) DEFAULT NULL,
  ad_name VARCHAR(255) DEFAULT NULL,
  video_id BIGINT DEFAULT NULL,
  title VARCHAR(512) DEFAULT NULL,
  image_url VARCHAR(1024) DEFAULT NULL,
  image_hash VARCHAR(64) DEFAULT NULL,
  crowd_package VARCHAR(255) DEFAULT NULL,
  optimization_goal VARCHAR(128) DEFAULT NULL,
  bid_amount_fen BIGINT DEFAULT NULL,
  day_amount_fen BIGINT DEFAULT NULL,
  cost_fen BIGINT NOT NULL DEFAULT 0,
  impressions BIGINT NOT NULL DEFAULT 0,
  clicks BIGINT NOT NULL DEFAULT 0,
  ctr DECIMAL(10, 6) DEFAULT NULL,
  key_page_view_count BIGINT NOT NULL DEFAULT 0,
  key_page_rate DECIMAL(10, 6) DEFAULT NULL,
  conversions_count BIGINT NOT NULL DEFAULT 0,
  conversion_rate DECIMAL(10, 6) DEFAULT NULL,
  active_days INT NOT NULL DEFAULT 0,
  first_dt INT DEFAULT NULL,
  last_dt INT DEFAULT NULL,
  raw_json MEDIUMTEXT DEFAULT NULL,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY uk_run_creative (run_id, creative_id),
  KEY idx_creative (creative_id),
  KEY idx_image_hash (image_hash),
  KEY idx_video (video_id),
  KEY idx_package_cost (crowd_package, cost_fen)
);
```

### material_visual_annotation

记录素材图片的结构化理解结果。以 `image_hash + annotation_version` 做唯一键,同一图片后续可用更强模型重新标注,但不覆盖老结果。

```sql
CREATE TABLE material_visual_annotation (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  image_hash VARCHAR(64) NOT NULL,
  image_url VARCHAR(1024) NOT NULL,
  annotation_version VARCHAR(64) NOT NULL,
  annotator VARCHAR(64) NOT NULL,
  visual_template VARCHAR(128) DEFAULT NULL,
  hook_category VARCHAR(128) DEFAULT NULL,
  title_text VARCHAR(512) DEFAULT NULL,
  title_length INT DEFAULT NULL,
  scene_type VARCHAR(128) DEFAULT NULL,
  person_type VARCHAR(128) DEFAULT NULL,
  has_human TINYINT DEFAULT NULL,
  text_area_level VARCHAR(32) DEFAULT NULL,
  color_style VARCHAR(128) DEFAULT NULL,
  button_like_element TINYINT NOT NULL DEFAULT 0,
  fake_ui_risk TINYINT NOT NULL DEFAULT 0,
  official_policy_risk TINYINT NOT NULL DEFAULT 0,
  medical_health_risk TINYINT NOT NULL DEFAULT 0,
  politics_sensitive_risk TINYINT NOT NULL DEFAULT 0,
  celebrity_or_history_risk TINYINT NOT NULL DEFAULT 0,
  strong_inducement_risk TINYINT NOT NULL DEFAULT 0,
  greeting_blessing_risk TINYINT NOT NULL DEFAULT 0,
  compliance_level VARCHAR(32) NOT NULL DEFAULT 'caution',
  learnable_points TEXT DEFAULT NULL,
  avoid_points TEXT DEFAULT NULL,
  raw_annotation MEDIUMTEXT DEFAULT NULL,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY uk_image_version (image_hash, annotation_version),
  KEY idx_template (visual_template),
  KEY idx_compliance (compliance_level)
);
```

### material_creative_pattern

沉淀可用于 AI 生成素材的“模式”。这张表不是原始素材库,而是人工审核后的策略库。

```sql
CREATE TABLE material_creative_pattern (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  pattern_version VARCHAR(64) NOT NULL,
  pattern_key VARCHAR(128) NOT NULL,
  pattern_name VARCHAR(128) NOT NULL,
  hook_category VARCHAR(128) NOT NULL,
  visual_template VARCHAR(128) NOT NULL,
  applicable_crowd_packages VARCHAR(1024) DEFAULT NULL,
  applicable_placements VARCHAR(1024) DEFAULT NULL,
  target_age_min INT DEFAULT NULL,
  target_age_max INT DEFAULT NULL,
  title_hook_rule TEXT NOT NULL,
  visual_rule TEXT NOT NULL,
  relevance_rule TEXT NOT NULL,
  compliance_rule TEXT NOT NULL,
  positive_examples MEDIUMTEXT DEFAULT NULL,
  negative_examples MEDIUMTEXT DEFAULT NULL,
  source_run_id VARCHAR(64) DEFAULT NULL,
  source_material_count INT NOT NULL DEFAULT 0,
  source_total_cost_fen BIGINT NOT NULL DEFAULT 0,
  status VARCHAR(32) NOT NULL DEFAULT 'DRAFT',
  reviewed_by VARCHAR(64) DEFAULT NULL,
  reviewed_at DATETIME DEFAULT NULL,
  enabled TINYINT NOT NULL DEFAULT 0,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  UNIQUE KEY uk_version_key (pattern_version, pattern_key),
  KEY idx_status_enabled (status, enabled),
  KEY idx_hook_template (hook_category, visual_template)
);
```

### material_strategy_learning_report

保存每周自动生成的策略学习摘要,方便运营和研发复盘。

```sql
CREATE TABLE material_strategy_learning_report (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  report_id VARCHAR(64) NOT NULL,
  run_id VARCHAR(64) NOT NULL,
  report_version VARCHAR(64) NOT NULL,
  summary TEXT NOT NULL,
  top_patterns MEDIUMTEXT DEFAULT NULL,
  risk_summary MEDIUMTEXT DEFAULT NULL,
  recommended_actions MEDIUMTEXT DEFAULT NULL,
  report_path VARCHAR(512) DEFAULT NULL,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY uk_report_id (report_id),
  KEY idx_run_id (run_id)
);
```

## 每周更新流程

建议每周固定跑一次,例如每周一凌晨,窗口取最近 30 天,截至前一天。

1. 拉取最近 30 天 Top5000 高消耗素材,写入 `material_performance_snapshot_run` 和 `material_performance_snapshot_item`。
2. 对新出现的 `image_url` 下载图片并计算 `image_hash`。
3. 如果 `image_hash + annotation_version` 已存在,复用历史标注。
4. 如果不存在,进入图片结构化标注流程,写入 `material_visual_annotation`。
5. 基于本周 Top100/Top500 的标题、图片、消耗、CTR、关键页访问率生成策略候选。
6. 策略候选写入 `material_creative_pattern`,状态为 `DRAFT`。
7. 输出周报到 `material_strategy_learning_report`,同时落盘到 `outputs/data/material_analysis_YYYYMMDD/`。
8. 人工 review 后,将可用模式改为 `APPROVED` 并设置 `enabled=1`。
9. AI 生成素材主流程只读取 `enabled=1` 的 pattern。

## 更新与去重策略

### 表现快照

表现快照不更新旧数据。每周新增一个 `run_id`,这样可以追踪同一个素材从高消耗变为低消耗,或者从低消耗进入高消耗的变化。

### 图片标注

图片标注按 `image_hash + annotation_version` 去重。同一张图在多个账户、多个创意、多个周出现时,只需要标注一次。

当标注规则或多模态模型升级时,新建 `annotation_version`,不要覆盖旧版本。

### 策略模式

策略模式按 `pattern_version + pattern_key` 管理。新一周可以生成新的 `pattern_version`,也可以在人工确认后沿用上一版。

默认不自动替换线上启用策略。只有人工 review 后,才将新模式设为 `APPROVED/enabled=1`。

## 接入 AI 生成素材的方式

AI 生成素材时,读取策略模式只做三件事:

- 选择标题钩子规则,例如信息差、数字清单、时间锚点、家庭提醒。
- 选择视觉模板,例如大字封面、人物解释型、家庭讨论型、物品清单型。
- 加入合规避让规则,避免学习历史高消耗中的风险表达。

不能做的事:

- 不直接复用历史高消耗标题。
- 不直接复用历史素材图。
- 不用策略模式替代承接视频内容。
- 不为了 CTR 生成伪按钮、假界面、强诱导、假官方、医疗恐吓、涉政民族情绪等高风险素材。

生成 prompt 的内容优先级建议:

1. 腾讯审核与平台合规规则。
2. 承接视频的 ODPS 主题、关键点、目的点、灵感点。
3. 人群包和版位上下文。
4. 已审核通过的标题钩子规则和视觉模板。
5. 近期同人群包已使用标题、视频、素材的排重约束。

## 当前已落盘数据

- 最近 30 天 Top5000 数据:
  - `examples/auto_put_ad_mini/outputs/data/high_consumption_materials_30d_20260707_223644.csv`
  - `examples/auto_put_ad_mini/outputs/data/high_consumption_materials_30d_20260707_223644.json`
  - `examples/auto_put_ad_mini/outputs/data/high_consumption_materials_30d_20260707_223644_summary.json`
- Top100 分析目录:
  - `examples/auto_put_ad_mini/outputs/data/material_analysis_20260708/`
- Top100 视觉标注:
  - `top100_visual_annotations.csv`
  - `top100_visual_annotations.json`
  - `top100_visual_annotation_summary.json`
  - `top100_visual_annotation_report.md`

## 实施步骤

### 第一阶段:只入库结果

1. 建表。
2. 将现有 Top5000 和 Top100 标注结果导入数据库。
3. 增加只读查询脚本,验证快照、标注、周报能查到。

### 第二阶段:每周自动学习

1. 将现有 SQL 拉取脚本封装为周任务。
2. 增加图片下载和 hash 复用。
3. 增加结构化标注产物入库。
4. 每周生成 DRAFT 策略候选和周报。

### 第三阶段:接入生成流程

1. AI 生成素材读取 `APPROVED/enabled=1` 的 pattern。
2. 按视频内容和版位选择 pattern。
3. 生成结果记录 `pattern_version/pattern_key`。
4. 创意投放表现回流后,评估不同 pattern 的真实消耗、CTR、关键页访问率和审核通过率。

## 需要后续确认

- 标注环节是否使用真实多模态模型,还是先沿用当前本地结构化规则 + 人工抽检。
- `material_visual_annotation` 是否要记录 OCR 识别到的图片文字。
- 每周自动生成的 DRAFT pattern 是否发送飞书审批,还是只写数据库和本地报告。
- 生成流程一次读取多少个 pattern,以及同一人群包是否需要 pattern 使用频控。
