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 文档;变更日志归档
This commit is contained in:
maogeigei committed 2026-09-24 14:47:19 +08:00
1 parent 0165144292
commit 6e4ce9441c
20 files changed
+1703 -69

No files matched your search

@@ -0,0 +1,281 @@
# 极致事件素材接入创作流程 · 方案 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 不动 |