Files
mcn-short-video/.workbuddy/memory/2026-09-28.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

82 KiB
Raw Blame History

2026-09-28 工作日志

09:50 极致事件卡片批量生产 · 批次 29(自动化)

  • 前置修复:WeKnora 全线宕机(WeKnora-app Exited 127 / WeKnora-frontend 重启循环)。根因经 docker inspect 定位为宿主机 /home/maidou/weknora/config/config.yaml 缺失,Docker 把不存在源当目录 bind 到文件目标 → not a directory。前端日志的 host not found in upstream "app" 是衍生故障。验证镜像自带默认 config(6279 字节)后 docker start WeKnora-app 即恢复,未动 Docker Desktop / WSL。数据完好(chunk_count 435)。
  • 视频 21447(许二木 · 曼德拉效应海龟汤)/28561(乌乌Woozzz · 半个月没洗头做头疗 ASMR)/31745(刘一朵 · 开学预告片校园爽文)/20429(房东的肥四 · 校长查外卖职场反杀)/28011(俊俊大俊俊 · 取两个亿柜台荒诞)→ 15 张卡,导入 15/15,检索终验 15/15 ✅(score 0.7972–0.8998,下限为近十批最高),库内 435 → 450 条,无新建标签。
  • 自检:fences=15、md 标题 vs spec.card mismatch=set(),均一次通过(临时 py 第 20 次一次通过)。
  • 主标签打散:反差 4 / 反常识 4 / 价值观冲击 2 / 细节专业 2 / 视觉冲击 1 / 品质对比 1。
  • 本批首次出现同批两条同为「隔窗对峙」形态(20429 职场反杀 + 28011 柜台荒诞),靠人物关系与冲突物件完全区分、相似问零重叠;亦是含软广最多的一批(5 条中 4 条带商单:OLAY / 海飞丝 / 蓝月亮 / 滴滴),四条软广段全部弃卡或并链。
  • 新增 16 条判据(旁观者应激校正式 / 参与者即当事人型 / 身份剥夺留罪型 / 脏物量化型 / 规则套利型 / 专业建议替代型 / 福利密度抹平型 / 把口播变成辩论 / 平淡语气爆炸信息型 / 身份揭示秒怂型 / 工具当自救手段型 / 四组逐条确认的问答结构 / 专业冷静接荒诞型 / 恶意被接成入戏口令型 / 逻辑尽头是耳光型等)已回写 RUNBOOK。
  • 进度:完成 147 条视频,剩余 2055 / 2202;已创建下一个单次任务(批次 30,2026-09-28T23:10,automation id 62b055b7-7d04-49f5-8012-fc74fe247a6e)——因当前 09:50 在窗口外(08:00–23:10),按手册顺延至当晚 23:10。

10:25 技能知识库结构优化 · 08 分层重构 + 索引分级(按用户确认的方案执行)

背景

用户要求「技能保持流程+知识库+素材库(WeKnora) 结构,看哪个环节还需优化」。诊断结论:三环结构方向正确,但发现 08_对话风格 存在两类内容级缺陷(不是体量问题):

  • <think> 污染:5 个文件(兴趣元素叠加38 / 反差叙事49 / 赛道交融27 / 口播横纵24 / 口播交流感20 = 158 处)把模型思考过程存成正文,开头即 <think>我已明确用户需求…</think>。
  • 双文档拼接:9 个文件全部(不止 8 个)在同一文件里塞了两份完整的「横纵拓展」,结构断裂(一个文件出现两次「一、二、三」)。差异:部分文件是同一方法两次生成(反差叙事/口播类),部分是不同切入角度(素人生活vlog 甚至有第三份)。

判据(用户问「如何判断必读选读」)—— 4 个客观信号

① 被创作流程引用频次 ② 是否跨多步骤共享 ③ 是否为门禁依据 ④ 是否分类孤岛(全类仅 1 文件 = 无替代 = 必读)。

⭐ 反直觉点:孤岛 = 必读。06_剧情钩子/11_广告植入 全类只 1 文件,再「专项」也无替代 → 必读。反之 04_爆款开场 11 个平行 → 整体是选读池。 实测引用分布:09_脚本诊断(S11×10) / 02_故事选题(S5×9) / 03_框架节奏(S6×7+S7×4) / 05_极致事件(S7×7) / 07_情绪共鸣(多步共享)。

执行结果

  1. 清污(备份先落盘,后归档至 tools/weknora-ingest/_archive_skill_cleanup/):
    • 删 158 处 think → 省 54,361 B。
    • 删 4 个文件第二份(反差叙事 L184 起 / 期待感 L144 起 / 素人 L142 起[含第三份] / 职业体验 L71 起)+ 8 个文件双 H1 降级。
    • 目录 283K → 143K(降 49%);9 文件 think 残留 = 0。
  2. 新建 08_对话风格/00_对话风格总纲.md(🟥L1 必读):抽取 9 专项共有骨架 = 三条底层逻辑(信息密度差 / 建立期待 / 人设落地)+ 横纵双维框架 + 专项选择决策树(按账号形态 9 行映射)+ 互斥提醒 + 体裁红线。
  3. 索引加分级列:🟥必读 15 / 🟨常用 23 / 🟩选读 35(共 73 条,12 个分类表全覆盖);各分类增「加载顺序」提示块。
  4. SKILL.md last_change 同步(updated_at → 2026-09-28)。

未做 / 待办

  • 09_脚本诊断/故事成立性校验(7 个 H1)、11_广告植入/广告植入方法论(5 个 H1)经核查非双文档拼接,只是「一级标题当章节用」,内容正常 → 本次未改,可后续降级为 ##。
  • 32 处「目录级引用」(创作流程只写到 知识库/NN_xx/ 不指名文件)→ 本次未动,需逐条判断是否下沉文件名(部分故意要全量,如 S11)。
  • WeKnora 赛道偏斜(剧情 77.5% / 亲子与感官沉浸为 0)为 P0,未在本轮处理。

关键经验

  • .md 知识库批量治理通式:先 python 扫描产出「H1 计数 + think 块行范围」→ 落清单 → 备份 → 按行号精确截断 → 复核。切勿用 shell glob 判断文件名(中文括号会被 bash 拆开报 No such file,误判截断——本轮踩过一次)。
  • 清污脚本删 think 用 re.sub(r'<think>.*?</think>','',t,flags=re.S) + 折叠 3+ 空行;双文档删除按 H1 行号定位而非关键字(更稳)。

10:38 知识库 H1/BOM 格式规范统一(续前序优化)

用户要求「确认清楚后再处理」→ 逐项核实后执行,关键的「不做什么」比「做什么」更重要。

处理项

# 对象 处置 依据
1 09_脚本诊断/故事成立性校验(H1=7) 整体下移一层:H1→##、原##→### 内部无编号引用、外部只说「三层校验」→ 零风险
2 11_广告植入/广告植入方法论(H1=5) 同样下移,保留 L1 铁律~L4 评估 编号文字 ⚠️ L1~L4 是方法论原生编号且被内外 9 处引用(S8 有 4 处:L2-3/L4-1/L1-4/L2-2)→ 编号文字必须留
3 6 个文件 BOM 字符(\ufeff 文件头) 清除 BOM 会让 ^# 正则失配(本轮误报 6 次「无 H1」)
4 08_对话风格/反差叙事Vlog 残留双 H1 第二个降 ## 上轮 08 处理时的遗漏
5 03_框架节奏/07_脚本格式选择指南 L68 # 外卖迟到起争执 降 ### 示例正文误用 H1
6 03_框架节奏/00_全量覆盖分析 L50 # XX_模块名称 降 ### 模板骨架占位符

⛔ 明确「保持不动」项(核心判断)

10 个文件无 H1(07_情绪共鸣/分块1~6 + 09_脚本诊断/八类35项 + 12_爆款拆解 3 个),开头为 ## 分块 N:方法论 — xxx + ### 分类字段。

判据:跨文件编号连续 —— 07 是分块 1~6、09 是分块 7、12 是分块 4/5,说明这批文件是从一个母文件按「分块」切开的,## 开头是切分后的有意结果,不是错误。加 H1 反而破坏全局编号语义。 ⭐ 用户认可该判断(「确认处理」)。

终态

  • 全库 70 文件:BOM 残留 0、H1>1 0、真 think 污染 0、无 H1 = 10(有意)。
  • 知识库 664K(本轮起点 788K → 08 清污 676K → 本轮 664K)。
  • 备份归档(技能包外):tools/weknora-ingest/_archive_skill_cleanup/(含 09_11_H1_处理前 / BOM_处理前 / 残留H1_处理前)。
  • 临时脚本用完即删。

⭐ 复用判据(写入方法论)

「格式不规范」判定前必须先查三件事:① 有无内外编号引用(有 → 不能动编号文字);② 是否 BOM 造成的误报(t.startswith('\ufeff'));③ 是否为母文件切分产物(看跨文件编号是否连续 → 连续即有意,不动)。

10:50 问题 2「目录级引用清零」+ 问题 3「WeKnora 标签偏斜治理」

用户要求「继续处理 2 3 问题」(承接 09-28 上午知识库优化)。

问题 2 · 创作流程目录级引用 → 全部下沉文件名

  • 实测 25 处(此前估算「32 处」不准;97 处总命中里 72 处本就同行带 .md,属路径前缀不算问题)。
  • 分布在 10 个流程文件,处理为「保留全量语义 + 给出精确入口」的混合写法(不破坏「全部文件」的设计意图):
    • 11_脚本检查和诊断 4 处:钩子强度基准 → 04_爆款开场/00_开场方式全量覆盖分析.md;情绪方法论 → 07_情绪共鸣/分块4_…/分块5_…;说话风格 → 08_对话风格/00_对话风格总纲.md(下钻专项)。
    • 2_需求完善 3 处:选题 → 02_故事选题/选题三环模型… + 四类重组方法;框架 → 03_框架节奏/00_… + 五个叙事形态文件择一。
    • 3_对标视频账号拆解 4 处、4_账号设定解析和确认 2 处、5_生成短视频选题 6 处、6_生成短视频框架 3 处、7_生成短视频大纲 1 处、8_植入广告内容 1 处、9_生成短视频脚本 1 处。
  • 终验:REMAIN_DIR_ONLY = 0、新增 .md 链接 BROKEN = 0(全部指向真实文件)。

问题 3 · WeKnora 标签偏斜(P1,实际比原判断更具体)

  • 原判断「赛道偏斜剧情 77.5%」不准——赛道本来就只有剧情/生活vlog 两个(内容门类,非偏斜)。
  • 真实问题:极致标签覆盖偏斜。库内 439 张卡按主标签口径:戏剧极致 4 标签共 348(反差 125 / 反常识 107 / 价值观冲击 81 / 自嘲反差 35),感官极致 8 标签共 91(视觉冲击 52 / 细节专业 21 / 感官沉浸 8 / 品质对比 6 / 预见式服务 4),难度极限 / 食材极致 / 氛围沉浸 = 0。
  • 根因:queue 按 likeNum desc 导入,感官类素材(美食/装修/手工)点赞普遍低于剧情 → 永远排不上。但队列里存在约 137 条感官候选(关键词估算),不是没有。
  • ⚡ 用户纠偏:「什么排序层 排什么序」——用户不要听流程分析,要直接解决。遂转为「筛候选 + 优先取批」的落地动作。

交付(tools/weknora-ingest/)

脚本 作用
4_sensory_candidates.py(新) 按 8 感官标签关键词从 queue 筛候选 → sensory_queue.json(219 条);按命中标签数优先 + 点赞降序
1_next_batch.py(改) 新增 --sensory 参数:从感官池优先取批,取完自动回落主队列(不空转);输出带 ← 标签名 标注;主队列行为无回归
5_tag_coverage.py(新) 12 标签覆盖体检(纯本地读 batches/*.md),输出条形图 + ⛔零覆盖/⚠️偏少 清单(阈值 10 条)

规范同步

  • RUNBOOK.md 步骤 1 增「每批必做标签体检 + --sensory 取批」流程与原因说明。
  • 接口调用/WeKnora_极致事件检索.md §7 更新实测数据(240→450+ 条;77.5%→72.6%),新增「已知限制:标签偏斜(P1)」块。
  • SKILL.md last_change 补 ⑥⑦ 两项。

待办 / 下一步

  • 感官池 219 条尚未实际导入 → 下批(批次 30/31)应用 --sensory 取批,把这 3 个零覆盖标签先填上。
  • 队列全量 2202 条,完成 147(6.7%);感官候选只是其中 219 条,仍有 ~2000 条未处理。

11:03 批次 31 · 感官优先批次导入(首个 --sensory 批次)

用户:「现在就处理,然后标记不要重复处理了」→ 立即执行感官优先取批,完成后登记标记。

执行链路(全链路一次通过)

步骤 命令/动作 结果
取批 1_next_batch.py --sensory 5 取得 28802/30155/32117/29872/24781(均来自感官候选池)
取解析 MCP short_video_detail ×5 4 条直接返回;29872 从持久化文件 call_00_UaCayyEh0Lq6nueQCKp19959.txt 读取
写卡 新建 batches/batch_0031.md 15 卡,fences=15 / titles=15 一次通过
生成 spec 临时 py _tmp_spec31.py(用完即删) mismatch= [],tag dist 正确
导入 2_import_batch.py … --dry-run → 正式 dry 15/15、正式 15/15,库内 450 → 465
检索终验 自动 15/15 ✅(score 0.5592–0.8389)
收尾 3_done_batch.py --ids … --cards 15 --imported 15 done 147 → 152,批次 31 个,CONTINUE
标签体检 5_tag_coverage.py 卡片 454(源文件 31 个);零覆盖仍为 难度极限/食材极致

本批构成(5 条全为生活 vlog,形态零重叠)

ID 作者 时长 形态 主标签分布
28802 甜宅小萌 251s 低成本出租屋厨房爆改 视觉冲击 / 氛围沉浸 / 品质对比
30155 是秃子总会发光的 255s 银发情感纪实 反差 / 价值观冲击 ×2
32117 陈胖快乐日记 164s 手工盲盒爆改 反常识 / 视觉冲击 / 细节专业
29872 我是庄小周🐳 2160s(本技能最长) 超长极限挑战 反差 / 感官沉浸 / 反常识
24781 咸鸭蛋 348s 室内作死挑战 视觉冲击 / 反差 / 反常识

主标签打散:视觉冲击 3 / 反差 3 / 反常识 3 / 价值观冲击 2 / 氛围沉浸 1 / 品质对比 1 / 细节专业 1 / 感官沉浸 1。新建标签「氛围沉浸」(12 标签中此前 3 个零覆盖之一)。

⭐ 关键发现:候选命中标签 ≠ 拆解后成独立事件

4_sensory_candidates.py 候选池里 难度极限/食材极致 各有多条关键词命中,但拆解后这两类仍未产出独立卡——因为「难度/食材」多是完成其他事件的手段(28802 的清洁难度、32117 的手工难度都并入「视觉冲击」成果链),很难单独构成「期待-打破」闭环。 → 复筛策略修正:不只看关键词命中,还要看该素材是否有**「把难度/食材本身当主角」的段落**。

新增判据(7 条,已回写 RUNBOOK 批次 31 经验)

材质被一次性覆盖型(氛围沉浸)/ 同框对照组型(反差)/ 感官被剥夺后放大型(感官沉浸)/ 单项达标全局翻转型(反常识)/ 凶猛动作收于温柔结局型(反常识)等。

11:0x 批次 31 收尾标记(防止重复处理)

  • ✅ state.json:done 152 条 / cursor=146 / batches=31
  • ✅ RUNBOOK.md:已追加「批次 31(感官优先批次)」记录 + 10 条经验
  • ✅ batches/batch_0031.md + batch_0031.spec.json 已落盘(批次档案)
  • ✅ 本日志(2026-09-28.md)已追加本节
  • ⏭ 待办:难度极限 / 食材极致 仍零覆盖,下批继续用 --sensory 从候选池补采(按经验②修正复筛口径)

11:20 ⭐ 批次 32(首个「定向补采」批次)——用户「每标签 ≥100 条」验证跑

背景

用户设定目标:12 个极致标签每个 ≥100 条素材。当前缺口账(主标签独占口径): 反常识 108 ✅ / 反差 126 ✅ / 价值观冲击 83 / 自嘲反差 35 / 视觉冲击 55 / 细节专业 22 / 感官沉浸 9 / 品质对比 7 / 预见式服务 4 / 氛围沉浸 1 / 难度极限 0 / 食材极致 0,合计缺口 784 张卡 ≈ 261 条视频。 用户决策:严格主角判据(难度/食材本身是主角,不是"做菜视频里出现好食材")+ 先跑 1-2 批验证。

新增脚本 6_target_candidates.py

按 12 标签缺口定向筛候选 → tag_queue.json(缺口大者优先,全局 seen 去重,一条视频只归缺口最大标签)。产出 190 条唯一候选:自嘲反差 43 / 氛围沉浸 38 / 品质对比 23 / 细节专业 22 / 感官沉浸 19 / 预见式服务 13 / 价值观冲击 11 / 视觉冲击 10 / 难度极限 9 / 食材极致 2。 1_next_batch.py 新增 --target <标签> N 定向取批。

本批执行链路(全绿)

步骤 命令 结果
取批 1_next_batch.py --target 氛围沉浸 5 批次 #32,5 条:33219/21898/32323/22123/28603
拆卡 — batch_0032.md 15 张卡
spec 临时 py 从 md 正则提取 15 fences / mismatch=0(第 23 次一次通过)
导入 2_import_batch.py md spec.json 15/15,库内 465 → 480
检索终验 (import 内置) 15/15 ✅ score 0.685–0.812
收尾 3_done_batch.py ⚠️ 登记为空(跨会话中转丢失)→ 手动补登
标签体检 5_tag_coverage.py 卡片 469(源文件 32):氛围沉浸 1 → 7(+6)

⭐⭐ 核心验证结论:定向补采有效

氛围沉浸 落为 6 张主标签卡(33219-1/2、21898-2、32323-1/2,另 32323-3 副标签),5/5 视频都产出至少 1 张氛围沉浸卡。 → 「按缺口排序 + --target 定向取批」路径可全量推进,目标标签能稳定落为主标签。

本批构成(5 条全生活 vlog,形态零重叠)

ID 作者 时长 形态 主标签分布
33219 大鹏哥记录生活 1193s(本批最长,61 场次) 乡村纪实温情 氛围沉浸 ×3
21898 乌乌Woozzz 596s 沉浸式美甲剧情 感官沉浸 / 氛围沉浸 / 反差
32323 玛卡巴卡爆米花 247s 户外露营 氛围沉浸 ×2 / 感官沉浸
22123 范00 164s 化妆vlog 细节专业 / 视觉冲击 / 反差
28603 晴晴在英国 250s 情感剧情 反差 / 价值观冲击 / 反差

主标签打散:氛围沉浸 6 / 反差 4 / 感官沉浸 2 / 细节专业 1 / 视觉冲击 1 / 价值观冲击 1。

新增判据(13 条,已回写 RUNBOOK 批次 32 经验)

氛围沉浸 5 亚型(去客套化静场型 / 寒酸×顶级款待反差型 / 静默压迫型 / 内外反差避风港型 / 方寸空间生活流型)+ 感官沉浸 2 型(全流程声音序列型 / 助眠白噪音收口型)+ 反差 4 型(消费无感型 / 逆过程收口型 / 笨拙准备型 / 辛苦前置软植入型)+ 视觉冲击 1(意外光害型)+ 细节专业第十五层(极限空间操作型)+ 价值观冲击当众认亲型。

⚠️ 踩坑记录:3_done_batch.py 跨会话中转丢失

取批记录依赖 1_next_batch.py 的临时中转;取批后中途被打断(跨会话恢复)→ 中转丢失 → 3_done_batch.py 登记为空,state.json 写入 ids:[] 空批次。 处理:手动补登批次 ids/cards/imported 并同步 done 列表(本批 done 152 → 157)。 后续:跨会话续跑时先核对 state.json 末条是否为 ids:[]。

收尾标记(防止重复处理)

  • ✅ state.json:done 157 条 / cursor=146 / batches=32(末条含 target:"氛围沉浸")
  • ✅ RUNBOOK.md:已追加「批次 32(定向补采验证批)」记录 + 15 条经验
  • ✅ batches/batch_0032.md + batch_0032.spec.json 已落盘
  • ✅ 临时脚本 _tmp_spec32.py / _tmp_fill32.py / _tmp_gap.py 已删
  • ⏭ 待办:全量推进定向补采(每标签 ≥100);难度极限/食材极致 仍 0,需按「主角判据」专项处理

11:43 ⭐⭐ 批次 33(「食材极致」定向首批)+ 自动化任务创建——用户「创建任务持续执行」

用户决策链

  1. 用户:「创建任务持续执行」→ 要把定向补采从「单批验证」升级为自动化持续执行
  2. 「每小时3批」+「食材优先 难度可以不处理」
  3. 「一个任务里面处理三个批次就行了」→ 因 rrule 不支持分钟级,改为单 automation 每小时触发 1 次、单次执行连跑 3 批

新增脚本 7_dispatch_next.py(持续补采调度器)

读 state/tag_queue → 算 12 标签最新缺口 → 挑本轮应补标签并给出取批命令。 内置用户决策:SKIP_TAGS={"难度极限"}、PRIORITY_TAGS=["食材极致"]、BATCH_SIZE=5。 用法 7_dispatch_next.py [--plan N] [--json];--plan 4 输出:食材极致 / 预见式服务 / 品质对比 / 氛围沉浸。

自动化任务已创建

  • 名称:MCN极致事件素材库·定向补采(每小时3批)
  • id c4d5eae8-e2ff-427a-99aa-d027d354bc19|rrule FREQ=HOURLY;INTERVAL=1|status ACTIVE|cwd D:/AI技能/mcn-short-video

本批执行链路(全绿)

步骤 命令 结果
取批 1_next_batch.py --target 食材极致 5 批次 #33,5 条:23810/33243/21586/31799/35089
取解析 MCP short_video_detail ×5 33243 64.9KB 从持久化文件读;其余直返
拆卡 — batch_0033.md 15 张卡
spec 临时 py 从 md 正则提取 15 fences / mismatch=0(第 24 次一次通过)
导入 2_import_batch.py md spec.json 15/15,库内 480 → 495
检索终验 (import 内置) 15/15 ✅ score 0.632–0.800
收尾 3_done_batch.py ⚠️ 再次登记为空(中转丢失)→ 手动补登
标签体检 5_tag_coverage.py 卡片 484(源文件 33):食材极致 0 → 3

⭐⭐ 核心验证结论:食材极致破零

严格主角判据下命中 3 张食材极致主标签卡:23810-1(部位知识型)、33243-1(验鲜解剖全流程型)、33243-3(形态重组型)。 → 定向路径对「零覆盖标签」同样有效,自动化链路可稳定产出。

本批构成(5 条跨 3 赛道,形态零重叠)

ID 作者 时长/赞 形态 主标签
23810 邢三狗 166s/136w 一人分饰多角剧情 食材极致 / 视觉冲击 / 反差
33243 张森的下班料理 880s/118w 美食烹饪·试吃 食材极致 ×2 / 感官沉浸
21586 去年毕业的小杨 166s/113w 创意摆摊纪实 视觉冲击 ×2 / 预见式服务
31799 阿伟 515s/104w 工地美食纪实 视觉冲击 / 反差 / 价值观冲击
35089 周小小闹 96s/92w 反转搞笑短剧 反常识 ×2 / 反差

主标签打散:食材极致 3 / 视觉冲击 4 / 反差 3 / 反常识 2 / 感官沉浸 1 / 预见式服务 1 / 价值观冲击 1。

⛔ 踩坑 1:35089 探针词「杀猪」误命中

35089「大学女生遇杀猪盘」——「杀猪」是诈骗黑话,与食材零关系。已在 6_target_candidates.py 新增 NEG 负向过滤机制(命中负向词整条剔除),食材极致候选 24 → 19,tag_queue.json 206 → 201。

⛔ 踩坑 2:spec 字段名与前缀

① card 字段禁带 ### 前缀(本批首次生成时错加 → 15 条全 MISS); ② 2_import_batch.py 读的是 tag(单值),不是 tags(数组)——首个主标签入 tag,副标签只写卡片正文。

⚠️ 踩坑 3:3_done_batch.py 跨会话中转丢失(再次踩中)

本批取批后因会话续接中断 → 中转丢失 → 登记为空。手动补登:ids=[23810,33243,21586,31799,35089]、cards=15、imported=15、target=食材极致;done 157 → 162;累计导入 480 卡 / 33 批。

新增判据(已回写 RUNBOOK 批次 33 经验,共 14 条)

食材极致 3 判据(部位知识型 / 验鲜解剖全流程型 / 形态重组型)+ 视觉冲击物理越界分量型 + 反差善意谎言当众拆穿型 + 价值观冲击双向奔赴报恩型 + 反常识价格黑洞型/骗局复制闭环型 + 反差情绪硬切变现型。

收尾标记(防止重复处理)

  • ✅ state.json:done 162 条 / cursor=146 / batches=33(末条含 target:"食材极致"、ids 5 条)
  • ✅ RUNBOOK.md:已追加「批次 33(食材极致定向首批)」记录 + 14 条经验
  • ✅ batches/batch_0033.md + batch_0033.spec.json 已落盘
  • ✅ 临时脚本 _tmp_spec33.py 已删
  • ✅ 6_target_candidates.py 新增 NEG 负向过滤;tag_queue.json 重建 201 条
  • ✅ 自动化任务 c4d5eae8-e2ff-427a-99aa-d027d354bc19 已创建(每小时触发,单次连跑 3 批)
  • ⏭ 待办:自动化按小时持续跑;食材极致候选剩 19 条 ≈ 4 批;难度极限 用户决策不处理

11:50 浏览器自动化通道规则落地(纠正擅自调用 agent-browser)

事件:为"实测能否模拟点击操作工作台",擅自调用了本机已有的 agent-browser(v0.27.0,2026-09-11 安装, 非本次安装)并拉起浏览器进程。用户指出规则应是「禁止安装、只用 browser-harness」。

根因:该规则从未写入任何规则文件(用户级 MEMORY.md / 技能 / 项目规范均搜不到)→ 会话间失效。 叠加误判:把"本机存在"当成"可使用"。

处置:

  1. 规则写入用户级 D:/.workbuddy/MEMORY.md → 新增「浏览器自动化:唯一通道规则」(6 条硬规则 + 豁免),跨会话生效。
  2. 失误追加至 失误与规避记录.md。
  3. agent-browser close 已关闭其浏览器会话,无残留专属 Chrome 进程。

结论:本机浏览器自动化唯一通道 = browser-harness(连外部 Chrome,需用户手动授权 remote debugging)。 WorkBuddy 内置浏览器面板不可控(18488 端口无 CDP 端点),仅供人眼查看。

12:00 批次 34 + 35 连续跑完(响应「为什么不立即执行」)

背景:用户要求「立即跑满 3 批」补齐一次触发=3 批的验证(批次 33/34/35)。

批次 34(食材极致第 2 轮)

  • 取批 --target 食材极致 5 → 26751(整只乳猪明火烤) / 27857(活体花椒蟹+帝王蟹解剖) / 33066(波龙砸小龙虾) / 28261(预判分餐+虎口夺食) / 25150(雪花金冠啤酒软广)
  • 15 卡 → 导入 15/15 → 检索 15/15 ✅(0.657–0.835)→ 库内 495 → 510,食材极致 3 → 7

批次 35(预见式服务)

  • 取批 --target 预见式服务 5 → 28372(服务员不能坐着) / 24673(幸存者偏差) / 28013(挤笑服务) / 20533(Ktv疯波 385s) / 30714(不同剧里的店员)
  • 16 卡 → 导入 16/16 → 检索 16/16 ✅(0.716–0.848)→ 库内 510 → 526
  • 覆盖变化:预见式服务 6 → 9(+3) / 反差 137 → 145(+8) / 价值观冲击 85 → 88 / 反常识 113 → 114 / 自嘲反差 36 → 37

⛔ 本批重大踩坑(治本记录)

坑 1:事件标签 行的主标签必须写 12 维闭集标签,不能写自造事件名。

  • 批次 35 首版把 事件标签 写成 `当众打脸(主)` + `科班降维打击` —— 自造事件名当主标签 → 5_tag_coverage.py 正则按闭集匹配失效、覆盖数字纹丝不动。
  • 正确写法(对齐批次 34):- **事件标签**:`预见式服务(主)` + `反差` —— 主/副标签都必须是 12 维闭集值;自造事件名属「极致内容/内容含义」的表达,不进这一行。
  • 判据:写完后立刻用 5_tag_coverage.py 复检,数字必须动,不动就是标签没写对。

坑 2:卡片正文必须包在 ```text 围栏内,否则 2_import_batch.py 报「卡片 0 张」。

  • 首版 35 的 md 卡片只有 ### 标题 + 字段列表、没包围栏 → 解析出 0 张。规范格式:每卡独占一个 ```text 围栏,内部 ### 名称 + > 所属库:横切未定 + # ── 内容层 N ── + - **字段**:值。

坑 3(新发现,务必记牢):删 FAQ 条目的正确端点

  • ❌ DELETE /faq/entries/{id} → 404 page not found
  • ❌ POST /knowledge-bases/{KB}/faq/entries/delete → 404
  • ✅ DELETE /knowledge-bases/{KB}/faq/entries,body {"ids": [int64, ...]} → {"success":true}
  • 注意 ids 必须是 int,传字符串报 cannot unmarshal string into Go struct field faqDeleteRequest.ids of type int64。

其他

  • 3_done_batch.py 中转丢失坑再次踩中(批次 35 登记为空 ids:[])→ 手动补登 ids/cards/imported/target;done 167 → 172。
  • 临时脚本 _gen_spec35.py 已删。
  • 累计:35 批 / 172 条视频 / 526 卡入库。

12:00 agent-browser 彻底卸载(用户选 B 方案)

决策:用户选 B —— 彻底删除 agent-browser(73MB),而非仅用规则约束。

关键更正:卸载前核实发现此前判断有误 ——

  • 曾据 C:/Users/maidou/.agent-browser/dsh3.version = 0.27.0 推断「dsh = agent-browser 提供」,错。
  • 真实入口:dsh → node_modules\@deepseek-ai\dsh\lib\bin.js(独立包); agent-browser → node_modules\agent-browser(另一独立包,package.json 的 bin 只有 agent-browser)。
  • 二者完全无关。.agent-browser\ 目录里是 dsh 自己的运行时数据(不可删)。 → 教训:靠文件名/版本号巧合推断依赖关系不可靠,必须读真实入口脚本与 package.json。

执行:

  1. 备份入口脚本 ×3 + 重装说明 → 桌面 agent-browser-备份-20260928/
  2. Node 递归删除:包目录(73MB)+ agent-browser{,.cmd,.ps1}
  3. 验证:命令消失 ✓、包目录消失 ✓、dsh 命令与包完好 ✓
  4. 剩余全局包:@deepseek-ai / npm / pnpm
  5. 规则文件同步更新(标注已卸载 + dsh 无关警告)

12:10 doubao-seed-2-1-pro 卡片润色可行性验证(成功)

问题:能否用 doubao-seed-2-1-pro 润色提炼素材卡片? 结论:✅ 可行,且已验证「只润极致相关内容、闭集标签零损伤」。

关键事实(新增)

  • doubao-seed-2-1-pro 是 WorkBuddy 企业可选模型,无需自配 key/endpoint——直接通过 Agent 工具的 model: "doubao-seed-2-1-pro" 参数调用即可(本机无 ARK/VOLC 凭据,也无需)。
  • 调用方式:Agent(subagent_type="general-purpose", model="doubao-seed-2-1-pro", prompt=<含卡片原文+润色边界>)。

已验证的润色协议(两次试跑均通过)

  • 可润 6 字段:极致内容 / 内容含义 / 极致触点 / 创作手法 / 镜头语言 / 画面风格
  • 逐字锁定 4 字段(程序化核验):事件标签(12 维闭集)/ 极致类型 / 复用场景 / 适用场景 —— 实测逐字一致 ✅
  • 结构约束全部守住:内容含义 的 [期待A]—被「X」打破→[结果B]、创作手法 开头的 铺垫量级 …(>10s/≤3s)、极致触点 的 用户心理 = …;共鸣 = … 双段
  • 事实零损伤:数字(3万/三万零)、专名(人头马/牛头人)全部保留
  • 无元规则词外露

润色实际收益(样本观感)

  • 去冗余明显:极致内容 156→135 字(短卡),创作手法 55→44 字
  • 语言更「上手」:如「像替所有人出了一口气」→「像替所有人扇了那一下」;「礼貌在现实里常常只是压着怒火的遮羞布」→「嘴上再客气,怒火也早压在手上了」
  • 长卡(20533-3)改动更克制,主要是去重复词与紧节奏

未落地(待用户决定)

  • 本轮只做验证,未接进流水线、未回炉任何已入库卡片。
  • 若要落机制,有两个口子:① 流水线加一道(批次 36+ 新卡先润后导);② 历史 526 卡批量回炉(需删条目重导)。

12:30 素材卡回炉链路建设(用户决策 A2+B2:全字段润色 + 历史 526 卡回炉)

背景:用户选定润色落地方式 = A2(全字段润色,含极致内容)+ B2(历史 526 卡回炉)。 本段先按要求「先跑样本验证链路 → 再全量」,已完成样本验证。

1. 数据现况核对(重要修正)

项 值 说明
库内真实条数 526 一次拉全验证 unique=526 ✅
本地 md 批次文件 34 个 缺 batch_0030.md(库内卡片健在,out/import_batch_0030.txt 也不存在)
state 累加 cards 511 不可靠:批次 29 记 0、批次 30 缺记录
单条结构 id/standard_question/similar_questions/negative_questions/answers[0] 卡片全文在 answers[0]

2. ⛔ 新踩坑:FAQ 列表分页抖动(已写 RUNBOOK 红线 11)

page_size=100 时页边界条目被返回两次:两次全量拉取都得到 n=526 / unique=519, 且重复 id 会飘(一遍 464/465,另一遍 469/470)——是排序不稳定,不是库内真重复。 解法:先 page_size=1 拿 total,再 page_size={total} 一次拉全 → unique==total。 另:total 在 data.total 里(不在顶层,红线 12)。

3. ⭐⭐ 核心发现:提示词「约束强度」决定成败

同批 16 卡、同模型,只改约束:

指标 严约束(堆禁止) 宽约束(明确目标+只保3类信息)
字段改动率 1% 46%
卡片改动率 6% 100%
总字数 +0.0% −3.4%
丢角色台词 0 0 ✅
丢数字 0 0 ✅

规律:堆禁令 → 模型退化成复读机(几乎不动);只说「大胆重写 + 只保动作/物品/数字/台词原话 + 目标压缩 10-25% + 已精炼则原样返回」 → 有效压缩且无损。 分字段:改动集中在描述性字段(极致内容/内容含义/极致触点),结构性字段(创作手法/镜头语言/画面风格)几乎不动。

4. 信息保真审计口径(含误报澄清)

脚本按「引号内内容 + 数字」抽取比对时,报「丢台词 5 处」全是误报 —— 引号里除角色台词还有描述性短语(如「看硬汉秒变小丑」→「硬汉秒变小丑」只删虚词)。 真判据:角色台词(对白原话)零丢失 + 数字零丢失 + 可拍动作/物品全在。实测台词总数 113→114。

5. 新建脚本(tools/weknora-ingest/)

脚本 职责
8_backup_all.py 全量备份(回滚底座)→ out/backup_all_YYYYMMDD_HHMM.json
9_polish_plan.py 按 id 稳定分组 → out/polish_tasks/batch_XXXX.json(33 批)
10_polish_batch.py payload <n> 生成载荷 / apply <n> 三重校验+重建卡片
11_diff_report.py 量化对比 + 信息保真审计

字段契约:可润色 6(极致内容/内容含义/极致触点/创作手法/镜头语言/画面风格);锁定 4(事件标签/极致类型/复用场景/适用场景)。 三重校验:① 字段集合一致 ② 骨架完整(内容含义三段式 / 创作手法铺垫量级)③ 行数不变(只换值不破坏结构)。任一失败 → 该卡退回原文。

6. 备份底座

out/backup_all_20260928_1215.json(526 条完整原样,2.0MB)—— 回炉可随时回滚。

7. 状态

  • ✅ 样本链路验证通过(16 接受 / 0 退回)
  • ⏸ 全量 33 批回炉尚未执行(等待用户确认约束强度与执行节奏)
  • 交付:out/polish_validation_report.md(验证报告)

12:40 卡片回炉 v2(吸引力优先)批次 2-6 跑完

  • 决策:用户选 A2+B2 → 最新口径「1=A(宽约束,重点看内容是否更短视频化/更有吸引力)2=A(分批跑,每5批停一次)」。
  • 完成:批 2/3/4/5/6 共 80 卡,三重校验 80 接受 / 0 退回(批4有2张原样返回,属预期)。
  • ⭐ v2 判定有效(对照 v1 压缩型):破折号节奏 430→534(+24%)、口语化连接词 279→307(+28)、强动作动词 111→146(+32%)、句子数 1257→1288(+31)、长句占比 13.1%→12.2%、总字数 +0.9%(不再压缩)。
  • 改动特征(人工抽检8张确证):台词前置(把最有冲击力的对白扔到句首,删「XX在YY场景下」铺垫)、破折号拍点、动词升级(带→顶、硬切到→硬切——、说→扔/砸)。台词零丢失、数字零丢失。
  • 升级:支持批号参数 + 跨批汇总(原来硬编码批1)。
  • 报告:。
  • 状态:已停在用户要求的「每5批停一次」节点,等放行批 7-11。

12:50 自动化补采 · 连续 3 批(36/37/38)跑完

任务:自动化 c4d5eae8-e2ff-427a-99aa-d027d354bc19(每小时 3 批),把 12 个极致标签补至每标签 ≥100 条主标签卡。

批 标签 5 条视频 库内 导入/终验 目标标签增量 score 区间
36 食材极致 36938/20066/28573/28229/27030 526→541 15/15 · 15/15 食材极致 7→8(+1) 0.79–0.89
37 品质对比 23085/23276/32132/17881/27116 541→556 15/15 · 15/15 品质对比 7→10(+3) 0.79–0.89
38 氛围沉浸 20814/22042/19185/31701/33721 556→571 15/15 · 15/15 氛围沉浸 9→13(+4) 0.819–0.904

批次后体检(卡片总数 560 / 源文件 38 个):反差 162 / 反常识 117 / 价值观冲击 90 / 视觉冲击 66 / 自嘲反差 41 / 细节专业 27 / 感官沉浸 15 / 氛围沉浸 13 / 预见式服务 11 / 品质对比 10 / 食材极致 8 / 难度极限 0(用户决策不处理)。

本次踩坑(第 3 次连发):3_done_batch.py 中转丢失 → 三批全部 已登记:[]。判定规则确定:不同一次 shell 会话内完成「取批 → 收尾」→ 中转必丢。三批均手动补登 state.json(done 172→177→182→187)。自动化连跑场景下,收尾后必须无条件核对 state.json 末条 ids,不依赖中转。

关键结论:

  1. ⭐ 食材极致 定向候选池已耗尽(剩余 0),须重建(6_target_candidates.py)。
  2. ⭐ 「每标签 ≥100 条」的根本矛盾:按点赞降序的主队列里,感官型标签(食材极致/难度极限/氛围沉浸)素材点赞天然偏低,永远排不上主队列;定向池是唯一解,但会耗尽 → 需定期重建。
  3. ⭐ 严格主角判据可执行:批次 36 中 5 条视频仅 1 条达标(不硬塞),批次 38 中 33721 软广段与 31701 抽卡段据实改挂。
  4. 判据沉淀:氛围沉浸 补至 9 个亚型(新增妆面重构/微距剥夺环境/养成收集/决策游戏化);细节专业 第 16 层(流程自动化替代型);价值观冲击 新增反效率选择型;反差 新增破车强行升华/拒绝收钱倒送物型。

新增文件:batches/batch_0036.md、batch_0036.spec.json、batch_0037.md、batch_0037.spec.json、batch_0038.md、batch_0038.spec.json(RUNBOOK.md 已追加批 36/37/38 三条记录)。

14:30 自动化补采 · 连续 3 批(40/41/42)跑完 — 累计 42 批 / 库内 631 条

任务:自动化 c4d5eae8-e2ff-427a-99aa-d027d354bc19(每小时 3 批),本轮实际连跑 6 批(39 品质对比 / 40 预见式服务 / 41 氛围沉浸 / 42 感官沉浸),全部走 --target 定向补采。

批 标签 5 条视频 库内 导入/终验 目标标签增量 score 区间 主标签分布
39 品质对比(2轮) 36771/17656/25381/28727/35458 571→586 15/15 · 15/15 品质对比 10→19(+9) 0.82–0.90 品质对比6/反差4/自嘲反差2/视觉冲击1/价值观冲击1/氛围沉浸1
40 预见式服务(1轮) 24707/28588/25086/34020/33946 586→601 15/15 · 15/15 预见式服务 9→19(+10) 0.83–0.90 预见式服务8/细节专业3/反差2/价值观冲击1/品质对比1
41 氛围沉浸(2轮) 36640/37364/27071/30455/26066 601→616 15/15 · 15/15 氛围沉浸 14→25(+11) 0.834–0.906 氛围沉浸11/反差2/品质对比1/价值观冲击1
42 感官沉浸(1轮) 21728/28339/25106/35377/17562 616→631 15/15 · 15/15 感官沉浸 15→26(+11) 0.839–0.905 感官沉浸11/细节专业2/品质对比1/自嘲反差1

⭐ 定向批连跑 4 批、4 个标签全部 +9 以上(+9/+10/+11/+11)——「7_dispatch_next.py 算缺口 → --target 定向取批」链路在连跑场景下稳定可复现。

批次后体检(卡片总数 620 / 源文件 42 个):反差 170 / 反常识 117 / 价值观冲击 93 / 视觉冲击 67 / 自嘲反差 44 / 细节专业 32 / 感官沉浸 26 / 氛围沉浸 25 / 品质对比 19 / 预见式服务 19 / 食材极致 8 / 难度极限 0(用户决策不处理)。

✅ 中转丢失坑本轮 4 批全部未复发(批次 39–42 输出均为 已登记:[…] | 跳过:无)——反证批次 36–38 的 已登记:[] 纯由跨会话中断导致。结论:只要「取批 → 收尾」在同一次 shell 会话内完成并显式传 --ids,中转不丢。

关键结论:

  1. ⛔ 候选池告警:食材极致(候选 0)、预见式服务(候选 3)定向池即将/已耗尽 → 下轮须先跑 6_target_candidates.py 重建候选池。
  2. ⭐ 判据沉淀:预见式服务 补至 6 亚型(新增需求前置探测/备选预先排除/资源预先就位);感官沉浸 新增强迫循环仪式型、微观爽感收束型;氛围沉浸 新增极端尺度孤岛型、慢速交通工具型;品质对比 新增同源异配型、对照物实证型。
  3. 弃卡纪律持续生效:不硬塞目标标签,据实改挂副标签。

新增文件:batches/batch_0039.md、batch_0039.spec.json、batch_0040.md、batch_0040.spec.json、batch_0041.md、batch_0041.spec.json、batch_0042.md、batch_0042.spec.json(RUNBOOK.md 已追加批 39–42 合并记录)。


16:30|素材卡召回能力实测(独立信息源实验,5 条样本)

背景:用户要求测「关键词怎么找、入库怎么拼、召回时怎么拼」。前两轮因查询源与卡片同源(语义泄漏)作废,本轮改用视频原始画面/台词做独立查询源。

方法:state.json 的 batches[].ids = 205 个 video_id;建立 video_id → 该视频 3 张卡 映射(_exp_map.py,覆盖 195 视频 / 585 卡)。用麦芽 MCP short_video_detail 逐条拉原始解析 → 只提取「场次画面 + 台词」(剥掉选题与 analysis JSON)→ 构造 6 种查询 → /faq/search 验证能否召回本人卡。

踩坑:MCP 返回体积 5万~20万字符/条,未超限则不落盘(只进上下文)→ 20 条会爆上下文。改为「分开获取」:每条拉完立即手工写成 _exp_cache/raw_<id>.txt(只存画面/台词部分)。本轮实际拉 5 条(33304/33295/26220/24868/24520)。

结论 A(查询源怎么拼):

策略 R@1 均分
V1 全量原文 / V5 截断800字 5/5 0.7187
V2 画面+场次 / V3 仅画面 5/5 0.709
V4 仅台词 3/5 0.6641
V6 仅场次标记 2/4 0.6184
→ 画面信息 > 台词信息;800 字截断即够;场次标记本身无效须与画面句合并。

结论 B(检索时怎么拼):

问法 R@1 第1-2名间隔
纯口语需求 0.6986 0.0545(易误召)
+结构词 0.7169 0.1468
+画面词 0.7135 0.1605
+检索后缀句式 0.7326 0.1526
→ 纯口语可用但间隔小;加结构词/画面词间隔拉大 3 倍;关键词堆叠无效须成句。

结论 C(入库问法存在两类分叉):

  • 戏剧类(反差/反常识…):抽象结构问法「有没有「X」…用来…?」→ 召回 0.60-0.72
  • 感官类(感官沉浸/食材/难度):具体事件描述+固定后缀「{事件} —— 这条素材里的极致事件具体是怎么呈现的?」→ 召回 0.76-0.85(补测 4 条:0.8124/0.7648/0.8168/0.8509,间隔 0.22-0.25)
  • ⚠️ 两类问法定位不同,是否统一待决策。

库内核对(2026-09-28 实测):631 条,12 标签分布:反差175/反常识119/价值观冲击93/视觉冲击67/自嘲反差44/细节专业32/感官沉浸26/氛围沉浸25/预见式服务20/品质对比19/食材极致9/难度极限2。 → 修正记忆:难度极限/食材极致 非 0(记忆有误);{video_id}-{序号}| 前缀仅 75 条(集中在感官类批次)。

产物:素材卡召回能力实测报告_V1.0_20260928.md(根目录)+ _exp_cache/(含 map.json、5 条 raw、result4.json)。

待办:结论是否写入 RUNBOOK(待确认)|入库问法是否统一|感官类扩测(共62条仅测4)|清理 _exp_*.py 与 _exp_cache/。

14:50 调度对齐:补采任务切「暂存模式」+ 口径升级 v2(防返工)

背景:回炉(526 条 / 33 批 / 删旧重导)与定向补采(每小时 3 批 / 15 卡批)写同一个 KB,用户指示「先把现有计划任务按方案调整,避免返工」。

决策(用户选 A+ 双改):

  • 补采任务临时切 暂存模式:只产 md/spec/meta → batches/pending_import/,禁跑 2_import_batch.py / 3_done_batch.py,禁改 state.json。
  • 补采卡片写作口径同步升级 v2「吸引力优先」(台词前置 / 强化动词 / 口语化破折号 / 抽象落地 / 保留钩子)→ 新卡天生新口径。
  • 回炉完成后统一入库:新增脚本 13_import_pending.py --dry | --run | --sync。

执行动作:

  • automation_update(update, id=c4d5eae8-e2ff-427a-99aa-d027d354bc19):name 加后缀「暂存模式」,prompt 重写(暂存模式说明段 + v2 口径段 + 第5步改为暂存自检 + 第6步只读体检 + 汇报口径改暂存文件路径)。
  • 新建 batches/pending_import/ 目录 + 13_import_pending.py(discover/precheck/import_one/register_state,导入幂等、按批号补登 state)。
  • RUNBOOK §2.5 补「回炉窗口期 · 补采暂存模式」小节(三类冲突 + 窗口期规则)。

关键安全结论:回炉删除按 polish_plan.json 冻结的 526 id 执行 → 新采卡不会被误删;唯一真风险是「回炉期间重跑 9_polish_plan.py 会让计划漂移」,已在 RUNBOOK 写明禁止。

回炉节奏:用户选「分批跑,每 5 批停一次复核」(延续现状,批 1-6 已完成 96 卡)。

15:05|实验结论落地 RUNBOOK + 工具正式化

写入运行手册(tools/weknora-ingest/RUNBOOK.md):

  • 新增 §2.4 检索与召回最佳实践(结论 A/B/C + 库内核对 + 复测工具说明),插入位置 = 红线区之后、§2.5 之前。
  • 红线区新增 13(vector_threshold=0.0 被当未设置 → 返回 0 条,低阈值请写 0.1)、14(/faq/search 查询 <40 字报 HTTP 400,需最短长度保护)。
  • 步骤 6 修正:「similar_questions 是唯一召回杠杆」→ 补「检索侧同样有杠杆(画面描述+结构词,区分度 ×3)」。
  • 步骤 7 补交叉引用(终验查询拼法见 §2.4 结论 B)。

工具正式化(_exp_* → 13_recall_*,作废轮产物已删):

脚本 作用
13_recall_map.py state.json + spec.json → video_id→卡片 映射(195 视频/585 卡)
13_recall_parse.py 从落盘原文只提「场次画面+台词」
13_recall_bench.py 6 策略 × 样本跑 /faq/search,--dry 只打印
13_recall_summary.py 汇总 R@1/R@3/均分
缓存目录 recall_cache/(map.json + 5 条 raw + recall_result.json)。

踩坑补充进 RUNBOOK:MCP short_video_detail 返回 5万~20万字符/条,未超限不落盘(只进上下文)→ 必须逐条拉、拉完立即落 recall_cache/raw_{id}.txt。

仍未决(留给用户):① 入库问法是否统一(戏剧类抽象问法 vs 感官类具体事件问法);② 感官类扩测(62 条仅测 4);③ 75 条编号前缀是否保留。


17:10|任务1-3 全量完成:5 形态定论 + 感官类 100% + 编号前缀评估

背景:承接 15:05 的三项未决,用户给出「1、各类别不相同吧 2、继续测试 3、先评估」。

任务 1「各类别不相同吧」—— 结论 C 被推翻并深化

用户判断正确:原「戏剧类 vs 感官类」两类分叉表述过粗。新建 14_form_audit.py 精确统计全库 631 条:

形态 条数 占比
F3 需求壳句 有没有「…」? 318 50.4%
F4 白描事件陈述(无问壳) 202 32.0%
F1 编号+呈现后缀 75 11.9%
F2 事件+复用后缀 30 4.8%
F5 结论判据式 6 1.0%

关键发现:形态与标签不一一对应(视觉冲击 67 条含 4 种形态);真实决定因素 = 批次模板时代(F1=后期补采批次,F3/F4=早期批次)。→ 75 条编号前缀只出现在 F1 型(原猜"集中在感官类"被推翻)。

任务 2「继续测试」—— 感官类全量扩测

15_sensory_recall.py 对 6 个感官标签全量 101 卡测 3 种查询形态:

查询 n R@1 均分
仅事件名 97 97 0.7739
+意图句 97 97 0.7727
+结构词 97 97 0.7809

→ R@1 = 100%,且加词无增益 —— 与戏剧类(补词后间隔 ×2.7)结论相反。原因:F1 型问法本身即完整事件描述,查询信息量已饱和。 → 4 条无效查询卡(找一条低成本做出硬菜的极致美食事件素材 型,无「」事件名)已剔除,属入库模板缺陷非检索问题。

期间修 3 个脚本 bug:① 壳句污染事件名 → 加 extract_name() 剥壳(对 97 条壳句全部成功,证明模板规则化);② if not name: 后漏 continue → NoneType + str TypeError;③ 短事件名判定阈值 len<8。

任务 3「先评估」—— 75 条编号前缀

结论:建议保留,不必清理。 五判据:

  1. 纯语义查询(不含编号)仍 R@1 命中带前缀卡(0.7471)→ 未稀释语义
  2. 单搜纯编号 25106/21728 → 返回空 → 无同源污染
  3. 带前缀均分 0.7984 vs 不带 0.7650 → 无负作用(差值来自批次)
  4. 编号在 sq 与 answers 双写 → 冗余但不影响召回
  5. ⚠️ 唯一实际影响 = 展示层:列表前缀占前 6 字符

→ 建议「保留入库 + UI 展示时前端剥离」,而非删库(删库丧失溯源,且需 75 次 DELETE+重导,有召回波动风险)。

落盘

  • RUNBOOK §2.4:方法论头改样本规模、③ 结论 C 整体重写为 5 形态版(含③-b 感官扩测 / ③-c 无效卡)、④ 附带事实补编号评估结论、⑤ 工具表 4→6 个(补 14/15)。
  • 素材卡召回能力实测报告_V1.0_20260928.md:第四节整体重写、五节更新、六节待办勾选、新增第八节编号前缀专项评估、七节总结重写。

自动化补采(每小时3批)· 第 7 轮 · 2026-09-28 15:3x · 【暂存模式】(3 批未入库)

处于全量卡片回炉窗口期,本 3 批只产 pending_import,未入库;禁跑 2_import_batch.py / 3_done_batch.py、禁改 state.json。

批次 取批标签 ids 出卡 主标签分布 状态
43 反差 30189 / 23275 / 28562 / 35299 / 30376 15 反差 4 / 品质对比 3 / 细节专业 3 / 价值观冲击 3 / 自嘲反差 1 / 视觉冲击 1 暂存待导入
44 氛围沉浸 25166 / 27090 / 29927 / 29652 / 30240 15 氛围沉浸 4 / 反差 5 / 价值观冲击 2 / 细节专业 1 / 视觉冲击 1 / 自嘲反差 1 / 反常识 1 暂存待导入
45 感官沉浸 30466 / 25040 / 28345 / 37148 / 28743 15 感官沉浸 7 / 氛围沉浸 2 / 反差 2 / 视觉冲击 1 / 品质对比 1 / 反常识 1 / 细节专业 1 暂存待导入

产出:tools/weknora-ingest/batches/pending_import/batch_004{3,4,5}.{md,spec.json,meta.json},合计 45 张卡。三批 mismatch 全为 0。 预期目标标签增量:反差 +4(已达标仍增)、氛围沉浸 +4、感官沉浸 +7(本轮最大增量)。

关键结论:

  1. ⭐ 临时 py「md ### 逐条比对 spec.card」连续 27 批一次通过,写法稳定。
  2. ⭐ 感官沉浸 / 氛围沉浸 候选池仍是瓶颈:感官候选 14(取 5 余 9)、氛围候选 23(取 5 余 18);食材极致 0 / 预见式服务 3 已耗尽 → 下轮先跑 6_target_candidates.py 重建候选池。
  3. ⭐ 本批新判据:感官沉浸新增 听觉规格化型 / 微距痛觉型 / 分屏实证型;氛围沉浸新增 热介质包裹型 / 糊屏触觉型(详见 RUNBOOK 批次 43–45 经验条)。
  4. ⛔ 回炉完成后统一走 13_import_pending.py --dry|--run|--sync 导入;9_polish_plan.py 已禁跑(会让 526 id 计划漂移)。
  5. 库内读数未变:仍 631 条 / 42 批(5_tag_coverage.py 只读 batches/,不含 pending_import)。

补充:批 43–45 v3 双任务补做 + 校验器三处修复(2026-09-28 晚)

背景:批 43/44/45 是旧口径(薄壳句 std)产的暂存批,回炉窗口期内补做 v3 双任务(卡片吸引力优先 + 问法增厚)。

结果:批 43 → 15/0,问法 +19 字;批 44 → 15/0,+11 字;批 45 → 15/0,+59 字。sim/neg 条数不一致均 0,锁定字段改动 0,实际编造 0 处。

⭐ 批 45 暴露并修掉 10_polish_batch.py 三个校验器缺陷(治本,影响全部后续批次):

  1. std 前缀校验过严:批 45 原文 std 无前缀,载荷示例提示了前缀写法 → 模型学样加前缀 → 原逻辑直接退回 15 张。改为 autofix「原文无前缀则自动剥离」(不再退回),前缀状态一律以原文为准。validate() 返回值扩为 5 元组(新增 autofix 列表),两处调用点同步更新。
  2. 编造粗筛引号字符类不全:原文弯引号 “” vs 问法直引号 "" → 正则只匹配直引号 → 11 张系统性误报。改为同时匹配 " ' 「 『 “ ”。
  3. 编造粗筛对「引语节选」误报:模型略缩引语(删语气助词「哈/呢/啊」与逗号)→ 严格子串失败 → 再误报 5 张。改为归一化比对(剥引号 + 去标点空白 + 去语气助词 _norm)。
  • 收敛:11 → 5 → 1 张,末 1 张经人工核实仍是误报(问法省略了引语中间一句)。残留局限:中间省略型节选 + 形容词类编造,机器仍判不了 → 须人工抽检。
  • PROMPT_polish_v3.md 同步:标准问前缀指引改为显式「原文无前缀的绝对不要加」(此前示例写得像必须加,是误加诱因)。

批 45 数据:30466/25040/28345/37148/28743 → 15 卡,std 34.8 → 93.8 字(+59),std 从薄壳句增厚为完整事件描述。 已清理:out/_pb43/44/45.txt、out/_p1~p16.txt、out/_batch7_orig.txt、out/_raw15.txt、out/_p14.err/_p16.err、out/_pb43_rewrite.json、out/_pb44.err、_fix_json.py、_round3_stat.py、_exp_parse.py、_gen_spec34.py(保留 out/2_import.txt)。


17:40|技能 WeKnora 调用方式优化(基于召回实测)

起因:用户「短视频脚本创作技能 调用 weknora 知识库的方式需要优化,参考素材库召回测试看看有什么好的方案」。

实测发现的真问题(3 处,其中 2 处是长期静默失效)

  1. ⛔⛔ 数量参数名是 match_count,不是 top_k:top_k/limit/size/count/k/topK=3 → 一律静默返回 10 条;match_count=3 → 真的 3 条。技能文档写对了,但项目所有 Python 脚本写错(13_recall_bench.py/15_sensory_recall.py/16_question_fair.py/15_question_experiment.py)→ 上下文成本是设计值 3.3 倍。已修 2 个活跃脚本。
  2. ⛔ vector_threshold 省略 ≠ 0.5:省略时正常业务 query 直接返回 0 条。「必须显式传」这条规范是对的,补了依据。
  3. ⚠️ 问法定位偏差:原「镜像式五要素问法」(找一条 {落差对象} {打破方式} {锚点} 的 {段落功能} 型事件素材)与库内 82.4% 的 F3/F4 型卡片语域不同构。

优化方案(已落地)

  • 问法主体改为「情境化事件陈述」:{谁} 在 {什么处境} 下 {做了什么具体动作},结果 {发生了什么} —— 与卡片正文(描述画面里发生了什么)语域同构。
  • 原「结构词/画面词加成」降为补充写法(仅明确结构诉求时追加)。
  • 新增认知修正:分数与间隔不可判优(top1top10 首尾仅差 0.047,第1-2名间隔常 0.000.03)→ 必须人工复筛落差结构同构性;阈值只做事后过滤(0.1~0.5 命中数相同,≥0.65 才截断),不能提升质量。
  • 数据勘误:库存 450+→631;赛道 77.5%→72.6%;感官向 12 标签均已补齐(难度极限/食材极致 0→2/9)。

改动文件(技能侧)

references/接口调用/WeKnora_极致事件检索.md(§二参数表 / §三问法整体重写 / §六 / §七新增 7.1 机制实测 + 7.2 限制)、references/创作流程/7_生成短视频大纲.md(调用要点 5 条)、references/索引_知识素材库.md、SKILL.md、references-add/变更日志.md(追加 09-28 条)。

验证

新问法实测 match_count=3 生效;「服务预见」案例精准命中同语义簇 3 卡(提前备茶/提前送咖啡/提前备方案)。

待用户决策(未动)

F3/F4 型占 82.4%(早期批次),是否批量回炉改造成 F1 型模板——改造后查询无需补词即 100% 召回,但需走 §2.5 回炉链路且有召回波动风险。

⚠️ 引擎侧遗留

.dsh 只读副本、Lite1.0 需按流程评估是否同步(未动,待用户授权)。


18:00|⚠️ 问法改写有效性验证 —— 结论推翻,已如实修正

用户要求:「先确定改动是否有效」。做了双法验证,结果不支持「问法改写更优」。

验证 1 · 需求法(18_question_validate.py)—— ❌ 方法本身有缺陷

用 5 个编导真实节点,新旧问法各取 top3:

节点 旧命中 新命中
顾客刁难后反杀 0 0
服务预见 1 1
品质被质疑验货 0 0
开场身份反差 0 0
食材难度极限 0 1
合计 1 2
→ 3/5 节点两法都 0 命中。说明此法测的是「库内有没有这个素材」,混杂了变量,不能用来验证问法。

验证 2 · 反查法(18b_question_validate_r.py)—— ✅ 唯一能隔离变量的方法

取库内确实存在的 35 卡(12 标签各 3 条)→ 两种问法表达同一事件 → 看能否召回自身:

旧问法 新问法
R@1 34/35(97.1%) 35/35(100%)
R@3 35/35 35/35
→ 差异在噪声范围内。事件信息足够时,两种写法都能召回。

📌 修正后的定性(已写入技能文档)

改动 有效性 证据
✅ 参数纠正(match_count / 显式阈值) 确定有效 同 query 返回体积 32122→10087 字符,省 69%;省略阈值→0 条
⚠️ 问法改写 收益有限 反查法 97.1% vs 100%,噪声级。价值 = 信息量保障(防空心 query),不是提升召回率

⛔ 已明令禁止宣称「新问法把召回率从 97% 提到 100%」——那是噪声,且反查法自然上限本就 100%。

🔴 最关键的发现

真实瓶颈 = 素材覆盖,不是检索技术。需求法暴露 3/5 真实节点零命中 → 问法再优化也召不回不存在的素材。

方法论沉淀(已写入 RUNBOOK §2.4 ⑤-b)

  • ⛔ 不用「凭空需求」测检索优化(混杂「库内有无素材」变量 → 得错误结论)
  • ✅ 必须用「反查法」(拿库内确有条目反查),才能隔离单一变量

落盘

  • WeKnora_极致事件检索.md:§三 补「勿高估问法收益」警示框、示例对照改为「写法A vs 写法B」、§7.1 重构为 A 确定性收益(参数)/ B 噪声级差异(问法)/ C 认知修正 三级、§7.2 补「真实瓶颈=素材覆盖」。
  • 7_生成短视频大纲.md:问法要点补实测边界。
  • RUNBOOK.md §2.4 ⑤ 工具表 6→8 个(补 18_/18b_)+ 新增 ⑤-b 问法改写有效性验证结论。
  • 变更日志.md:初版条目已合并入「已验证」条目,避免重复。
  • SKILL.md frontmatter last_change 重写为已验证版。

暂存批 47(氛围沉浸 · v3 双任务)已收尾

  • 取批 1_next_batch.py --target 氛围沉浸 5(候选池 23)→ ids 20611/20385/35345/34032/28468。
  • 15 张卡(主标签:氛围沉浸 13 / 反差 1 / 品质对比 1),产物 batches/pending_import/batch_0047.{md,spec.json,meta.json},未入库(回炉窗口期)。
  • v3 校验回路:build-pending 47 → doubao-seed-2-1-pro 喂 PROMPT_polish_v3.md+载荷 → 存 out/polish_result/pending_0047.json → apply-pending 47 = 接受 15/退回 0,问法平均 +25 字(源 std 50–55 字,薄壳句,增厚空间充足)。编造粗筛告警 0。人抽 3 卡(20611-1 / 35345-3 / 28468-3)通过:锁定字段不动、台词原话保留、数字零丢失。
  • ⭐ 与批 46(源问法已 133–210 字 → 平均 −1 字)构成 v3 增厚效果正反向对照:增厚只对薄壳句源问法有正向空间。
  • 已追加 RUNBOOK 批次 47 记录。下一步:批 48(感官沉浸,候选池 14)。

18:30|🔴 端到端实测:工作台 AI 创作里素材召回根本没被调用(S7 被合法跳过)

起因:用户「就是用工作台脚本生成的过程,看调用素材召回的效果」。→ 从工作台真实跑一遍创作,追踪执行记录。

方法(新建 tools/weknora-ingest/20_trace_recall.py)

  • ⭐ 会话记录存储位置(本次摸清):<WORKBUDDY_CONFIG_DIR>/projects/<cwd转义名>/<sessionId>.jsonl, 即 D:/.workbuddy/projects/d-AI技能-mcn-short-video-project-短视频脚本创作-V1.0-mcn-work-shop/*.jsonl。 每行一个事件:session-meta / message / function_call / function_call_result / file-history-snapshot。 ⚠️ 消息正文不在 workbuddy.db(该库只有 sessions/automations 元数据)→ 必须读 JSONL。
  • 提交任务:POST /api/run(name='测试·俊希买鱼脚本(素材召回验证)',account=俊希,Vlog 60s,需求含"指出鱼不新鲜")。

⭐ 结果:S1-S11 全跑完,hybrid_search 调用 0 次

工具调用次数:Bash 19 / Read 13 / TaskUpdate 7 / TaskCreate 4 / Write 2 / Edit 2 / Skill 1 / present_files 1
[!] 未发现任何素材召回(hybrid_search)调用
  • 模型读了 7_生成短视频大纲.md(S7 规范,第 55 行),也朗读了"S6 框架 → 大纲"(第 80 行), 然后第 87 行直接 Write 脚本正文 —— 中间零检索。
  • 产物 Desktop/MCNSkillProjects/俊希/脚本06/09_脚本正文.md:脚本质量本身 OK(人设/五字段/口播自然), 但全程无任何素材库注入,完全从零推断。

🔴 根因:规范给了一个几乎必然成立的「跳过条件」

7_生成短视频大纲.md §节点状态表:

| 已能写出具体桥段 | **跳过检索**(不调用) |   ← 模型读到这条,判断"我能写" → 合法跳过
| 写不出桥段       | 按下述契约检索           |
  • 任何能写脚本的模型,看到具体需求都会认为"我能写出来" → S7 永不被触发。
  • 这不是模型偷懒,而是规范设计的漏洞:跳过条件是自评的、开放的,无外部可验证判据。

对照:MCP 通道本身完全正常

本机实测 mcp__weknora__hybrid_search(kb_id='MCN极致事件素材库', match_count=3, vector_threshold=0.5) → 精确返回 3 条,参数名与阈值均正确生效。→ 问题不在检索能力,在"根本没发起检索"。

结论(本轮定论)

⭐⭐ 在优化检索参数/问法之前,先要解决"检索压根不被调用" —— 这是比 §2.4 所有结论更上游的问题。

  • 已确认有效:参数(match_count/阈值)
  • 收益有限:问法改写
  • 从未生效:S7 本身(本次新发现,优先级最高)

待决策

把「跳过检索」条件从自评改为外部判据,候选方向: ① 删除跳过条款(默认必检,但会增上下文成本);② 改为"涉及具体桥段且需细节填充时必须检索"; ③ 改为按节点数强制下限(如 L2 节点 ≥1 次);④ 保留跳过但要求**在产出中标注"未检索"**以便审计。

落盘

  • 新建 tools/weknora-ingest/20_trace_recall.py(可复用:--all 扫全部会话汇总召回调用)。
  • 本条记忆。

⚠️ 遗留

  • 验证用测试任务 automation-1790585785553(会话 be7cb9a4)+ 产出 脚本06 未清理。
  • 工作台仍没有「素材召回测试」页面(用户已澄清:要的是"创作过程里看召回效果",非独立页面)。

17:2x|✅ 纯 UI 路径复现确认:S7 素材召回 4 会话累计 0 次(证据升级)

为什么再验一次

上一轮是命令行 POST /api/run 触发。用户要求「用浏览器打开工作台 用实际案例来跑」 (并明确「不要去改别人的页面」「新建一个标签页就可以了」「重新开个浏览器把」)→ 本轮改从工作台浏览器 UI 真实走完完整创作链路,排除「入口差异导致行为差异」的可能。

浏览器环境(本轮定版配方)

独立 Chrome 实例(绝不动用户自己的 Chrome):

chrome --remote-debugging-port=9444 --user-data-dir="D:/AI技能/mcn-short-video/.tmp-chrome-wb" \
       --no-proxy-server --proxy-bypass-list="*" --new-window "http://127.0.0.1:8900/"
  • 必须 run_in_background: true(nohup & 起的实例会被沙箱回收)。
  • 必须 --no-proxy-server:用户 Chrome 走全局 Privoxy,127.0.0.1:8900 会被转发 → 500 Internal Privoxy Error。
  • browser-harness 调用前缀:env -u HTTP_PROXY -u HTTPS_PROXY -u ALL_PROXY -u http_proxy -u https_proxy -u all_proxy -u NO_PROXY BU_CDP_URL=http://127.0.0.1:9444 (helper 函数名 = goto_url() / js() / capture_screenshot(),不是 nav() / eval_js() / shot())

UI 链路(8 步全跑通)

账号列表 → 俊希行「AI创作」→ 填需求「俊希菜市场指出鱼不新鲜」→ 发送 → AI 引导对话 → 选「剧情」→ 需求聊至 8/8 已填 → 点 #reqCreate → 确认框 → 点 button[data-ok] → 落库。

⚠️ 两段式提交坑(本轮新发现):#reqCreate 只弹确认框(data-pages.js:752), 真正提交在确认框的 button[data-ok](:775)→ 内部先 POST /api/dsh/topic-save 落选题, 再 executeTask({prompt, skills:['短视频工作台']})。只点第一段 → 弹窗关不掉、任务不落库。

结果

  • 落库任务 automation-1790587091698(「创作指令」,17:18:11,skills=["短视频工作台"])
  • 执行完成(ACCEPTED),会话 21e7492c(976KB / 118 行)
工具调用:Bash 23 / Read 10 / TaskUpdate 6 / TaskCreate 4 / Skill 1 / Grep 1 / Write 1 / present_files 1
[!] 未发现任何素材召回(hybrid_search)调用

⭐ 决定性证据 —— 模型自述原话(JSONL L90):

"Now writing the S9 script (中间步骤 S1-S8 已在上下文按序完成,自动模式后台静默)"

→ S1-S8 全部「脑内完成」,零工具落地。不是「S7 单独被跳过」,是整段中间步骤被跳过。

全量汇总(20_trace_recall.py --all)

共 4 个会话;其中 0 个会话调用了素材召回;累计召回 0 次
  21e7492c  工具 47 | 召回 0 | weknora提及 2   ← 本轮 UI 路径
  be7cb9a4  工具 49 | 召回 0 | weknora提及 3   ← 上轮命令行路径
  87936943  工具 69 | 召回 0 | weknora提及 0
  c522f13d  工具 26 | 召回 0 | weknora提及 0

→ 191 次工具调用,0 次素材召回;命令行与 UI 行为一致,排除入口差异。 → 「weknora提及」= 模型读到了 weknora 规范文本,但未转化为调用。

新增待决策:工作台侧也要改(E 方案)

SKILL_HINT_CREATE / buildCreatePrompt()(data-pages.js:11 / :787)完全不含 「WeKnora / 素材 / 检索 / 召回 / 极致事件 / hybrid_search」六个关键词(已验证全为 False) → 从工作台入口提交的任务,prompt 里根本没有「要召回素材」这件事。 → 建议组合:A(技能侧删自评跳过条款)+ E(工作台 prompt 显式点名 S7 素材召回)。 → 四个候选(A 删除跳过 / B 收紧为必检 / C 节点数下限 / D 保留但标注未检索)单独都不够。

落盘

  • RUNBOOK §2.6 新增小节 ⑤ 纯 UI 路径复现(含 8 步表 + 决定性证据 + 全量汇总 + 两段式提交坑), 原「待决策」改为 ⑥ 并补 E 方案。
  • 产物:桌面 MCNSkill项目/俊希/脚本07/09_脚本正文.md(7359B,《30块!小学生踮脚指认隔夜鱼,把鱼摊老板说到哑巴口无言》), 已入库 rewrite_log id=39,关联 topic_log id=1 回填 rewrite_id=39 / status=done。 → 脚本质量本身正常,但全程无素材库注入痕迹(全从零推断)。

⚠️ 遗留(累加)

  • 验证产物:脚本06(16:58)+ 脚本07(17:20)+ 任务 automation-1790585785553 / automation-1790587091698 未清理。
  • Chrome 9444 实例 + .tmp-chrome-wb/ 用户数据目录未清理。

17:35|⚠️ 口径纠偏(用户澄清):素材召回是「按需被取」,不是「流程必检」

用户原话

「之前确定的是流程不召回素材,是知识库根据需要去召回」

纠偏内容

我上一轮的结论「必须改(删除跳过条款 → 默认必检)」方向错了。 正确口径:架构 = 流程不主动召回素材,知识库按需被取 —— 这是设计意图,不该动。

→ 重新判定:hybrid_search 调用 0 次 ≠ 一定是 bug。判据只有两条:

路径 判定
模型真能写出桥段 → 跳过检索 ✅ 符合设计,无需改
模型写不出桥段却仍不检索 ❌ 才是 bug

补验:这轮「跳过」到底合不合法(落地质量反证)

读 脚本07/09_脚本正文.md(90s 剧情),三个 L1 节点实际落地:

L1 节点 实际桥段 含机制样本特征?
钩子型 0-8s 小学生踮脚扒鱼缸、按鱼背验货 ❌ 通用动作
留人型 26-46s 看鳃→看眼→看尾,三指数 ❌ 通用常识(网上随处可查)
转粉型 62-80s 老板服软送葱、"做人要实在" ❌ 通用收口

→ 三个 L1 全部停在"通用桥段",无一条有库内极致事件卡的"期待→打破"闭环强度。

⚠️ 但这个反证本身也有漏洞:这些桥段语义上确实"能写出来" → 模型判"跳过"在规则字面下并不违规。核心矛盾浮出:

规则只要求"写得出",不要求"写得够狠" → 只要写出"不难看"的桥段就满足跳过条件。 落点从"要不要检索"变成"极致标准由谁把关"。

修正后的待决策(不改架构)

真正要解的问题 = "按需"的判据太软 → 模型永远判"不用查"(触发率 ≈ 0)。

# 方向 推荐度
C1 ⭐ 把自评改成外部可验证判据:已能写出**且**属"通用可替代"→跳过 / 写不出 **或** 属"账号专属·专业手法"→必须检索 首选
C2 触发条件改为「不确定时先检」(默认翻转) 可叠加
C3 产出标注"素材来源:检索 N 条 / 未启用" 仅可观测
C4 工作台 SKILL_HINT_CREATE 补一句"按 S7 契约按需调用素材检索" 辅助
A/B 删除跳过条款 / 改为必检 ⛔ 作废

⭐ C1 的关键:"通用 vs 专属"是外部可验证的(看一眼桥段是否依赖本账号独有资源), 而 "我能不能写出来"模型恒答"能"。

落盘

  • RUNBOOK §2.6 重写:① 加口径纠偏块(置顶)② ①②③ 措辞从"bug/漏洞"改为"设计意图 + 触发率" ③ 新增 ⑤ 落地质量反证 ④ 原「待决策」重写为 ⑦ 并明确作废 A/B,改推 C1
  • 长期记忆 §4.3 条目重写(原"最上游问题/必须改"口径 → 修正为"触发率 + 判据太软")
  • 教训(三层沉淀):
    • 治本层:待定(C1 需用户确认后才改技能文件,未动 7_生成短视频大纲.md)
    • 失误层:待补 失误与规避记录.md —— 「数到 0 次调用就直接判定为 bug、跳过了"设计意图核对"这一步」
    • 记忆层:本条 + MEMORY.md 修正

未做(等用户决策)

  • 7_生成短视频大纲.md 判据改写(C1)—— 未动,等确认
  • .dsh / Lite1.0 同步 —— 未动

17:40|⭐ 用户补充关键口径:素材库有两个作用位(补全全局理解)

用户原话

「素材库在流程中应该有两个作用,① 给事件填充素材 ② 给事件润色素材」

核实结果:两个作用位都有规范,但是同一条链的上下游

# 作用位 规范位置
① 给事件填空(写不出桥段 → 取机制样本) 7_生成短视频大纲.md §极致触点素材检索(布位定完 → 事件展开前;按需触发)
② 给台词润色(治「台词概括化」→ 取原话/微反应/意外) 9_生成短视频脚本.md L12(输入:{material_cards})+ L101-113(§3.1「台词毛边三档参考」)

⭐ 关键发现:② 是 ① 的下游,断链

S7 作用位① 检索触发率 ≈ 0
   ↓ 输出 {material_cards}
S9 作用位② 输入恒为空 → 三档永远拿不到样本 → 退化为"凭感觉写台词"
  • S9 L12 原文:步骤7输出(可选):**素材注入 {material_cards}** —— S7「极致触点素材检索」复筛保留的卡片… → ②的输入明确写着"来源:S7 检索",而 S7 从不检索。
  • ⚠️ 另一处细节:L12 标了「(可选)」→ 即使 ① 修好,若"可选"不改,②仍可能被跳过。 这是独立于 ① 的第二处待决策点。

落地印证(本轮 脚本07 台词三档对照)

S9 实际台词 毛边三档应有 症状
「小同学,早上六点刚从码头拉回来的,条条活蹦乱跳」 原话(含语气词/方言/口误/半截话) 书面·完整·无毛边
「脸上的笑僵了半下」 微反应(具体身体部位+幅度) 心理描写式
「我妈没舍得倒,自己吃了」 意外(计划外打断) 顺拐推进

→ 台词全部整洁·书面·顺拐 = "无素材样本可参考"典型症状,与 ① 未触发互相印证。

待决策补全(新增作用位②选项)

# 方向 推荐
D1 ⭐ 先把①修好,②自动恢复(不改 S9 任何文字) 首选(改动最小、链路最顺)
D2 把 S9 L12 的「(可选)」改为必需 仅在用户认为润色"必须有"时才做
D3 三档加自检项(台词含 ≥N 处毛边) 仅可观测

⚠️ D1/D2 需用户取舍:架构说"按需",D2 把润色定"必需",两者语义张力 → 润色是"有素材就用、没有就算"(可选)还是"必须想办法要有"(必需)?

落盘

  • RUNBOOK §2.6 新增 ⑦ 素材库的两个作用位与「断链」(含链路图 + 断链机制表 + 台词三档对照印证), 原「待决策」改 ⑧ 并补 D1/D2/D3 + D1/D2 取舍提醒。
  • 长期记忆 §4.3 条目补入「两个作用位」段。

全链路质检(用户指令:检查自动任务与补跑批次的过程与结果)

  • 结论:过程正确、结果符合预期。
  • 回炉:批 1–30 全部完成,各 16 接受 / 0 退回(480 卡);暂存批 43–47 回炉完成(各 15/0)。 累计 std 改写 476 张、净增字 15130。批 21 std 0 改动属正常(原文已够好,仅增厚 sim)。
  • 自动任务(补采暂存):batch 43–48,全 mode=pending_import,只写 pending_import/、 未改 state.json(mtime 停在 14:25,产物 15:31–17:02)→ 暂存模式合规 ✅。
  • ⚠️ 发现 P1:批 43 与批 46 取材 ids 完全相同(30189/23275/28562/35299/30376)。 非复制——同一批视频被拆两遍、各出 15 张不同桥段卡,且两批标签体系不一致 → 入库后重复度偏高。根因 = 46 生成时 43 的 meta 未落地,暂存防重未生效。 建议入库前桥段级去重。
  • ⭐ 编造告警 90 条 → 真实编造 0 处(机器复筛 100% 可回溯本卡原文/问法)。 根因确认 = 第⑤类误报(std 摘要短语进引号),已在 10_polish_batch.py docstring 116–118 行登记, docstring 点名例子与批 19 实际告警一致。告警自批 17 起台阶上升 = v3 增厚副作用,非质量下降。
  • ⚠️ 批 30 模型返回为 polish 嵌套结构,与脚本期望的 9 键平铺不符 → 本轮手工扁平化通过。 建议 apply 内加自动扁平化兜底(防后续批次再踩)。
  • 其他:补采卡 sim/neg 条数不统一(2/2、3/2、3/3、6/2 混杂)→ 建议补采侧补条数规范。
  • 产物:out/audit_report_20260928.html、out/_audit_batches.json。

2026-09-28 18:5x · 自动化补采批次 48–49(暂存模式 · 未入库)

  • 批 48 收尾(感官沉浸定向批,ids 17785,21927,28533,26795,26974):发现 apply-pending 未完成 → 补跑 build+apply,接受 15/退回 0 | 问法平均 +27 字,md/spec 已回写。
  • 批 49(品质对比定向批,ids 23859,19397,20571,33216,22306):15 卡,主标签 15/15 落品质对比。
    • 产物:batches/pending_import/batch_0049.{md,spec.json,meta.json}(暂存待导入);ids 落 B49_IDS.txt。
    • v3 回路:接受 15/退回 0 | 问法改写 15 张 | 问法平均 +45 字(3 批最大增幅)。
    • 人抽 3 卡 std + 2 卡 sim 逐句溯源 → 编造 0 处;数字零丢失。
  • ⚠️ 新踩坑(已记 RUNBOOK):卡片首字段误写 **内容**(漏「极致」)→ build-pending 报「md 卡片数(13) ≠ spec(15)」。 排查口诀:差值=2 且非围栏问题时,先 grep '^- \*\*内容\*\*:' 定位漏字段。
  • 候选池:品质对比 13→余 8;氛围沉浸 23;感官沉浸 9;食材极致 0(须重建);预见式服务 3(须重建)。
  • RUNBOOK.md 已追加批次 48、49 记录(标「暂存模式·未入库·v3」)。

2026-09-28 19:0x · 自动化补采批次 50–51(暂存模式 · 未入库)

  • 批 50(氛围沉浸定向批,ids 28420,26873,22171,30635,33641):15 卡,主标签 15/15 落氛围沉浸。
    • 产物:batches/pending_import/batch_0050.{md,spec.json,meta.json}(暂存待导入)。
    • v3 回路:接受 15/退回 0 | 问法平均 +4 字(源 std 已 95–160 字,增厚空间有限)。
    • 读 out/polish_result/pending_0050.applied.json 存证(跨会话中断后补跑,已闭环)。
  • 批 51(品质对比定向批,ids 20162,25218,33224,29661,26291):15 卡,主标签 15/15 落品质对比; 26291(情感剧情 85s)据实 0 卡(无品质对比事件,已在 md 写弃卡说明)。
    • 产物:batches/pending_import/batch_0051.{md,spec.json,meta.json}(暂存待导入);ids 落 B51_IDS.txt。
    • v3 回路:接受 15/退回 0 | 问法改写 14 张 | 问法平均 +45 字(与批 49 并列最大增幅)。
    • 编造粗筛告警 1 张 → 人抽检判定误报:std 开头「」包的是「查询意图描述」而非台词引语,非真编造。
  • ⚠️ 新踩坑(已记 RUNBOOK 批 51 经验):
    1. 卡片首字段误写 **内容性质**(应为 **极致内容**)→ spec 生成报 AssertionError: (15, 14);改回后通过(同类坑再现批 49)。
    2. 「编造粗筛」告警新形态 = std 意图描述段被当引语(长度 >30 字且为事件整体概括 → 判误报)。
  • 增厚梯度累计:批 46(−1)/47(+25)/49(+45)/50(+4)/51(+45)→ 源 std 中等厚度时稳定约 +45。
  • 候选池:品质对比 13→余 8;氛围沉浸 23;感官沉浸 14;细节专业 22;自嘲反差 43;视觉冲击 10;价值观冲击 11。 ⛔ 食材极致 0、预见式服务 3 已耗尽 → 须先跑 6_target_candidates.py 重建候选池。
  • RUNBOOK.md 已追加批次 50、51 记录(标「暂存模式·未入库·v3」)。

2026-09-28 22:0x · 自动化补采批次 52 / 54 / 55(暂存模式 · 未入库 · v3)

⚠️ 本窗口仅完成 1 批(批 55),未达「连跑 3 批」目标 —— 详见文末「未完成说明」。

  • 批 55(氛围沉浸定向批,ids 36396,23225,20318,26470,28310):15 卡。
    • 标签分布:氛围沉浸 12(主) / 反差 1 / 视觉冲击 1 / 价值观冲击 1。
    • 产物:batches/pending_import/batch_0055.{md,spec.json,meta.json}(暂存待导入);ids 落 B55_IDS.txt。
    • 严格主角判据落地:28310(职场搞笑剧 83s,冲突由对白驱动、环境权重最低)只留 1 张氛围沉浸(市井餐馆底噪)+ 1 张价值观冲击,弃卡原因写入 md 头「弃卡说明」。
    • v3 回路:接受 15/退回 0;std 均长 178.3 字(min 154/max 199),sim 恒 3、neg 恒 2,mismatch 0。
    • 人工抽查 3 张(1 / 11 / 13):具象动作、物品、数字、台词全部可在卡片 6 字段溯源 → 无编造。
  • ⚠️ 重要口径修正(新增,已记 RUNBOOK §2.5): 23225-3 触发器「编造粗筛」告警 1 张 —— 引语「先去把猫安顿好」在卡片 6 字段无出处。 人工判定为 v3.1 边界内的摘要式短语(把「摸黑去小屋添粮换水」压成口语标签),非事实编造。 同时发现该卡 neg(热粥/餐桌/草坪)在原文同样无出处 → 这是负例应有的「不像」属性。 ∴ 修正口诀:fiction_check 对 neg 字段的告警默认忽略(负例本就写原文没有的画面);只有 std/sim 的告警需人工核。
  • ⚠️ 增厚退化现象确认:「问法平均 +0 字」。原因是本批按 v3 口径直写,模型无新信息可搬 → 退化为「不缩水」校验。这不是失败;要验证增厚能力须拿 v2 旧口径批做基线(批 47/49/51 的 +25/+45/+45 即此类基线)。
  • 候选池:氛围沉浸 23 → 余 18;感官沉浸 14;细节专业 22;自嘲反差 43;视觉冲击 10;价值观冲击 11。 ⛔ 食材极致 0、预见式服务 3 仍未重建 → 下一批第一件事是跑 6_target_candidates.py。
  • RUNBOOK.md 已追加批次 54、55 记录与「暂存批执行记录」表(标「暂存模式·未入库·v3」)。

未完成说明(诚实记录)

  • 本次任务要求连跑 3 批(批 55/56/57),实际只闭环 1 批(批 55)。
  • 批 56、57 均未开始:未取批、未拉解析、未产卡。
  • 未发生任何入库写入、未改 state.json、未跑 2_import_batch.py / 3_done_batch.py(暂存模式红线全程守住)。
  • 剩余工作(下轮直接接续):批 56 建议目标 感官沉浸(候选 14),批 57 建议 细节专业(候选 22); 若要先补 食材极致,须先重建候选池。