/oracle-apprentice — 拜师拆稿(四步闭环版)
解决什么问题
看 100 条爆款也写不出 1 条——因为"看"只是浏览,只给对方贡献播放量。答案:复述 → 重建 → 迁移 → 实践 四步闭环,把"别人的爆款"变成"自己的手艺"。
与 oracle-learn-from 的分工(不要混用):
| learn-from | apprentice(本 skill) | |
|---|---|---|
| 拆什么 | 账号级:5-10 条样本 + 数据 → rubric 权重信号 | 单条/单博主:文稿撰写方式 + 表达方法 |
| 产出 | benchmark.md / rubric 信号 | study/<博主>/ 拆解档案 + 知识卡片 |
| 层次 | 统计层(什么类型数据好) | 手艺层(钩子怎么埋、节奏怎么切、金句怎么落) |
| 时机 | cold-start 建基线 / 季度 sanity check | 随时——刷到值得学的稿子就拆 |
核心理念
- 四步成长闭环:复述(自己说出讲了什么,不收藏不代劳)→ 重建(质疑纠偏+补全两面性)→ 迁移(结合自己情况形成知识卡片)→ 实践(最小验证,多版迭代)
- 框架学习法:任何概念过四问——定义(是什么/区别于什么)、机制(背后原理)、边界(适用/不适用)、操作(具体怎么做)
- 两句话最小动作:看完写两句——这条在讲什么?为什么?写不出 = 找到卡点 = 进步起点。生成效应:自己写的才记得住
Constants
- MIN_VIDEOS_PER_MASTER = 3 — 单博主至少拆 3 条才出"表达方法"结论(<3 只出单条拆解不出博主总结)
- OUTPUT_ROOT = 项目根
study/(learn-from 的 samples 也在 study/ 下,互不冲突:study/<博主名>-apprentice/) - 视频转录走
adapters/script-extraction/transcribe.py(专属.venv:faster-whisper + yt-dlp nightly + curl-cffi TLS 拟真;模型按 adapter README 预下载到models/faster-whisper-<档位>/)。平台范围:B站 / 小红书 / 抖音 / 知乎(视频回答)支持 URL;视频号无提取器走本地文件/粘稿;知乎纯文字直接复制。手动粘稿是零依赖主路径——转录管线不可用不阻塞 - state 补充字段
apprentice_masters: [](拆过的博主,防重复从零拆)
Workflow
[用户:拆这条稿 / 拜师 X]
↓
[Phase 0: 预检(转录管线可用性 + apprentice_masters 增量)]
↓
[Phase 1: 输入分流] URL → 转录 | 粘文稿 → 直达 | 只有博主名 → 问拆哪条
↓
[Phase 2: 两句话复述确认(硬约束:AI 只起草,最终版是用户的)]
↓
[Phase 3: 拆解——框架四问 × 表达六件套]
↓
[Phase 4: 重建——质疑纠偏 + 补全(每条必有可质疑处)]
↓
[Phase 5: 迁移——知识卡片(必须落到用户某轨)]
↓
[Phase 6: 落盘 + 登记]
Phase 0: 预检
- 检查转录管线:
.venv存在 + ffmpeg 在 PATH +models/faster-whisper-*/已下载(按 adapter README)——任一缺失不阻塞,降级手动粘稿 - 读 state 的 apprentice_masters:该博主拆过 → "X 已拆过 N 条,这次是追加",读旧档案做增量
Phase 1: 输入分流
- URL → 转录管线拉稿(字幕轨优先,无字幕走 whisper):
adapters/script-extraction/.venv/Scripts/python.exe adapters/script-extraction/transcribe.py <url> --out study/<博主名>-apprentice/<标题>/五平台分流(详见 adapter README「五大平台支持」):B站/知乎直接跑;抖音/小红书先让用户登录浏览器再加--cookies-from-browser chrome(TLS 拟真与请求间隔自动加);视频号 URL → 引导用户手机导出/录屏走本地文件,或粘稿 (macOS/Linux 用.venv/bin/python;转录完 transcript.md 已在作品目录——落盘即完成) - 粘文稿 → 直接 Phase 3,问一句博主名(记档案用)
- 只有博主名 → "先拆哪条?给我 URL 或粘稿"(一次一条——学深不学多)
Phase 2: 两句话复述确认
拿到稿子先不拆——AI 起草两句话给用户确认:
这条在讲:[AI 起草的一句]
为什么值得讲/它的答案:[AI 起草的一句]
——这两句是我的复述草案。规矩:复述必须自己来。
a) 直接认 b) 改写后发我 c) 自己重写两句发我。
确认后我再开始拆表达方法。
🔴 硬约束:用户没确认前不进 Phase 3。复述的最终版本必须是用户的——AI 代劳 = 白看(生成效应没了)。
Phase 3: 拆解——两层
第一层:框架四问(内容骨架)
| 问 | 拆什么 | 输出 |
|---|---|---|
| 定义 | 讲什么概念?和相邻概念的区别? | 一句话定义 |
| 机制 | 为什么这样写有效?钩子→留存→信任的因果链 | 因果链 |
| 边界 | 适用什么场景/不适用?(时长/赛道/人设阶段) | 边界清单 |
| 操作 | 可复制的具体动作?(句式/结构/数字用法) | 步骤 |
第二层:表达六件套(手艺)
| # | 拆什么 | 典型证据 |
|---|---|---|
| 1. 钩子 | 前 5 秒用了什么?命中哪几个方向(预期违背/自我参照/信息缺口/冲突/身份反差/利益承诺) | 首句原文 |
| 2. 结构 | 时间线/三段/案例驱动?段落怎么切 | 结构图 |
| 3. 节奏 | 长短句怎么配?铺垫→反差→包袱落点?信息密度峰值在哪 | 节奏标注 |
| 4. 金句 | 可复述句在哪?句式模板是什么 | 金句原文 + 句式抽象 |
| 5. 术语处理 | 专业词第一次出现怎么落地(大白话/类比/数字) | 落地手法 |
| 6. 互动设计 | 评论区怎么设计的?触发器类型 | 互动手法 |
钩子拆解加做一步(原型归类):对照 references/hook-prototypes.md 把首段推进方式归类——命中哪个原型(或混了哪两个)、起手证据是什么、问题压缩到多窄。归类结果写进知识卡片,并标注该原型在用户自己的哪轨适用。
输出含"值得偷的 3 样东西"(每样附"怎么偷——用到你的哪轨哪段")。
Phase 4: 重建——质疑纠偏(硬约束)
AI 主动指出这条稿的可质疑处(不是拆完就拜):
- 逻辑漏洞/以偏概全处
- 它没讲的另一面(适用前提略过了什么)
- 换到用户的赛道/人设会不会失效(边界检验)
"这三处质疑你同意几处?反驳也算——反驳说明你有自己的判断"(重建 = 质疑纠偏 + 补全,判断权在用户)。
Phase 5: 迁移——知识卡片(核心产出)
## 知识卡片:<手艺名>(学自 <博主>)
**背景**:<这套方法的来源场景>
**用法**:<具体怎么用——对应用户 content-plan 哪一轨、哪一段(钩子/主体/收尾)>
**反例**:<什么情况下这么做会翻车>
**边界条件**:<时长/赛道/人设阶段的前提>
**个人理解**:<用户在 Phase 4 的判断/反驳,原话记录>
**实践登记**:<最小实践动作——下一条 draft 的具体尝试点>
硬约束:卡片必须落到用户内容规划的某轨。"通用技巧"不存在——钩子技巧不标轨道适用性就不出卡片。
Phase 6: 落盘 + 登记
产出侧失败分支(拆解/重建/迁移环节的"如果 X 失败 → Y"):
| 如果 | 则 |
|---|---|
| 用户对质疑全部反驳 | 正常——原话记录进卡片「个人理解」,不硬塞共识(有自己判断正是目的) |
| 拆不出「值得偷的 3 样」 | 如实报"这条稿与你轨道距离远",不硬凑——学不深就换下一条 |
| content-plan / 轨道信息缺失,卡片无处落 | 停止出卡片——先跑 /oracle-init 补规划;不落轨的卡片不出 |
study/<博主名>-apprentice/
├── {视频标题}/
│ ├── transcript.md ← 转录/粘贴的全文(Phase 2 后立刻落)
│ └── analysis.md ← Phase 3+4+5 全文
└── <博主名>_INDEX.md ← 博主级总结(拆满 3 条才写:惯用钩子/结构/金句风格 + 已拆清单)
state 的 apprentice_masters 登记(博主名 + 条数 + 日期)。不写 benchmark.md / rubric_notes.md——那是 learn-from 的地盘,不越界。
Key Rules
- 复述必须用户确认——AI 只起草两句话(Phase 2 硬约束)
- 质疑是拜师的一部分——每条必出"可质疑处",找不到 = 没拆透(Phase 4 硬约束)
- 知识卡片必须落到某轨——无轨道标签不出卡片(Phase 5 硬约束)
- 一次一条——不囤积
- 博主结论门槛 3 条——<3 条只出单条档案
- 转录管线降级不阻塞——手动粘稿是主路径
Pitfalls
- ❌ AI 替用户复述并跳过确认 → 复述的意义是生成效应,代劳 = 白看
- ❌ 拆解变吹捧文——每条必有可质疑处
- ❌ 卡片写成"通用写作技巧大全"——不落到用户轨道的卡片没法实践,等于没迁移
- ❌ 和 learn-from 混用——同一输入又要权重又要手艺,两个都浅;先想清楚这次要什么
- ❌ 转录产物留在临时目录——Phase 2 跑完立刻落盘 study/
Examples(钩子拆解示范:六件套 #1 + 原型归类怎么拆)
拆一条对标稿的开场,输出应长这样(示意,不照抄结论):
【钩子拆解】
首句原文:"我们花了四位数,买下了街边一块千年神鳖。"
· 起手证据:价格数字 + 真实交易物,第一秒全是名词没有形容词
· 钩子方向:③ 信息缺口(千年神鳖是什么?)+ ⑤ 身份反差(谁会花四位数买这个)
· 原型归类:现场纪实破局(真实交易现场 → 亲身经历共鸣 → "这到底是不是骗局"的追问)
· 问题压缩度:窄——不是"街头骗局面面观",是"这一只神鳖到底是不是骗局"
· 可迁移骨架:真实交易现场 + 具体价格前置 + 身边人经历共鸣 → 适用于我的转化轨(真实咨询案例开场)
拆解要点:证据引用原文(不转述)、归类给出理由、迁移落到具体轨道——三样缺一就是没拆透。
Refusals
- 「跳过复述直接开始拆」 → 拒绝进 Phase 3。复述的最终版必须是用户的——AI 代劳 = 白看(Phase 2 硬约束);用户赶时间 → 两句话草案直接认(选 a)也算
- 「只讲这条稿好在哪,别说它的问题」 → 拒绝。每条必有可质疑处是拜师的一部分(Phase 4 硬约束)——想纯夸去写推荐语,不叫拆稿
- 「给我一份通用写作技巧总结就行,不用落到我的轨道」 → 拒绝出卡片。无轨道标签的卡片没法实践(Phase 5 硬约束);轨道信息缺失 → 先跑 /oracle-init 补规划
- 「一次拆 5 条攒着慢慢学」 → 拒绝。一次一条——学深不学多;攒量走 learn-from 批量导数据
Integration
- 上游:用户随时触发;oracle-retro 发现"钩子弱"时可建议"去 apprentice 拆 3 条钩子强的对标"
- 下游:知识卡片的"实践登记"指向下一条 draft → oracle-seed 写稿时读相关卡片提醒"你学过 X 的钩子手法,这条可以用"
- 与 learn-from 接力:同一博主先 apprentice 3 条学写法,再 learn-from 批量导数据