Files
mcn-short-video/project/短视频脚本创作/V1.0/references/接口调用/WeKnora_极致事件检索.md
T

150 lines
7.9 KiB
Markdown
Raw Normal View History

# WeKnora 极致事件检索规范
> 维度:接口调用 | 定位:**S7「极致触点素材检索」的调用契约**
> 依赖 MCP 服务:`weknora`(工具 `hybrid_search`);**不可用时静默降级**(见 §5),不影响 S1-S11 核心创作流程
> 上游串联:`../知识库/05_极致事件/00_极致事件总纲.md`(类型层判定)→ `../知识库/05_极致事件/01_极致类型-素材标签映射表.md`(类型↔标签)→ **本文件(检索取条)**
> 变更(2026-09-24):新建。素材层由「读 md 文件 + 四维标签筛条」切换为「WeKnora 语义检索(主)+ md 源文件(降级)」;实测依据见 §7。
---
## 一、定位:本规范解决什么
| 层 | 文件 | 回答 |
|:--|:--|:--|
| 方法层 | `../知识库/05_极致事件/` 各创作体系 + `../知识库/03_框架节奏/02_冲突叙事套路.md` | 这场**用什么手法**制造极致感 |
| 判定层 | `00_总纲` / `01_映射表` / `02_赛道形态` / `03_评估标准` | 这**是什么**极致、定哪个库 |
| **检索层** | **本文件** | **怎么取到**可参考的事件素材 |
| 素材层 | WeKnora 容器(主)+ `../素材库/*.md`(源与降级) | 取到**什么材料** |
> 🔴 **调用方向自上而下**:方法 → 判定 → 素材。**不得反向**(先看有什么素材再想故事=素材驱动,会导致内容与账号人设脱节)。
---
## 二、调用:工具与参数
```
工具:hybrid_search(MCP 服务 weknora)
```
| 参数 | 取值 | 说明 |
|:--|:--|:--|
| `kb_id` | `MCN极致事件素材库` | **用库名**(服务自动解析),**禁写死 UUID** |
| `query` | 镜像式五要素问法(见 §3) | 唯一召回杠杆 |
| `match_count` | **3** | 默认 5;压到 3 以控上下文(见 §6) |
| `vector_threshold` | **0.5**(显式传) | 默认恰为 0.5,仍显式传以防版本变化;**不得调高**(提到 0.6 会大面积漏召) |
| `keyword_threshold` | ❌ **不传** | FAQ 库恒为**纯向量**召回,关键词不参与 |
> ⚠️ **禁用 `chat` / `agent_chat` 替代**:二者走 RAG+LLM 总结,会把卡片**摘要化**——而卡片的价值恰在不可概括的细节(原话、微反应、铺垫量级、镜头语言)。**必须用 `hybrid_search` 取卡片原文。**
---
## 三、问法:镜像式五要素
> 核心原则:**问法要与库内标准问的语域同构**(库内标准问即"编导检索意图句")。
```
「找一条 {①落差对象} {②打破方式} {③具象锚点} 的 {④段落功能} 型事件素材」
```
| 要素 | 来源 | 示例 |
|:--:|:--|:--|
| ① 落差对象 | S7 布位表节点 + S6 场次事件 | 被当场刁难的人 / 等了一整天的人 |
| ② 打破方式 | **方法层**(见 §一 表格左列) | 用一连串专业细节把对方顶回去 |
| ③ 具象锚点 | **必须有**,取自本账号赛道与人设 | 厨房 / 接送孩子 / 试妆镜前 |
| ④ 段落功能 | 布位表四型之一 | 钩子型 / 留人型 / 转粉型 |
### 3.1 三条禁忌(实测支撑)
| 禁忌 | 后果 |
|:--|:--|
| ❌ 纯抽象机制词("制造反差""引起共鸣") | **零命中**(实测:"一句话让所有人都沉默了,因为谁都没法反驳" → `data: null`) |
| ❌ 赛道词当主检索词("亲子""美妆") | 库内 **77.5% 为剧情赛道**,赛道词检索只会落到极少数条且分数低。赛道词只作为③具象锚点的一部分 |
| ❌ 依赖 `CustomMetadata` 过滤 | **不参与过滤**(实测)。想收敛范围只能靠 query 语义 + 检索后复筛 |
---
## 四、返回值判据(三个必知行为)
### 4.1 零命中不是错误
```json
{ "data": null, "success": true } ← 零命中
```
> 判据:**`success == true 且 data == null` → 零命中**。
> ❌ 不得判为"调用失败";✅ 不重试、不报错,直接走 §5 降级。
### 4.2 同一张卡内容返回三份
| 字段 | 内容 | 处理 |
|:--|:--|:--|
| `chunk_metadata.answers[0]` | **卡片原文** | ✅ **只读这一份** |
| `content` | 标准问 + 相似问 + Answers 拼接 | ❌ 噪声 |
| `matched_content` | 又一份全文 | ❌ 噪声 |
| `chunk_metadata.standard_question` / `similar_questions` / `negative_questions` | 问法(生产信息) | ❌ 创作时无用 |
### 4.3 复筛与转译
| 步 | 动作 | 判据 |
|:--:|:--|:--|
| 1 | 读 `chunk_metadata.answers[0]` | 只读这一份 |
| 2 | **复筛** | 看卡片 `内容含义` 的落差结构 `[期待A]—被X打破→[结果B]` 是否与本节点**同构**;不同构直接弃。**分数不参与判断**(存在「泛化磁铁卡」会挤占 top1) |
| 3 | 保留 | **≤2 条/节点** |
| 4 | **转译** | 只取落差结构 / 手法类别 / 铺垫量级(短≤3s·中3-10s·长>10s)/ 镜头逻辑;**禁搬**人物·身份·台词·道具(取材不取形,硬规则见 `../创作流程规范.md` 六) |
> 🔴 卡片来自**他人账号**的具体桥段,直接搬用 = 抄袭且违反硬编码禁止规则。转译产物必须换成本账号的具象锚点(人设卡身份 + 本赛道物品),写入大纲时不留原卡痕迹。
---
## 五、降级矩阵(P0)
| 情形 | 判据 | 行为 |
|:--|:--|:--|
| 会话未挂载 weknora MCP | 工具不可用 | 静默回退读 `../素材库/*.md`(**md = 权威源,永不删除**) |
| 服务不可用(容器未启动 / 用户环境无服务) | 调用报错或超时 | 同上 |
| 库不存在 | 返回错误 | 视为未启用,全流程与原行为一致 |
| **零命中** | `success=true 且 data=null` | 退化为「仅用判定层类型子类」指引;**不编造素材**、不重试 |
> **能力探测式**:先试图检索 → 失败/零命中 → 降级。**既不假定可用,也不假定不可用。**
> 与 `SKILL.md`「MCP 不可用时不影响核心创作流程(步骤 1-11)」原则一致。
---
## 六、上下文成本控制
单条卡约 3.5–4KB(因 §4.2 的三份重复)× `match_count`:
| `match_count` | 单次返回 | 一视频 3 节点 | 一视频 5 节点 |
|:--:|:--:|:--:|:--:|
| 5(默认) | ~18KB ≈ 6K tokens | ~18K | ~30K |
| **3(本规范取值)** | **~11KB ≈ 3.5K tokens** | ~10K | ~18K |
**三条控制规则**:
1. **`match_count=3`**,复筛后留 ≤2 —— 不追求多召回(泛化磁铁卡会挤进前列);
2. **按需检索** —— 只对「规划时想不出具体桥段的节点」检索;**已有明确桥段的节点跳过**(通常一视频 1–3 次,而非每节点必检);
3. **串行、读后即弃** —— 一次只检索一个节点,读卡 → 转译 → 丢弃原文,不把多节点结果堆积在上下文里。
---
## 七、实测依据(2026-09-24)
| 项 | 结果 |
|:--|:--|
| MCP 可召回 FAQ 库 | ✅ `hybrid_search(kb_id="MCN极致事件素材库", query="被当场刁难的人,用一连串专业细节一步步把对方顶回去")` → 命中 `28325-3`,`score=0.6058205716953738` |
| 与 REST 路径等价 | ✅ 同 query 分数与 `POST /api/v1/knowledge-bases/{KB}/faq/search` **完全一致** |
| `kb_id` 支持库名 | ✅ 无需 UUID |
| 纯抽象问法 | ❌ `data: null`(零命中) |
| 具象机制问法 | ✅ 0.50–0.61 区间,最高 0.6058 |
| 库内库存 | 240 条事件卡;赛道分布剧情 186(77.5%)/ 生活vlog 38 / 旅行 6 / 小剧场 3 / 亲子 3 / 明星娱乐 3 / 搞笑短剧 1;**感官沉浸、氛围沉浸 = 0 条** |
---
## 八、与其他接口的分工
| 路径 | 使用者 | 场景 |
|:--|:--|:--|
| **MCP `hybrid_search`** | AI 会话(S7 执行时) | 创作端单次检索,每视频 1–3 次 |
| REST `/faq/search` | `tools/weknora-ingest/*.py`(项目侧,**不入技能包**) | 生产端:批量导入 + 检索终验;导入通道独占(dry_run 须轮询 completed) |
> 🔴 MCP 服务地址与 API Key 属**环境配置**,只存在于 `~/.workbuddy/mcp.json`(项目侧 `tools/` 文档内),**不得写入本技能任何文件**。