Files
mcn-short-video/极致事件素材接入创作流程方案_V1.0_20260924.md
maogeigei 6e4ce9441c feat(skill): 素材层切换 WeKnora + 方法层接线
定性:素材载体切换(本地 md -> WeKnora 容器),非扩容;驱动方向由素材驱动改为方法驱动。

- 新建 references/接口调用/WeKnora_极致事件检索.md 调用契约:MCP hybrid_search(服务 weknora)/ kb_id 用库名禁写死 UUID / match_count=3 / vector_threshold=0.5 显式 / 不传 keyword_threshold / 零命中判据 success=true 且 data=null / 只读 chunk_metadata.answers[0] / 禁用 chat 与 agent_chat / 复筛<=2条每节点 / 取材不取形转译 / 降级矩阵 / 成本控制
- S7 布位表新增「候选创作方法」列(4->5 列)打通方法层(此前 05_极致事件 6 个方法文件在创作流程中 0 调用)
- S7 新增「极致触点素材检索」按需环节 + {material_content} 定死结构 + 极致触点机制自检([期待A]-被X打破->[结果B]);输入章节素材库改双层源(主源 WeKnora / 降级 md,md 永不删除)
- 6 个方法文件补「素材供给」块(极致标签 / 定库检索入口 / 问法②打破方式填法)
- SKILL.md MCP 依赖节增 WeKnora 检索层(含静默降级口径);S7 小节补调用链;frontmatter updated_at
- 索引_知识素材库.md 修正 03/05/06/07/08/11 定性(实为字段结构模板而非素材库);新增「接口调用」章节
- S9 输入增 {material_cards} + 新增台词毛边三档参考;S11 类1「爆点贯穿」升级为爆点溯源 4 判据,八类35项清单同步
- 根目录补 3 份方案/规范文档 + 2 份 09-23 WeKnora 文档;变更日志归档
2026-09-24 14:47:19 +08:00

282 lines
20 KiB
Markdown
Raw Permalink 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.
# 极致事件素材接入创作流程 · 方案 V1.0
> ⚠️ **本版已被 `极致事件素材接入创作流程方案_V1.1_20260924.md` 取代**(2026-09-24 13:0x)。
> 取代原因(两处根本修正 + 一处事实纠错):
> ① **定性修正**:不是"接入"(S7 新增检索步骤),而是**素材载体切换**(本地 md 素材 → WeKnora 容器);
> ② **驱动修正**:素材驱动 → **方法驱动**(方法定手法 → 判定定类型与布位 → 素材作实例供给);
> ③ **事实纠错**:原 §1.2「实素材只覆盖 7 个库」有误。实测 —— **7 个通用库中 6 个是空壳**(03/05/06/07/08/11 只有字段结构 + 「在此添加条目」注释,零条素材),唯一有实素材的是 01 美食库 **21 条**。
> 保留下文仅作沿革参考。
> 日期:2026-09-24 | 类型:分析方案(**未改动任何技能文件**,待授权后执行)
> 范围:`project/短视频脚本创作/V1.0/`(技能口径源)+ `tools/weknora-ingest/`(检索层)
> 依据:SKILL.md / 创作流程 S5-S11 / 知识库 05_极致事件 全套 / WeKnora 容器实测(240 条卡)
---
## 〇、结论先行
**一句话**:WeKnora「MCN极致事件素材库」(240 条卡)目前与本技能**零引用**(全仓 `grep -i weknora` = 0 命中),它是一个**离线资产**;把它接进 **S7 事件展开前**、**S9 台词演绎**、**S11 爆点自检** 三处,即可在不新增任何素材的前提下补上当前最薄的一层内容——**「事件机制层」**(凭什么留人),而现有 8 库素材只能回答"拍什么"。
| 接入点 | 位置 | 解决什么 | 优先级 |
|:--|:--|:--|:--:|
| **A 机制检索** | S7 第二步「事件序列展开」之前 | 每个 L1 极致触点从"位置"变成"有机制支撑的桥段",治"凭印象编爆点" | **P0** |
| **B 台词毛边** | S9 台词具象化时 | 用卡的「原话 / 微反应 / 意外」范式治"台词概括化" | P1 |
| **C 爆点溯源** | S11「爆点贯穿」检查 | 每个 L1 节点附机制来源,无来源 = 编造爆点,可核查 | P1 |
**先决条件(3 个缺口必须先补,否则接入必然空转)**:
1. S7 里 `{material_content}` 的注入者「**编排层**」在技能内**从未被定义**(全仓仅 1 处提及,就是那句占位注释)→ 必须补一份检索调用规范;
2. 检索问法若无模板,实测**抽象 query 零命中**(见 §2.4)→ 必须定义「镜像式五要素」问法模板;
3. 卡片来自**别人账号**的具体桥段 → 必须定义「取材不取形」转译规则,否则违反 SKILL.md 关键规则六(硬编码禁止 / 账号信息污染)。
---
## 一、现状诊断
### 1.1 检索层建成但未接线
| 事实 | 证据 |
|:--|:--|
| 技能全仓无 WeKnora 引用 | `grep -rn -i "weknora"` → **0 命中** |
| 能力已在(不是设计阶段) | 容器 `WeKnora-app` Up 4 days healthy,`chunk_count=240`,FAQ 检索接口实测可用 |
| 生产流水线已跑通 15 批 | `tools/weknora-ingest/RUNBOOK.md` 批次 1-15,225 条卡 15/15 通过率 |
| 检索参数已知 | `POST /knowledge-bases/{KB}/faq/search`,`vector_threshold=0.5` **必须显式**(默认 0.7 硬编码,口语问法召不回) |
> 结论:**资产已就绪,缺的只有"调用契约"**。这是本次方案的全部工作量所在。
### 1.2 现有素材调取链与它的断点
S7 现行调取链(原文):
```
极致类型判定(知识库 05_极致事件/00_总纲)
→ 类型↔标签映射(01_极致类型-素材标签映射表)
→ 4 维标签筛条(极致标签 → 适用场景 → 镜头语言 → 画面风格)
→ 落在 references/素材库/ 的 8 个库 md 文件上
```
**两个断点**:
| # | 断点 | 后果 |
|:--:|:--|:--|
| ① | 「编排层」无定义 —— S7 User Prompt 写 `【素材内容】(由编排层根据…注入){material_content}`,但技能内**没有任何文件说明编排层是谁、何时调、怎么调** | 运行时这一步实际被跳过,`material_content` 空间常为空 → AI 只能凭印象写大纲 |
| ② | 8 库是**载体层**(具体菜品/仪式/穿搭方案),不是**机制层**;且实素材只覆盖 7 个库(01/03/05/06/07/08/11),04 对话库仅存分块定义 | "拍什么"有了具体物,"凭什么让人看下去"仍无样本 |
### 1.3 内容层次模型 —— WeKnora 补的是第 3 层
| 层 | 回答 | 承载资产 | 现行调用 |
|:--:|:--|:--|:--|
| 1 载体层 | **拍什么**(具名物品/环境) | 素材库 8 库 + 人设卡 | ✅ S7 四维筛条 |
| 2 结构层 | **怎么排**(场次/情绪/节奏) | 知识库 03_框架节奏 + S6 情绪设计卡 | ✅ S6/S7 |
| **3 机制层** | **凭什么留人**(期待→打破的落差结构) | **WeKnora 240 条极致事件卡** | ❌ **未接入** ← 最薄的一层 |
| 4 表达层 | **怎么说**(台词风格/口头禅) | 知识库 08_对话风格 + 人设卡 | ✅ S9 |
> 极致事件卡的 10 字段里,**`内容含义`(`[期待A]—被X打破→[结果B]`)、`创作手法`(含铺垫量级 短≤3s/中3-10s/长>10s)、`复用场景`** 三层信息,是 8 库**结构上没有**的——8 库条目只有"这是什么素材",没有"这个素材在叙事上怎么制造落差"。
> 这正是"内容层次单薄"的技术根因:**S7 的 L2 密度自检只查"具体度"(具名物品/对话组/操作链/环境细节),不查"爆点机制是否成立"**。大纲可以既具体又平。
### 1.4 实测:召回能力到底如何(本次新跑)
以 10 组不同赛道的**真实创作意图**打检索(threshold=0.5,top3):
| 创作意图(模拟 query) | top1 命中 | score | 判定 |
|:--|:--|:--:|:--:|
| 剧情·专业反击「被当场刁难的人用一串专业细节把对方顶回去」 | 28325-3 托盘段 | **0.6058** | ✅ 对口 |
| 美食·品质「食材好到一口吃出差别」 | 28348-1 老板尝出品 | 0.5983 | ✅ 对口 |
| 亲子·服务细致「孩子放学回家家长提前备好」 | 「我还给你带瓶水」的预判 | 0.5995 | ⚠️ 泛化磁铁卡(见下) |
| 美妆·反差「同一个人两种状态落差大」 | A1 冷面私教/网恋撒娇 | 0.5633 | ⚠️ 曲线命中(机制对、赛道跨) |
| 知识口播·反常识「一句话推翻理所当然」 | 20270-1 莫比乌斯环 | 0.5447 | ⚠️ 偏弱 |
| 生活vlog·沉浸「深夜做饭安静丝滑解压」 | 番茄牛腩(8 库风条目) | 0.5150 | ⚠️ 弱 |
| 职场·自嘲「先吐槽自己差结果还行」 | 31775-1 尝菜 | 0.5658 | ⚠️ 偏弱 |
| 通用·反差「前后两个人差距像两个世界」 | 20217-2 楼下跺脚 | 0.5317 | ⚠️ 偏弱 |
| **情感·价值观「一句话让所有人沉默」** | **—** | **❌ 零命中** | ❌ 纯抽象 query 失效 |
**四条硬结论**:
1. **可用但需引导**:命中率 9/10,但分数集中在 **0.50-0.61** 的窄带,天花板低。原因不是库的问题,是**问法与库内标准问语域不齐**。
2. **纯抽象 query 会零命中**("一句话让所有人都沉默了,因为谁都没法反驳"→ 0 条),而**带具象动作/场景的 query 明显更高分**("被当场刁难的人…一步步把对方顶回去"→ 0.6058 最高)。→ **query 必须带具象锚点**。
3. **存在 15 条「泛化磁铁卡」挤占召回位**:库内编号形如 `A1/A2/B1/B2` 与 11 条名称式条目(皮蛋炒饭 / 蒜香辣鸡爪 / 番茄牛腩 / 「我还给你带瓶水」的预判 …),其标准问统一是泛化需求句式「找一条 X 的极致事件素材」。**这类问法与任何创作意图的向量距离都近**,因此频繁占据 top1,把真正对口的卡挤下去。
4. **赛道覆盖严重偏斜**:240 条中 **剧情赛道 186 条(77.5%)**,非剧情合计 54 条(生活vlog 38 / 旅行 6 / 小剧场 3 / 亲子 3 / 明星娱乐 3 / 搞笑短剧 1)。标签侧,**「感官沉浸」「氛围沉浸」= 0 条**(沉浸/治愈/慢生活向内容检索为空)。
### 1.5 一个可直接复用的发现:卡片格式 = 爆点自检模板
卡片 V1.3 的 `内容含义` 字段结构 `[期待A] —被X打破→ [结果B]`,本质是一个**爆点成立性判据**。把它反过来当作 S7/S11 的校验器:
> 每个 L1 极致触点若写不出「期待 A → 打破 X → 结果 B」三件套,就不是极致触点,只是普通情节。
这条规则**不需要新数据**,可立即生效,且与 S11「爆点贯穿」检查天然咬合。
---
## 二、接入设计
### 2.1 接入点 A(P0):S7 事件展开前的机制检索
**插入位置**:S7 处理规则 **第二步「事件序列展开」之前**——即「极致触点节点布位」表定完节点之后、场景预演之前。
**执行时序**:
```
S6 场次结构表 + 情绪设计卡
→ S7 选结构模板
→ 【新增】极致触点节点布位(现行表:钩子型/留人型/转粉型/传播型)
→ 【新增 A-1】按节点生成检索问法(镜像式五要素模板)
→ 【新增 A-2】检索 WeKnora → top5 → AI 复筛留 ≤2
→ 【新增 A-3】按「取材不取形」转译为本账号桥段
→ 【新增 A-4】注入 {material_content}(结构化,见 2.6)
→ 场景预演 → 事件序列展开(3-5 条/场)→ 密度自检 + 【新增】极致触点机制自检
```
**A-1 检索问法构造 —— 镜像式五要素**
> 核心原则:**问法要与库内标准问语域同构**(库内标准问即"编导检索意图句",见 RUNBOOK 步骤 6 的 `std` 字段)。
> 实测反证:抽象句 ❌ 0 命中;具象机制句 ✅ 0.6058。
```
模板:「找一条 {①落差对象} {②打破方式} {③具象锚点} 的 {④段落功能} 型事件素材」
```
| 要素 | 来源 | 示例 |
|:--:|:--|:--|
| ① 落差对象 | S7 布位表节点 + S6 场次事件 | 被当场刁难的人 / 等了一整天的人 |
| ② 打破方式 | 知识库 05_极致事件 类型层(反转/冲突/荒诞/错位/克制…) | 用一连串专业细节把对方顶回去 |
| ③ 具象锚点 | **必须有**,取自本账号赛道与人设 | 厨房 / 接送孩子 / 试妆镜前 |
| ④ 段落功能 | 布位表四型之一 | 钩子型 / 留人型 / 转粉型 |
**三条禁忌**(实测支撑):
- ❌ **禁用纯抽象机制词**("制造反差""引起共鸣")→ 零命中;
- ❌ **禁用赛道词当主检索词**(库内 77.5% 是剧情赛道,用"亲子/美妆"检索只会落到极少数卡上且分数低);赛道词只作为③具象锚点的一部分;
- ❌ **不用 `CustomMetadata` 过滤**(**实测:不参与过滤**)+ FAQ 为**纯向量召回**(关键词不参与)→ 想收敛范围只能靠 query 语义与检索后复筛。
**A-2 参数与复筛**:
| 项 | 值 | 理由 |
|:--|:--|:--|
| `vector_threshold` | **0.5**(显式,不可省) | 默认 0.7 硬编码,跨赛道实测分数仅 0.50-0.61,提到 0.6 会大面积漏召 |
| `match_count` | **5** | 为复筛留空间 |
| 复筛后保留 | **≤2 条/节点** | 泛化磁铁卡会挤占 top1,必须由 AI 读卡判断相关性(判据:`内容含义` 的落差结构是否与本节点同构) |
| 复用场景匹配 | 语义比对,不做字段过滤 | `复用场景` 值形如「剧情赛道·职场喜剧·开场『前厅后厨对峙』段」,用于复筛加权 |
**A-3 转译规则(防抄袭 / 防硬编码,P0)**:
> 卡片是**别人账号的具体内容**(周小闹、癫婆、良田…),直接搬用 = 抄袭且违反关键规则六。
| 可迁移(取材) | 禁止搬用(不取形) |
|:--|:--|
| `内容含义` 的**落差结构**(期待 A → 打破 X → 结果 B) | 具体人物、身份、关系 |
| `创作手法` 的**手法类别 + 铺垫量级**(短≤3s / 中3-10s / 长>10s) | 原账号台词、金句 |
| `镜头语言` 的**机位与剪辑逻辑** | 原场景的具名道具 / 招牌 |
| `适用场景` 的段落功能(开场/中段/结尾) | 原账号机制与专属符号 |
转译产物必须**换成本账号的具象锚点**(人设卡身份 + 本赛道物品),写入大纲时不留原卡痕迹。
### 2.2 接入点 B(P1):S9 台词毛边
**现状**:S9 输入清单(`9_生成短视频脚本.md` 第 9-15 行)只列了 S4/S6/S7/S8 输出,**拿不到素材卡**。而卡片 `极致内容` 字段被硬规则要求「含 ≥1 处真实毛边:原话 / 无修饰微反应 / 意外」——这正是治 S9「台词概括化」(禁止行为原文:"不得用概要式对话替代完整台词")的现成范式。
**设计**:S9 输入增补可选项 `{material_cards}`(默认沿用 S7 已注入的卡),在台词具象化时提供**三档参考**:
- 用**原话**替代书面语("后厨是人,也不是机器");
- 用**无修饰微反应**替代心理描写(那只一直没停过的手);
- 用**意外**打断预期节奏(瓶子砸在不锈钢台面上的闷响)。
> 三招都只借"范式",不借句子——与 A-3 同一红线。
### 2.3 接入点 C(P1):S11 爆点溯源
S11 现有「爆点贯穿」检查(开头 + 至少 1 次中后段)可升级为**可核查**:
| 检查项 | 判据 | 不通过判定 |
|:--|:--|:--|
| L1 节点是否有机制来源 | 每个极致触点能指到「一条卡 / 类型层子类 / 8 库条目」 | 无来源 → **编造爆点**,列 P1 |
| 落差三件套是否写得出 | `[期待A]—被X打破→[结果B]` | 写不出 → 该节点降级为普通情节,不计入 L1 密度 |
| 是否照搬原卡 | 具名人物/台词/道具与本账号人设比对 | 命中 → **P0 抄袭/硬编码** |
### 2.4 触发条件与三态适配
| 模式 | 检索行为 | 落盘 |
|:--|:--|:--|
| ⚡ 自动(默认) | 静默执行 A/B/C,只把转译结果体现在大纲与脚本里;**不展示卡片原文** | 不落盘 |
| 🤝 共创 | Gate-4 时附「爆点机制来源」小表(节点 / 机制 / 来源卡),供用户判断 | 不落盘 |
| 🛠️ 开发 | 落盘 `07_素材检索记录.md`(问法 / 命中卡 / 复筛理由 / 转译结果) | 全落盘 |
**触发门槛**:仅当 L1 极致触点存在(每 15-20 秒 ≥1,S7 布位表必然产出)时触发;纯信息陈述型内容(无 L1 节点)跳过。
### 2.5 降级路径(必须,P0)
WeKnora 是**开发机本地 Docker 服务**(`127.0.0.1:31607`),**用户环境不存在**;技能经软链分发到用户环境后不能硬依赖。
| 情形 | 行为 |
|:--|:--|
| 服务不可用(连不上 / 非 200) | **静默回退**到现行 8 库 md 四维筛条 + 类型映射表;创作流程不中断、不报错 |
| 检索零命中 | 退化为「仅用类型层子类」指引(05_极致事件 既有文件);不编造素材 |
| 库为空 / 未配置 | 视为未启用,全流程与原行为一致 |
> 设计定位:**WeKnora 是"可选增强层",不是硬依赖**。这与 SKILL.md「MCP 降级不影响核心创作流程(S1-S11)」的既有原则一致。
### 2.6 注入格式:把 `{material_content}` 定死
现行 `{material_content}` 只是一个**未定义的空变量**。建议定义为:
```
【素材内容 · 来源:极致事件机制检索】
(如未能启用检索,此段留空并按素材库 8 库筛条填充)
■ 节点① 开场钩子(0-3s)|钩子型|机制来源:{卡编号 或 类型层子类}
· 落差结构:[期待A] —被X打破→ [结果B]
· 手法与铺垫量级:{手法类别} + 铺垫 短/中/长
· 拍摄参考:{镜头语言} | {画面风格}
· 本账号转译:{换成本账号的人/物/场景后的桥段}
```
> ⚠️ 注入格式里**不出现原卡的人物名与台词**——转译在 A-3 完成,注入的是转译结果,避免污染下游(S9/S10/S11)与产出文件。
---
## 三、缺口清单(待授权后执行,逐条改动)
| # | 文件 | 改动 | 优先级 |
|:--:|:--|:--|:--:|
| 1 | `references/知识库/05_极致事件/04_检索调用规范.md`(**新建**) | 定义「编排层」= 检索调用契约:触发条件 / 镜像式五要素问法模板 / 参数(threshold 0.5、top5)/ 复筛判据 / 转译规则 / 降级 / 注入格式 | **P0** |
| 2 | `references/创作流程/7_生成短视频大纲.md` | 第二步前插入「极致触点素材检索」子步骤;`{material_content}` 换成 2.6 结构;深度自检增「极致触点机制自检」(落差三件套) | **P0** |
| 3 | `SKILL.md` S7 小节 | 「按知识库/05_极致事件 指引调取素材」补一句:**检索链=类型层 →(映射表)→ 检索调用规范 → 素材库**(现缺中间环节) | **P0** |
| 4 | `references/创作流程/9_生成短视频脚本.md` | 输入增补可选项 `{material_cards}`;处理规则补「台词毛边三档参考」 | P1 |
| 5 | `references/创作流程/11_脚本检查和诊断.md` | 「爆点贯穿」检查升级为爆点溯源三判据(含抄袭 P0) | P1 |
| 6 | `references/索引_知识素材库.md` | 05_极致事件 段补第 11 个文件(检索调用规范) | P1 |
| 7 | `references-add/变更日志.md` | 记录本次变更 | P1 |
| 8 | **不入技能包** | 检索脚本(`faq/search` 客户端)含服务地址与 Key,**只能留在 `tools/weknora-ingest/`**(开发机项目侧),技能内只写调用契约与降级规则 | **P0** |
> ⚠️ **红线提醒**:技能内一切文件引用必须用**相对路径**;WeKnora 的 `127.0.0.1:31607` 与 API Key **不得写入技能正文**(属环境配置,放 `tools/`)。旧版手册里的裸 Key 需在后续整理时收敛。
---
## 四、数据侧待办(不阻塞接入,但影响召回质量)
| # | 事项 | 现象(实测) | 建议 |
|:--:|:--|:--|:--|
| 1 | 15 条「泛化磁铁卡」挤占召回 | 标准问统一为「找一条 X 的极致事件素材」,与任何 query 都近,频繁占 top1 | 改造其标准问为**具象绑定式**(补赛道/物件/桥段),或降权移至末尾 |
| 2 | 近 300 行里 6 条卡的 `事件标签` 字段混入自检备注 | 值形如 `反差⚠️单值(低于「≥2值」新自检下限,保留实测原判)` | 清理为纯标签值 + 备注移至卡外 |
| 3 | 赛道覆盖偏斜 | 剧情 186/240(77.5%);亲子仅 3 条;沉浸类标签 0 条 | 队列 2202 条按点赞降序,后续批次**优先补非剧情赛道**(亲子/美食/知识/生活vlog) |
| 4 | 「感官沉浸 / 氛围沉浸」覆盖为零 | 治愈/慢生活/ASMR 类内容检索为空 | 属 8 库标签,WeKnora 侧需专门批次补齐 |
| 5 | 检索无「批量」能力 | FAQ 库无 `CustomMetadata` 过滤、纯向量召回 | 长视频多节点需求 → 逐节点单次检索(每次 ≤5 条),可接受 |
---
## 五、风险与边界
| 风险 | 等级 | 缓解 |
|:--|:--:|:--|
| 照搬他人账号桥段(抄袭 / 硬编码) | **P0** | A-3 转译表 + S11 溯源判据第 3 条 |
| 检索层成为硬依赖导致用户环境报错 | **P0** | §2.5 静默降级;脚本不入技能包 |
| 泛化磁铁卡污染注入内容 | P1 | top5 复筛留 ≤2 + §四·1 改造 |
| 跨赛道召回分数低(0.50-0.61)被误当"无素材" | P1 | 阈值锁定 0.5;复筛判据看 `内容含义` 结构而不看分数 |
| 接入后大纲变"卡片拼贴"、失去账号一致性 | P1 | 转译必须回填人设卡锚点;S11 人设稳定性校验既有项覆盖 |
---
## 附:与既有资产的关系(不重复造)
| 资产 | 分工 | 本方案动作 |
|:--|:--|:--|
| 知识库 `05_极致事件/00-03` | **类型层**(是什么极致)→ 定库 | 不改,仅在其后串接检索环节 |
| `01_极致类型-素材标签映射表.md` | 类型 ↔ 标签的桥 | 不改,作为问法②要素的来源 |
| 素材库 8 库 | **载体层**(拍什么) | 不改,作为降级路径与补充填充源 |
| `tools/weknora-ingest/*` | **机制层**(凭什么留人) | 仅新增"检索调用"消费端;生产端 RUNBOOK 不动 |