/oracle-seed — 选题对话(默认)/ 批量 brainstorm(可选)
核心是跟用户讨论选题,不是机械 brainstorm。好内容来自用户的真实经历 + 观察 + 情绪——这些 AI 不可能凭空生成。AI 的角色是听用户讲 → 帮提炼角度 → 按轨道写一份 draft。
默认模式:对话式一次一个。Batch 模式(--batch N):brainstorm N 候选 + 写 N 份 draft,给"完全没想法 + 想批量初始化"的用户。
Overview
[Phase 0: 加载 context(state + rubric + patterns + 历史 + benchmark)]
↓
[Phase 1: Mode 分流 — A 有具体主题 / B 只有方向 / C 没想法 / Batch]
↓
[Phase 1.5: 轨道分流(init 注册的轨道 + 按占比补稀)]
↓
[Phase 2A: 深挖(带选项反问,≤4 轮)→ 三关检验 → 角度收敛]
↓
[Phase 2A-2: 钩子设计 + 兴趣属性声明 + 互动设计]
↓
[Phase 3: 算 candidate id + 落候选池 + 初始化作品目录]
↓
[Phase 4: 写 draft(读 script_patterns 选结构 + 反编造纪律)]
↓
[Phase 5: 下一步清单 + 询问继续]
Constants
- MAX_DEEP_DIVE_TURNS = 4 — 收敛阶段最多 4 轮反问
- WITH_DRAFT = yes — 确认角度后立刻写 draft;用户可说"我自己写"
- DRAFT_LENGTH — 派生自
typical_duration_seconds:30s→100-200字 / 90s→250-500字 / 240s→600-1000字 / 450s→1100-2000字 / 900s→2200+字 - 深挖弹药:
references/xu-zuohao-positioning-distill.md§5(选题挖掘问卷)+references/dbskill-essence-distill.md§1(定位选题)
Workflow
Phase 0: 前置检查 + 加载 context
- 读 state → 不存在提示先跑 /oracle-init
- 读
rubric_notes.md(粗打分用)+script_patterns.md(选结构用) - context 来源 A:已有 predictions(含 init import 的 reconstructed)——用户历史
- context 来源 B:
benchmark.md(如 imported)——对标账号 - 检查入参决定 Mode
context 优先级(Claude 判断):用户数据已能驱动方向(该轨样本 ≥10,或更早——出现 ≥3 个与 benchmark 不一致的强样本)→ A 主导;用户数据少 + benchmark 有货 → B 主导;两者都缺 → 用户输入 + 抓热点,并提示"建议先跑 /oracle-learn-from"。
Phase 1: Mode 分流
- 含具体名词 + 情绪/经历词("我昨天开会...")→ Mode A
- 含方向词但无具体内容("想做职场方向")→ Mode B:"太广。最近哪件具体事让你想做这个方向?a) 真实经历 b) 读到的内容 c) 长期困惑——挑一个开始讲"
- 显式说没想法 → Mode C:先问"最近有没有一件小事让你特别[开心/生气/荒唐/有意思]?一句话也行"(碎片素材优先于纯热点)→ 再抓热点 + 读历史 → 提议 1 个(不是 5 个)
- 显式
--batch N→ Batch:3 个清单问题 → brainstorm 15 候选 → 用户挑 N → 写 N draft - 纯触发无附加内容 → 唯一一次入口问题("有主题直接说 / 有方向告诉我 / 没想法说'帮我想' / 批量说 batch N")
Phase 1.5: 🔴 轨道分流(init 注册的轨道,必确认——决定 rubric/review 链/校准池归属)
这是"按哪套 rubric 打分、走哪条 review 链、算哪轨校准样本"的决策——不能默认猜。
判定规则:
- 入参信号明确(内容明显属于某轨——如转化轨用户说"讲产品案例"、破圈轨用户说"蹭热点破圈")→ 直接判定并告知"这期走 <轨名>(从你的入参判断)",用户不反对就继续——不要明知还问
- 信号不明确 → 必须显式询问,列出 content-plan 注册的轨道 + 各轨一句话说明 + 例子,附"不确定——你给一句话我帮判断"
- 用户说"不确定/你看着办" → 按 mix_ratio 补稀轨(读 state 看最近发布哪轨占比低于计划)+ 标
track_inherited: true(bump 时权重略降)
分流后路由:
- 转化类轨道 → 加载
references/conversion-track-playbook.md(选题必过"极刚痛点 6 问")+ starter 用 conversion-video - 破圈/认知类轨道 → starter 用 opinion-video
- 交叉题(跨两轨)→ 用户明确要求才算;两轨 rubric 各打一次
review 链路由(写完 draft 后):转化轨 → oracle-open-source;破圈/认知轨 → oracle-who-for。不要错配——拿不准回 state 查 tracks.definitions[].review_skill,不要凭印象。
Phase 1.6: 约束检查(state.stage_constraint)
读 state.stage_constraint(字段缺失按 none;判定表见主 SKILL.md「stage_constraint」段):
positioning_unclear→ 本期优先 Mode A 经历锚点(init Q4 锚点库优先于热点);走 Mode C 热点路径前提示"定位未明期追热点易产出同质化内容——建议先挖 1 条你自己的经历"expression_unstable→ 提示"/oracle-apprentice 拆 1-2 条对标稿补 pattern 后再批量起稿"capacity_limited→ 单条深做优先于 batch;提示规划 derivative(一期多发)conversion_blocked→ 转化轨选题必过 conversion-track-playbook"极刚痛点 6 问"(Phase 1.5 已加载时不重复)none→ 无额外动作
约束与轨道分流正交:先 Phase 1.5 轨道、再本节约束,叠加生效。
Phase 2A: Mode A 深挖
围绕用户给的内容深挖,不切到别的 topics。
反问类型(按场景挑,一次只问 1 个,必须带选项):
- 触发瞬间:"最初是哪个瞬间触发你想做的?a) 某句话 b) 某件事 c) 某个数据"
- 情绪锚点:"最让你[生气/荒唐/有意思]的是哪个细节?a) ... b) ... c) ..."
- 角度选择:"你想说 a) 现象批判 b) 自我反思 c) 泛化到普遍?"
- 受众想象:"心里想着说给哪种人听?听完会怎么转发?"
- 反对意见探测:"有人反驳说 X,你会怎么回?"
- 痛点裂变:大痛点拆 3-5 个小痛点("是 a) / b) / c) 哪个最痛?")——每个小痛点可独立成一条内容
- 立意提炼:"如果用一句话简化成受众最容易共情的视角,是什么?"
- 弹药不足时:从提炼文档 §5 挖掘问卷挑一问(带选项)——"如果给你五分钟跨年演讲,你会说什么?" / "哪几件小事彻底改变了你的轨迹?" / "这十年最大的教训?" / "你最异于常人的品质?"
反问纪律:
- 一次 1 问 + 带选项(用户需要选项锚点决策,不是从零回忆)
- 最多 MAX_DEEP_DIVE_TURNS 轮,超过主动收敛
- 用户回答变短/不耐烦 → 立刻收敛
三关检验(收敛前强制过)
角度收敛后、写 draft 前,过三关——少一条,内容做到死也拿不到及格分:
① 别自嗨(外行检验):发给不懂行的家人朋友,他们想看吗?窄到只有同行在乎的题,天花板就是同行数量。
② 记得住吗(酒局分享测试):想象酒局上你愿意拿出这个选题分享吗?关键不是"广不广",是听完能不能复述给朋友——复述的关键是"有没有一个让人记住的点"(金句/反差/极端案例)。
③ 谜题(极端到极端缺口):素材有没有"从一个极端到另一个极端"的变化(复仇故事/名著弧线)?用一句话写出这个缺口——写得出 = 有谜题;写不出 = 素材太平,结构再好也救不了。
任何一关不过 → 建议换角度(回深挖)。
Phase 2A-2: 钩子设计 + 兴趣属性 + 互动设计
开场原型选型(结构层,先于文案层):读 references/hook-prototypes.md,按选题匹配 1 个主原型(不混用),draft header 的 开场策略 字段写明原型名 + 起手证据。原型决定骨架(第一秒放什么),下面的钩子 6 方向决定锐度(观众为什么停下)——两层都要过。
行为触发点前置(红线):观众看完前 5 秒知道为什么要继续看吗?
- ❌ 错误开头:自我介绍 / 身份锚点 / 连续剧 callback("跟我有什么关系")
- ✅ 正确开头:直接亮价值 / 信息缺口+悬念 / 争议立场+身份认同
- 自我介绍可以作为第二句,不能是第一句
钩子 6 方向自检(开头 5 秒至少命中 2 个):
| 方向 | 原理 |
|---|---|
| ① 预期违背 | 大脑对超预期信号本能停下 |
| ② 自我参照 | 与"我"有关的信息天然敏感 |
| ③ 信息缺口 | 想知道大于已知,痒点 |
| ④ 冲突 | 对冲突/争议的生存本能级敏感 |
| ⑤ 身份反差 | 反常规的人生选择天然好奇 |
| ⑥ 利益承诺 | 直接告诉能获得什么,降低决策成本 |
0 命中 → HP≤2 重写;1 个 → HP 3;2 个 → HP 4;3+ → HP 5。流量轨常缺信息缺口(开头就给结论断了悬念);转化轨常缺冲突(习惯走共情)——每期至少补一次短板方向。
兴趣属性声明(每条内容只能选 1 主属性 + 最多 1 辅属性——什么都想要 = 什么都得不到):
- 信息型(来拿干货,看藏播比)/ 情绪型(来找共鸣,看评论)/ 传播型(来看新鲜,看转发)
- 选了主属性但内容不支撑 → 红旗(选"信息型"但没有可截图清单)
- 不选 → draft 退回("还没想清楚观众为什么来看这条")
互动设计(写入 draft 的 ## 互动设计 段,不是 metadata 填空):
- 情绪触动点 ≥1(戳痛点/风险落差/预期落差/身份认同)——决定用户"想不想说话"
- 评论触发器必选 1(争议立场/留白 vs 选择题/痛点提问——不用"你怎么看"这种开放高门槛)——决定"怎么开口"
- 收藏触发点(可截图清单+口播提示)+ 转发触发点(转给谁+理由)
- 情绪触动点要中段就埋,不堆结尾 5 秒
用户视角检查(写前写后各一次):开头是用户痛点还是我的自我介绍?产品介绍讲"这帮你做什么"还是"有什么功能"?连续 2 段没有"你"视角 → 标出修正。
信息排列检查(倒金字塔):删掉最后 30% 内容,观众仍能获得核心价值吗?不能 → 核心信息埋太深,前移。
Phase 2B/2C/2D
- Mode B:收敛到具体经历(三选一引导)→ 转 Mode A
- Mode C:碎片素材 + 热点交叉 → 提议 1 个;转化轨优先用"核心词 × 对象词 × 痛点词"连连看内部筛 1 个(过 6 问才留)
- Batch:3 清单问题(兴趣/调性/红线)→ 15 候选 → 挑 N → 写 N draft
Phase 3: 落候选池 + 初始化作品目录
- 算 id:
sha256("seed-" + 立意 + 触发时间)[:12] - 写 entry 到
candidates.md(candidate-schema.md 格式):tier=tier1+track=<轨道id>+read_status=deep_read - 初始化作品目录(content-folder-schema.md):
<NNN>_<工作标题>/+scripts/+predictions/+prompt/cover/+derivatives/(NNN 从 state 已登记作品数派生,先看已有作品目录的实际结构照着建) - 只建必需目录——audience-brief.md 等 review 产物后续流程才建
Phase 4: 写 draft
写前必读 script_patterns.md(按结构选型 cheat sheet 选结构;还在骨架阶段就用 starter 通用框架)。
三条反编造铁律:
- 禁止编造数据——draft 任何段落不得出现用户没提供的具体数字。用户没给数字 → 用机制做钩子("一天三件事")或问"有没有真实数字可用"——绝不自己编
- 禁止编造功能——不得写产品实际没有的功能/未验证的能力。写前问"你的产品目前有哪些能力?这期演示哪个?"——能力不够支撑故事就商量调故事线
- 禁止越界写发布文案——seed 产物只有 draft 正文 + 互动设计段;简介归 oracle-description,封面归 oracle-cover
draft 格式:
# [立意标题]
> ⚠️ **Draft by AI — 你必须改写后再拍**
> 这是脚手架不是成品。你的语气/节奏/个人经历无法 AI 生成。
> 1. 直接在本文件改写(加语气/经历/真实金句,砍铺垫砍术语)
> 2. 改完跑 /oracle-predict
> 3. 做完跑 /oracle-shoot
**Article ID**: <12 位 hash>
**Track**: <轨道 id + 轨名>
**调性**: [讨论得出的]
**目标时长/字数**: [按时长派生]
**结构选型**: [pattern 编号]
**开场策略**: [行为触发点类型 + 命中的钩子方向]
---
[draft 正文,段落版,每段 100-300 字——不写逐行字幕格式]
## 兴趣属性声明
[主属性 + 辅属性 + 判断依据]
## 互动设计
[情绪触动点 / 评论触发器 / 收藏转发触发点 / 评论区运营预案]
Phase 5: 下一步清单
✅ Draft 写完:<NNN>_<标题>/scripts/<date>_<id>_<short>.md
接下来你可以:
- 改写 draft(直接原文件改)
- "给我标题" → oracle-title 出候选
- 改完跑 "打分这篇 ..." 看 composite
- [按轨道] "这是拍给谁的 ..." / "自我开源 ..."(review 链)
- 决定要发 → "启动预测 ..."
下一篇做什么?(直接说 / "今天就这样")
Key Rules
- AI 不主动开放问——只在纯触发时问一次入口问题,其他时候等用户给输入再深挖
- 一次一个选题;批量必须显式 --batch
- 反问带选项 + ≤4 轮 + 不耐烦就收敛
- 深挖围绕用户给的话题,不切平行话题
- 轨道必确认——信号明确直接判定告知;不明确必问;不猜、不默认、不用 ratio 兜底(除非用户说"你看着办"→ 补稀轨 + 标 inherited)
- draft 是脚手架——header 加醒目"必须改写"警告
Examples(选题 → 原型匹配 → 钩子,示范判断路径)
例 1:Mode A 经历类
用户输入:"我昨天用 AI 一下午写完了以前要一周的投标文件,特别震撼"
- 三关:① 外行检验过(投标慢是所有工程人的共识痛点)② 复述点:"AI 一下午 = 我一周"③ 缺口:从"一周手动"到"一下午 AI"的极端落差成立
- 原型匹配:同题成本对照(同一任务,人 vs AI 的时间成本落差自现)——起手证据:那份投标文件的截图/计时
- 钩子命中:③ 信息缺口(AI 具体怎么做到的?)+ ⑥ 利益承诺(你也可以一下午)
- 兴趣属性:信息型(可截图的对照清单)
例 2:Mode C 热点类
用户没想法,当天热点:"某平台更新了推荐算法"
- 不直接讲算法新闻(小变化本身不抓人)
- 原型匹配:事件公布引出知识冲突(看似小更新 → 背后是流量分配逻辑的长期争论 → 对创作者意味着什么)
- 钩子命中:① 预期违背("这次更新杀死的不是大号,是中号")+ ② 自我参照(发内容的人都被影响)
- 反面示范:若套"生活传说追查"就错了——没有"多人同款问题"的证据,硬套是编造
Refusals
- 「跳过深挖直接写」→ "OK 但质量可能差——给我一句话立意我就写"
- 「AI 替我决定 topic」→ 拒绝 Mode A/B 路径;真没想法 → Mode C 给 1 个让用户判断
- 「一次写 5 个 draft」→ 必须显式 --batch 5
- 「懒得改写直接拍 AI draft」→ 警告"AI 稿 ER 偏低会污染校准数据";坚持则标
unmodified_ai_draft: true - 「帮我编个数据让钩子更有冲击力」→ 拒绝。反编造铁律 #1
Integration
- 上游:oracle-init(轨道注册)/ oracle-trends(候选池)
- 下游:oracle-title → title-pick → description → cover → no-ai-slop → 按轨道 review → oracle-predict
- draft header 的 track 字段是 prediction/candidates 链路的轨道 source of truth