Files
mcn-short-video/.workbuddy/memory/2026-09-23.md
T
maogeigei d07049ecf1 chore(repo): 归集 09-14~09-29 工作产出(技能/知识库/工作台/报告)并收敛临时产物
- skill: 素材库分块定义(00~11)、05_极致事件知识库 4 篇、08_对话风格总纲、mcn-video-prompt 提示词质量门禁与外部语料检索流程

- workbench: mcn-work-shop 新增 cli-backend.js(本地 CLI 接入)、工作台视觉交互规范;移除旧 UI 规范

- docs: 根目录极致事件/素材卡/审计方案报告与热门短视频清单入库

- memory: 补 09-14~09-29 日志与自动化任务记忆

- chore: .gitignore 排除 tools/、.tmp-chrome-*/、_k_test.cjs
2026-09-29 18:56:24 +08:00

373 lines
42 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-09-23 工作日志
## ChatGPT 外部评审:极致事件素材库(维度与内容覆盖)
**任务**:把已生成的极致事件卡通过浏览器发给 ChatGPT,评审「维度与内容是否全面 / 作为参考能否提升 AI 生成脚本吸引力 / 优化点」。
**产出**
- `ChatGPT评审意见_极致事件素材库_20260923.md`(861 行:提问说明 + 回复全文 + 要点提炼)
- `tools/chatgpt_ask.py`(可复用:把本地材料以附件发给 ChatGPT 并取回回答,直连 CDP)
**ChatGPT 核心结论**
- 维度:约 **80% 完整**。4 个盲区 = ① 成长/蜕变型事件(最大缺口)② 悬念/信息差 ③ 挑战规则型 ④ 关系变化 → 建议类型体系 **3 类 → 5 类**(+情感极致 +成长极致)
- 提升吸引力:**能提升**(开头 3 秒 / 转折密度 / 跨赛道迁移),**不能解决**(人物真实感 / 选题价值 / 脚本节奏)
- 6 条优化:AI 生成字段、事件强度评分、素材组合关系、**双轴体系**(内容库 × 事件库)、标签三级分层、失败样本库
- 成熟度:机制拆解 9 / 抽象能力 9 / AI 辅助 8 / 分类完整性 **7** / 商业化 7.5
## 技术链路(本次踩坑与解法,均已回写 MEMORY.md)
1. ⛔ **`explorer.exe` 当父进程启动 Chrome 的方案已失效** —— 本项目原有做法(`Start-Process -FilePath explorer.exe` + bat)本次两种写法(bash 直调 / PowerShell)+ ASCII 路径 bat + CRLF 全部试过,端口均未监听。推测与当前沙箱策略变化有关。
2. ✅ **可行方案 = 后台常驻**:`run_in_background: true` 启动 `chrome.exe <args> ; sleep 3600`,浏览器跟随该会话任务存活,**跨调用可用**(实测端口常驻、harness 可连)。
3. ✅ **ChatGPT 必须走代理**:`--proxy-server="socks5://127.0.0.1:10800"`(`Shadowsocks.exe` 监听 10800)。环境变量里的 8105 是沙箱代理,**不能给浏览器用**。直连 chatgpt.com 超时;走 10800 可通(curl 返回 403 是 Cloudflare 反爬对命令行的拦截,浏览器正常)。
4. ⛔ **browser-harness `cdp()` 不能传长文本**:daemon IPC 单条消息有上限(报 `Separator is found, but chunk is longer than limit`),且客户端 5s 超时(分块 1200 字符即 `TimeoutError: timed out`)。
5. ✅ **正解 = 长材料走附件上传**:`DOM.setFileInputFiles` → `#upload-files`;问题文本才走 `Input.insertText`(195 字符一次成功)。
6. ✅ **长回复提取要等稳**:选择器用 `div[data-message-author-role="assistant"] .markdown`;完成判定 = 无 `button[data-testid="stop-button"]` 且文本连续 4 次不变。早期 5 秒轮询会误判(521 字符即"完成")。
7. ⚠️ 中途 ChatGPT 标签页消失(原因未明)→ 用侧栏 `a[href^="/c/"]` 取会话 URL 重新 `Page.navigate` 即可恢复。
**清理**:删除 25 个一次性调试脚本 / 截图 / 中间文本;保留 `tools/chatgpt_ask.py`。
## 只读审计:中间留人机制(10:20,承接 ChatGPT 评审的「不能解决 3:完整脚本节奏」)
**用户诉求**:能否提升「中间留人」吸引力,做到 10 秒左右一个吸引点。
**审计结论(未改任何技能文件)**——瓶颈不是阈值不够紧,而是「中间留人」没被定义成可产出/可自检的东西:
1. **三条并行密度线口径打架**:A 信息密度 每10秒(`9_生成短视频脚本.md`:151,441 / 35项清单:73 / `04_节奏控时`:48,91,106 / `06_编导终审`:71)=下限防腐;B 钩子密度 每15秒(35项清单:72)**全技能无定义、无来源、无产出格式,悬空**;C 极致触点 每15-20秒(`7_生成短视频大纲.md`:66,159 / `05_极致事件/03`:17,41)=上限爆点,资源有限不可能也不应 10 秒一个。
2. **产出粒度太粗**:S6「本场钩子」是**场级**(一场 15-25s → 等于 15-25s 才一个留人设计);S7 极致触点布位只有 4 个布位、非窗口化。→ **「每10秒一个吸引点」在全部产出物里没有字段**。
3. **校验强度倒挂**:S7 大纲校验里 L1 极致触点是**硬闸门**,中段留人(L162-163)只是"参见知识库"**软引用**;L165-171 硬检查全是**静态数量**(具名物品≥12/对话≥4组/故事细节≥50),与时间轴无关 → AI 把力气花在凑物品数上。
4. **方法论库几乎空**:`知识库/06_剧情钩子/` **只有 1 篇**;五类留人机制(悬念提问/反差画面/直击痛点/身份共鸣/利益承诺)只在 `6_生成短视频框架.md`:140 列了名字,无任何"怎么写"的文件。
**提出方案「三级留人点体系」**(路线 = 合并升级,不新增第 4 条平行线):
- L1 极致触点 15-20s/个(不动,保护稀缺性)| **L2 留人点 每10秒 ≥1**(由 A 升级+B 归并,核心新增)| L3 增量点 3-5s/个(`04_节奏控时`:24,36 已有,落成字段)
- L2 判据:一个留人点 = 观众产生明确的"为什么",三型至少命中一种(问题型/反差型/共鸣型);纯信息陈述/纯动作/重复前文**不算**
- 可执行换算:**本场最少留人点数 = ⌈本场时长 ÷ 10⌉**(S6/S7 可直接自检)
- 分赛道分档:剧情/知识/口播/搞笑 10s;Vlog/美食/亲子/情侣 10-15s;沉浸/治愈 15s(L3 兜底)
- 最需防的退化:为凑数把普通留人点包装成"极致触点" → L1 不计入 L2,`05_极致事件/03` 补注二者不同层
**关键判断**:极致事件素材库是 **L1 侧资产,补不了 L2 的缺口**(正好对应 ChatGPT 说的"不能解决 3")。两件事必须分开做。
**产出**:`中间留人机制诊断与留人点体系方案_V1.0_20260923.md`(含 8 项落地改动点清单 + 证据索引 文件:行号)。**状态:待用户确认路线(A 合并升级 / B 只加不改)与是否补 06_剧情钩子 5 篇方法论,未动技能文件。**
## 执行:三级留人点体系落地(10:35–,路线 A 合并升级,已全部完成)
**流程**:用户要求「检查确认一遍方案细节是否准确无误,确认后执行」→ 回到原文逐行复核 + 全树口径扫描 → **发现方案有 6 处不准确/遗漏** → 修订后执行(11 个文件)。
**复核修订(重要,避免重复建设)**
1. ⛔ 原「`06_剧情钩子/` 只有 1 篇 → 补 5 篇方法论」**是错的**:五类留人机制的方法论**本就在 `04_爆款开场/` 10 篇开场方式文件里**(`00_开场方式全量覆盖分析.md`:17 已写明对应)→ **撤销新建**,改为补 1 节映射表。**教训:下「缺方法论」结论前必须先读同维度已有文件。**
2. L2 类型不新造「问题型/反差型/共鸣型」三型 —— **三型漏了「利益承诺」**,且技能内已有 **4 套钩子枚举**(五类留人机制 / `01_标准爆款结构模板`:143-149「数据冲击·违背常识」/ `04_爆款开场` 10 种 CSV 口径 / 8 个旧钩子文件口径),再创即第 5 套 → **L2 类型维度沿用五类**,「产生一个为什么」只作合格线判据。
3. A 线(每10秒)足迹**漏了** `03_框架节奏/01_标准爆款结构模板.md`(L246/L354/L366)→ A 线实际 5 个文件。
4. **漏**子技能同口径副本:`subskills/mcn-script-review/`(SKILL.md + 脚本复盘流程.md)+ `subskills/mcn-dou-analysis/references/知识库/视频拆解/框架04_节奏控时.md`。
5. **新发现**:`创作流程/11_脚本检查和诊断.md` 里「信息密度」**一词二义**(「二、信息密度检查」=展开深度静态数量;四维度表那条=频率)→ 频率那条改名「留人密度」,静态模块只加区分注**未改名**(改名连带 S7 L165-171,属独立重构)。
6. 命名定为「**留人点**」(对齐平台详情页字段「中间留人」)。
**最终方案(口径单源 = `知识库/03_框架节奏/04_节奏控时叙事套路.md` 1.3)**
- **L1 极致触点** 15-20 秒(05_极致事件,不动)| **L2 留人点 每 10 秒 ≥1**(由「信息密度」升级+「钩子密度 15 秒」归并)| **L3 增量点** 3-5 秒(知识库已有,落成字段)
- 判据:留人点 = 观众产生一个明确的「为什么」,四类形式(抛问题/打破预期/说到自己/给承诺)至少命中一种;**纯信息陈述/纯动作/重复前文不算**
- 自检换算:**本场最少留人点数 = ⌈本场时长 ÷ 10⌉**
- 分赛道分档:剧情/知识/口播/搞笑 10 秒|Vlog/美食/亲子/情侣 10-15 秒|沉浸/治愈/慢生活 15 秒
- 红线:**禁止混层**(L1 不计入 L2、留人点不得包装成极致触点 → 防爆点稀释)
**改动 11 文件**:04_节奏控时(新增 1.3 单源)|01_标准爆款结构模板|06_编导终审|创作流程 6/7/9/11|35项清单(类4 合并 2→1 + 新增「留人点类型覆盖」,**保持 35 项**)|05_极致事件/03(加分工行防混层)|04_爆款开场/00(新增第五节映射表)|子技能 2 处副本|SKILL.md frontmatter(updated_at 09-23)。
**残留核对**:`钩子密度`/`每15秒`/`每10秒至少1个新信息` **有效规则零残留**;剩余 2 处命中均在 `subskills/mcn-video-prompt/参考skills/script-writing-studio/`(**第三方参考技能,红线禁改**)。
**遗留待决策**:① 11 的「信息密度检查」模块是否更名「展开深度检查」(独立重构,未做);② 赛道分档阈值为**推定值非实测**,建议跑 3-5 条真实脚本后按数据回调。
**明细**:`V1.0/references-add/变更日志.md` 2026-09-23 条;方案+复核修订见仓库根 `中间留人机制诊断与留人点体系方案_V1.0_20260923.md`。
## 执行:遗留重构 · 「信息密度」一词二义治本(11:00–)
**触发**:用户「按照建议执行」→ 执行上一轮留的 2 项遗留中的第①项。
**处置**:`创作流程/11_脚本检查和诊断.md` 模块二「信息密度检查」→ **「展开深度检查」**(7 处),原「命名区分注」改为「命名沿革」(保留两口径不互相替代)。连带:
- 引用更名:`SKILL.md` 能力行、`7_生成短视频大纲.md`:178
- 频率义统一「留人密度」:`9_生成短视频脚本.md`(留人密度优先 + 赛道标准指针)、`6_生成短视频框架.md`(弱情感铺垫等级行 / 三问自检 3 处 / 赛道标准指针 / 模板 A 描述)
- 症状名去同根:`04_节奏控时`(2.2 行 + 误区「信息密度过低」→「留人点过疏」)、`01_标准爆款结构模板`(误区行 →「中段留人点过疏」)
- 子技能副本:`mcn-dou-analysis/视频拆解/框架04_节奏控时.md`(2)、`框架01_标准爆款结构.md`(1)
**保留边界**:「信息密度」作**通用描述语/关键指标/方法论原文/文件标题**的用法一律保留(`01_标准爆款结构模板`:289 关键指标、`08_对话风格/高信息密度Vlog创作法`、`3_对标视频账号拆解`「每30秒信息增量」)—— 只治「作阈值口径名或模块名」的义项,不做全量替换。**核对**:全树扫 `信息密度检查` → 有效规则零残留。
## 只读诊断 + 方案:极致事件卡片(11:10–,技能文件零改动)
**触发**:用户「但是对于极致事件卡片 没有什么优化的建议和方案」。
**卡片定义**:`素材库/分块定义/00_模板-各库分块模板.md` §极致事件(L302–343)= **10 固定字段(顺序固定)+ 所属库专属 N**;内容层 6(极致内容/内容含义/极致触点/事件标签/极致类型/创作手法)+ 呈现层 4(镜头语言/画面风格/复用场景/适用场景)。
**结论:主体不需重构**(三字段分工「事实→机制→效果」成立)。真问题是 3 条结构性缺陷:
1. ⭐ **存量卡两套口径并存**:`极致事件卡_癫婆_模板版_20260922.md` = V1.2 的 10 字段;`极致事件提取_多类别样本_20260922.md` **12 条卡全部为旧口径 9 字段**(用「极致标签」「表现形式」,无新「极致触点」;grep 证实无一使用「内容含义」)→ 按「事件标签」筛条会漏;且当时送 ChatGPT 的评审材料口径可疑(评审材料 txt 已清理,**无法回溯核验**)。
2. ⭐ **「极致触点」一词三义**(新发现,与上一轮 `信息密度` 同型):A 布位层=时间轴爆点节点(创作流程+知识库 15 处)/ B 卡片层=击中原因(仅模板)/ C 8 库层=**内容描述**(8 库全部已入库条目,`01_美食库_中式家常菜` 9 处…)。源头 = 模板 L10 自认「同名升级」但第四节**未裁决**。
3. **10+N 的 N 不可见**:卡内无「所属库」标注 → 本地缺口 1(12 事件中 7 个定库无处可落)无法落地。
**ChatGPT 9 条建议判定 = 采纳 1 / 改造 4 / 否决 3**:
- 采纳:双轴体系(用本地方案落地)
- 改造:事件强度评分→「主/辅」标注正式化(不新增字段);失败样本→不建库只补准入一行;真人细节→「极致内容」补原话不概括 + ≥1 处真实毛边;节奏字段→只取「铺垫量级」
- 否决:卡内嵌 Prompt(越层)/黄金组合字段(组合是用法非素材属性)/标签三级分层之「一级心理刺激」(违反 4.4 情绪效果不设标签红线)/用户需求层(S5 选题职责)
- **4 个外部「盲区」核实:3 个已被现有体系覆盖**(成长→反差+期待铺垫;挑战→极致行为·强度拉满;关系变化→**预见式服务**定义原文即「对方还没开口就已经做好」),仅「悬念/信息差」属标签层挤压。**再次印证:下「缺某类」结论前先读同维度已有文件。**
**产出**:`极致事件卡片优化方案_V1.0_20260923.md`(D1–D6 缺口 + P0–P2 改动清单 + 明确不做 + 3 项待确认:库位裁决 / 触点治理方式 / 存量 12 卡是否重出)。**状态:待确认,技能文件零改动。**
## 执行:极致事件卡片层治本(11:15–,按方案 10 项全部落地)
**触发**:用户「按照方案优化」→ 执行同日《极致事件卡片优化方案_V1.0》P0 3 + P1 4 + P2 3 = **10 项**;3 项待确认按方案建议选项落地(库位 → B 跨库横切 / 触点治理 → A 加裁决条款 / 存量卡 → A 按 V1.3 重出)。
**口径单源(治「极致触点」一词三义)**:`知识库/05_极致事件/01_极致类型-素材标签映射表.md` 第四节新增 **4.5 条款** —— A 布位层(爆点节点)/ B 卡片层(击中原因)/ C 8 库层(内容描述)三义 + 判据(「说画面里有什么」=C /「说用户为什么被击中」=B /「说它在第几秒引爆」=A);C = 极致事件「极致内容」等价物;**硬规则:极致事件类必须写满 10 固定字段**。节标题 四条 → 五条。
**横切定库(缺口 1 落地)**:同文件第二节新增「定库列怎么读」—— 极致事件 = 跨库横切类别,定库为**可选检索入口**、**可为空**(`—(横切未定)`)。不做新增「行为/情境」库、不做同一事件多库复制。
**模板层**(`素材库/分块定义/00_模板-各库分块模板.md` §极致事件,**V1.2 → V1.3**):① 10 字段硬规则 + 卡片头元信息行 `> 所属库:{NN 库名 | 横切未定}`(不占字段位);② 极致内容 补「原话不概括 + ≥1 处真实毛边」;③ 内容含义 补时间跨度型写法;④ 极致触点 四子项 → **效果侧两项(用户心理 / 共鸣)**,机制词归标签与类型 + 「效果词不得复用标签词」;⑤ 创作手法 补 **铺垫量级 短≤3s / 中 3-10s / 长>10s**;⑥ 事件标签 补 **≥2 值自检 + 「(主)」记法**;⑦ 专属段补「横切未定则省略」;专属说明 5 → 6 条。
**顺带修模板内自相矛盾**:§三 ※2 字段数 `9+10=19` → **`10+10=20`**(03 库 → 15;横切未定只写 10);※3 补 4.5 指针(闭合 L10「是否同步见第四节」的**悬空指针**);「事件标签位于末位」→ **第 4 位**。
**评估标准**(`05_极致事件/03`):第一节补「**翻车 / 失败也是合法的极致**」—— 豪言后翻车同等入库,但须写清被打破的期待落点。
**存量卡重出(3 个卡文件 + 1 个方法文件,范围大于方案原列的 1 个)**:
- `极致事件提取_多类别样本_20260922.md`:12 张卡迁移为 V1.3(10 字段 + 元信息行 + 新增效果侧触点 + 铺垫量级);同步修 §一 定库列(7 处 → 横切未定)、**§3.1 / §3.2 两处与 §一 不符的既有统计错误**(错位 2→1 补品质 1;标签分布重算,零命中实为 4 个)。
- `极致事件卡_癫婆_模板版_20260922.md`:3 条卡触点收敛 + 元信息行 + 铺垫量级(**方案未列、属 V1.3 落地的必然连带**)。
- `极致事件卡_癫婆_总有人打断我的休息_36468.md`:分析报告式卡,「表现形式」→「内容含义」(3 处)+ 旧映射表名同步,**保留原结构**。
- `极致事件识别与提取方法_基于解析内容_20260922.md`:字段表「表现形式」→「内容含义」+ 定库行补「可空」+ 旧映射表名(3 处)。
**新自检暴露(重要实证)**:按「事件标签 ≥2 值」自检,**13 张卡中 8 张为单标签**(多类别样本 6 张 P1/P2/P3/C1/C2/C3 + 癫婆 2 张 E2/E3)—— **保留原判、逐条标 ⚠️、不追补**,作为该条款必要性的实证。
**版本**:`SKILL.md` frontmatter last_change 更新;`references-add/变更日志.md` 追加一条(置于 09-23 顶部)。
**发现项(未动,待用户决定)**:`project/内容创作产品规划/内容知识库设计/2_短视频创作知识库/素材库/分块定义/00_模板-各库分块模板.md` 是**同一模板 V1.2 的另一份副本**(知识库 V2.0 建设线),本次**未同步**(范围外)→ 若 V2.0 沿用,须同步 V1.3。
## 评估:优化后「重新提炼极致事件卡片」的优化点(12:20–,只读评估,技能文件零改动)
**触发**:用户「评估优化后 重新提炼极致事件卡片 会有哪些优化点」。
**结论(推演 + 已有实证交叉,非新跑样本实测)**
- 收益不在"字段变多",而在卡片第一次走通 **判定 → 入库 → 检索 → 排布** 四段闭环;优化前断在第 2 段(定库悬空 7/12)与第 4 段(无排布信息)。
- **最大单项 = 补回「效果层」**:旧 12 条卡**零条**写"为什么击中用户"→ `05_极致事件/03` 的 5 维评分(真实毛边配合等)要求的东西卡片不提供,只能事后补救。
- 十项优化点:① 补效果层 ② 极致内容承载原话+毛边 ③ 定库从悬空变合法值 ④ 一次提炼到位不再返工(美食卡返工过)⑤ 标签数下限 + 主标签定义 ⑥ 卡片首次带排布信息(铺垫量级)⑦ 4.5 判据防串层 ⑧ 多收"翻车/失败"一类 ⑨ 成长/蜕变类有位(时间跨度型写法)⑩ 三条自检内建进流程;附加:4.4 分流已有 2 次实证。
- **3 项约束**:C1 ⭐ 真瓶颈 = 标签层「喜剧/荒诞」挤在 `自嘲反差` 一个口**未裁决**,≥2 值自检在喜剧类上会撞墙;C2 ≥2 值有"凑标签"风险(实测 8/13 单标签,条款措辞须守「复核是否漏标」);C3 **重跑旧解析不产生新事实**,扩容必须扩样本(33 条清单已提炼 5 条,剩约 28 条)。
- **关键判断**:重提炼的真正价值在 **「提炼即入库」** —— 12 条卡至今散在仓库根一份实测报告里,**不是素材库资产、S7 调不到**。所以推进次序应是**先定落点,再批量重提炼**。
**产出**:`极致事件卡片重提炼优化点评估_V1.0_20260923.md`(十项优化点 + 3 约束 + 4 步推进次序 + 证据索引附录)。**状态:评估报告,未改动技能文件。**
## 评估:卡片是否存在 WeKnora 模式下(14:27–14:45,**本机实例实测 5 轮**,未动技能文件)
**触发**:用户「评估 这类卡片适合存在 wekonra 那种模式下」。
**结论**:**适合,但要换容器 —— 要的是「卡片库」不是「文档库」**。
- ✅ 最优 = **FAQ 型知识库**(一条目 = 一分块,不走文档分块器 → 卡片原子、字段不打散)
- ❌ **不要走文档分块**:实测(`POST /chunker/preview`,零写入)同一批 3 张卡 691/952/1150 字,512/80 粒度 → **9 块,一张卡被拆成 4 片**(内容层 4 字段 + 3 字段 + 呈现层 4 字段);**overlap 80 致同一字段出现在两块**;**块跨越两张卡**;且**不可预测**(1150 字的卡反而整块未切)。heading 策略逐块结果**完全相同**;1200/0 仍有跨块、一块含 2 卡;2000/0 字段完整但仍一块多卡。
- 🔒 边界:**git 仍是唯一权威源,WeKnora 只做派生检索层**;**规则类文本(S1-S11/35 项/映射表/评估标准)不要进** —— 召回率≠100%(阈值 0.5/0.3 直接滤掉),规则必须留文件做硬闸门。
**WeKnora 0.8.0 数据模型要点(实证 file:line)**
- 条目类型:file/url/**manual**(markdown + draft/publish + 条目级版本)/ **faq**;KB 类型 document / faq / wiki 三选一。
- 条目级:`Tags`(KB 内**同名唯一**,多对多)+ `FolderPath`(纯导航)+ **`CustomMetadata`(JSON,但不参与检索过滤!只在结果里暴露给模型)** + `Profile`(LLM 生成)。
- 检索:`SearchParams.TagIDs / ScopeTagIDs`;`DisableRecallThresholds` 保证圈定范围内不被阈值抹掉;FAQ 有 **两级标签优先** `first/second_priority_tag_ids`。
- FAQ 条目:`standard_question` + `similar_questions` + `negative_questions`(**不入索引**,只做精度控制)+ `answers[]` + **每条一个 tag** + 推荐位 + 直接回答阈值;`Content`(返回给模型)与 `IndexContent`(向量化)**分离** → 卡片正文可保真。
- 治理:批量 JSON 导入导出、**`dry_run` 预校验 + 失败明细**、append/replace、**按 ID 或按 Tag 批量改字段**。
**实测踩到 3 个坑(全部有日志证据)**
1. ⭐ **FAQ 型库默认 `vector=false / keyword=false`** → 入库 100% 成功但**检索永远返回空**(`success:true, data:[]`,静默失败);根因日志 `knowledgebase_search.go:195 [HybridSearch] | No retrievable indexing pipelines`。→ 建库必须显式传 `indexing_strategy.{vector_enabled,keyword_enabled}=true`。
2. 建库/条目不绑 `embedding_model_id` → 导入卡在 `processing/0%`,**progress 接口 error 字段为空**,只能翻容器日志看 `failed to get embedding model: model ID cannot be empty`。
3. **`dry_run` 是异步任务且占导入通道** → 紧接着发正式导入会 `400 已有导入任务在进行中`;须轮询 dry_run 的 task 至 completed 再导。
**终验(开启管线后)**:2 条卡导入 2/2,FAQ 检索标准问命中 **score=0.8219,返回答案长度 691 = 整张卡**。**待调项**:语义改写问法命中 0(→ 相似问须覆盖真实检索口径 / 降阈值 / 或走通用 `/hybrid-search`,实测该通道对 FAQ chunk 可命中);标签优先检索那一次命中 0,未独立验证。**MCP 无 FAQ/Tag 工具,`hybrid_search` 无 `tag_ids`** → 走 MCP 拿不到标签圈定能力,须走 HTTP API(`localhost:31607`,key 在 `D:\.workbuddy\mcp.json`)。
**产出**:`极致事件卡片_WeKnora适配性评估_V1.0_20260923.md`;实测脚本与原始输出归档到 `tools/weknora-fit/`(4 脚本 + `out/*.txt`)。临时实验库 4 个已全部删除(均有 HTTP 200 回执),**未碰 `mcnvideoprompt`**。
## 执行:创建 WeKnora 正式容器并灌入 11 张卡(14:54–,容器已上线可检索)
**触发**:用户「你可以创建对应容器码(容器)」。
**容器(长期库,非临时实验库)**
| 项 | 值 |
|:--|:--|
| 库名 / ID | **MCN极致事件素材库** / `e6772e41-7b72-499d-b46c-e5ca7c9d1740` |
| 类型 | FAQ 型(一条目=一分块,不走文档分块器) |
| 模型 | embedding `03f0cf45`(bge-m3) / summary `a2de7804`(glm-5.3-flash) |
| 索引 | `vector=true` `keyword=true`(建库时即显式开,避开 P1 静默失败坑) |
| 导入 | **11/11 成功、0 失败**;答案 576–978 字**整卡无损** |
| 标签 | 6 个(12 维原样值):反差 4 / 反常识 2 / 难度极限 2 / 自嘲反差 1 / 食材极致 1 / 预见式服务 1 |
**条目字段映射**:标准问=主检索意图 | 相似问=4 条其他问法 | 反例问=2 条不该命中边界 | 答案=整张卡正文 | tag=主标签。与 `mcnvideoprompt` **完全独立**(未混库、未碰)。
**⭐ 本轮最重要发现:FAQ 检索的 `vector_threshold` 默认 0.7(硬编码),是"入库了却搜不到"的真因**
`SearchFAQEntries`(`knowledge_faq.go:932`)`if req.VectorThreshold <= 0 { = 0.7 }`;且 FAQ 检索**恒为 `DisableKeywordsMatch: true` → 纯向量,关键词完全不参与**(把关键词串写进相似问是无效操作)。**注意与通用检索/自定义 Agent 的默认值(vector 0.5 / keyword 0.3,`custom_agent.go:544/547`)是两套,别混。**
阈值扫描(33 探针 × 7 档,脚本 `6_threshold.py`,结果 `out/6_threshold.txt`):
| 探针组 | 0.7(默认) | **0.5** | 0.45 |
|:--|:--:|:--:|:--:|
| A 标准问原句(11) | 11 命中(各 1 条) | 11/11,top1 全对 | 同 |
| B 相似问原句(11) | 8 命中 / 3 条 0 | 11/11,top1 全对 | 同 |
| **C 未登录新口语问法(11)** | **仅 1/11(9%)** | **11/11,top1 全对** | 11/11(召回满 5 条) |
→ **上线参数:`vector_threshold = 0.5`,`match_count = 3~5`**;要多候选用 0.45。
→ **标签优先检索同样依赖阈值**:`first_priority_tag_ids` + 默认 0.7 → 6 个标签**全部 0 命中**;降到 0.5 后命中数 == 该标签条目数(反差4/反常识2/难度极限2/其余各1)→ 标签机制本身正常,**别误判成失效**。
**产出**:`极致事件素材库_WeKnora容器交付说明_V1.0_20260923.md`(容器信息 + 11 条清单 + 检索参数 + 字段映射 + 已知限制 + 待定);脚本 `tools/weknora-fit/5_build_event_lib.py`(**含幂等护栏**:同名库已有条目→退出/为空→复用/标签已存在→跳过)、`6_threshold.py`。
**技能沉淀**:更新 `~/.workbuddy/skills/weknora-structured-ingest` → **v1.1**(更正 frontmatter 中错误默认值、新增「阈值 0.7 须显式传 0.5」为第 5 条铁律、第四步改为阈值扫描法、补标签优先阈值依赖与单标签限制、收尾纪律补正式库幂等护栏)。
**技能文件(短视频工作台)零改动** —— 是否把「素材检索入口」接进 S7 待用户决策。
---
## 追问实测:为什么不用文档型容器 / 不分块可以吗(2026-09-23 晚)
**背景**:用户追问「为什么不用文档呢 不分块可以吗」——技术可行性追问,须实测而非推演。
**方法**:两轮实测。① 零写入 `POST /chunker/preview`(`7_doc_noblock.py`);② 建**临时 document 型库**(跑完 `DELETE` HTTP 200 回执),11 篇 manual(一卡一文档),索引 125s 完成(`8_doc_vs_faq.py`)。
**结论 A:分块能解决,但只有一条路**
- `splitBySeparators` 早返回:文本 ≤ chunkSize **完全不切**(`splitter.go:225-227`)→ 单卡 1150 字 + chunk_size 1200 = **1 块完整**
- ⭐ **`absoluteMaxSize = 7500` 硬上限**(`splitter.go:400`)→ 整篇 8605 字必切,chunk_size 设 100000 也切成 2 块(块1 硬塞 9 卡)
- **"卡标题提为第一优先级分隔符"无效**:输出与普通分隔符**逐块完全相同**(10 块 = 6 完整 + 3 混装 + 2 半卡)
- **唯一姿势 = 一卡一文档 + chunk_size ≥ 卡长** → 实测 11 篇各 **1 块**(等于手工模拟 FAQ 原生行为)
**结论 B:检索才是分水岭(同口径 A/B/C 三组 × 11 条,判 top1)**
| 容器 | A 标准问 | B 相似问 | C 口语新问法 |
|:--|:--:|:--:|:--:|
| FAQ @0.5 | 11/11 | 11/11 | **11/11** |
| 文档型最佳档 | 11/11 @0.7 | 10/11 @0.5 | **9/11 @0.5** |
- ⭐ **文档型无单一可用工作点**:A 组最优 0.7、C 组最优 0.5,**互斥**(FAQ 在 0.5 单点即三组全满)
- **文档型召回卡上限**:B 封顶 10/11、C 封顶 9/11,降阈值不涨 → 瓶颈是**语义入口不足**而非阈值
- **机制**:FAQ 索引「标准问+相似问」(短问句,问↔问匹配);文档型索引**整卡正文**(含镜头语言/复用场景等 → 需求句向量被稀释)。实测例:「家常菜做到能开店水准」文档型全阈值错配,FAQ `score=0.69` 命中
**产出**:`极致事件卡片_文档型容器可行性实测_V1.0_20260923.md`;脚本 `7_doc_noblock.py`、`8_doc_vs_faq.py` + `out/7_*.txt`、`out/8_*.txt`。
**技能沉淀**:`weknora-structured-ingest` → **v1.2**(铁律 1 补实测论证 + 新增「选型结论:为什么文档型代替不了 FAQ」整节,含 5 配置分块表 + 三组命中率表 + 机制解释)。
**临时库已删**(HTTP 200);正式库 `MCN极致事件素材库` 与 `mcnvideoprompt` 未触碰;**短视频工作台技能文件零改动**。
---
## 15:45 麦芽平台「近 3 个月 ≥20w 赞」全量清单产出(2202 条 / 三格式)
**任务**:把热门短视频**无门槛全集**按「发布日期 ≥ 2026-06-23 且 点赞 ≥ 20w」过滤,落到表格。
**采集(browser-harness / CDP 9333,页面内 `fetch` + 轮询 `window.__ALL`)**
- 全集 **7917 条**(昨日 7904,+13);`pageSize=50 × 159 页`,**零异常页**
- 全集日期范围 **2026-02-09 ~ 2026-09-23**;近 3 个月区间内 3531 条 → **命中 2202 条(62.4%)**
- `uploadType` 分布:0=6439 / 1=1462 / 2=16(人工上传占 18.5%,与昨日 18.3% 一致 → 阈值不可依赖页面筛选的结论再次成立)
- ⚠️ **响应信封 = `total / rows / code / msg`,没有 `pages` 字段** → 页数须 `ceil(total/pageSize)` 自算(首轮探测按 `pages` 取值崩过一次)
**命中分布**:赛道 剧情 1194 / 生活vlog 971 / 美妆 31 / 空 6;月份 9月 304·8月 864·7月 836·6月 198;日期来源 发布 1738 / 上传 464;赞 20.0w ~ 2489w
**产物(仓库根,三格式同名)**
- `热门短视频清单_近3个月20w赞以上_20260923.xlsx` —— **主表**(`A1:P2203`,16 列 + 「统计概览」页;冻结表头 + 自动筛选 + 点赞/播放千分位 + 播放地址/详情页超链接)
- 同名 `.csv`(UTF-8 BOM)、同名 `.md`(口径三段 + 分布观察 + 点赞 TOP100)
- 脚本:`tools/_bh_pull_3m.py`(拉全集+过滤,含 `list_tabs` 复用标签页逻辑)/ `tools/_build_3m.py`(出三格式)
**工具链新事实**
- ⭐ 托管 venv(`D:\.workbuddy\binaries\python\envs\default`)**无 openpyxl、且 pip 装不上**(`pypi.tuna` 索引返回 "no versions")→ 需产真 `.xlsx` 一律走 **`D:/miniconda3/python.exe`**(自带 openpyxl 3.1.5 / pandas 3.0.5)
- browser-harness venv(`subskills/browser-harness/envs/browser-harness/Scripts/python.exe`)**可直接调用**(`pyvenv.cfg` 的 home 指向 uv `cpython-3.12.13` 仍在;`.pth` 相对路径 `../../../../src` 生效)→ **不设 PYTHONPATH 也能 import browser_harness**;调用前仍须 `unset *_PROXY` + `no_proxy=127.0.0.1,localhost`
---
## 16:00 补齐「近7天20w赞」Excel(用户口径:表格=Excel)
**原委**:用户此前说「昨天保存的热门短视频卡片的那张表」= `热门短视频清单_近7天20w赞以上_20260922`,但当时只落了 `.csv`/`.md`,**缺 `.xlsx`**(9-22 那轮未出 Excel)。本次补齐。
**产物**
- 新增 `热门短视频清单_近7天20w赞以上_20260922.xlsx`:3 个 sheet
- `近7天20w赞清单`(33 条,`A1:P34`):同 3 个月表的 16 列字段体系,冻结表头 + 自动筛选 + 千分位 + 播放地址/详情页超链接
- `推荐TOP`(13 条):口径「点赞 ≥50w 且同作者仅取最高一条」
- `统计概览`:采集口径 / 字段完整性 / 赛道分布 / 作者 TOP20 / 点赞区间
- 脚本:`tools/_xlsx_7d.py`(由 `tools/_hot7d_api.json` 直出 Excel;改常量即可换窗口)
**发现(md 待修)**
- `热门短视频清单_近7天20w赞以上_20260922.md` 的「二、推荐(8 条)」与其**声明的口径(点赞≥50w + 同作者最高)不符**:按该口径实为 **13 条**(癫婆/周小闹/李什么闯/橙子橙了/周小闹(胡闹)/周小小闹(大学宿舍)/万里/刘大炮/刘一朵/Hana/辣辣老师/A导/程盛)。判断是该表沿用上一版 15 条时的结果、重采后未同步重算。**Excel 版按声明口径给 13 条**。
**规律沉淀**
- ⭐ 「表格」在本项目语境 = **Excel(.xlsx)**,清单类产物默认**必须出 .xlsx**,csv/md 只是配套。
- 近 7 天 33 条中 32 个唯一作者(仅「橙子橙了」2 条);时长有值 13 / 空 20(与 `uploadType=0` 数量一致)。
---
## 16:05 「近3个月20w赞」也补齐 Excel(去掉 md)
**用户澄清**:「我是说把 7904 条中近 3 个月 20W 点赞以上的都保存到表格中,**表格是指 excel 表格**」+「不需要放到 md 文件」。
**执行**
| 操作 | 对象 | 详情 |
|:--|:--|:--|
| 重建 | `热门短视频清单_近3个月20w赞以上_20260923.xlsx` | 由「主表 + 统计概览」补为 **3 页**:`近3个月20w赞清单`(2202 条,`A1:P2203`)+ **`推荐TOP`(413 条,点赞≥50w 且同作者仅留最高一条)** + `统计概览`(新增「推荐TOP口径」块) |
| 改脚本 | `tools/_build_3m.py` | **删掉 md 生成段**,加 `推荐TOP` 页;现只出 xlsx + csv |
| 删文件 | 两份清单 `.md` | `热门短视频清单_近3个月20w赞以上_20260923.md`、`热门短视频清单_近7天20w赞以上_20260922.md` |
| 新增工具 | `tools/_del_md.js` | node `fs.unlinkSync` 直删(本机 `Remove-Item` 走 trash,非 ASCII 文件名必静默失败) |
| 更新技能 | `maiya-hot-video-export` → v1.2 | 铁律 5→6 条,新增第 6 条「⛔ 不产 md」;「导出三格式」改为「xlsx 主交付 + csv 配套」 |
**数据事实(3 个月窗口 2026-06-23 ~ 09-23)**:全集 7917,区间内 3531,命中 **2202**(62.4%);时长有值 1738 / 空 464;日期来源 发布 1738 / 上传 464;点赞 20.0w ~ **2489.2w**(`李要得` 生活vlog《青春没有售价,从重庆打出租车直达拉萨》);点赞 TOP 里 `周小闹`「饭店的暑假工」系列占 10+ 席。
**规律沉淀(升格)**
- ⭐⭐ **本项目「表格」= Excel(.xlsx),且只要 xlsx** —— 清单类交付**默认只出 xlsx(+ csv 配套)**,**写 md 属于过度交付会被要求删**。9-22 只给 csv/md、9-23 又给 md,连续两次被纠。
- 产物落点:仓库根目录(非 tools/),命名 `热门短视频清单_近{窗口}20w赞以上_{日期}.{ext}`。
---
## 16:35 极致事件卡片批量生产流程试跑(MCP 取解析 → 出卡 → 入 WeKnora FAQ 容器)
**用户要求**:调用 MCP 取这些视频的解析 → 生成极致事件卡片 → 存进 WeKnora 的 QA(FAQ)容器;**先跑 2 个看流程是否正常**。
**样本**:`38098` 晚叙miki《我的游泳教练好像有两幅面孔?》(剧情·情感反差,89s,34.4w赞)+ `28274` 旧梦留声机《最暖的归栖,是爷爷在的小屋》(剧情·亲情,247s,507.5w赞)
**产物 4 张卡 → 库内 11 → 15 条**
| 卡 | 事件 | 极致类型 | 主标签 | 答案字数 |
|:--:|:--|:--|:--:|:--:|
| A1 | 「冷面私教」与「网恋撒娇小狗」同体错位 | 戏剧极致·错位 | 反差 | 776 |
| A2 | 雨夜湿身敲门 · 高冷男神的卑微挽留 | 戏剧极致·反转 | 反差 | 723 |
| B1 | 爷爷逆光推门 ·「娃不用你们轮了,以后我带」 | 戏剧极致·反转 | 反常识 | 789 |
| B2 |「帮我带娃」的善意谎言 · 用求助的名义给爱 | 感官极致·细致 | 反常识 | 929 |
**终验**:标准问 top1 4/4(0.79/0.84/0.81/0.80)|口语问法 top1 4/4(0.68/0.68/0.73/0.70)|答案长度与卡片原文**逐条相等**(原子性 ✅)|`dry_run` 4/4 → 正式导入 `success=4 failed=0`
**新发现(实测,非推演)**
1. ⛔ **`POST /faq/entries/{id}/similar-questions` 写库成功但不重建向量索引** —— 读回 6 条相似问,可探针分数**按位未变**(A1 0.6477 → 0.6477)。改问法只能 **`DELETE /faq/entries {"ids":[…]}` + 重导**;重导后 A1 升到 0.6833,口语探针 3/4 → **4/4**。
2. ⛔ **单条 `POST /faq/entry` 建的条目检索不到**(等 10s 仍 0 命中)→ 入库一律走**批量通道** `POST /faq/entries`(临时条目已 DELETE 清理)。
3. ⚠️ **解析(`analysis`)场次表里的「极致触点」是布位层口径(4.5 的 A 层),不是卡片第 3 字段的效果侧 B** —— 照搬=口径错置;`极限维度` 里的机制词(反差/身份落差)应归 `事件标签`/`极致类型`,`真实毛边` 可直进 `极致内容`。
**产物/脚本**
- 卡片源:`tools/weknora-ingest/1_cards_batch1_20260923.md`(```text 围栏,一卡一块)
- 入库脚本:`tools/weknora-ingest/2_import.py`(定位库→按 `standard_question` 判重→建缺失标签→dry_run→正式导入→落库核对→检索终验,全幂等);输出 `out/2_import.txt`
- 试跑报告:`极致事件卡片_MCP批量生产试跑报告_V1.0_20260923.md`
- 容器:`MCN极致事件素材库`(`e6772e41-7b72-499d-b46c-e5ca7c9d1740`),标签 反差 6 / 反常识 4 / 难度极限 2 / 自嘲反差 1 / 食材极致 1 / 预见式服务 1
**放量待定**:近7天 33 条 / 推荐TOP 413 条 / 全量 2202 条(2200–6600 张卡)三档;另需定「归属库字段」(剧情亲情类填 `横切未定` 只写 10 字段)与卡片命名编号规则。
**沉淀**:技能 `weknora-structured-ingest` 升 **v1.3**(铁律 5→6 条,新增「改相似问必须删+重导」「勿用单条建卡」;新增「第五步:批量产卡」与「上游解析口径陷阱」两节)。
---
## 无人值守批量生产(自动任务链)—— 已排程
**范围定档**:全量 **2202 条按点赞降序**(高价值优先,跑不完也先吃高赞),不再纠结 33/413 三档;归属库字段暂按「剧情亲情类 = 横切未定,只写 10 固定字段」;卡片编号定 `{来源详情ID}-{序号}`。
**排程**:**单次自动任务链**(非 recurring)—— 每批 5 条,处理完自己建下一个单次任务;窗口 **23:10–次日 08:00**,窗口外/临近 07:45 顺延当晚 23:10,队列空则收尾不建。
- 首个任务 id `cff38308-4992-4c80-8543-e669b0b3effb`,`scheduledAt=2026-09-23T23:10`,cwds `D:/AI技能/mcn-short-video`。
- 速度预估:窗口 530 分钟 → 每批 6/10/15 分钟 ≈ 440 / 265 / 175 条视频一夜。
**新增脚本(全幂等,可重复跑)**
| 脚本 | 作用 |
|:--|:--|
| `tools/weknora-ingest/0_queue_init.py` | 由 `_hot3m_api.json` 生成 `queue.json`(2202 条按赞降序)+ `state.json`(done 预置 38098/28274) |
| `1_next_batch.py [n]` | 取下一批(默认 5),跳过 done/skipped,写 `out/next.json` |
| `2_import_batch.py <md> <spec.json>` | 通用批次导入(判重→建标签→dry_run→正式→终验 0.5);**退出码 2 = 库不存在** |
| `3_done_batch.py --ids … --cards N --imported M [--skip id:原因]` | 登记进度、推进 cursor,输出 `CONTINUE` / `QUEUE_EMPTY` |
- 批次产物落 `tools/weknora-ingest/batches/batch_NNNN.md` + 同名 `.spec.json`。
- **作业手册 `tools/weknora-ingest/RUNBOOK.md`** = 自动任务的唯一权威上下文(8 步骨架 + V1.3 卡片规格 + 6 条红线 + 窗口判定表 + 接续 prompt 模板 + 故障速查)。以后改口径先改这里。
## 极致事件卡片 · 批次 1 落地(23:10–23:30,无人值守自动任务首跑)
- 处理 5 条:`33304`李要得·打出租车去拉萨 / `33295`李斯曼曼·生产日记 / `26220`这是TA的故事·吹风机夫妻吵架 / `24868`快乐的阿放·七彩中国 / `24520`赵哥·澳门看女儿演唱会。
- 出卡 **15 张**(每条 3 张),全部 `所属库:横切未定`(旅行/孕产/夫妻剧情/风光混剪/明星家属,均不属 8 库形态)。
- 导入 FAQ 库 `MCN极致事件素材库`:**15/15 成功,检索终验 15/15 ✅**(score 0.587–0.805),库内 **15 → 30 条**。新增标签:价值观冲击、视觉冲击。
- 产物:`batches/batch_0001.md` + `batch_0001.spec.json`;日志 `out/import_batch_0001.txt`。进度:完成 7 | 剩余 2195/2202。
- 🐛 **新坑(已治本)**:`GET /faq/entries` 默认 `page_size=20` → 不分页读数静默偏低(导入 15 条后脚本报「20」,真实 30),且**判重走同一条读取路径**会失效。已给 `2_import_batch.py` 加 `list_entries()` 分页读全(`page_size=100` 按 `total` 收口),并写进 RUNBOOK §步骤7 与技能 `weknora-structured-ingest` 红线 7。
- 接续任务已建:`MCN极致事件卡片批量生产 · 第2批`,2026-09-23 23:29 单次触发。
## 23:29-23:45 极致事件卡片批量生产 · 批次 2(自动任务)
- 5 条视频 23166/28268/20217/28348/30102 → 15 张 V1.3 卡,写 batches/batch_0002.md + .spec.json
- 导入 WeKnora FAQ 库 15/15,检索终验 15/15 ✅(阈值 0.5,score 0.67-0.80),库内 45 条;新建标签「品质对比」
- 拆卡经验:剧情/职场长视频(130-140s)按「开场钩子 / 中段冲突升级 / 结尾反转奖惩」拆 3 卡最稳
- RUNBOOK 已回写批次 2 记录与拆卡经验;已建下一个单次任务「第3批」@ 2026-09-23T23:45
## 23:45-23:55 极致事件卡片批量生产 · 批次 3(自动任务)
- 5 条视频 17449/21818/28008/24791/20384 → 15 张 V1.3 卡,写 batches/batch_0003.md + .spec.json
- 导入 15/15,检索终验 15/15 ✅(阈值 0.5,score 0.71-0.79),库内 60 条;首个「自嘲反差」主标签卡
- 新经验:同系列账号(周小闹·暑假工)同批 4/5 时,主标签必然撞车 → 相似问必须绑定各自具体桥段;超长视频(356s)拆 3 卡只取开场破冰/中段人情高潮/圆梦反转,高光场面宁弃勿挤
- RUNBOOK 已回写批次 3 记录;已建下一个单次任务「第4批」@ 2026-09-23T23:58