Files
2026-07-13 12:29:17 +08:00

14 KiB
Raw Permalink Blame History

Prediction Anatomy(预测日志解剖)

被这些子 skill 引用:cheat-predictcheat-retrotemplates/prediction.template.md

所有预测都用统一格式——7 个必备组件 + 复盘段。Confidence 等级(基于 calibration_samples 派生,见 state-management.md 的 confidence 表)作为 header 字段标注,告诉用户这次预测有多可信,但不改变预测格式本身

为什么不分 cold-start 简化版 / complete 完整版(旧设计的弃疑) 把 cold-start 切成简化版是基于"前 5 篇 bucket 数字是 false precision"的担忧。但更好的解决方案是显示 confidence 等级——天气预报永远报具体温度,再标置信度,不会因为预报员经验少就不给数字。 双版本切换还引入了"第 5 篇突然解锁完整版"的复杂度跃迁——用户体验割裂。统一格式 + 渐进信心标注更平滑。

参考真实样本:参考博主项目(私有,含 25+ 视频校准)—— 工具的设计灵感与 rubric 权重均来自此实测。


7 个必备组件

组件 1File header(文件头)

# <标题> — 预测日志

**Article ID**: <12 位 hash>  (sha256 of scripts/<id>.md initial content, 取前 12)
**Title**: <作品完整标题>
**Rubric Version**: **v0** | **v1** | **v2** | ...
**预测时间**: 2026-05-04(基于最终稿)
**Script Path**: scripts/2026-05-04_<id>_<short>.md
**Script Hash**: <sha256:12 of script content at predict time>
**Target Duration (s)**: 240  (state.typical_duration_seconds 派生)
**Actual Script Length**: 980 字  (从 Script Path 文件读)
**Calibration Samples (at predict time)**: 3
**Confidence**: 🟡 偏低 (中枢 ±40%,可作为参考之一)
**Prediction Basis**: pre_shoot  ← 或 `post_shoot_pre_publish`v2 段)
**Scored By**: claude  ← 或 `claude+user_override`
**BlindScored By**: subagent-v1  ← 或 `main-claude-self` / `mixed`
**BlindScore Disagreement**: <inline JSON 见下方>
**User Override**: none  ← 或列出被覆盖字段
**预测时数据状态**: **blind**(未看任何 <平台> 实际播放数据)

BlindScore Disagreement 字段是 inline JSON 数组,每维度一行delta=0 也必须记

[
  {"dim": "ER",  "blind": 5, "self": 5, "delta": 0, "decided_as": 5},
  {"dim": "SR",  "blind": 3, "self": 4, "delta": 1, "decided_as": 3},
  {"dim": "AB",  "blind": 2, "self": 4, "delta": 2, "decided_as": 4, "user_decision": "b"},
  {"dim": "HP",  "blind": 5, "self": 5, "delta": 0, "decided_as": 5}
]
  • blindsub-agent 给的分
  • self:主 Claude 自估(Phase 2 末尾 internal 估值,不落盘的那份现在落盘了——这是必要的诚实代价)
  • delta|blind - self|
  • decided_as:进入 composite 计算的最终值
  • user_decision(如有):Phase 2.5 用户裁定时的选项 a / b / c <number>——只在 delta ≥ DISAGREEMENT_THRESHOLD 时出现

字段必填规则:

  • Rubric Version 必填——将来 v3 时代回看 v2 预测,没有版本号就无法公平对比
  • 预测时数据状态 必填——明确声明 blind 是 immutable 承诺的前提
  • Script Path 必填——指向 scripts/<id>.mdpre-shoot 草稿)
  • Script Hash 必填——cheat-shoot 时再 hash videos/<id>/script.md,不一致 → 复盘段加 integrity warning
  • Calibration Samples + Confidence 必填——告诉读者这次预测有多可信。Confidence 自动派生自 calibration_samples(见 state-management.md
  • Prediction Basis 必填——pre_shoot 为标准盲预测;post_shoot_pre_publish 为 v2 拍后改稿重判(仍未见数据,但软盲)
  • Scored By 必填——告诉读者这次预测是 Claude 全自动还是用户介入改过:
    • claudeClaude 主动打分 + bucket + 概率,用户 review 后回 "ok" 接受
    • claude+user_override:用户在 review 阶段挑刺改了某些字段
  • BlindScored By 必填——本次维度分由谁打:
    • subagent-v1:通过 Task tool 调 cheat-score-blind sub-agent 拿到的盲打分(默认,Phase 2 路径)
    • main-claude-self:用户 --skip-blind flag 或 Phase 2.5 选 b(信主 Claude 自估)——同时 state.last_prediction_self_scored=true
    • mixedPhase 2.5 用户选 c 给个别维度自定分,其他维度仍走 sub-agent
  • BlindScore Disagreement 必填——上方 JSON。所有维度必记(即使 delta=0),不允许"只记差异大的"。理由:复盘时按 delta 分布分析"哪类维度 sub-agent 与主 Claude 系统性分歧"是 rubric 演进的重要信号
  • User Override 必填(如有覆盖)——列出哪些字段从 X 改成 Y,附用户给的理由。复盘时这个字段帮诊断:用户的覆盖被实绩验证(用户直觉准)→ rubric 可能漏了什么

组件 2:输入快照(Input snapshot

记录预测时的稿子状态——尤其是用户的最终改动。

## 输入快照

**分数 (vN)**: ER5 / HP5 / QL5 / NA3 / AB5 / SR2 / SAT4 → composite=**8.24**

**用户改写要点 vs Claude 草稿(如有)**:
- **开头**user 砍掉 EWDM 模型名和铺垫
- **砍掉**:[具体段落 / 概念名 / 铺垫]
- **保留**:[关键的金句 / 致谢段 / 主体结构]
- **节奏**:比草稿 [紧 / 松] 约 N%

如果是用户从零写的(没用 cheat-seed),这一段写"用户原创稿,无 Claude 草稿对照"。


组件 3:预测主体(Prediction immutable 段

这是 immutable 段的核心。hooks/prediction-immutability.sh 拦截这段往后到下一个 ## 的所有 Edit。

## 预测 v1

**Bucket**: `30-100w`

**内心概率分布**:
- `<5w` → 3%
- `5-30w` → 22%
- **`<headline bucket>` → 55%**(中枢 ~50w
- `>100w` → 17%
- `>150w` → 3%

**一句话 reason**:
> ER=5+AB=5 暗恋普适受众;IS 直接锁定;7.3天+零信号反转+MVP金句情绪曲线完整;SR=2 无社会议题托底是天花板瓶颈;预计 40-60w 中枢。

强制要求:

  • Bucket 必须是预定义的 5 个之一
  • 概率分布 必须加起来 100%——这是逼你诚实的工具
  • 中枢 是该 bucket 内的点估计,便于复盘判断"偏高 / 偏低"
  • 一句话 reason 浓缩到 DB 字段,便于跨样本检索

关于 cold-start 期的 bucketcalibration_samples 少 → 概率分布应该更平(如 30/30/20/15/5 而非 5/40/45/8/2)。Confidence 低不代表跳过 bucket,而代表对 bucket 该有合适的不确定度。


组件 4:推理因素表(Reasoning factors

每个驱动判断的因素 + 方向 + 置信度 + 说明。

## 推理因素

| 因素 | 方向 | 置信度 | 说明 |
|---|---|---|---|
| ER=5 | 强 + | 高 | "半夜三点翻聊天记录"极端具象 |
| IS 钩子 | 强 + | 高 | "仅影响 X 的人"一句锁定受众 |
| SR=2 | 强 - | 高 | 无社会议题托底,纯个人情感天花板有限 |
| 数据+金句路线 | 中 ? | 低 | 对算法友好度未验证 |

置信度 分三档:高(强证据 + 多锚点支持)、中(有理由但样本少)、低(凭直觉)。

  • 复盘时如果"低置信度"因素被验证 → 直觉强
  • 如果"高置信度"因素被推翻 → rubric 有 bug

组件 5:锚点对比(Anchor comparison

找 2-4 个 composite 接近的旧样本,列出它们的实绩。

## 锚点对比

| 对照样本 | composite | 实绩 | 异同 |
|---|---|---|---|
| 仓鼠 | 9.41 | ~150w | composite 低 1.17,但路线差异大(类比讲解 vs 数据+金句) |
| 房价 | 9.41 | 259w | SR 差 3 分(2 vs 5 |
| 谁问你了 | 8.24 | T+8d 11.7w | 同 composite 但 ER 5 vs 3SR 2 vs 4 |

锚点的价值:抓出公式抓不到的错误。

校准样本不够时< 2 个 composite 邻近的已发样本):

## 锚点对比

校准池只有 N 个样本,无 composite ±0.5 邻近样本。**锚点对比 N/A**——
注意这次预测的 confidence 标注是 🟡 偏低 / 🔴 极低,bucket 中枢仅供参考。

仍然写出这段——告诉读者锚点为何缺。不是把段落删掉。


组件 6:反事实场景(Counterfactual scenarios

每个可能的 bucket 写一段"如果落在这里,意味着什么"。

## 反事实场景

**如果爆 `>X w`**X% 预期):
- [验证什么假设]
- [推翻什么假设]
- [可能新增什么 rubric 维度]

**如果落在 `headline bucket`**X% 预期):
- [基准线验证什么]

**如果跌到 `<X w`**X% 预期):
- [推翻什么核心判断]

**如果 `<<X w`**X% 预期):
- [极端场景的可能解释]

为什么必填:复盘时实际落在哪个 bucket 直接告诉你 rubric 的哪个假设被测试。没有反事实场景,复盘退化为"这次准 / 不准"——没有诊断价值。


组件 7:关键校准假设(Critical calibration hypothesis

可选但强烈推荐:把这次预测当成一次实验,明确写下"如果 X 发生,证明 Y"。

## 关键校准假设(对比谁问你了)

两篇同 composite=8.24,差异:
- 怎么停止期待:ER=5 / SR=2
- 谁问你了:ER=3 / SR=4

**我押:本篇 > 谁问你了(比率 1.5-2x**

如果反过来 → rubric 里 SR 权重应上调,ER 权重应下调
如果差距 < 1.3x → rubric 基本 OK,差异在噪声范围

校准假设是 rubric 升级的种子——单条假设被 ≥3 样本验证 → 进入 bump 候选。

校准样本不够时:写"无可对照样本——仍写下我对这次的核心赌注(即使没有锚点)",然后写一两条这次想测的事。不要删掉这段


组件 ∞:复盘段(Retrospective)— 仅追加

发布后 T+N 天复盘时追加。不修改预测段任何字符

## 复盘

**复盘时间**: 2026-05-07(发布 T+3d
**抓取时间**: 2026-05-07 09:30
**数据来源**: manual paste / adapter:douyin-session

### 实绩数据
- 播放:71.1w(落在 `30-100w` 桶内偏高,相对中枢 50w **+42%**
- 点赞:2.4w(赞播比 3.38%
- 分享:1.8w(分播比 2.53%,强)

### Top 评论关键词
- 「她不一样」模因爆发:2266 赞独占榜首,全文 12+ 次变体

### 哪些预测被验证 / 推翻
**被验证 ✅**:
- 关键校准假设完全成立:本篇 71.1w / 谁问你了 11.7w = 6.07x
- ER=5 主导情感传播力 → H1 强证据

**被推翻 ❌**:
- 中枢 50w 被超出 +42%
- 我对 SR 的押注反向被推翻:SR 在情感向场景应下调

### 需要写进 rubric-memo.md 的新观察
1. ER 在情感向场景的真实权重应 ≥ ×2.0
2. 议题分享冲动 (TS) 是隐藏维度

完整结构总览

file: predictions/YYYY-MM-DD_<id>_<short>.md

# 标题 — 预测日志              ← 组件 1: header(含 confidence + script_hash + Prediction Basis + BlindScored By + BlindScore Disagreement
metadata block

## 输入快照                     ← 组件 2
scores + 用户改写要点 vs Claude 草稿)

## 预测 v1                      ← 组件 3 ⭐ IMMUTABLE 起点(基于 pre-shoot 草稿)
bucket + 概率 + 中枢 + 一句话 reason)

## 推理因素                     ← 组件 4
(带方向 + 置信度的表)

## 锚点对比                     ← 组件 5(校准池不够时仍写"N/A 段"

## 反事实场景                   ← 组件 6
(每 bucket 一段"意味着什么"

## 关键校准假设                 ← 组件 7
(这次预测作为实验的明确赌注)

## 预测 v2 (replaces v1)        ← (可选) 拍后改稿 ≥30% 时由 cheat-shoot 触发,append 不覆盖
(同 7 组件结构 + 头部含 Diff vs v1 摘要)

## 复盘                         ← 仅追加,IMMUTABLE 边界
(实绩 + top 评论 + 验证/推翻 + 新观察)

v1 / v2 段约定

  • 新建文件cheat-predict 写 ## 预测 v1(不再裸 ## 预测——为 v2 留 schema 一致性)
  • legacy 兼容v0.1.0 时期写的 ## 预测 文件不动;hook 与 cheat-retro 都识别
  • v2 触发条件cheat-shoot 检测拍摄稿与 scripts/<id>.md 的 line-diff ≥ 30%V2_TRIGGER_THRESHOLD),调用 /cheat-predict — mode: v2 — prediction-file: <path>
  • append 而非覆盖v2 段插在 ## 复盘 之前。v1 段绝不修改(hook 物理强制)
  • 校准用谁cheat-retro 读最后一个 ## 预测 vN 算偏差;v1 留作历史档案
  • diff 学习:v1 vs v2 的字段差异(如 ER 4→5)就是用户改稿带来的判分变化,是 rubric 升级证据

Prediction Basis 字段

prediction header 必含 Prediction Basis

  • pre_shootv1 默认,标准盲预测)
  • post_shoot_pre_publish(v2,软盲预测——拍后改稿但发布前重判)

cheat-retro 用此字段在 score-curve / bump 校准时区分两条数据线,避免混样。


子 skill 验收标准

cheat-predict 写完一份预测后,必须自检 7 个组件齐全:

  • 组件 5 / 7 在校准样本不足时仍写"N/A 段 + 解释"不允许直接跳过
  • header 的 Calibration Samples + Confidence 必填——读者一眼看到这次预测多可信

cheat-retro 写复盘段时,必须先校验该文件的 7 个组件:

  • 缺组件 → 警告"该 prediction 不规范,复盘价值打折"
  • 复盘段格式与 confidence 等级无关——任何阶段复盘都是同一格式
  • diff Script Hash 与当前 videos/<id>/script.md 的 hash → 不一致则在复盘段加 **Script changed between predict and shoot** 警告

与旧设计的对照(v1 用户迁移参考)

v0 设计(已弃) v1 设计(当前)
prediction_complexity = cold-start-simple 用 3 组件简化版 删除字段。所有预测都用 7 组件统一版
prediction_complexity = complete 用 7 组件 同上——一直就是 7 组件
第 5 次复盘"解锁完整预测" 不需要解锁——一直完整。Confidence 等级随 calibration_samples 自动提升
Cold-start 期跳过 bucket / 锚点对比 / 反事实 不跳过——锚点不够就显式标"N/A",bucket 该写还写(概率分布需诚实平摊)
用 mode=cold-start 字段判断流程分支 删除字段。所有 skill 走同一流程,按 calibration_samples 渐进显示 confidence