소스 검색

v2 迭代:类型中立拆颗 + 决策落点 + 保留原文 + 作用域名词化 + 语义投票闸

拆颗(phase1-frame):
- 类型中立入口:先切单元→逐元按"驱动哪个决策"判 how/what/why(不再 how 先抽),how 凭"序列为真"上位
- 决策落点:How 每步 输入→方法→产出(弃冗余"目的");What 分 构成/选项 + 选项必带"选择线索";Why 必带"取舍"节
- What 保留原文:界定/说明/构成尽量照搬原帖、不转译不脑补;选项含子结构带全(如三幕式各幕描述)

作用域(phase2-scope):值起名词、对齐分类树叶子粒度、禁动宾(开头/结尾动词都名词化)

范围闸(创作 vs 制作 vs 越界):
- ① extract.txt:两轴定义(产出物是内容 + 创作非制作)+ is_empty 越界果断判空
- 语义投票闸 creation_gate(decompose.py,①后②前):admit+refute 两票,分歧上 tiebreak,边界倾向排除;
  提示词 prompts/gate_admit|refute|tiebreak.txt(load_prompt 读)
- 删除关键词 guard drop_tool_ops(含 _TOOL_PAT/import re)——靠语义理解,不靠关键词

代码:decompose.py 支持 OUT 后缀输出(_v2 不覆盖原版)+ 创作阶段守卫;rebuild_payloads 同步

前端:
- 提示词弹窗自带极简 Markdown 渲染(标题/表格/代码/引用/伪标签小节),三份提示词清晰可读
- index_v2.html:决策落点版(输入列/选择线索/kind 徽章/取舍高亮)+ ❓名词说明大白话词典;类型徽章保留 How/What/Why
- 卡片级溯源 🔍 + 原帖视频/图片块

数据:全量重跑(5 小红书创作帖保留;抖音"用AI做视频"被语义闸判制作排除;Voodoo 游戏判越界/空),lint 0 ERROR/0 WARN

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
SamLee 3 주 전
부모
커밋
fc7cbc3519

+ 18 - 5
prompts/extract.txt

@@ -1,17 +1,30 @@
 你在从一篇小红书帖子(标题、正文、图片、视频)里提取「创作知识」:能指导别人"如何创作内容"的方法、原理、认知或清单。本步只忠实提取,不判断好坏,不拆分归类。
 
 <什么算创作知识>
-能迁移、能复用、能教别人"怎么做内容"的东西(跨题材:自媒体/做菜/穿搭/健身/手工…都算)。
-- 算:选题/构思方法、结构或排版公式、某类内容的要素清单、为什么某种开头/呈现更抓人、镜头/构图/配色技巧、某个操作的关键判断点。
-- 不算(作品本身):一段具体文案、一张图的 AI 出图提示词、一个具体选题标题、一份具体食谱的用量、纯展示内容(风景/产品/生活)。
-作品里有时夹带可迁移方法,有就提、没有就如实标空。
+能迁移、能复用、能教别人"怎么创作图文/视频内容"的方法、原理、清单。**判断要同时过两条轴,缺一不算:**
+
+【轴A·产出物是不是「内容」】这条知识帮你创作出来的成品,是不是 图文 / 视频 / 脚本 / 剧本 / 小说 这类**内容**?题材不限(美食/游戏/健身/穿搭…都行),卡的是产出物:
+- 算:产出"关于某题材的**内容**"——美食视频拍法、游戏实况/解说脚本、健身图文写法、剧本/小说写法。
+- 不算:产出"那个题材**本身**"——一道菜的做法、一个**游戏的玩法/关卡设计**、一个产品、一套运营/选品策略(这是做题材本身,不是做关于它的内容)。
+
+【轴B·是「创作」不是「制作」】它教的是"怎么构思/选题/写/结构/呈现"(创作),还是"用哪个软件/AI、点哪个按钮把成品产出来"(制作/工具操作)?
+- 算(创作):选题/构思方法、结构或排版公式、要素清单、为什么某种开头/呈现更抓人、镜头/构图/配色的设计判断。
+- 不算(制作):打开某 App/小程序 → 输入/粘贴 → 点生成/扩写 → 设参数 → 导出/保存 这类工具操作步骤;纯器材/剪辑软件/调色/导出操作。
+- **特别强调(最常被误判)**:「**用某 AI/App 帮你生成内容成品**」的操作教程——例:『打开豆包/某AI → 输入需求 → 让它生成文案/图/视频 → 选一个满意的用』——这是**让工具替你做(制作/工具使用),不是教你自己怎么创作**,即便产出是视频/文案也**不算**。除非它真的在教"怎么把创作需求拆成可复用的判断/方法"(而不仅是"让 AI 生成再挑一个")。**整帖只是这种"用 AI 几步做出视频/文案"的流程 → 轴B 不过 → 判 is_empty。**
+
+【两轴 AND】两条都过才算;任一不过 → 不算。
+另外不算(作品本身):一段具体文案、一张图的 AI 出图提示词、一个具体选题标题、一份具体食谱用量、纯展示内容(风景/产品/生活)。
+作品里有时夹带可迁移的**创作**方法,有就提、没有就如实标空。
 </什么算创作知识>
 
 <工作要点>
 - 知识常在图片/视频里,正文常常只是话题串(如 "#短剧编剧# #写作#")。为什么强调:只读正文会系统性漏掉真正的知识,所以必须看图、看视频。
 - 以原始素材为准,忠实转述,不编造、不补全、不替作者总结它没说的结论;有的尽量提全。
 - **按卡片归因**:每张图/帧旁都标了【卡片N】。除了 text(综合所有卡片把创作知识讲清楚,主产物),还要填 cards——每张**有知识**的卡片一条 {{"index": N, "content": "这张卡上的知识要点"}},N 就是【卡片N】里的号;某张卡没有知识就不列它。为什么:后续要据此把每条知识溯源到具体卡片。
-- **is_empty(整条流程的总闸)**:判 `true` 后,后面的拆颗 / 归类 / 入库**全部不走**,所以要稳——**通篇图文视频都看完、确实没有任何可迁移的方法/原理/清单**(纯作品/纯展示/纯无关)才标 `true`;只要夹带一点点就 `false`;**拿不准一律 `false`**(宁可交给后面再筛,也别把有知识的帖误杀)。标 `true` 时 `text` 留空字符串、`cards` 留空数组。
+- **is_empty(整条流程的总闸)**:判 `true` 后,后面的拆颗 / 归类 / 入库**全部不走**。两种情况标 `true`:
+  ① **纯作品/纯展示/纯无关**——通篇看完确实没有任何可迁移的创作方法/原理/清单。
+  ② **整帖不在范围内(越界要果断判 true,别放行)**——整帖产出物不是图文/视频内容(如游戏玩法/关卡设计、产品/运营/选品、做菜本身),**或**整帖是制作/工具操作(如"用某 AI/App 几步做出一段视频"的打开→点按钮→导出流程)。这类即便看着像"教程/步骤",也按轴A/轴B 判定为越界。
+  只要有一点点"怎么**创作内容**"的可迁移方法就 `false`;**范围内但拿不准有没有知识 → `false`**(交后面再筛);**但"在不在范围内"要果断**——明确越界(游戏设计/纯工具操作)就标 `true`,别用"拿不准"把越界帖放进来。标 `true` 时 `text` 留空字符串、`cards` 留空数组。
 </工作要点>
 
 <示例>

+ 8 - 0
prompts/gate_admit.txt

@@ -0,0 +1,8 @@
+你在判断:一篇帖子「读懂后的内容」,是不是【图文/视频内容创作】的可迁移知识。用户消息就是这帖读懂后的内容。
+
+两条轴**都过**,才算"创作知识"(in_scope=true):
+- 轴A·产出物是内容:它教你创作出来的成品,是 图文 / 视频 / 脚本 / 剧本 / 小说 这类【内容】(题材不限:美食/游戏/健身都行)。
+- 轴B·是创作不是制作:它教"怎么构思/选题/写/结构/呈现"(创作),不是"用某 App/AI、打开→输入→生成→导出 把成品做出来"(制作/工具操作)。
+
+先用一句话复述"这帖到底在教什么",再对照两轴判定。
+输出 JSON:{"复述":"<一句话>","轴A":true/false,"轴B":true/false,"in_scope":true/false,"category":"创作/制作/越界","理由":"<为什么>"}

+ 9 - 0
prompts/gate_refute.txt

@@ -0,0 +1,9 @@
+你在【挑刺】:一篇帖子「读懂后的内容」,是不是其实【不该进创作知识库】。用户消息就是这帖读懂后的内容。
+
+属于以下任一 → out_of_scope=true(该排除):
+- 制作/工具操作:核心是"用某 App/AI/软件,打开→输入/粘贴→生成/扩写→设参数→导出/保存"把成品产出来。**哪怕它教你"怎么给 AI 下指令 / 设身份 / 给字数要求",只要本质是让工具替你产出,就算制作。**
+- 越界题材本身:教的是"做那个东西本身"——游戏玩法/关卡设计、产品开发、电商/运营/选品、行业分析等(不是"做关于它的内容")。
+
+请**尽量找出它越界的理由**;只有确实一条越界理由都找不到,才判 out_of_scope=false。
+先用一句话复述"这帖在教什么",再判。
+输出 JSON:{"复述":"<一句话>","out_of_scope":true/false,"category":"创作/制作/越界","理由":"<越界点;或为何确实没有>"}

+ 9 - 0
prompts/gate_tiebreak.txt

@@ -0,0 +1,9 @@
+两个判断者对"这帖是否属于【图文/视频内容创作知识】"产生了分歧,你来裁决。用户消息就是这帖读懂后的内容。
+
+标准(两轴**都过**才算创作 in_scope=true):
+- 轴A:产出物是 图文 / 视频 / 脚本 / 剧本 / 小说 这类内容;
+- 轴B:教创作(构思/选题/写/结构/呈现),不是"用工具产出成品"、也不是"做题材本身"(游戏/产品/运营/选品/行业分析)。
+
+**重要:拿不准、模棱两可、半创作半制作 → 一律判 in_scope=false(边界倾向排除)。**
+先用一句话复述"这帖在教什么",再裁决。
+输出 JSON:{"复述":"<一句话>","in_scope":true/false,"category":"创作/制作/越界","理由":"<为什么>"}

+ 50 - 11
scripts/decompose.py

@@ -11,6 +11,7 @@
 from __future__ import annotations
 
 import json
+import os
 from pathlib import Path
 
 from creation_knowledge.config import Settings
@@ -18,6 +19,7 @@ from creation_knowledge.integrations import video_extract
 from creation_knowledge.integrations.crawler import fetch_post_detail, parse_detail_response
 from creation_knowledge.integrations.extractor import GeminiExtractor
 from creation_knowledge.integrations.llm import chat_json
+from creation_knowledge.prompts import load_prompt
 from scripts.scope_link import ScopeLinker
 
 ROOT = Path(__file__).resolve().parent.parent
@@ -26,6 +28,9 @@ DATA = ROOT / "data" / "demo"
 SKILL = ROOT / "创作知识提取-skill"
 PHASE1 = (SKILL / "extraction" / "phase1-frame.md").read_text(encoding="utf-8")
 PHASE2 = (SKILL / "extraction" / "phase2-scope.md").read_text(encoding="utf-8")
+GATE_ADMIT = load_prompt("gate_admit")        # ①.5 创作判定闸:判"是创作"
+GATE_REFUTE = load_prompt("gate_refute")      # ①.5:挑刺"是制作/越界"
+GATE_TIEBREAK = load_prompt("gate_tiebreak")  # ①.5:分歧裁决(边界倾向排除)
 
 # from: fixture(读 tests/fixtures)/ live(实时 crawler 取数)
 SOURCES = [
@@ -91,13 +96,34 @@ def shape(post, read: str) -> list[dict]:
     return chat_json(PHASE1, user, timeout=120).get("knowledges") or []
 
 
+# ---------- ①.5 创作判定闸(voting:admit + refute,分歧上 tiebreak;边界倾向排除)----------
+def _vote(system: str, read: str, key: str, on_fail: bool) -> bool:
+    """跑一次判定,取 key 字段为 bool;出错按 on_fail 兜底(避免 API 抖动误杀)。"""
+    try:
+        return bool(chat_json(system, read, timeout=90).get(key))
+    except Exception:
+        return on_fail
+
+
+def creation_gate(read: str) -> tuple[bool, str]:
+    """判这帖是不是【图文/视频内容创作知识】。返回 (in_scope, 说明)。
+    甲方案:admit + refute 两票;一致即定;分歧→tiebreak 裁决(边界倾向排除)。
+    判定只看 ① 读懂后的内容,不看标题、不数关键词。"""
+    v_admit = _vote(GATE_ADMIT, read, "in_scope", on_fail=True)            # 判"是创作"
+    v_refute = not _vote(GATE_REFUTE, read, "out_of_scope", on_fail=False)  # 挑刺"是制作/越界"→归一成 in_scope
+    if v_admit == v_refute:
+        return v_admit, f"admit={v_admit}/refute={v_refute} 一致"
+    v_tie = _vote(GATE_TIEBREAK, read, "in_scope", on_fail=False)           # 分歧裁决,失败也倾向排除
+    return v_tie, f"admit={v_admit}/refute={v_refute} 分歧→裁决={v_tie}"
+
+
 # ---------- ③ 作用域候选 + 回扣 ----------
 def _slim(knowledges: list[dict]) -> list[dict]:
     slim = []
     for k in knowledges:
         e = {"id": k.get("id"), "type": k.get("type"), "title": k.get("title")}
         if k.get("type") == "how":
-            e["steps"] = [{"id": s.get("id"), "intent": s.get("intent"),
+            e["steps"] = [{"id": s.get("id"), "input": s.get("input"),
                            "directive": (s.get("directive") or "")[:500], "output": s.get("output")}
                           for s in k.get("steps", [])]
         else:
@@ -149,11 +175,14 @@ def build_content(k: dict) -> str:
     if t == "how":
         lines = [f"目标:{k.get('purpose','')}"]
         for i, s in enumerate(k.get("steps", []), 1):
-            lines += [f"步骤{i}(目的:{s.get('intent','')})",
-                      f"  指引:{s.get('directive','')}", f"  产出:{s.get('output','')}"]
+            lines += [f"步骤{i}",
+                      f"  输入:{s.get('input','')}", f"  方法:{s.get('directive','')}", f"  产出:{s.get('output','')}"]
         return "\n".join(lines)
     if t == "what":
-        return "\n".join([f"界定:{k.get('界定','')}"] + _sections(k.get("主体")))
+        head = f"界定:{k.get('界定','')}"
+        if k.get("kind"):
+            head += f"({k['kind']}型)"
+        return "\n".join([head] + _sections(k.get("主体")))
     return "\n".join([f"主张:{k.get('主张','')}"] + _sections(k.get("支撑")))
 
 
@@ -168,7 +197,11 @@ def _sections(blocks) -> list[str]:
             out.append(f"  {b['内容']}")
         for it in b.get("条目") or []:
             word = it.get("词") or it.get("要素") or ""
-            out.append(f"  - {word}:{it.get('说明','')}" if word else f"  - {it.get('说明','')}")
+            cue = it.get("选择线索")
+            line = f"  - {word}:{it.get('说明','')}" if word else f"  - {it.get('说明','')}"
+            if cue:
+                line += f"(选用:{cue})"
+            out.append(line)
     return out
 
 
@@ -225,11 +258,16 @@ def main() -> None:
             continue
         meta = {"post_id": cid, "source_id": post.id, "title": post.title or "",
                 "platform": post.platform, "url": post.url, "media": media, "cards": cards}
-        if is_empty:  # ① 总闸
-            print(f"  ① 读懂 {len(read)} 字 → 判定无可提取的创作知识,跳过拆颗")
+        if is_empty:  # ① 总闸:纯展示/无可提取
+            print(f"  ① 读懂 {len(read)} 字 → ① 判纯展示/无知识,跳过")
+            posts_out.append({**meta, "no_knowledge": True, "knowledges": []})
+            continue
+        in_scope, gate_why = creation_gate(read)  # ①.5 创作判定闸(创作 vs 制作 vs 越界)
+        if not in_scope:
+            print(f"  ① 读懂 {len(read)} 字 → ①.5 闸判【非创作】({gate_why})→ 整帖排除")
             posts_out.append({**meta, "no_knowledge": True, "knowledges": []})
             continue
-        print(f"  ① 读懂 {len(read)} 字({media['type']})")
+        print(f"  ① 读懂 {len(read)} 字({media['type']})· ①.5 闸:创作({gate_why})")
         knowledges = shape(post, read)
         how_ids = {k.get("id") for k in knowledges if k.get("type") == "how"}
         how_titles = {k.get("id"): k.get("title") for k in knowledges if k.get("type") == "how"}
@@ -245,11 +283,12 @@ def main() -> None:
         print("  ③⑤ 作用域回扣 + 组装")
         posts_out.append({**meta, "knowledges": knowledges})
         payloads += [build_payload(post, k, how_titles) for k in knowledges]
-    (ROOT / "web/frameworks.json").write_text(
+    suffix = os.environ.get("OUT", "")  # OUT=_v2 → 写 frameworks_v2.json,不覆盖原版
+    (ROOT / f"web/frameworks{suffix}.json").write_text(
         json.dumps({"count": len(posts_out), "posts": posts_out}, ensure_ascii=False, indent=1), encoding="utf-8")
-    (ROOT / "web/payloads.json").write_text(
+    (ROOT / f"web/payloads{suffix}.json").write_text(
         json.dumps(payloads, ensure_ascii=False, indent=2), encoding="utf-8")
-    print(f"\nwrote {len(posts_out)} posts, {len(payloads)} payloads")
+    print(f"\nwrote {len(posts_out)} posts, {len(payloads)} payloads → web/frameworks{suffix}.json")
 
 
 if __name__ == "__main__":

+ 9 - 4
scripts/rebuild_payloads.py

@@ -26,7 +26,11 @@ def _sections(blocks) -> list:
             out.append(f"  {b['内容']}")
         for it in b.get("条目") or []:
             word = it.get("词") or it.get("要素") or ""
-            out.append(f"  - {word}:{it.get('说明','')}" if word else f"  - {it.get('说明','')}")
+            cue = it.get("选择线索")
+            line = f"  - {word}:{it.get('说明','')}" if word else f"  - {it.get('说明','')}"
+            if cue:
+                line += f"(选用:{cue})"
+            out.append(line)
     return out
 
 
@@ -35,11 +39,12 @@ def content(k: dict) -> str:
     if t == "how":
         L = [f"目标:{k.get('purpose','')}"]
         for i, s in enumerate(k.get("steps", []), 1):
-            L += [f"步骤{i}(目的:{s.get('intent','')})",
-                  f"  指引:{s.get('directive','')}", f"  产出:{s.get('output','')}"]
+            L += [f"步骤{i}", f"  输入:{s.get('input','')}",
+                  f"  方法:{s.get('directive','')}", f"  产出:{s.get('output','')}"]
         return "\n".join(L)
     if t == "what":
-        return "\n".join([f"界定:{k.get('界定','')}"] + _sections(k.get("主体")))
+        head = f"界定:{k.get('界定','')}" + (f"({k['kind']}型)" if k.get("kind") else "")
+        return "\n".join([head] + _sections(k.get("主体")))
     return "\n".join([f"主张:{k.get('主张','')}"] + _sections(k.get("支撑")))
 
 

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 419 - 344
web/frameworks.json


+ 3325 - 0
web/frameworks_v2.json

@@ -0,0 +1,3325 @@
+{
+ "count": 7,
+ "posts": [
+  {
+   "post_id": "699308fa0000000016009697",
+   "source_id": "xhs_699308fa0000000016009697",
+   "title": "真正能爆的选题,往往是你写完后感觉羞耻的",
+   "platform": "xiaohongshu",
+   "url": "https://www.xiaohongshu.com/explore/699308fa0000000016009697",
+   "media": {
+    "type": "image",
+    "video_url": null,
+    "images": [
+     "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_1.webp",
+     "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_2.webp",
+     "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_3.webp",
+     "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_4.webp",
+     "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_5.webp",
+     "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_6.webp",
+     "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_7.webp",
+     "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_8.webp",
+     "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_9.webp",
+     "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_10.webp",
+     "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_11.webp",
+     "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_12.webp"
+    ]
+   },
+   "cards": [
+    {
+     "index": 1,
+     "content": "核心观点:真正能爆的选题,往往是你写完后感觉羞耻的。‘太正确’、‘太专业’的选题往往数据差。",
+     "image_url": "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_1.webp"
+    },
+    {
+     "index": 2,
+     "content": "",
+     "image_url": "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_2.webp"
+    },
+    {
+     "index": 3,
+     "content": "选题标准:好选题需要经过‘情绪的审核’。发之前的感受应该是‘犹豫’而非‘满意’。羞耻感是好选题的防伪标签。",
+     "image_url": "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_3.webp"
+    },
+    {
+     "index": 4,
+     "content": "羞耻感信号:写完后如果担心‘别人会不会觉得我在装’、‘这样说会不会太直白’,则是能爆的信号。",
+     "image_url": "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_4.webp"
+    },
+    {
+     "index": 5,
+     "content": "羞耻感本质:触碰到了真实但平时大家不敢说出口、被社交礼仪包裹的内容,具有穿透力,戳中公共痛点。",
+     "image_url": "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_5.webp"
+    },
+    {
+     "index": 6,
+     "content": "冒犯感选题:爆款选题通常是对某种‘正确共识’的冒犯,而非脏话式冒犯。这种压力证明踩到了大众神经。安全但无感的选题(如:提升执行力的五个方法)由于没有情绪触发,难以产生转发。",
+     "image_url": "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_6.webp"
+    },
+    {
+     "index": 7,
+     "content": "寻找共识崩塌场景:对比同一赛道,‘加固信念’(正确共识)的内容往往流量低,而‘撕裂信念’的内容易爆。",
+     "image_url": "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_7.webp"
+    },
+    {
+     "index": 8,
+     "content": "圣经句概念:每个赛道都有‘人人点头但没人真信’的正确话(如:内容为王、自律即自由),这些是寻找裂缝的目标。",
+     "image_url": "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_8.webp"
+    },
+    {
+     "index": 9,
+     "content": "",
+     "image_url": "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_9.webp"
+    },
+    {
+     "index": 10,
+     "content": "实操第一招:寻找正确共识的失灵瞬间。列出大号反复讲的正确共识,询问:‘什么情况下,一个人严格按照这句话做,反而越做越差?’。例如:‘内容越好,死得越快(不懂分发时)’。",
+     "image_url": "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_10.webp"
+    },
+    {
+     "index": 11,
+     "content": "实操第二招:去评论区找‘但是’。在竞品爆款视频下,寻找‘道理我都懂,但是……’的评论。这个‘但是’后面跟的就是现成的、圣经句的裂缝。",
+     "image_url": "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_11.webp"
+    },
+    {
+     "index": 12,
+     "content": "创作逻辑:观众缺的不是正确答案,而是有人帮他们说出‘这个正确答案在你身上根本不好使’。",
+     "image_url": "/data/demo/xiaohongshu/xhs_699308fa0000000016009697/image_12.webp"
+    }
+   ],
+   "knowledges": [
+    {
+     "id": "k1",
+     "type": "why",
+     "role": "主",
+     "parent": null,
+     "title": "爆款选题的羞耻感/冒犯感原理",
+     "业务阶段": [
+      "选题",
+      "灵感"
+     ],
+     "出处": [
+      "卡片1",
+      "卡片3",
+      "卡片4",
+      "卡片5",
+      "卡片6",
+      "卡片12"
+     ],
+     "主张": "真正能爆的内容通常伴随‘羞耻感’或‘冒犯感’,是对‘正确共识’的触碰与撕裂。",
+     "支撑": [
+      {
+       "小标题": "羞耻感作为质量信号",
+       "形式": "机制",
+       "内容": "羞耻感是指写完后担心‘别人觉得我在装’或‘太直白’。这种感觉证明触碰到了真实但平时由社交礼仪包裹、大家不敢公开说的内容。相比追求‘满意’或‘专业’,‘犹豫’才是好选题的防伪标签。"
+      },
+      {
+       "小标题": "对正确共识的冒犯",
+       "形式": "机制",
+       "内容": "爆款不是靠脏话,而是通过冒犯某种‘正确共识’。观众需要的不是正确答案(如:自律即自由),而是有人帮他们说出‘这个正确答案在你身上根本不好使’,从而戳中公共痛点并产生穿透力。"
+      },
+      {
+       "小标题": "对创作的取舍",
+       "形式": "取舍",
+       "内容": "应当摒弃‘太正确、太专业、安全但无感’的选题方向(如:提升执行力的五个方法);转向寻找并表达那些让自己感到‘写完后不敢发’、‘担心被评价太极端’的内容,以此作为情绪触发和转发的动力。"
+      }
+     ],
+     "作用域": [
+      {
+       "scope_type": "substance",
+       "value": "爆款选题",
+       "candidate": "爆款选题",
+       "link": "新建",
+       "score": 0.588,
+       "top": [
+        {
+         "name": "标题",
+         "score": 0.588,
+         "path": "/表象/视觉/符号/文字符号/标题"
+        },
+        {
+         "name": "痛点问题",
+         "score": 0.5767,
+         "path": "/理念/知识/商业/产品服务/痛点问题"
+        },
+        {
+         "name": "评选榜单",
+         "score": 0.5296,
+         "path": "/理念/事件/商业事件/评选榜单"
+        }
+       ]
+      },
+      {
+       "scope_type": "feeling",
+       "value": "羞耻感",
+       "candidate": "羞耻感",
+       "link": "新建",
+       "score": 0.6275,
+       "top": [
+        {
+         "name": "情感",
+         "score": 0.6275,
+         "path": "/情感"
+        },
+        {
+         "name": "美感",
+         "score": 0.6125,
+         "path": "/情感/美感"
+        },
+        {
+         "name": "共情",
+         "score": 0.5869,
+         "path": "/情感/共情"
+        }
+       ]
+      },
+      {
+       "scope_type": "feeling",
+       "value": "冒犯感",
+       "candidate": "冒犯感",
+       "link": "新建",
+       "score": 0.5938,
+       "top": [
+        {
+         "name": "厌恶反感",
+         "score": 0.5938,
+         "path": "/情感/共情/厌恶反感"
+        },
+        {
+         "name": "情感",
+         "score": 0.5689,
+         "path": "/情感"
+        },
+        {
+         "name": "共情",
+         "score": 0.562,
+         "path": "/情感/共情"
+        }
+       ]
+      },
+      {
+       "scope_type": "effect",
+       "value": "共识撕裂",
+       "candidate": "共识撕裂",
+       "link": "新建",
+       "score": 0.5569,
+       "top": [
+        {
+         "name": "矛盾冲突",
+         "score": 0.5569,
+         "path": "/表达/论证说理/分析论证/对比反差/矛盾冲突"
+        },
+        {
+         "name": "情感共鸣",
+         "score": 0.5556,
+         "path": "/表达/互动引导/情感连接/情感共鸣"
+        },
+        {
+         "name": "情感张力",
+         "score": 0.5407,
+         "path": "/表达/论证说理/分析论证/对比反差/情感张力"
+        }
+       ]
+      },
+      {
+       "scope_type": "intent",
+       "value": "流量爆发",
+       "candidate": "流量爆发",
+       "link": "新建",
+       "score": 0.6146,
+       "top": [
+        {
+         "name": "裂变",
+         "score": 0.6146,
+         "path": "/行为引导/裂变"
+        },
+        {
+         "name": "商业推广",
+         "score": 0.5724,
+         "path": "/行为引导/商业推广"
+        },
+        {
+         "name": "信息扩散",
+         "score": 0.5642,
+         "path": "/信息传递/信息扩散"
+        }
+       ]
+      }
+     ]
+    },
+    {
+     "id": "k2",
+     "type": "what",
+     "role": "组件",
+     "parent": {
+      "how_id": "k3",
+      "step": "s1"
+     },
+     "title": "行业圣经句(正确共识)",
+     "业务阶段": [
+      "选题"
+     ],
+     "出处": [
+      "卡片8",
+      "卡片10"
+     ],
+     "界定": "每个赛道中那些‘人人点头但没人真信’、反复被提及的正确话。",
+     "kind": "选项",
+     "主体": [
+      {
+       "小标题": "常见圣经句示例",
+       "形式": "清单",
+       "条目": [
+        {
+         "词": "内容为王",
+         "说明": "行业内公认的真理,但实际应用中往往存在分发缺失的陷阱。",
+         "选择线索": "作为寻找‘理念裂缝’的基础,用于后续撕裂信念。"
+        },
+        {
+         "词": "自律即自由",
+         "说明": "强调个人意志力的共识。",
+         "选择线索": "当目标人群对该观点由于无法达成而产生焦虑或厌倦时选用。"
+        }
+       ]
+      }
+     ],
+     "作用域": [
+      {
+       "scope_type": "substance",
+       "value": "正确共识",
+       "candidate": "正确共识",
+       "link": "新建",
+       "score": 0.6723,
+       "top": [
+        {
+         "name": "通用共识符号",
+         "score": 0.6723,
+         "path": "/表象/视觉/符号/图案符号/标识图案/通用共识符号"
+        },
+        {
+         "name": "通识百科",
+         "score": 0.5524,
+         "path": "/理念/知识/文化/传统文化/文化知识/通识百科"
+        },
+        {
+         "name": "认知思辨",
+         "score": 0.5432,
+         "path": "/理念/知识/思想/概念范畴/认知思辨"
+        }
+       ]
+      },
+      {
+       "scope_type": "substance",
+       "value": "行业圣经句",
+       "candidate": "行业圣经句",
+       "link": "新建",
+       "score": 0.6239,
+       "top": [
+        {
+         "name": "行业领域",
+         "score": 0.6239,
+         "path": "/理念/知识/商业/行业分析/行业领域"
+        },
+        {
+         "name": "行业报告",
+         "score": 0.6129,
+         "path": "/理念/事件/商业事件/行业报告"
+        },
+        {
+         "name": "行业分析",
+         "score": 0.6023,
+         "path": "/理念/知识/商业/行业分析"
+        }
+       ]
+      },
+      {
+       "scope_type": "form",
+       "value": "清单列举",
+       "candidate": "清单列举",
+       "link": "新建",
+       "score": 0.8405,
+       "top": [
+        {
+         "name": "条目列举",
+         "score": 0.8405,
+         "path": "/架构/逻辑/信息编排逻辑/条目列举"
+        },
+        {
+         "name": "序号列举",
+         "score": 0.7738,
+         "path": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举"
+        },
+        {
+         "name": "定向列举",
+         "score": 0.7674,
+         "path": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/定向列举"
+        }
+       ]
+      },
+      {
+       "scope_type": "effect",
+       "value": "逻辑对照",
+       "candidate": "逻辑对照",
+       "link": "新建",
+       "score": 0.6904,
+       "top": [
+        {
+         "name": "逻辑顺接",
+         "score": 0.6904,
+         "path": "/结构/叙事推进/承接转换/逻辑顺接"
+        },
+        {
+         "name": "逻辑推演",
+         "score": 0.6751,
+         "path": "/表达/论证说理/证据支撑/逻辑推演"
+        },
+        {
+         "name": "逻辑铺垫",
+         "score": 0.6644,
+         "path": "/结构/叙事推进/铺垫准备/逻辑铺垫"
+        }
+       ]
+      }
+     ]
+    },
+    {
+     "id": "k3",
+     "type": "how",
+     "role": "主",
+     "parent": null,
+     "title": "撕裂共识的爆款选题寻找法",
+     "purpose": "通过定位共识裂缝产出一个具有情绪穿透力的选题",
+     "业务阶段": [
+      "选题"
+     ],
+     "steps": [
+      {
+       "id": "s1",
+       "input": "行业赛道",
+       "directive": "列出赛道大号反复讲的‘正确共识’或‘圣经句’。例:『内容为王』、『自律即自由』。",
+       "output": "待撕裂的正确共识清单",
+       "出处": [
+        "卡片8",
+        "卡片10"
+       ],
+       "创作阶段": "定向",
+       "动作": "定位调研",
+       "作用域": [
+        {
+         "scope_type": "substance",
+         "value": "圣经句",
+         "candidate": "圣经句",
+         "link": "新建",
+         "score": 0.5822,
+         "top": [
+          {
+           "name": "人生哲理",
+           "score": 0.5822,
+           "path": "/理念/观念/个人观念/人生感悟/观点表达/人生哲理"
+          },
+          {
+           "name": "谚语",
+           "score": 0.5672,
+           "path": "/理念/知识/文化/语言文字/谚语"
+          },
+          {
+           "name": "俗语",
+           "score": 0.5645,
+           "path": "/理念/知识/文化/语言文字/俗语"
+          }
+         ]
+        },
+        {
+         "scope_type": "form",
+         "value": "穷举归纳",
+         "candidate": "穷举归纳",
+         "link": "新建",
+         "score": 0.7515,
+         "top": [
+          {
+           "name": "归纳论证",
+           "score": 0.7515,
+           "path": "/架构/逻辑/信息编排逻辑/归纳论证"
+          },
+          {
+           "name": "逻辑推论",
+           "score": 0.6347,
+           "path": "/架构/逻辑/信息编排逻辑/归纳论证/逻辑推论"
+          },
+          {
+           "name": "因果推理",
+           "score": 0.6005,
+           "path": "/架构/逻辑/信息编排逻辑/归纳论证/分析解读/因果推理"
+          }
+         ]
+        },
+        {
+         "scope_type": "effect",
+         "value": "选题池构建",
+         "candidate": "选题池构建",
+         "link": "新建",
+         "score": 0.5408,
+         "top": [
+          {
+           "name": "价值建构",
+           "score": 0.5408,
+           "path": "/表达/论证说理/提炼升华/价值建构"
+          },
+          {
+           "name": "高潮构建",
+           "score": 0.5157,
+           "path": "/结构/叙事推进/叙事推进节点/高潮构建"
+          },
+          {
+           "name": "数据实证",
+           "score": 0.5093,
+           "path": "/表达/论证说理/证据支撑/数据实证"
+          }
+         ]
+        }
+       ]
+      },
+      {
+       "id": "s2",
+       "input": "← s1产出",
+       "directive": "寻找裂缝。方式 A:逻辑自问‘什么情况下,一个人严格按照这句话做,反而越做越差?’;方式 B:评论区挖掘法,在竞品爆款下找‘道理我都懂,但是……’的反馈。",
+       "output": "共识失灵瞬间 / 道理裂缝",
+       "出处": [
+        "卡片10",
+        "卡片11"
+       ],
+       "创作阶段": "构思",
+       "动作": "反向建模",
+       "作用域": [
+        {
+         "scope_type": "substance",
+         "value": "逻辑裂缝",
+         "candidate": "逻辑裂缝",
+         "link": "新建",
+         "score": 0.6991,
+         "top": [
+          {
+           "name": "逻辑异常",
+           "score": 0.6991,
+           "path": "/理念/知识/思想/逻辑原理/逻辑异常"
+          },
+          {
+           "name": "逻辑原理",
+           "score": 0.6653,
+           "path": "/理念/知识/思想/逻辑原理"
+          },
+          {
+           "name": "应用逻辑",
+           "score": 0.6104,
+           "path": "/理念/知识/思想/逻辑原理/应用逻辑"
+          }
+         ]
+        },
+        {
+         "scope_type": "form",
+         "value": "逆向思考",
+         "candidate": "逆向思考",
+         "link": "新建",
+         "score": 0.6828,
+         "top": [
+          {
+           "name": "逻辑反转",
+           "score": 0.6828,
+           "path": "/架构/叙事/叙事技法/戏剧张力/反转/逻辑反转"
+          },
+          {
+           "name": "反转",
+           "score": 0.6275,
+           "path": "/架构/叙事/叙事技法/戏剧张力/反转"
+          },
+          {
+           "name": "情感反转",
+           "score": 0.6213,
+           "path": "/架构/叙事/叙事技法/戏剧张力/反转/情感反转"
+          }
+         ]
+        },
+        {
+         "scope_type": "effect",
+         "value": "选题切入点",
+         "candidate": "选题切入点",
+         "link": "新建",
+         "score": 0.5732,
+         "top": [
+          {
+           "name": "开篇引入",
+           "score": 0.5732,
+           "path": "/结构/叙事推进/开篇引入"
+          },
+          {
+           "name": "点题明旨",
+           "score": 0.5514,
+           "path": "/结构/叙事推进/开篇引入/直述开篇/点题明旨"
+          },
+          {
+           "name": "问题引入",
+           "score": 0.544,
+           "path": "/结构/叙事推进/开篇引入/策略引入/问题引入"
+          }
+         ]
+        }
+       ]
+      },
+      {
+       "id": "s3",
+       "input": "← s2产出",
+       "directive": "将裂缝转化为冒犯性选题模板。例:『内容越好,死得越快』。并根据核心逻辑确认写完是否具有‘羞耻感’,进行情绪审核。",
+       "output": "具有情绪穿透力的选题",
+       "出处": [
+        "卡片3",
+        "卡片10",
+        "卡片12"
+       ],
+       "创作阶段": "结构",
+       "动作": "选题定稿",
+       "作用域": [
+        {
+         "scope_type": "substance",
+         "value": "选题模板",
+         "candidate": "选题模板",
+         "link": "新建",
+         "score": 0.5439,
+         "top": [
+          {
+           "name": "清单列表",
+           "score": 0.5439,
+           "path": "/表象/视觉/符号/文字符号/标注/清单列表"
+          },
+          {
+           "name": "标题",
+           "score": 0.5398,
+           "path": "/表象/视觉/符号/文字符号/标题"
+          },
+          {
+           "name": "项目清单",
+           "score": 0.5341,
+           "path": "/理念/知识/公共管理/补贴福利/补贴制度/项目清单"
+          }
+         ]
+        },
+        {
+         "scope_type": "feeling",
+         "value": "情绪穿透力",
+         "candidate": "情绪穿透力",
+         "link": "新建",
+         "score": 0.6789,
+         "top": [
+          {
+           "name": "情绪处境共鸣",
+           "score": 0.6789,
+           "path": "/情感/同感/情绪处境共鸣"
+          },
+          {
+           "name": "共情",
+           "score": 0.6192,
+           "path": "/情感/共情"
+          },
+          {
+           "name": "情感",
+           "score": 0.6042,
+           "path": "/情感"
+          }
+         ]
+        },
+        {
+         "scope_type": "effect",
+         "value": "情绪审核",
+         "candidate": "情绪审核",
+         "link": "新建",
+         "score": 0.6211,
+         "top": [
+          {
+           "name": "情感表达",
+           "score": 0.6211,
+           "path": "/表达/情感表达"
+          },
+          {
+           "name": "情感收束",
+           "score": 0.603,
+           "path": "/结构/叙事推进/收束归纳/情感收束"
+          },
+          {
+           "name": "情感共鸣",
+           "score": 0.6,
+           "path": "/表达/互动引导/情感连接/情感共鸣"
+          }
+         ]
+        },
+        {
+         "scope_type": "intent",
+         "value": "转发动力",
+         "candidate": "转发动力",
+         "link": "新建",
+         "score": 0.8012,
+         "top": [
+          {
+           "name": "转发",
+           "score": 0.8012,
+           "path": "/行为引导/传播/转发"
+          },
+          {
+           "name": "裂变",
+           "score": 0.5175,
+           "path": "/行为引导/裂变"
+          },
+          {
+           "name": "分享",
+           "score": 0.5037,
+           "path": "/信息传递/信息扩散/分享"
+          }
+         ]
+        }
+       ]
+      }
+     ],
+     "dropped": []
+    }
+   ]
+  },
+  {
+   "post_id": "698481e1000000000a02a7c1",
+   "source_id": "xhs_698481e1000000000a02a7c1",
+   "title": "7种编剧常用的叙事结构,写剧不用愁!",
+   "platform": "xiaohongshu",
+   "url": "https://www.xiaohongshu.com/explore/698481e1000000000a02a7c1",
+   "media": {
+    "type": "image",
+    "video_url": null,
+    "images": [
+     "/data/demo/xiaohongshu/xhs_698481e1000000000a02a7c1/image_1.webp",
+     "/data/demo/xiaohongshu/xhs_698481e1000000000a02a7c1/image_2.webp",
+     "/data/demo/xiaohongshu/xhs_698481e1000000000a02a7c1/image_3.webp",
+     "/data/demo/xiaohongshu/xhs_698481e1000000000a02a7c1/image_4.webp",
+     "/data/demo/xiaohongshu/xhs_698481e1000000000a02a7c1/image_5.webp",
+     "/data/demo/xiaohongshu/xhs_698481e1000000000a02a7c1/image_6.webp"
+    ]
+   },
+   "cards": [
+    {
+     "index": 1,
+     "content": "三幕式结构定义:起承转合的线性叙事逻辑。第一幕(开端):交代故事背景、人物设定和核心冲突的触发;第二幕(发展):故事主体,核心冲突升级,主角遭遇阻碍,是人物成长和情节铺垫的关键阶段。",
+     "image_url": "/data/demo/xiaohongshu/xhs_698481e1000000000a02a7c1/image_1.webp"
+    },
+    {
+     "index": 2,
+     "content": "三幕式结构第三幕(高潮与结局):矛盾集中爆发,解决核心问题。英雄之旅结构:围绕主角成长弧光(平凡人到英雄的蜕变),分为启程(开启冒险)、考验(遭遇挑战、对抗反派、认知提升)、归来(战胜危机及获得收获)。",
+     "image_url": "/data/demo/xiaohongshu/xhs_698481e1000000000a02a7c1/image_2.webp"
+    },
+    {
+     "index": 3,
+     "content": "非线性结构:打破时间先后逻辑,利用闪回、插叙、倒叙或多视角切换制造悬念。环形结构:首尾呼应形成闭环,是非线性结构的一种特殊形式。",
+     "image_url": "/data/demo/xiaohongshu/xhs_698481e1000000000a02a7c1/image_3.webp"
+    },
+    {
+     "index": 4,
+     "content": "环形结构分类:非循环类(结尾与开端在场景/台词/状态上呼应)和带循环类(重复某段事件直到达成目标)。多线叙事结构:多条独立故事线并行推进并在节点汇合,通过切换丰富维度、提升剧情密度。",
+     "image_url": "/data/demo/xiaohongshu/xhs_698481e1000000000a02a7c1/image_4.webp"
+    },
+    {
+     "index": 5,
+     "content": "嵌套式结构:套层结构,一层故事包裹另一层,虚实交织层层递进(如戏中戏)。反结构:打破所有传统叙事框架,不追求完整逻辑或结局,注重氛围营造、情绪表达。",
+     "image_url": "/data/demo/xiaohongshu/xhs_698481e1000000000a02a7c1/image_5.webp"
+    },
+    {
+     "index": 6,
+     "content": "反结构特征:没有传统意义上的主角成长或完整结局,靠人物状态和细节描写打动观众。",
+     "image_url": "/data/demo/xiaohongshu/xhs_698481e1000000000a02a7c1/image_6.webp"
+    }
+   ],
+   "knowledges": [
+    {
+     "id": "k1",
+     "type": "what",
+     "role": "主",
+     "parent": null,
+     "title": "7种常用叙事结构清单",
+     "业务阶段": [
+      "脚本"
+     ],
+     "出处": [
+      "卡片1",
+      "卡片2",
+      "卡片3",
+      "卡片4",
+      "卡片5",
+      "卡片6"
+     ],
+     "界定": "编剧常用的七种叙事逻辑框架,涵盖了从传统线性到现代非线性的不同处理方式。",
+     "kind": "选项",
+     "主体": [
+      {
+       "小标题": "叙事结构选项",
+       "形式": "清单",
+       "条目": [
+        {
+         "词": "三幕式结构",
+         "说明": "起承转合的线性叙事逻辑。第一幕(开端):交代背景人设与核心冲突触发;第二幕(发展):故事主体,冲突升级与人物成长;第三幕(高潮与结局):矛盾集中爆发并解决核心问题。",
+         "选择线索": "追求标准线性逻辑、结构稳健的故事时使用。"
+        },
+        {
+         "词": "英雄之旅结构",
+         "说明": "围绕主角从平凡人到英雄的蜕变弧光。包含启程(开启冒险)、考验(挑战、对抗、认知提升)、归来(战胜危机并获得收获)。",
+         "选择线索": "侧重人物成长弧线、经典成长型/冒险型题材时使用。"
+        },
+        {
+         "词": "非线性结构",
+         "说明": "通过闪回、插叙、倒叙或多视角切换打破时间先后逻辑。",
+         "选择线索": "需要制造悬念、增强戏剧张力或重构时间线时使用。"
+        },
+        {
+         "词": "环形结构",
+         "说明": "首尾呼应形成闭环。分为非循环类(结尾与开端在场景/台词/状态上呼应产生宿命感)和带循环类(重复某段事件直到达成目标)。",
+         "选择线索": "强调宿命感、循环感或特定主题的完整闭环时使用。"
+        },
+        {
+         "词": "多线叙事结构",
+         "说明": "多条独立故事线并行推进并在特定节点汇合,暗藏因果联系或共同主题。",
+         "选择线索": "需要提升剧情密度、丰富叙事维度或通过多个视角切换叙事时使用。"
+        },
+        {
+         "词": "嵌套式结构",
+         "说明": "套层结构(如戏中戏、梦中梦)。一层故事包裹另一层,虚实交织,内外层在情节和结局上相互影响。",
+         "选择线索": "需要拓展想象空间、建立层层递进的虚实关系时使用。"
+        },
+        {
+         "词": "反结构",
+         "说明": "又称无结构或碎片化结构。打破传统框架,不追求完整逻辑或结局,没有传统意义的主角成长。",
+         "选择线索": "侧重氛围营造、情绪表达或人物碎片化状态描写时使用。"
+        }
+       ]
+      }
+     ],
+     "作用域": [
+      {
+       "scope_type": "substance",
+       "value": "叙事结构",
+       "candidate": "叙事结构",
+       "link": "新建",
+       "score": 0.7536,
+       "top": [
+        {
+         "name": "历史叙事",
+         "score": 0.7536,
+         "path": "/理念/知识/历史/历史知识形态/历史叙事"
+        },
+        {
+         "name": "社会结构",
+         "score": 0.7226,
+         "path": "/理念/知识/社会知识/社会结构"
+        },
+        {
+         "name": "关系结构",
+         "score": 0.6959,
+         "path": "/理念/知识/思想/概念范畴/关系结构"
+        }
+       ]
+      },
+      {
+       "scope_type": "substance",
+       "value": "叙事逻辑",
+       "candidate": "叙事逻辑",
+       "link": "新建",
+       "score": 0.7479,
+       "top": [
+        {
+         "name": "历史叙事",
+         "score": 0.7479,
+         "path": "/理念/知识/历史/历史知识形态/历史叙事"
+        },
+        {
+         "name": "逻辑原理",
+         "score": 0.6901,
+         "path": "/理念/知识/思想/逻辑原理"
+        },
+        {
+         "name": "因果推理",
+         "score": 0.6519,
+         "path": "/理念/知识/思想/逻辑原理/因果推理"
+        }
+       ]
+      },
+      {
+       "scope_type": "form",
+       "value": "结构框架",
+       "candidate": "结构框架",
+       "link": "新建",
+       "score": 0.739,
+       "top": [
+        {
+         "name": "框架类型",
+         "score": 0.739,
+         "path": "/架构/叙事/叙事组织/脉络铺排/结构编排/框架类型"
+        },
+        {
+         "name": "规范框架",
+         "score": 0.7296,
+         "path": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/规范框架"
+        },
+        {
+         "name": "架构",
+         "score": 0.723,
+         "path": "/架构"
+        }
+       ]
+      },
+      {
+       "scope_type": "form",
+       "value": "清单",
+       "candidate": "清单",
+       "link": "新建",
+       "score": 0.706,
+       "top": [
+        {
+         "name": "条目列举",
+         "score": 0.706,
+         "path": "/架构/逻辑/信息编排逻辑/条目列举"
+        },
+        {
+         "name": "序号列举",
+         "score": 0.6382,
+         "path": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举"
+        },
+        {
+         "name": "逐条罗列",
+         "score": 0.6176,
+         "path": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列"
+        }
+       ]
+      },
+      {
+       "scope_type": "effect",
+       "value": "悬念",
+       "candidate": "悬念",
+       "link": "新建",
+       "score": 0.8936,
+       "top": [
+        {
+         "name": "悬念设置",
+         "score": 0.8936,
+         "path": "/结构/叙事推进/叙事推进节点/悬念设置"
+        },
+        {
+         "name": "情感张力",
+         "score": 0.6162,
+         "path": "/表达/论证说理/分析论证/对比反差/情感张力"
+        },
+        {
+         "name": "情感铺垫",
+         "score": 0.6084,
+         "path": "/结构/叙事推进/铺垫准备/情感铺垫"
+        }
+       ]
+      },
+      {
+       "scope_type": "effect",
+       "value": "戏剧张力",
+       "candidate": "戏剧张力",
+       "link": "新建",
+       "score": 0.8109,
+       "top": [
+        {
+         "name": "情感张力",
+         "score": 0.8109,
+         "path": "/表达/论证说理/分析论证/对比反差/情感张力"
+        },
+        {
+         "name": "悬念设置",
+         "score": 0.6323,
+         "path": "/结构/叙事推进/叙事推进节点/悬念设置"
+        },
+        {
+         "name": "矛盾冲突",
+         "score": 0.6277,
+         "path": "/表达/论证说理/分析论证/对比反差/矛盾冲突"
+        }
+       ]
+      },
+      {
+       "scope_type": "effect",
+       "value": "氛围营造",
+       "candidate": "氛围营造",
+       "link": "复用",
+       "score": 0.9987,
+       "top": [
+        {
+         "name": "氛围营造",
+         "score": 0.9987,
+         "path": "/表达/氛围营造"
+        },
+        {
+         "name": "场景描绘",
+         "score": 0.626,
+         "path": "/表达/信息传达/传达深度/详细说明/展示呈现/场景描绘"
+        },
+        {
+         "name": "基调设定",
+         "score": 0.6186,
+         "path": "/结构/叙事推进/开篇引入/直述开篇/基调设定"
+        }
+       ]
+      },
+      {
+       "scope_type": "feeling",
+       "value": "宿命感",
+       "candidate": "宿命感",
+       "link": "新建",
+       "score": 0.5704,
+       "top": [
+        {
+         "name": "美感",
+         "score": 0.5704,
+         "path": "/情感/美感"
+        },
+        {
+         "name": "情感",
+         "score": 0.565,
+         "path": "/情感"
+        },
+        {
+         "name": "共情",
+         "score": 0.5467,
+         "path": "/情感/共情"
+        }
+       ]
+      },
+      {
+       "scope_type": "intent",
+       "value": "叙事维度",
+       "candidate": "叙事维度",
+       "link": "新建",
+       "score": 0.5659,
+       "top": [
+        {
+         "name": "事实呈现",
+         "score": 0.5659,
+         "path": "/信息传递/事实呈现"
+        },
+        {
+         "name": "解读",
+         "score": 0.5371,
+         "path": "/信息传递/知识传递/解读"
+        },
+        {
+         "name": "科普",
+         "score": 0.529,
+         "path": "/信息传递/知识传递/科普"
+        }
+       ]
+      }
+     ]
+    }
+   ]
+  },
+  {
+   "post_id": "67e2e39b0000000003028ff0",
+   "source_id": "xhs_67e2e39b0000000003028ff0",
+   "title": "剧本创作:理解前提、人物、冲突",
+   "platform": "xiaohongshu",
+   "url": "https://www.xiaohongshu.com/explore/67e2e39b0000000003028ff0",
+   "media": {
+    "type": "image",
+    "video_url": null,
+    "images": [
+     "/data/demo/xiaohongshu/xhs_67e2e39b0000000003028ff0/image_1.webp",
+     "/data/demo/xiaohongshu/xhs_67e2e39b0000000003028ff0/image_2.webp",
+     "/data/demo/xiaohongshu/xhs_67e2e39b0000000003028ff0/image_3.webp",
+     "/data/demo/xiaohongshu/xhs_67e2e39b0000000003028ff0/image_4.webp",
+     "/data/demo/xiaohongshu/xhs_67e2e39b0000000003028ff0/image_5.webp",
+     "/data/demo/xiaohongshu/xhs_67e2e39b0000000003028ff0/image_6.webp"
+    ]
+   },
+   "cards": [
+    {
+     "index": 1,
+     "content": "前提的定义与构成:前提是剧本的目标,是简明概括。有效的前提构成公式 = 作者立场 + 人物 + 冲突 + 结论。基本情感可以决定前提。",
+     "image_url": "/data/demo/xiaohongshu/xhs_67e2e39b0000000003028ff0/image_1.webp"
+    },
+    {
+     "index": 2,
+     "content": "人物的三维度结构:生理维度(性别、年龄、外表等)、社会维度(阶层、职业、家庭、爱好等)、心理维度(道德、志向、挫折、性格等)。",
+     "image_url": "/data/demo/xiaohongshu/xhs_67e2e39b0000000003028ff0/image_2.webp"
+    },
+    {
+     "index": 3,
+     "content": "人物与冲突的关系:剧作家构思情节时需问自己三个问题:我应该做什么?别人会做什么?什么应该被完成?区分使使人物(主角,冲突起因)与对立人物(对手,阻止主角且实力相当)。要求人物具备意志力。",
+     "image_url": "/data/demo/xiaohongshu/xhs_67e2e39b0000000003028ff0/image_3.webp"
+    },
+    {
+     "index": 4,
+     "content": "冲突的四种类型:静态冲突(原封不动)、跳跃冲突(不服从现实/常理)、缓慢升级(逻辑联系紧密、步步紧缩)、预示(即张力,坚定对手间的对抗承诺)。",
+     "image_url": "/data/demo/xiaohongshu/xhs_67e2e39b0000000003028ff0/image_4.webp"
+    },
+    {
+     "index": 5,
+     "content": "冲突的发现与演化:可以从周围人的性格品质(如贪婪、自负、勇敢等)中发现冲突素材;冲突的基础是“攻击与反击”,势均力敌的对抗会产生持续升级的冲突和高潮。",
+     "image_url": "/data/demo/xiaohongshu/xhs_67e2e39b0000000003028ff0/image_5.webp"
+    },
+    {
+     "index": 6,
+     "content": "故事构造要素:过渡(人物状态转变的小冲突)、切入点(决定性瞬间或转折点)、危机(即将到来的决定性改变)、高潮和结局。",
+     "image_url": "/data/demo/xiaohongshu/xhs_67e2e39b0000000003028ff0/image_6.webp"
+    }
+   ],
+   "knowledges": [
+    {
+     "id": "k1",
+     "type": "what",
+     "role": "主",
+     "parent": null,
+     "title": "剧本创作的“前提”构成公式",
+     "业务阶段": [
+      "选题",
+      "脚本"
+     ],
+     "出处": [
+      "卡片1"
+     ],
+     "界定": "前提是剧本的目标和简明概括,是决定故事走向的基础。",
+     "kind": "构成",
+     "主体": [
+      {
+       "小标题": "前提构成要素",
+       "形式": "清单",
+       "条目": [
+        {
+         "词": "作者立场",
+         "说明": "作者对故事核心观点的态度或立场。"
+        },
+        {
+         "词": "人物",
+         "说明": "故事中的核心行动者。"
+        },
+        {
+         "词": "冲突",
+         "说明": "驱动故事发展的对抗力量。"
+        },
+        {
+         "词": "结论",
+         "说明": "由以上要素推导出的最终结局。"
+        }
+       ]
+      }
+     ],
+     "作用域": [
+      {
+       "scope_type": "substance",
+       "value": "剧本前提",
+       "candidate": "剧本前提",
+       "link": "新建",
+       "score": 0.5583,
+       "top": [
+        {
+         "name": "概念构想",
+         "score": 0.5583,
+         "path": "/理念/知识/思想/概念范畴/认知思辨/概念构想"
+        },
+        {
+         "name": "标题",
+         "score": 0.546,
+         "path": "/表象/视觉/符号/文字符号/标题"
+        },
+        {
+         "name": "场景感悟",
+         "score": 0.5445,
+         "path": "/理念/观念/个人观念/人生感悟/观点表达/场景感悟"
+        }
+       ]
+      },
+      {
+       "scope_type": "form",
+       "value": "结构公式",
+       "candidate": "结构公式",
+       "link": "新建",
+       "score": 0.6561,
+       "top": [
+        {
+         "name": "结构变体",
+         "score": 0.6561,
+         "path": "/架构/修辞/修辞意象/句式辞格/排比句式/结构变体"
+        },
+        {
+         "name": "结构梳理",
+         "score": 0.6554,
+         "path": "/架构/逻辑/信息编排逻辑/归纳论证/归纳提炼/结构梳理"
+        },
+        {
+         "name": "分段结构",
+         "score": 0.6515,
+         "path": "/架构/逻辑/信息编排逻辑/条目列举/分段结构"
+        }
+       ]
+      },
+      {
+       "scope_type": "effect",
+       "value": "逻辑自洽",
+       "candidate": "逻辑自洽",
+       "link": "复用",
+       "score": 1.0,
+       "top": [
+        {
+         "name": "逻辑自洽",
+         "score": 1.0,
+         "path": "/结构/叙事推进/收束归纳/闭环收束/逻辑自洽"
+        },
+        {
+         "name": "逻辑推演",
+         "score": 0.7016,
+         "path": "/表达/论证说理/证据支撑/逻辑推演"
+        },
+        {
+         "name": "逻辑顺接",
+         "score": 0.6589,
+         "path": "/结构/叙事推进/承接转换/逻辑顺接"
+        }
+       ]
+      },
+      {
+       "scope_type": "intent",
+       "value": "创作方向",
+       "candidate": "创作方向",
+       "link": "新建",
+       "score": 0.4939,
+       "top": [
+        {
+         "name": "行为引导",
+         "score": 0.4939,
+         "path": "/行为引导"
+        },
+        {
+         "name": "解读",
+         "score": 0.4936,
+         "path": "/信息传递/知识传递/解读"
+        },
+        {
+         "name": "事实呈现",
+         "score": 0.4889,
+         "path": "/信息传递/事实呈现"
+        }
+       ]
+      }
+     ]
+    },
+    {
+     "id": "k2",
+     "type": "what",
+     "role": "主",
+     "parent": null,
+     "title": "人物的三维度维度结构",
+     "业务阶段": [
+      "脚本"
+     ],
+     "出处": [
+      "卡片2"
+     ],
+     "界定": "剧本人物应由生理、社会、心理三个维度构成的立体存在。",
+     "kind": "构成",
+     "主体": [
+      {
+       "小标题": "人物维度细分",
+       "形式": "清单",
+       "条目": [
+        {
+         "词": "生理维度",
+         "说明": "包括性别、年龄、外表等身体特征。"
+        },
+        {
+         "词": "社会维度",
+         "说明": "包括阶层、职业、家庭、教育及爱好等背景资料。"
+        },
+        {
+         "词": "心理维度",
+         "说明": "包括道德标准、性格、志向及经历过的挫折等。"
+        }
+       ]
+      }
+     ],
+     "作用域": [
+      {
+       "scope_type": "substance",
+       "value": "人物刻画",
+       "candidate": "人物刻画",
+       "link": "新建",
+       "score": 0.8049,
+       "top": [
+        {
+         "name": "人物形象",
+         "score": 0.8049,
+         "path": "/表象/视觉/符号/图案符号/形象图案/人物形象"
+        },
+        {
+         "name": "人物特征",
+         "score": 0.7587,
+         "path": "/表象/视觉/实体/人物/人物特征"
+        },
+        {
+         "name": "人物",
+         "score": 0.7463,
+         "path": "/表象/视觉/实体/人物"
+        }
+       ]
+      },
+      {
+       "scope_type": "form",
+       "value": "三维结构",
+       "candidate": "三维结构",
+       "link": "新建",
+       "score": 0.6403,
+       "top": [
+        {
+         "name": "三维建模合成",
+         "score": 0.6403,
+         "path": "/呈现/视觉/视觉制作/后期处理/图像合成处理/三维建模合成"
+        },
+        {
+         "name": "结构变体",
+         "score": 0.6341,
+         "path": "/架构/修辞/修辞意象/句式辞格/排比句式/结构变体"
+        },
+        {
+         "name": "分段结构",
+         "score": 0.5976,
+         "path": "/架构/逻辑/信息编排逻辑/条目列举/分段结构"
+        }
+       ]
+      },
+      {
+       "scope_type": "effect",
+       "value": "立体感",
+       "candidate": "立体感",
+       "link": "新建",
+       "score": 0.5638,
+       "top": [
+        {
+         "name": "对比反差",
+         "score": 0.5638,
+         "path": "/表达/论证说理/分析论证/对比反差"
+        },
+        {
+         "name": "视角呈现",
+         "score": 0.5555,
+         "path": "/表达/信息传达/传达手法/视角呈现"
+        },
+        {
+         "name": "强调突出",
+         "score": 0.5516,
+         "path": "/表达/信息传达/传达手法/强调突出"
+        }
+       ]
+      }
+     ]
+    },
+    {
+     "id": "k3",
+     "type": "what",
+     "role": "主",
+     "parent": null,
+     "title": "冲突的四种类型清单",
+     "业务阶段": [
+      "脚本"
+     ],
+     "出处": [
+      "卡片4"
+     ],
+     "界定": "冲突是行动的源泉,根据其演化逻辑可分为四种形态。",
+     "kind": "选项",
+     "主体": [
+      {
+       "小标题": "冲突形态分类",
+       "形式": "分类",
+       "条目": [
+        {
+         "词": "静态冲突",
+         "说明": "局面原地踏步,原封不动。",
+         "选择线索": "通常用于表现僵局或沉闷的环境背景。"
+        },
+        {
+         "词": "跳跃冲突",
+         "说明": "不服从现实或逻辑常理的突然跳跃。",
+         "选择线索": "用于超现实或逻辑断裂的情景。"
+        },
+        {
+         "词": "缓慢升级",
+         "说明": "逻辑联系紧密,压力步步紧缩。",
+         "选择线索": "最优秀的冲突形式,用于构建严密的逻辑剧作。"
+        },
+        {
+         "词": "预示(张力)",
+         "说明": "坚定对手间的对抗承诺。",
+         "选择线索": "用于在爆发前建立期待和危机感。"
+        }
+       ]
+      }
+     ],
+     "作用域": [
+      {
+       "scope_type": "substance",
+       "value": "戏剧冲突",
+       "candidate": "戏剧冲突",
+       "link": "新建",
+       "score": 0.7609,
+       "top": [
+        {
+         "name": "戏剧演出",
+         "score": 0.7609,
+         "path": "/表象/视觉/行为/表演行为/综艺表演/戏剧演出"
+        },
+        {
+         "name": "冲突对抗",
+         "score": 0.7194,
+         "path": "/表象/视觉/行为/人际互动/关系行为/冲突对抗"
+        },
+        {
+         "name": "战争冲突",
+         "score": 0.6754,
+         "path": "/理念/事件/政治事件/战争冲突"
+        }
+       ]
+      },
+      {
+       "scope_type": "effect",
+       "value": "叙事节奏",
+       "candidate": "叙事节奏",
+       "link": "新建",
+       "score": 0.7884,
+       "top": [
+        {
+         "name": "叙事推进",
+         "score": 0.7884,
+         "path": "/结构/叙事推进"
+        },
+        {
+         "name": "叙事推进节点",
+         "score": 0.7215,
+         "path": "/结构/叙事推进/叙事推进节点"
+        },
+        {
+         "name": "叙事闭合",
+         "score": 0.7199,
+         "path": "/结构/叙事推进/收束归纳/闭环收束/叙事闭合"
+        }
+       ]
+      },
+      {
+       "scope_type": "feeling",
+       "value": "期待感",
+       "candidate": "期待感",
+       "link": "新建",
+       "score": 0.7309,
+       "top": [
+        {
+         "name": "悬念期待",
+         "score": 0.7309,
+         "path": "/认知/好奇/悬念期待"
+        },
+        {
+         "name": "美感",
+         "score": 0.595,
+         "path": "/情感/美感"
+        },
+        {
+         "name": "情感",
+         "score": 0.5686,
+         "path": "/情感"
+        }
+       ]
+      }
+     ]
+    },
+    {
+     "id": "k4",
+     "type": "what",
+     "role": "主",
+     "parent": null,
+     "title": "故事构造的核心要素",
+     "业务阶段": [
+      "脚本"
+     ],
+     "出处": [
+      "卡片6",
+      "卡片7"
+     ],
+     "界定": "构成优秀冲突和场景转折的必备结构要素。",
+     "kind": "构成",
+     "主体": [
+      {
+       "小标题": "构造五要素",
+       "形式": "清单",
+       "条目": [
+        {
+         "词": "过渡",
+         "说明": "人物状态转变时的小冲突。"
+        },
+        {
+         "词": "切入点",
+         "说明": "决定性的瞬间或关键转折点。"
+        },
+        {
+         "词": "危机",
+         "说明": "即将到来的决定性改变。"
+        },
+        {
+         "词": "高潮",
+         "说明": "冲突爆发至顶峰。"
+        },
+        {
+         "词": "结局",
+         "说明": "冲突解决后的最终收尾。"
+        }
+       ]
+      }
+     ],
+     "作用域": [
+      {
+       "scope_type": "substance",
+       "value": "情节构造",
+       "candidate": "情节构造",
+       "link": "新建",
+       "score": 0.6326,
+       "top": [
+        {
+         "name": "冰雪构造",
+         "score": 0.6326,
+         "path": "/表象/视觉/空间/空间环境/地形地貌/冰雪景观/冰雪构造"
+        },
+        {
+         "name": "关系结构",
+         "score": 0.6126,
+         "path": "/理念/知识/思想/概念范畴/关系结构"
+        },
+        {
+         "name": "构图",
+         "score": 0.5989,
+         "path": "/表象/视觉/画面/构图"
+        }
+       ]
+      },
+      {
+       "scope_type": "form",
+       "value": "结构要素",
+       "candidate": "结构要素",
+       "link": "新建",
+       "score": 0.6787,
+       "top": [
+        {
+         "name": "结构编排",
+         "score": 0.6787,
+         "path": "/架构/策略/互动方式/号召动员/呼吁号召/结构编排"
+        },
+        {
+         "name": "结构编排",
+         "score": 0.6787,
+         "path": "/架构/叙事/叙事组织/脉络铺排/结构编排"
+        },
+        {
+         "name": "结构变体",
+         "score": 0.6746,
+         "path": "/架构/修辞/修辞意象/句式辞格/排比句式/结构变体"
+        }
+       ]
+      },
+      {
+       "scope_type": "effect",
+       "value": "场景转折",
+       "candidate": "场景转折",
+       "link": "新建",
+       "score": 0.7537,
+       "top": [
+        {
+         "name": "转折变化",
+         "score": 0.7537,
+         "path": "/结构/叙事推进/承接转换/转折变化"
+        },
+        {
+         "name": "场景描绘",
+         "score": 0.7414,
+         "path": "/表达/信息传达/传达深度/详细说明/展示呈现/场景描绘"
+        },
+        {
+         "name": "场景引入",
+         "score": 0.6994,
+         "path": "/结构/叙事推进/开篇引入/策略引入/场景引入"
+        }
+       ]
+      }
+     ]
+    },
+    {
+     "id": "k5",
+     "type": "why",
+     "role": "主",
+     "parent": null,
+     "title": "人物意志力原理",
+     "业务阶段": [
+      "脚本"
+     ],
+     "出处": [
+      "卡片3",
+      "卡片5"
+     ],
+     "主张": "故事应源自人物,人物必须具有意志力,通过与对立人物的对抗获得发展。",
+     "支撑": [
+      {
+       "小标题": "作用机制",
+       "形式": "机制",
+       "内容": "优秀的冲突源于“攻击与反击”。这就要求驱使人物(主角)与对立人物(对手)之间必须实力相当,且双方都有坚定的意志力不愿妥协。"
+      },
+      {
+       "小标题": "创作取舍含义",
+       "形式": "取舍",
+       "内容": "所以在设定人物时应当侧重于赋予其明确的目标和意志,避免设定软弱或无行动力的主角,否则会导致冲突过早消失或走向静态。"
+      }
+     ],
+     "作用域": [
+      {
+       "scope_type": "substance",
+       "value": "人物意志",
+       "candidate": "人物意志",
+       "link": "新建",
+       "score": 0.7237,
+       "top": [
+        {
+         "name": "人物",
+         "score": 0.7237,
+         "path": "/表象/视觉/实体/人物"
+        },
+        {
+         "name": "人物形象",
+         "score": 0.7172,
+         "path": "/表象/视觉/符号/图案符号/形象图案/人物形象"
+        },
+        {
+         "name": "人物特征",
+         "score": 0.6877,
+         "path": "/表象/视觉/实体/人物/人物特征"
+        }
+       ]
+      },
+      {
+       "scope_type": "effect",
+       "value": "对手对抗",
+       "candidate": "对手对抗",
+       "link": "新建",
+       "score": 0.5403,
+       "top": [
+        {
+         "name": "维度对比",
+         "score": 0.5403,
+         "path": "/表达/论证说理/分析论证/对比反差/维度对比"
+        },
+        {
+         "name": "矛盾冲突",
+         "score": 0.5228,
+         "path": "/表达/论证说理/分析论证/对比反差/矛盾冲突"
+        },
+        {
+         "name": "对比反差",
+         "score": 0.5017,
+         "path": "/表达/论证说理/分析论证/对比反差"
+        }
+       ]
+      },
+      {
+       "scope_type": "intent",
+       "value": "冲突驱动",
+       "candidate": "冲突驱动",
+       "link": "新建",
+       "score": 0.5182,
+       "top": [
+        {
+         "name": "行为引导",
+         "score": 0.5182,
+         "path": "/行为引导"
+        },
+        {
+         "name": "裂变",
+         "score": 0.5095,
+         "path": "/行为引导/裂变"
+        },
+        {
+         "name": "事实呈现",
+         "score": 0.4994,
+         "path": "/信息传递/事实呈现"
+        }
+       ]
+      }
+     ]
+    }
+   ]
+  },
+  {
+   "post_id": "680659e8000000001a007a11",
+   "source_id": "xhs_680659e8000000001a007a11",
+   "title": "故事设计原理拆解学习",
+   "platform": "xiaohongshu",
+   "url": "https://www.xiaohongshu.com/explore/680659e8000000001a007a11",
+   "media": {
+    "type": "image",
+    "video_url": null,
+    "images": [
+     "/data/demo/xiaohongshu/xhs_680659e8000000001a007a11/image_1.webp",
+     "/data/demo/xiaohongshu/xhs_680659e8000000001a007a11/image_2.webp",
+     "/data/demo/xiaohongshu/xhs_680659e8000000001a007a11/image_3.webp",
+     "/data/demo/xiaohongshu/xhs_680659e8000000001a007a11/image_4.webp",
+     "/data/demo/xiaohongshu/xhs_680659e8000000001a007a11/image_5.webp",
+     "/data/demo/xiaohongshu/xhs_680659e8000000001a007a11/image_6.webp",
+     "/data/demo/xiaohongshu/xhs_680659e8000000001a007a11/image_7.webp",
+     "/data/demo/xiaohongshu/xhs_680659e8000000001a007a11/image_8.webp",
+     "/data/demo/xiaohongshu/xhs_680659e8000000001a007a11/image_9.webp"
+    ]
+   },
+   "cards": [
+    {
+     "index": 1,
+     "content": "故事设计思路:阐述、上升动作(进展纠葛)、情节突转(危机)、问题解决(高潮)、下降动作(结局);激励事件的定义为打破生活平衡的决定性事件,分为随机和有因(抉择)两种方式。",
+     "image_url": "/data/demo/xiaohongshu/xhs_680659e8000000001a007a11/image_1.webp"
+    },
+    {
+     "index": 2,
+     "content": "激励事件的功能(打破平衡、激发欲望等)与构思模式。进展纠葛的定义及冲突原则:必须循序渐进制造冲突,分为只发生一个层面的简单冲突和发生三个层面的复杂型。",
+     "image_url": "/data/demo/xiaohongshu/xhs_680659e8000000001a007a11/image_2.webp"
+    },
+    {
+     "index": 3,
+     "content": "冲突分类(内心、个人、社会环境等);故事的宏观结构——幕设计:节拍构成场景,场景构成序列,序列构成幕。主情节通常需要三幕结构,并给出了具体的时间占比建议。",
+     "image_url": "/data/demo/xiaohongshu/xhs_680659e8000000001a007a11/image_3.webp"
+    },
+    {
+     "index": 4,
+     "content": "场景设计要素:场景是在连续时空中通过冲突表现的价值情境;介绍了转折点的四重效果(惊奇、增强好奇心、见识和新方向);伏笔与分晓的设计方法。",
+     "image_url": "/data/demo/xiaohongshu/xhs_680659e8000000001a007a11/image_4.webp"
+    },
+    {
+     "index": 5,
+     "content": "情感转变原理:核心情感分为快感与痛感。根据回报递减定理,情感必须通过正负价值的动态交替转化(移情于人物、明白利害价值)。区别了情感、感悟与基调。",
+     "image_url": "/data/demo/xiaohongshu/xhs_680659e8000000001a007a11/image_5.webp"
+    },
+    {
+     "index": 6,
+     "content": "选择的性质:真正的选择是“两难之选”(不可调和的两善取其一,或两恶取其轻)。提出了构建丰富材料的三方关系框架。",
+     "image_url": "/data/demo/xiaohongshu/xhs_680659e8000000001a007a11/image_6.webp"
+    },
+    {
+     "index": 7,
+     "content": "场景分析的五步程序:1.确定冲突(双方欲望目的对立);2.标注开篇价值;3.将场景分解为节拍(人物行为动作/反应的交流);4.标注结尾价值并与开篇比较;5.概述节拍并标注转折点位置。",
+     "image_url": "/data/demo/xiaohongshu/xhs_680659e8000000001a007a11/image_7.webp"
+    },
+    {
+     "index": 8,
+     "content": "危机的定义:危机是终极决定,是故事必备场景,必须在两难之境中做出决定,以揭示人物深层性格。高潮中的危机是走向高潮的最重大事件。",
+     "image_url": "/data/demo/xiaohongshu/xhs_680659e8000000001a007a11/image_8.webp"
+    },
+    {
+     "index": 9,
+     "content": "高潮的意义:必须充满意义,通过价值剧变打动观众,满足观众的情感预期。结局的三大用途:完成次情节叙事、展示高潮影响、表达对观众的尊重。",
+     "image_url": "/data/demo/xiaohongshu/xhs_680659e8000000001a007a11/image_9.webp"
+    }
+   ],
+   "knowledges": [
+    {
+     "id": "k1",
+     "type": "how",
+     "role": "主",
+     "parent": null,
+     "title": "场景分析五步法",
+     "purpose": "通过五个步骤对已有场景进行结构化拆解与分析",
+     "业务阶段": [
+      "脚本"
+     ],
+     "steps": [
+      {
+       "id": "s1",
+       "input": "原始场景素材",
+       "directive": "确定冲突对象及目的,明确双方欲望目的的对立点。",
+       "output": "场景冲突描述",
+       "出处": [
+        "图7"
+       ],
+       "创作阶段": "打磨",
+       "动作": "确定冲突",
+       "作用域": [
+        {
+         "scope_type": "substance",
+         "value": "场景冲突",
+         "candidate": "场景冲突",
+         "link": "新建",
+         "score": 0.7413,
+         "top": [
+          {
+           "name": "场景感悟",
+           "score": 0.7413,
+           "path": "/理念/观念/个人观念/人生感悟/观点表达/场景感悟"
+          },
+          {
+           "name": "冲突对抗",
+           "score": 0.7402,
+           "path": "/表象/视觉/行为/人际互动/关系行为/冲突对抗"
+          },
+          {
+           "name": "场景形象",
+           "score": 0.7364,
+           "path": "/表象/视觉/符号/图案符号/形象图案/场景形象"
+          }
+         ]
+        },
+        {
+         "scope_type": "effect",
+         "value": "冲突确立",
+         "candidate": "冲突确立",
+         "link": "新建",
+         "score": 0.6821,
+         "top": [
+          {
+           "name": "定性确立",
+           "score": 0.6821,
+           "path": "/表达/论证说理/分析论证/论证评判/定性确立"
+          },
+          {
+           "name": "确立基点",
+           "score": 0.6678,
+           "path": "/结构/叙事推进/开篇引入/直述开篇/确立基点"
+          },
+          {
+           "name": "矛盾冲突",
+           "score": 0.6565,
+           "path": "/表达/论证说理/分析论证/对比反差/矛盾冲突"
+          }
+         ]
+        }
+       ]
+      },
+      {
+       "id": "s2",
+       "input": "← s1产出",
+       "directive": "标注开篇价值,识别场景开始时的情感或价值状态。",
+       "output": "场景初始价值位",
+       "出处": [
+        "图7",
+        "卡片7"
+       ],
+       "创作阶段": "打磨",
+       "动作": "标注价值",
+       "作用域": [
+        {
+         "scope_type": "substance",
+         "value": "初始价值位",
+         "candidate": "初始价值位",
+         "link": "新建",
+         "score": 0.5906,
+         "top": [
+          {
+           "name": "价值导向",
+           "score": 0.5906,
+           "path": "/理念/观念/个人观念/处世智慧/品格修养/价值导向"
+          },
+          {
+           "name": "价值象征",
+           "score": 0.5819,
+           "path": "/理念/知识/思想/概念范畴/价值象征"
+          },
+          {
+           "name": "价值观念",
+           "score": 0.5605,
+           "path": "/理念/观念/个人观念/处世智慧/价值取向/价值观念"
+          }
+         ]
+        },
+        {
+         "scope_type": "effect",
+         "value": "基准建立",
+         "candidate": "基准建立",
+         "link": "新建",
+         "score": 0.6908,
+         "top": [
+          {
+           "name": "确立基点",
+           "score": 0.6908,
+           "path": "/结构/叙事推进/开篇引入/直述开篇/确立基点"
+          },
+          {
+           "name": "基调设定",
+           "score": 0.6209,
+           "path": "/结构/叙事推进/开篇引入/直述开篇/基调设定"
+          },
+          {
+           "name": "定性确立",
+           "score": 0.6019,
+           "path": "/表达/论证说理/分析论证/论证评判/定性确立"
+          }
+         ]
+        }
+       ]
+      },
+      {
+       "id": "s3",
+       "input": "← s2产出",
+       "directive": "将场景分解为节拍,记录人物行为动作与反应的具体交流过程。",
+       "output": "场景节拍清单",
+       "出处": [
+        "图7",
+        "卡片7"
+       ],
+       "创作阶段": "打磨",
+       "动作": "分解节拍",
+       "作用域": [
+        {
+         "scope_type": "form",
+         "value": "节拍清单",
+         "candidate": "节拍清单",
+         "link": "新建",
+         "score": 0.6266,
+         "top": [
+          {
+           "name": "节奏控制",
+           "score": 0.6266,
+           "path": "/呈现/视觉/视觉制作/剪辑组接/剪辑手法/节奏控制"
+          },
+          {
+           "name": "节奏韵律",
+           "score": 0.5847,
+           "path": "/架构/修辞/修辞意象/句式辞格/韵律句式/节奏韵律"
+          },
+          {
+           "name": "条目列举",
+           "score": 0.5761,
+           "path": "/架构/逻辑/信息编排逻辑/条目列举"
+          }
+         ]
+        },
+        {
+         "scope_type": "substance",
+         "value": "行为反应",
+         "candidate": "行为反应",
+         "link": "新建",
+         "score": 0.7942,
+         "top": [
+          {
+           "name": "行为",
+           "score": 0.7942,
+           "path": "/表象/视觉/行为"
+          },
+          {
+           "name": "反应回应",
+           "score": 0.7442,
+           "path": "/表象/视觉/行为/人际互动/反应回应"
+          },
+          {
+           "name": "关系行为",
+           "score": 0.7172,
+           "path": "/表象/视觉/行为/人际互动/关系行为"
+          }
+         ]
+        }
+       ]
+      },
+      {
+       "id": "s4",
+       "input": "← s3产出",
+       "directive": "标注结尾价值,并将其与开篇价值进行比较,观察是否发生了正负转化。",
+       "output": "价值变化结论",
+       "出处": [
+        "图7",
+        "卡片7"
+       ],
+       "创作阶段": "打磨",
+       "动作": "对比价值",
+       "作用域": [
+        {
+         "scope_type": "substance",
+         "value": "价值转化",
+         "candidate": "价值转化",
+         "link": "新建",
+         "score": 0.7162,
+         "top": [
+          {
+           "name": "价值思辨",
+           "score": 0.7162,
+           "path": "/理念/观念/个人观念/处世智慧/价值取向/价值思辨"
+          },
+          {
+           "name": "价值导向",
+           "score": 0.6952,
+           "path": "/理念/观念/个人观念/处世智慧/品格修养/价值导向"
+          },
+          {
+           "name": "价值定价",
+           "score": 0.6894,
+           "path": "/理念/知识/商业/产品服务/价值定价"
+          }
+         ]
+        },
+        {
+         "scope_type": "effect",
+         "value": "弧度验证",
+         "candidate": "弧度验证",
+         "link": "新建",
+         "score": 0.6121,
+         "top": [
+          {
+           "name": "效果验证",
+           "score": 0.6121,
+           "path": "/表达/信息传达/传达手法/信息呈现/转化呈现/效果验证"
+          },
+          {
+           "name": "印证核实",
+           "score": 0.5859,
+           "path": "/表达/论证说理/证据支撑/印证核实"
+          },
+          {
+           "name": "维度对比",
+           "score": 0.5272,
+           "path": "/表达/论证说理/分析论证/对比反差/维度对比"
+          }
+         ]
+        }
+       ]
+      },
+      {
+       "id": "s5",
+       "input": "← s4产出",
+       "directive": "概述节拍并准确定位转折点的位置。",
+       "output": "场景结构分析总结",
+       "出处": [
+        "图7",
+        "卡片7"
+       ],
+       "创作阶段": "打磨",
+       "动作": "定位转折",
+       "作用域": [
+        {
+         "scope_type": "form",
+         "value": "结构总结",
+         "candidate": "结构总结",
+         "link": "新建",
+         "score": 0.7966,
+         "top": [
+          {
+           "name": "结构梳理",
+           "score": 0.7966,
+           "path": "/架构/逻辑/信息编排逻辑/归纳论证/归纳提炼/结构梳理"
+          },
+          {
+           "name": "结构编排",
+           "score": 0.6982,
+           "path": "/架构/策略/互动方式/号召动员/呼吁号召/结构编排"
+          },
+          {
+           "name": "结构编排",
+           "score": 0.6982,
+           "path": "/架构/叙事/叙事组织/脉络铺排/结构编排"
+          }
+         ]
+        },
+        {
+         "scope_type": "effect",
+         "value": "转折点定位",
+         "candidate": "转折点定位",
+         "link": "新建",
+         "score": 0.7392,
+         "top": [
+          {
+           "name": "转折变化",
+           "score": 0.7392,
+           "path": "/结构/叙事推进/承接转换/转折变化"
+          },
+          {
+           "name": "视角转换",
+           "score": 0.6016,
+           "path": "/结构/叙事推进/承接转换/视角转换"
+          },
+          {
+           "name": "确立基点",
+           "score": 0.5856,
+           "path": "/结构/叙事推进/开篇引入/直述开篇/确立基点"
+          }
+         ]
+        }
+       ]
+      }
+     ],
+     "dropped": []
+    },
+    {
+     "id": "k2",
+     "type": "what",
+     "role": "主",
+     "parent": null,
+     "title": "经典故事五部分构成",
+     "业务阶段": [
+      "脚本"
+     ],
+     "出处": [
+      "卡片1",
+      "卡片2",
+      "卡片3",
+      "卡片8",
+      "卡片9"
+     ],
+     "界定": "经典叙事结构中的五个核心组成部分及其层级关系。",
+     "kind": "构成",
+     "主体": [
+      {
+       "小标题": "故事要素",
+       "形式": "清单",
+       "条目": [
+        {
+         "词": "激励事件",
+         "说明": "打破生活平衡的决定性事件,作为‘大钩子’触发故事。分随机和有因(抉择)两种方式。"
+        },
+        {
+         "词": "进展纠葛",
+         "说明": "通过内心、个人、社会环境三个层面的渐进式冲突引导人物走向不归点。"
+        },
+        {
+         "词": "危机",
+         "说明": "终极决定下的危险机会,必须在两难之境中做出决定以揭示性格。"
+        },
+        {
+         "词": "高潮",
+         "说明": "由正负价值剧变产生的意义感,满足观众情感预期。"
+        },
+        {
+         "词": "结局",
+         "说明": "用于完成次情节逻辑、展示高潮影响及给予观众情感满足。"
+        }
+       ]
+      },
+      {
+       "小标题": "结构层级",
+       "形式": "清单",
+       "条目": [
+        {
+         "词": "节拍",
+         "说明": "构成场景的最小单位,表现为动作/反应的交流。"
+        },
+        {
+         "词": "场景",
+         "说明": "在连续时空中通过冲突表现的价值情境。"
+        },
+        {
+         "词": "序列",
+         "说明": "由数个场景构成。"
+        },
+        {
+         "词": "幕",
+         "说明": "由序列构成,主情节通常需要三幕结构。"
+        }
+       ]
+      }
+     ],
+     "作用域": [
+      {
+       "scope_type": "substance",
+       "value": "叙事演进",
+       "candidate": "叙事演进",
+       "link": "新建",
+       "score": 0.7341,
+       "top": [
+        {
+         "name": "演进发展史",
+         "score": 0.7341,
+         "path": "/理念/知识/历史/历史知识形态/历史叙事/演进发展史"
+        },
+        {
+         "name": "历史叙事",
+         "score": 0.7332,
+         "path": "/理念/知识/历史/历史知识形态/历史叙事"
+        },
+        {
+         "name": "制度结构演进",
+         "score": 0.7024,
+         "path": "/理念/现象/社会趋势/社会变迁/制度结构演进"
+        }
+       ]
+      },
+      {
+       "scope_type": "form",
+       "value": "层级结构",
+       "candidate": "层级结构",
+       "link": "新建",
+       "score": 0.7156,
+       "top": [
+        {
+         "name": "对话结构",
+         "score": 0.7156,
+         "path": "/架构/叙事/叙事体裁/演说交流/对话访谈/对话结构"
+        },
+        {
+         "name": "架构",
+         "score": 0.7002,
+         "path": "/架构"
+        },
+        {
+         "name": "社会阶层",
+         "score": 0.6792,
+         "path": "/架构/叙事/叙事组织/角色书写/角色身份/社会阶层"
+        }
+       ]
+      },
+      {
+       "scope_type": "effect",
+       "value": "节奏控制",
+       "candidate": "节奏控制",
+       "link": "新建",
+       "score": 0.7325,
+       "top": [
+        {
+         "name": "推进节奏",
+         "score": 0.7325,
+         "path": "/结构/叙事推进/推进节奏"
+        },
+        {
+         "name": "基调设定",
+         "score": 0.5629,
+         "path": "/结构/叙事推进/开篇引入/直述开篇/基调设定"
+        },
+        {
+         "name": "叙事推进",
+         "score": 0.5489,
+         "path": "/结构/叙事推进"
+        }
+       ]
+      },
+      {
+       "scope_type": "intent",
+       "value": "观众预期",
+       "candidate": "观众预期",
+       "link": "新建",
+       "score": 0.5302,
+       "top": [
+        {
+         "name": "粉丝互动",
+         "score": 0.5302,
+         "path": "/情感联结/关系维护/粉丝互动"
+        },
+        {
+         "name": "信息扩散",
+         "score": 0.5013,
+         "path": "/信息传递/信息扩散"
+        },
+        {
+         "name": "事实呈现",
+         "score": 0.5004,
+         "path": "/信息传递/事实呈现"
+        }
+       ]
+      }
+     ]
+    },
+    {
+     "id": "k3",
+     "type": "why",
+     "role": "主",
+     "parent": null,
+     "title": "两难之选原理",
+     "业务阶段": [
+      "脚本"
+     ],
+     "出处": [
+      "图6",
+      "图8"
+     ],
+     "主张": "真正的选择必须是不可调和的选择,而非简单的对错之分。",
+     "支撑": [
+      {
+       "小标题": "抉择性质",
+       "形式": "定义",
+       "内容": "真正的选择是‘两难之选’:在不可调和的两善中取其一,或在两恶中取其轻。"
+      },
+      {
+       "小标题": "创作取舍",
+       "形式": "取舍",
+       "内容": "设计人物困境时,应避免设置显而易见的正确选项,必须强制人物在两个具有同等分量的价值间做痛苦抉择,以此揭示人物深层性格并产生戏剧压力。"
+      }
+     ],
+     "作用域": [
+      {
+       "scope_type": "substance",
+       "value": "两难抉择",
+       "candidate": "两难抉择",
+       "link": "新建",
+       "score": 0.6317,
+       "top": [
+        {
+         "name": "苦难困境",
+         "score": 0.6317,
+         "path": "/理念/现象/生活状态/个人境遇/身心状态/苦难困境"
+        },
+        {
+         "name": "困境生存",
+         "score": 0.6022,
+         "path": "/理念/现象/生活状态/困境生存"
+        },
+        {
+         "name": "博弈策略",
+         "score": 0.5609,
+         "path": "/理念/知识/政治/国际政治/国际博弈/博弈策略"
+        }
+       ]
+      },
+      {
+       "scope_type": "effect",
+       "value": "人物刻画",
+       "candidate": "人物刻画",
+       "link": "新建",
+       "score": 0.8592,
+       "top": [
+        {
+         "name": "形象刻画",
+         "score": 0.8592,
+         "path": "/表达/信息传达/传达深度/详细说明/展示呈现/形象刻画"
+        },
+        {
+         "name": "行为刻画",
+         "score": 0.8207,
+         "path": "/表达/形象塑造/行为刻画"
+        },
+        {
+         "name": "人物引入",
+         "score": 0.6936,
+         "path": "/表达/形象塑造/人物引入"
+        }
+       ]
+      },
+      {
+       "scope_type": "feeling",
+       "value": "两难煎熬感",
+       "candidate": "两难煎熬感",
+       "link": "新建",
+       "score": 0.5494,
+       "top": [
+        {
+         "name": "情绪处境共鸣",
+         "score": 0.5494,
+         "path": "/情感/同感/情绪处境共鸣"
+        },
+        {
+         "name": "焦虑恐惧",
+         "score": 0.5448,
+         "path": "/情感/共情/焦虑恐惧"
+        },
+        {
+         "name": "同感",
+         "score": 0.5431,
+         "path": "/情感/同感"
+        }
+       ]
+      },
+      {
+       "scope_type": "effect",
+       "value": "戏剧压力",
+       "candidate": "戏剧压力",
+       "link": "新建",
+       "score": 0.6152,
+       "top": [
+        {
+         "name": "情感张力",
+         "score": 0.6152,
+         "path": "/表达/论证说理/分析论证/对比反差/情感张力"
+        },
+        {
+         "name": "矛盾冲突",
+         "score": 0.5302,
+         "path": "/表达/论证说理/分析论证/对比反差/矛盾冲突"
+        },
+        {
+         "name": "困境状态",
+         "score": 0.5186,
+         "path": "/表达/论证说理/分析论证/揭示溯因/困境状态"
+        }
+       ]
+      }
+     ]
+    },
+    {
+     "id": "k4",
+     "type": "why",
+     "role": "主",
+     "parent": null,
+     "title": "情感回报递减与动态转化原理",
+     "业务阶段": [
+      "脚本"
+     ],
+     "出处": [
+      "图5"
+     ],
+     "主张": "情感必须通过正负价值的动态交替转化来维持观众的兴趣。",
+     "支撑": [
+      {
+       "小标题": "驱动机制",
+       "形式": "机制",
+       "内容": "根据回报递减定理,持续的快感或痛感会导致观众麻木。核心情感(快感与痛感)必须交替出现。"
+      },
+      {
+       "小标题": "创作取舍",
+       "形式": "取舍",
+       "内容": "在剧本编写过程中,不能让人物一直处于顺利或一直处于低谷,必须刻意设计价值转折(从负到正,或从正到负),通过正负交替转化来牵引观众移情并维持情感强度。"
+      }
+     ],
+     "作用域": [
+      {
+       "scope_type": "substance",
+       "value": "价值转折",
+       "candidate": "价值转折",
+       "link": "新建",
+       "score": 0.6955,
+       "top": [
+        {
+         "name": "价值导向",
+         "score": 0.6955,
+         "path": "/理念/观念/个人观念/处世智慧/品格修养/价值导向"
+        },
+        {
+         "name": "价值思辨",
+         "score": 0.6926,
+         "path": "/理念/观念/个人观念/处世智慧/价值取向/价值思辨"
+        },
+        {
+         "name": "价值定价",
+         "score": 0.6738,
+         "path": "/理念/知识/商业/产品服务/价值定价"
+        }
+       ]
+      },
+      {
+       "scope_type": "effect",
+       "value": "情感驱动",
+       "candidate": "情感驱动",
+       "link": "新建",
+       "score": 0.744,
+       "top": [
+        {
+         "name": "情感动员",
+         "score": 0.744,
+         "path": "/表达/互动引导/情感连接/情感动员"
+        },
+        {
+         "name": "情感连接",
+         "score": 0.7262,
+         "path": "/表达/互动引导/情感连接"
+        },
+        {
+         "name": "情感强化",
+         "score": 0.7191,
+         "path": "/表达/信息传达/传达手法/强调突出/情感强化"
+        }
+       ]
+      },
+      {
+       "scope_type": "feeling",
+       "value": "移情效应",
+       "candidate": "移情效应",
+       "link": "新建",
+       "score": 0.6922,
+       "top": [
+        {
+         "name": "共情",
+         "score": 0.6922,
+         "path": "/情感/共情"
+        },
+        {
+         "name": "情绪处境共鸣",
+         "score": 0.6142,
+         "path": "/情感/同感/情绪处境共鸣"
+        },
+        {
+         "name": "情感",
+         "score": 0.6068,
+         "path": "/情感"
+        }
+       ]
+      },
+      {
+       "scope_type": "intent",
+       "value": "兴趣维持",
+       "candidate": "兴趣维持",
+       "link": "新建",
+       "score": 0.6337,
+       "top": [
+        {
+         "name": "关系维护",
+         "score": 0.6337,
+         "path": "/情感联结/关系维护"
+        },
+        {
+         "name": "行为引导",
+         "score": 0.5261,
+         "path": "/行为引导"
+        },
+        {
+         "name": "情感联结",
+         "score": 0.5184,
+         "path": "/情感联结"
+        }
+       ]
+      }
+     ]
+    }
+   ]
+  },
+  {
+   "post_id": "67e4bdf50000000006028a59",
+   "source_id": "xhs_67e4bdf50000000006028a59",
+   "title": "只要学会这几样,写短视频脚本真的不难❗️",
+   "platform": "xiaohongshu",
+   "url": "https://www.xiaohongshu.com/explore/67e4bdf50000000006028a59",
+   "media": {
+    "type": "image",
+    "video_url": null,
+    "images": [
+     "/data/demo/xiaohongshu/xhs_67e4bdf50000000006028a59/image_1.webp",
+     "/data/demo/xiaohongshu/xhs_67e4bdf50000000006028a59/image_2.webp",
+     "/data/demo/xiaohongshu/xhs_67e4bdf50000000006028a59/image_3.webp",
+     "/data/demo/xiaohongshu/xhs_67e4bdf50000000006028a59/image_4.webp"
+    ]
+   },
+   "cards": [
+    {
+     "index": 1,
+     "content": "短视频脚本编写流程:1. 确定选题(明确拍摄主题);2. 搭建框架(确定出镜人员/形象、室内外场景、故事内容);3. 细节完善(镜号排序、拍摄场景地点、画面感构思、拍摄技巧、字幕类型、音乐音效、控制时长)。时长建议:长视频15秒左右注意力维持,短视频3秒左右。",
+     "image_url": "/data/demo/xiaohongshu/xhs_67e4bdf50000000006028a59/image_1.webp"
+    },
+    {
+     "index": 2,
+     "content": "脚本构思三步骤与要素:1. 脚本构成要素包括标题、时长、视频画面、视频文案、景别、角度。2. 脚本构思逻辑包括:开门见山/提出疑问、提出方法/讲述故事、抛出问题/总结内容等。",
+     "image_url": "/data/demo/xiaohongshu/xhs_67e4bdf50000000006028a59/image_2.webp"
+    },
+    {
+     "index": 3,
+     "content": "分镜头脚本公式:1. vlog公式(共鸣=人物+状态+情感;好奇=描述时间/观点+悬念等)。2. 脚本三要素:开头噱头(黄金3秒)、中间论述(条理清晰)、结尾总结。3. 黄金结构:引子(视觉冲击/独特开场)、内容主题(有起伏的故事线/节奏把握)、结尾(印象点/情感共鸣/行动指令)。",
+     "image_url": "/data/demo/xiaohongshu/xhs_67e4bdf50000000006028a59/image_3.webp"
+    },
+    {
+     "index": 4,
+     "content": "六种常用拍摄构图法:水平线构图(稳定宽广)、对角线构图(动感/吸引注意力)、中心构图(主体突出)、框式构图(窥视感/神秘感)、九宫格构图(均衡醒目)、三分法构图(化繁为简)。",
+     "image_url": "/data/demo/xiaohongshu/xhs_67e4bdf50000000006028a59/image_4.webp"
+    }
+   ],
+   "knowledges": [
+    {
+     "id": "k1",
+     "type": "how",
+     "role": "主",
+     "parent": null,
+     "title": "短视频脚本编写三步法",
+     "purpose": "从确定主题出发完成一份包含视听细节的短视频脚本",
+     "业务阶段": [
+      "脚本"
+     ],
+     "steps": [
+      {
+       "id": "s1",
+       "input": "创作意图",
+       "directive": "确定选题,明确拍摄主题",
+       "output": "拍摄主题",
+       "出处": [
+        "卡片1"
+       ],
+       "创作阶段": "定向",
+       "动作": "确定选题",
+       "作用域": [
+        {
+         "scope_type": "substance",
+         "value": "选题确定",
+         "candidate": "选题确定",
+         "link": "新建",
+         "score": 0.5318,
+         "top": [
+          {
+           "name": "标题",
+           "score": 0.5318,
+           "path": "/表象/视觉/符号/文字符号/标题"
+          },
+          {
+           "name": "概念构想",
+           "score": 0.5279,
+           "path": "/理念/知识/思想/概念范畴/认知思辨/概念构想"
+          },
+          {
+           "name": "行业研究",
+           "score": 0.5259,
+           "path": "/理念/知识/商业/行业分析/行业研究"
+          }
+         ]
+        },
+        {
+         "scope_type": "intent",
+         "value": "创作方向",
+         "candidate": "创作方向",
+         "link": "新建",
+         "score": 0.4957,
+         "top": [
+          {
+           "name": "行为引导",
+           "score": 0.4957,
+           "path": "/行为引导"
+          },
+          {
+           "name": "解读",
+           "score": 0.4936,
+           "path": "/信息传递/知识传递/解读"
+          },
+          {
+           "name": "事实呈现",
+           "score": 0.4883,
+           "path": "/信息传递/事实呈现"
+          }
+         ]
+        }
+       ]
+      },
+      {
+       "id": "s2",
+       "input": "← s1产出",
+       "directive": "搭建框架。确定出镜人员/形象、室内外场景、故事内容。",
+       "output": "脚本框架(人物/场景/事件)",
+       "出处": [
+        "卡片1"
+       ],
+       "创作阶段": "构思",
+       "动作": "定框架",
+       "作用域": [
+        {
+         "scope_type": "substance",
+         "value": "脚本框架",
+         "candidate": "脚本框架",
+         "link": "新建",
+         "score": 0.5547,
+         "top": [
+          {
+           "name": "场景形象",
+           "score": 0.5547,
+           "path": "/表象/视觉/符号/图案符号/形象图案/场景形象"
+          },
+          {
+           "name": "概念构想",
+           "score": 0.5509,
+           "path": "/理念/知识/思想/概念范畴/认知思辨/概念构想"
+          },
+          {
+           "name": "清单列表",
+           "score": 0.5459,
+           "path": "/表象/视觉/符号/文字符号/标注/清单列表"
+          }
+         ]
+        },
+        {
+         "scope_type": "form",
+         "value": "叙事结构",
+         "candidate": "叙事结构",
+         "link": "新建",
+         "score": 0.8439,
+         "top": [
+          {
+           "name": "叙事逻辑",
+           "score": 0.8439,
+           "path": "/架构/逻辑/叙事逻辑"
+          },
+          {
+           "name": "叙事手法",
+           "score": 0.8245,
+           "path": "/呈现/听觉/语音/表达形式/风格化解说/叙事手法"
+          },
+          {
+           "name": "叙事组织",
+           "score": 0.8132,
+           "path": "/架构/叙事/叙事组织"
+          }
+         ]
+        },
+        {
+         "scope_type": "effect",
+         "value": "逻辑支撑",
+         "candidate": "逻辑支撑",
+         "link": "新建",
+         "score": 0.7475,
+         "top": [
+          {
+           "name": "证据支撑",
+           "score": 0.7475,
+           "path": "/表达/论证说理/证据支撑"
+          },
+          {
+           "name": "逻辑铺垫",
+           "score": 0.7412,
+           "path": "/结构/叙事推进/铺垫准备/逻辑铺垫"
+          },
+          {
+           "name": "逻辑推演",
+           "score": 0.7114,
+           "path": "/表达/论证说理/证据支撑/逻辑推演"
+          }
+         ]
+        }
+       ]
+      },
+      {
+       "id": "s3",
+       "input": "← s2产出",
+       "directive": "细节完善。进行镜号排序,细化画面感构思、拍摄技巧、字幕、音乐音效及控制时长。注意:长视频15秒左右注意力维持,短视频3秒左右。",
+       "output": "分镜头脚本成品",
+       "出处": [
+        "卡片1",
+        "卡片2"
+       ],
+       "创作阶段": "打磨",
+       "动作": "细化细节",
+       "作用域": [
+        {
+         "scope_type": "substance",
+         "value": "分镜头脚本",
+         "candidate": "分镜头脚本",
+         "link": "新建",
+         "score": 0.5809,
+         "top": [
+          {
+           "name": "场景氛围",
+           "score": 0.5809,
+           "path": "/表象/视觉/画面/后期/情绪意境/场景氛围"
+          },
+          {
+           "name": "场景形象",
+           "score": 0.5765,
+           "path": "/表象/视觉/符号/图案符号/形象图案/场景形象"
+          },
+          {
+           "name": "镜头",
+           "score": 0.5754,
+           "path": "/表象/视觉/画面/镜头"
+          }
+         ]
+        },
+        {
+         "scope_type": "form",
+         "value": "细节排布",
+         "candidate": "细节排布",
+         "link": "新建",
+         "score": 0.707,
+         "top": [
+          {
+           "name": "细节描绘",
+           "score": 0.707,
+           "path": "/架构/修辞/描写刻画/细节描绘"
+          },
+          {
+           "name": "细节化叙事",
+           "score": 0.6566,
+           "path": "/架构/叙事/叙事技法/基础技法/细节化叙事"
+          },
+          {
+           "name": "脉络铺排",
+           "score": 0.6532,
+           "path": "/架构/叙事/叙事组织/脉络铺排"
+          }
+         ]
+        },
+        {
+         "scope_type": "effect",
+         "value": "注意力维持",
+         "candidate": "注意力维持",
+         "link": "新建",
+         "score": 0.5532,
+         "top": [
+          {
+           "name": "动机激发",
+           "score": 0.5532,
+           "path": "/表达/信息传达/传达手法/强调突出/动机激发"
+          },
+          {
+           "name": "回归聚焦",
+           "score": 0.5435,
+           "path": "/结构/叙事推进/收束归纳/回归聚焦"
+          },
+          {
+           "name": "动机驱力",
+           "score": 0.5379,
+           "path": "/表达/论证说理/分析论证/揭示溯因/原因追溯/动机驱力"
+          }
+         ]
+        }
+       ]
+      }
+     ]
+    },
+    {
+     "id": "k2",
+     "type": "what",
+     "role": "组件",
+     "parent": {
+      "how_id": "k1",
+      "step": 2
+     },
+     "title": "短视频内容黄金结构",
+     "业务阶段": [
+      "脚本"
+     ],
+     "出处": [
+      "卡片3"
+     ],
+     "界定": "一种通用的短视频叙事与节奏排布方式",
+     "kind": "构成",
+     "主体": [
+      {
+       "小标题": "结构组成",
+       "形式": "清单",
+       "条目": [
+        {
+         "词": "引子",
+         "说明": "开头噱头(黄金3秒)。要求视觉冲击或独特开场。"
+        },
+        {
+         "词": "内容主题",
+         "说明": "中间论述。条理清晰,有起伏的故事线且把握节奏。"
+        },
+        {
+         "词": "结尾",
+         "说明": "总结得出印象点、情感共鸣或行动指令。"
+        }
+       ]
+      }
+     ],
+     "作用域": [
+      {
+       "scope_type": "substance",
+       "value": "短视频结构",
+       "candidate": "短视频结构",
+       "link": "新建",
+       "score": 0.6346,
+       "top": [
+        {
+         "name": "社会结构",
+         "score": 0.6346,
+         "path": "/理念/知识/社会知识/社会结构"
+        },
+        {
+         "name": "关系结构",
+         "score": 0.583,
+         "path": "/理念/知识/思想/概念范畴/关系结构"
+        },
+        {
+         "name": "构图",
+         "score": 0.5677,
+         "path": "/表象/视觉/画面/构图"
+        }
+       ]
+      },
+      {
+       "scope_type": "form",
+       "value": "三段式叙事",
+       "candidate": "三段式叙事",
+       "link": "新建",
+       "score": 0.7552,
+       "top": [
+        {
+         "name": "叙事逻辑",
+         "score": 0.7552,
+         "path": "/架构/逻辑/叙事逻辑"
+        },
+        {
+         "name": "叙事手法",
+         "score": 0.7466,
+         "path": "/呈现/听觉/语音/表达形式/风格化解说/叙事手法"
+        },
+        {
+         "name": "叙事",
+         "score": 0.7392,
+         "path": "/架构/叙事"
+        }
+       ]
+      },
+      {
+       "scope_type": "effect",
+       "value": "黄金3秒",
+       "candidate": "黄金3秒",
+       "link": "新建",
+       "score": 0.506,
+       "top": [
+        {
+         "name": "视觉开篇",
+         "score": 0.506,
+         "path": "/结构/叙事推进/开篇引入/直述开篇/视觉开篇"
+        },
+        {
+         "name": "定性定格",
+         "score": 0.5051,
+         "path": "/表达/形象塑造/品质体现/形象整合/定性定格"
+        },
+        {
+         "name": "悬念设置",
+         "score": 0.4721,
+         "path": "/结构/叙事推进/叙事推进节点/悬念设置"
+        }
+       ]
+      },
+      {
+       "scope_type": "feeling",
+       "value": "情感共鸣",
+       "candidate": "情感共鸣",
+       "link": "新建",
+       "score": 0.799,
+       "top": [
+        {
+         "name": "情感",
+         "score": 0.799,
+         "path": "/情感"
+        },
+        {
+         "name": "情绪处境共鸣",
+         "score": 0.7863,
+         "path": "/情感/同感/情绪处境共鸣"
+        },
+        {
+         "name": "共情",
+         "score": 0.7814,
+         "path": "/情感/共情"
+        }
+       ]
+      }
+     ]
+    },
+    {
+     "id": "k3",
+     "type": "what",
+     "role": "主",
+     "parent": null,
+     "title": "常用拍摄构图方法清单",
+     "业务阶段": [
+      "脚本"
+     ],
+     "出处": [
+      "卡片4"
+     ],
+     "界定": "在脚本规划画面感时可选用的视觉组织方式",
+     "kind": "选项",
+     "主体": [
+      {
+       "小标题": "构图库",
+       "形式": "清单",
+       "条目": [
+        {
+         "词": "水平线构图",
+         "说明": "稳定宽广",
+         "选择线索": "追求画面稳定与开阔感时使用"
+        },
+        {
+         "词": "对角线构图",
+         "说明": "动感/吸引注意力",
+         "选择线索": "需要增加画面张力或引导视觉焦点时使用"
+        },
+        {
+         "词": "中心构图",
+         "说明": "主体突出",
+         "选择线索": "强调单一核心主体时使用"
+        },
+        {
+         "词": "框式构图",
+         "说明": "窥视感/神秘感",
+         "选择线索": "需要利用前景营造空间层次或神秘氛围时使用"
+        },
+        {
+         "词": "九宫格构图",
+         "说明": "均衡醒目",
+         "选择线索": "追求符合大众审美的平衡感时使用"
+        },
+        {
+         "词": "三分法构图",
+         "说明": "化繁为简",
+         "选择线索": "画面元素较多需要留白或梳理主次时使用"
+        }
+       ]
+      }
+     ],
+     "作用域": [
+      {
+       "scope_type": "substance",
+       "value": "拍摄构图",
+       "candidate": "拍摄构图",
+       "link": "新建",
+       "score": 0.8722,
+       "top": [
+        {
+         "name": "构图",
+         "score": 0.8722,
+         "path": "/表象/视觉/画面/构图"
+        },
+        {
+         "name": "色彩构成",
+         "score": 0.6097,
+         "path": "/表象/视觉/画面特征/色彩表现/色彩构成"
+        },
+        {
+         "name": "光影",
+         "score": 0.5591,
+         "path": "/表象/视觉/画面/光影"
+        }
+       ]
+      },
+      {
+       "scope_type": "form",
+       "value": "视觉组织",
+       "candidate": "视觉组织",
+       "link": "新建",
+       "score": 0.7424,
+       "top": [
+        {
+         "name": "视觉",
+         "score": 0.7424,
+         "path": "/呈现/视觉"
+        },
+        {
+         "name": "叙事组织",
+         "score": 0.7226,
+         "path": "/架构/叙事/叙事组织"
+        },
+        {
+         "name": "时间组织",
+         "score": 0.7096,
+         "path": "/架构/叙事/叙事组织/脉络铺排/时间组织"
+        }
+       ]
+      },
+      {
+       "scope_type": "effect",
+       "value": "空间层次",
+       "candidate": "空间层次",
+       "link": "新建",
+       "score": 0.7245,
+       "top": [
+        {
+         "name": "层次递进",
+         "score": 0.7245,
+         "path": "/结构/叙事推进/承接转换/层次递进"
+        },
+        {
+         "name": "层次跃升",
+         "score": 0.681,
+         "path": "/表达/论证说理/提炼升华/升华深化/层次跃升"
+        },
+        {
+         "name": "氛围营造",
+         "score": 0.6064,
+         "path": "/表达/氛围营造"
+        }
+       ]
+      },
+      {
+       "scope_type": "feeling",
+       "value": "神秘感",
+       "candidate": "神秘感",
+       "link": "新建",
+       "score": 0.6419,
+       "top": [
+        {
+         "name": "美感",
+         "score": 0.6419,
+         "path": "/情感/美感"
+        },
+        {
+         "name": "悬念期待",
+         "score": 0.57,
+         "path": "/认知/好奇/悬念期待"
+        },
+        {
+         "name": "风格美感",
+         "score": 0.569,
+         "path": "/情感/美感/风格美感"
+        }
+       ]
+      }
+     ]
+    },
+    {
+     "id": "k4",
+     "type": "what",
+     "role": "主",
+     "parent": null,
+     "title": "Vlog脚本创作公式集",
+     "业务阶段": [
+      "灵感",
+      "脚本"
+     ],
+     "出处": [
+      "卡片3"
+     ],
+     "界定": "针对不同情绪和目的的Vlog叙事要素组合",
+     "kind": "选项",
+     "主体": [
+      {
+       "小标题": "分类公式",
+       "形式": "清单",
+       "条目": [
+        {
+         "词": "共鸣公式",
+         "说明": "人物+状态+情感",
+         "选择线索": "旨在引发观众情绪上的认同"
+        },
+        {
+         "词": "好奇公式",
+         "说明": "描述时间/观点+悬念等",
+         "选择线索": "旨在提高视频完播率和抓人眼球"
+        },
+        {
+         "词": "其余公式",
+         "说明": "引发互动型、干货输出型、综合热点型",
+         "选择线索": "根据视频具体目的(涨粉、教学或蹭热度)选择"
+        }
+       ]
+      }
+     ],
+     "作用域": [
+      {
+       "scope_type": "substance",
+       "value": "Vlog公式",
+       "candidate": "Vlog公式",
+       "link": "新建",
+       "score": 0.5565,
+       "top": [
+        {
+         "name": "标题",
+         "score": 0.5565,
+         "path": "/表象/视觉/符号/文字符号/标题"
+        },
+        {
+         "name": "规律模式",
+         "score": 0.5229,
+         "path": "/理念/知识/思想/概念范畴/关系结构/规律模式"
+        },
+        {
+         "name": "动效字幕",
+         "score": 0.5176,
+         "path": "/表象/视觉/符号/文字符号/字幕/动效字幕"
+        }
+       ]
+      },
+      {
+       "scope_type": "effect",
+       "value": "悬念设置",
+       "candidate": "悬念设置",
+       "link": "复用",
+       "score": 1.0,
+       "top": [
+        {
+         "name": "悬念设置",
+         "score": 1.0,
+         "path": "/结构/叙事推进/叙事推进节点/悬念设置"
+        },
+        {
+         "name": "情感铺垫",
+         "score": 0.6462,
+         "path": "/结构/叙事推进/铺垫准备/情感铺垫"
+        },
+        {
+         "name": "设定铺垫",
+         "score": 0.6262,
+         "path": "/结构/叙事推进/铺垫准备/设定铺垫"
+        }
+       ]
+      },
+      {
+       "scope_type": "intent",
+       "value": "完播率",
+       "candidate": "完播率",
+       "link": "新建",
+       "score": 0.5125,
+       "top": [
+        {
+         "name": "科普",
+         "score": 0.5125,
+         "path": "/信息传递/知识传递/科普"
+        },
+        {
+         "name": "种草推荐",
+         "score": 0.5114,
+         "path": "/行为引导/商业推广/种草推荐"
+        },
+        {
+         "name": "粉丝互动",
+         "score": 0.4829,
+         "path": "/情感联结/关系维护/粉丝互动"
+        }
+       ]
+      },
+      {
+       "scope_type": "feeling",
+       "value": "情绪认同",
+       "candidate": "情绪认同",
+       "link": "新建",
+       "score": 0.7554,
+       "top": [
+        {
+         "name": "情绪处境共鸣",
+         "score": 0.7554,
+         "path": "/情感/同感/情绪处境共鸣"
+        },
+        {
+         "name": "共情",
+         "score": 0.7316,
+         "path": "/情感/共情"
+        },
+        {
+         "name": "情感",
+         "score": 0.6766,
+         "path": "/情感"
+        }
+       ]
+      }
+     ]
+    }
+   ]
+  },
+  {
+   "post_id": "7589257893544165455",
+   "source_id": "dy_7589257893544165455",
+   "title": "如何用AI十几秒制作一段高质量精彩的视频...",
+   "platform": "douyin",
+   "url": "https://www.douyin.com/video/7589257893544165455",
+   "media": {
+    "type": "video",
+    "video_url": "/data/demo/douyin/dy_7589257893544165455/video.mp4",
+    "images": []
+   },
+   "cards": [
+    {
+     "index": 1,
+     "content": "核心逻辑概述。How:利用 AI 工具(豆包)添加一句提示词即可搞定高质量旅游视频。",
+     "video_url": "/data/demo/douyin/dy_7589257893544165455/video.mp4",
+     "start": 0.0,
+     "end": 7.0
+    },
+    {
+     "index": 2,
+     "content": "AI 生成视频描述词技巧。What:通过 AI 对话工具获取专业的视频描述词。。How:1. 打开豆包并开启‘深度思考’模式;\n2. 输入特定 Prompt:‘我是一个旅游视频创作者,请帮我写一段关于[地点]旅游的视频描述词,要求 30 字以内’;\n3. 从生成的多个候选中复制最满意的一条。",
+     "video_url": "/data/demo/douyin/dy_7589257893544165455/video.mp4",
+     "start": 8.0,
+     "end": 24.0
+    },
+    {
+     "index": 3,
+     "content": "文生视频操作流程。How:1. 搜索并进入‘创作神器’小程序;\n2. 选择‘文生视频’功能;\n3. 粘贴生成的描述词;\n4. 点击‘灵感扩写’自动丰富文案细节及镜头描述;\n5. 设置比例(如 9:16)并点击生成,等待 AI 完成视频合成。",
+     "video_url": "/data/demo/douyin/dy_7589257893544165455/video.mp4",
+     "start": 25.0,
+     "end": 51.0
+    }
+   ],
+   "no_knowledge": true,
+   "knowledges": []
+  },
+  {
+   "post_id": "6a33655e000000000f0055af",
+   "source_id": "xhs_6a33655e000000000f0055af",
+   "title": "🎮Voodoo 转型成功,单日流水破百万美元",
+   "platform": "xiaohongshu",
+   "url": "https://www.xiaohongshu.com/explore/6a33655e000000000f0055af",
+   "media": {
+    "type": "image",
+    "video_url": null,
+    "images": [
+     "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un47g5or0rc9nrd7lo51t35o?imageView2/2/w/1080/format/webp",
+     "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4805or0rc9nrd7l4l2ce88?imageView2/2/w/1080/format/webp",
+     "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un48g5or0rc9nrd7l95ettf0?imageView2/2/w/1080/format/webp",
+     "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4905or0rc9nrd7lv5q3bho?imageView2/2/w/1080/format/webp",
+     "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un49g5or0rc9nrd7le5ge5i0?imageView2/2/w/1080/format/webp",
+     "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4a05or0rc9nrd7laa4jb7g?imageView2/2/w/1080/format/webp",
+     "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4ag5or0rc9nrd7lu0cqh0g?imageView2/2/w/1080/format/webp",
+     "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4b05or0rc9nrd7lgmvbg8o?imageView2/2/w/1080/format/webp",
+     "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4bg5or0rc9nrd7lrslni4g?imageView2/2/w/1080/format/webp",
+     "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4c05or0rc9nrd7lcbova80?imageView2/2/w/1080/format/webp",
+     "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4cg5or0rc9nrd7l80k7bp0?imageView2/2/w/1080/format/webp",
+     "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4d05or0rc9nrd7l0poig80?imageView2/2/w/1080/format/webp",
+     "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4dg5or0rc9nrd7l9jnq1v8?imageView2/2/w/1080/format/webp",
+     "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4e05or0rc9nrd7lqovqas0?imageView2/2/w/1080/format/webp",
+     "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2tin6s2g5or0rc9nrd7lkvvqnm8?imageView2/2/w/1080/format/webp",
+     "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2tin6s305or0rc9nrd7livn3u50?imageView2/2/w/1080/format/webp"
+    ]
+   },
+   "cards": [
+    {
+     "index": 1,
+     "content": "",
+     "image_url": "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un47g5or0rc9nrd7lo51t35o?imageView2/2/w/1080/format/webp"
+    },
+    {
+     "index": 2,
+     "content": "",
+     "image_url": "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4805or0rc9nrd7l4l2ce88?imageView2/2/w/1080/format/webp"
+    },
+    {
+     "index": 3,
+     "content": "",
+     "image_url": "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un48g5or0rc9nrd7l95ettf0?imageView2/2/w/1080/format/webp"
+    },
+    {
+     "index": 4,
+     "content": "",
+     "image_url": "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4905or0rc9nrd7lv5q3bho?imageView2/2/w/1080/format/webp"
+    },
+    {
+     "index": 5,
+     "content": "",
+     "image_url": "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un49g5or0rc9nrd7le5ge5i0?imageView2/2/w/1080/format/webp"
+    },
+    {
+     "index": 6,
+     "content": "",
+     "image_url": "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4a05or0rc9nrd7laa4jb7g?imageView2/2/w/1080/format/webp"
+    },
+    {
+     "index": 7,
+     "content": "",
+     "image_url": "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4ag5or0rc9nrd7lu0cqh0g?imageView2/2/w/1080/format/webp"
+    },
+    {
+     "index": 8,
+     "content": "",
+     "image_url": "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4b05or0rc9nrd7lgmvbg8o?imageView2/2/w/1080/format/webp"
+    },
+    {
+     "index": 9,
+     "content": "",
+     "image_url": "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4bg5or0rc9nrd7lrslni4g?imageView2/2/w/1080/format/webp"
+    },
+    {
+     "index": 10,
+     "content": "",
+     "image_url": "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4c05or0rc9nrd7lcbova80?imageView2/2/w/1080/format/webp"
+    },
+    {
+     "index": 11,
+     "content": "",
+     "image_url": "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4cg5or0rc9nrd7l80k7bp0?imageView2/2/w/1080/format/webp"
+    },
+    {
+     "index": 12,
+     "content": "",
+     "image_url": "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4d05or0rc9nrd7l0poig80?imageView2/2/w/1080/format/webp"
+    },
+    {
+     "index": 13,
+     "content": "",
+     "image_url": "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4dg5or0rc9nrd7l9jnq1v8?imageView2/2/w/1080/format/webp"
+    },
+    {
+     "index": 14,
+     "content": "",
+     "image_url": "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2t9un4e05or0rc9nrd7lqovqas0?imageView2/2/w/1080/format/webp"
+    },
+    {
+     "index": 15,
+     "content": "",
+     "image_url": "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2tin6s2g5or0rc9nrd7lkvvqnm8?imageView2/2/w/1080/format/webp"
+    },
+    {
+     "index": 16,
+     "content": "",
+     "image_url": "https://ci.xiaohongshu.com/spectrum/1040g34o321hr2tin6s305or0rc9nrd7livn3u50?imageView2/2/w/1080/format/webp"
+    }
+   ],
+   "no_knowledge": true,
+   "knowledges": []
+  }
+ ]
+}

+ 60 - 1
web/index.html

@@ -132,6 +132,27 @@
   .mbox h2{margin:0;padding:13px 18px;background:#0f766e;color:#fff;font-size:14px;display:flex;align-items:center}
   .mbox h2 .x{margin-left:auto;cursor:pointer;font-size:18px}
   .mbox .body{padding:15px 18px;overflow:auto}.mbox pre{margin:0;font:12.5px/1.7 ui-monospace,Menlo,monospace;white-space:pre-wrap;color:#1f2937}
+  /* 提示词 Markdown 渲染 */
+  .md{font-size:13px;line-height:1.7;color:#1f2937}
+  .md h3{font-size:16px;margin:18px 0 8px;padding-bottom:5px;border-bottom:2px solid #0f766e;color:#0f766e}
+  .md h4{font-size:14px;margin:15px 0 6px;color:#0f766e}
+  .md h5,.md h6{font-size:13px;margin:12px 0 5px;color:#115e59}
+  .md p{margin:8px 0}
+  .md strong{color:#9a3412;font-weight:700}
+  .md code{background:#f1f5f9;color:#be123c;padding:1px 5px;border-radius:4px;font:12px ui-monospace,Menlo,monospace}
+  .md pre{background:#0f172a;border-radius:8px;padding:12px 14px;overflow-x:auto;margin:10px 0}
+  .md pre code{background:none;color:#e2e8f0;padding:0;font-size:12px;line-height:1.6}
+  .md blockquote{margin:10px 0;padding:8px 12px;background:#f0fdfa;border-left:3px solid #14b8a6;border-radius:0 6px 6px 0;color:#134e4a}
+  .md ul,.md ol{margin:8px 0;padding-left:22px}.md li{margin:4px 0}
+  .md hr{border:none;border-top:1px dashed #cbd5e1;margin:14px 0}
+  .md table{border-collapse:collapse;width:100%;margin:10px 0;font-size:12.5px}
+  .md th,.md td{border:1px solid #cbd5e1;padding:6px 9px;text-align:left;vertical-align:top}
+  .md th{background:#0f766e;color:#fff;font-weight:600;white-space:nowrap}
+  .md tbody tr:nth-child(even){background:#f8fafc}
+  .md a{color:#0e7490;text-decoration:underline}
+  .md .ptag{font-size:14px;font-weight:700;color:#0f766e;margin:16px 0 7px;padding:4px 10px;background:#ccfbf1;border-radius:6px;display:inline-block}
+  .md .ptag-ex{font-size:12px;font-weight:600;color:#92400e;background:#fef3c7;margin:11px 0 5px;padding:2px 9px}
+  .md .ptag-sub{font-weight:400;font-size:11.5px;opacity:.8;margin-left:7px}
   .lb{position:fixed;inset:0;background:rgba(0,0,0,.85);display:flex;align-items:center;justify-content:center;z-index:120;cursor:zoom-out}.lb img{max-width:92vw;max-height:92vh;border-radius:6px}
   .empty{color:#9ca3af;padding:50px;text-align:center}
 </style>
@@ -161,6 +182,44 @@ const STEPS=[
 ];
 const STEPMAP={}; STEPS.forEach(s=>STEPMAP[s.key]=s);
 
+// 极简 Markdown 渲染(自带、无外部依赖):标题/表格/代码/引用/列表/加粗/行内码/链接
+function mdToHtml(src){
+  var escc=function(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");};
+  var inline=function(t){
+    t=escc(t);
+    t=t.replace(/`([^`]+)`/g,'<code>$1</code>');
+    t=t.replace(/\*\*([^*]+)\*\*/g,'<strong>$1</strong>');
+    t=t.replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2" target="_blank">$1</a>');
+    return t;
+  };
+  var L=(src||"").split("\n"), out=[], i=0;
+  var isStruct=function(s){return /^```/.test(s)||/^\s*#{1,6}\s/.test(s)||/^\s*>\s?/.test(s)||/^\s*[-*]\s+/.test(s)||/^\s*\d+\.\s+/.test(s)||/^\s*([-*_])(\s*\1){2,}\s*$/.test(s)||/^\s*\|/.test(s)||/^\s*<\/?[^<>]+>/.test(s);};
+  while(i<L.length){
+    var ln=L[i];
+    if(/^```/.test(ln)){ var b=[]; i++; while(i<L.length&&!/^```/.test(L[i])){b.push(L[i]);i++;} i++; out.push("<pre><code>"+escc(b.join("\n"))+"</code></pre>"); continue; }
+    if(/^\s*\|/.test(ln)&&i+1<L.length&&/^\s*\|?[\s:|-]*-[\s:|-]*\|?\s*$/.test(L[i+1])){
+      var head=ln, rows=[]; i+=2;
+      while(i<L.length&&/^\s*\|/.test(L[i])&&L[i].trim()!==""){rows.push(L[i]);i++;}
+      var cells=function(r){r=r.trim().replace(/^\|/,"").replace(/\|$/,"");return r.split("|").map(function(c){return c.trim();});};
+      var th=cells(head).map(function(c){return "<th>"+inline(c)+"</th>";}).join("");
+      var tb=rows.map(function(r){return "<tr>"+cells(r).map(function(c){return "<td>"+inline(c)+"</td>";}).join("")+"</tr>";}).join("");
+      out.push("<table><thead><tr>"+th+"</tr></thead><tbody>"+tb+"</tbody></table>"); continue;
+    }
+    if(/^\s*([-*_])(\s*\1){2,}\s*$/.test(ln)){ out.push("<hr/>"); i++; continue; }
+    var tag=ln.match(/^\s*<(\/?)([^<>\/][^<>]*)>\s*(.*)$/);  // 行首伪标签(如 <工作要点> / <example> 描述)→ 当小节标题
+    if(tag){ if(tag[1]){i++;continue;} var nm=tag[2], rest=tag[3].trim(), ex=/^example$/i.test(nm);
+      out.push('<div class="ptag'+(ex?' ptag-ex':'')+'">'+inline(ex?'示例':nm)+(rest?'<span class="ptag-sub">'+inline(rest)+'</span>':'')+"</div>"); i++; continue; }
+    var h=ln.match(/^\s*(#{1,6})\s+(.*)$/);
+    if(h){ var lv=Math.min(h[1].length+2,6); out.push("<h"+lv+">"+inline(h[2])+"</h"+lv+">"); i++; continue; }
+    if(/^\s*>\s?/.test(ln)){ var q=[]; while(i<L.length&&/^\s*>\s?/.test(L[i])){q.push(inline(L[i].replace(/^\s*>\s?/,"")));i++;} out.push("<blockquote>"+q.join("<br/>")+"</blockquote>"); continue; }
+    if(/^\s*[-*]\s+/.test(ln)){ var ul=[]; while(i<L.length&&/^\s*[-*]\s+/.test(L[i])){ul.push("<li>"+inline(L[i].replace(/^\s*[-*]\s+/,""))+"</li>");i++;} out.push("<ul>"+ul.join("")+"</ul>"); continue; }
+    if(/^\s*\d+\.\s+/.test(ln)){ var ol=[]; while(i<L.length&&/^\s*\d+\.\s+/.test(L[i])){ol.push("<li>"+inline(L[i].replace(/^\s*\d+\.\s+/,""))+"</li>");i++;} out.push("<ol>"+ol.join("")+"</ol>"); continue; }
+    if(ln.trim()===""){ i++; continue; }
+    var p=[]; while(i<L.length&&L[i].trim()!==""&&!isStruct(L[i])){p.push(inline(L[i]));i++;} out.push("<p>"+p.join("<br/>")+"</p>");
+  }
+  return out.join("\n");
+}
+
 function Ribbon({onOpen}){
   return <div className="ribbon">
     <div className="rcap">这套系统怎么「从帖子拆解知识」——点任一步看它的提示词</div>
@@ -313,7 +372,7 @@ function App(){
       <h2>📄 {pm.label} · 这一步的提示词<span className="x" onClick={()=>setPm(null)}>×</span></h2>
       <div className="body">
         <div className="pmwhy"><b>为什么这么做:</b>{pm.why}</div>
-        <pre>{pm.text}</pre></div></div></div>}
+        {pm.text==="加载中…"?<pre>{pm.text}</pre>:<div className="md" dangerouslySetInnerHTML={{__html:mdToHtml(pm.text)}}/>}</div></div></div>}
     {json&&<div className="modal" onClick={()=>setJson(null)}><div className="mbox" onClick={e=>e.stopPropagation()}>
       <h2>⚙️ ingest payload(给机器看)<span className="x" onClick={()=>setJson(null)}>×</span></h2>
       <div className="body"><pre>{JSON.stringify(json,null,2)}</pre></div></div></div>}

+ 436 - 0
web/index_v2.html

@@ -0,0 +1,436 @@
+<!doctype html>
+<html lang="zh">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>创作知识的解构 · v2</title>
+<script crossorigin src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
+<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
+<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
+<style>
+  *{box-sizing:border-box}
+  html,body{margin:0;padding:0;font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;font-size:13px;color:#111827;background:#f5f5f7;height:100vh;overflow:hidden}
+  .app{height:100vh;display:flex;flex-direction:column}
+  header.top{padding:11px 18px 9px;background:#fff;border-bottom:1px solid #e5e7eb;flex:none}
+  header.top h1{margin:0 0 7px;font-size:16px;font-weight:600}
+  .picker{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
+  .picker .lab{font-size:11.5px;color:#9ca3af;margin-right:2px}
+  .pill{font-size:12px;padding:4px 11px;border-radius:14px;border:1px solid #e5e7eb;background:#fff;color:#6b7280;cursor:pointer}
+  .pill:hover{background:#f3f4f6}
+  .pill.on{background:#1e293b;color:#fff;border-color:#1e293b;font-weight:600}
+  .pill .n{font-size:10px;opacity:.7;margin-left:4px}
+  .scroll{flex:1;overflow:auto;background:#f5f5f7;padding-bottom:40px}
+  details.src{margin:10px 18px 0;background:#fff;border:1px solid #e2e8f0;border-radius:6px}
+  details.src summary{padding:8px 14px;cursor:pointer;font-size:12px;color:#475569;list-style:none}
+  details.src summary::before{content:'▶ ';color:#94a3b8;font-size:10px}
+  details.src[open] summary::before{content:'▼ '}
+  .srcbody{padding:4px 16px 12px;font-size:12px}
+  .srcbody a{color:#2563eb;word-break:break-all}
+  .srcprompt{color:#0e7490;font-size:11.5px;cursor:pointer}.srcprompt:hover{text-decoration:underline}
+  .srcimgs{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
+  .srcimgs img{width:80px;height:80px;object-fit:cover;border-radius:4px;border:1px solid #e2e8f0;cursor:zoom-in}
+  .barhint{margin:8px 18px 0;font-size:11.5px;color:#6b7280}
+  .ribbon{margin:11px 18px 0;background:#fff;border:1px solid #e2e8f0;border-radius:8px;padding:10px 14px}
+  .rcap{font-size:11.5px;color:#6b7280;margin-bottom:8px}
+  .rsteps{display:flex;align-items:stretch;flex-wrap:wrap}
+  .rstep{flex:1;min-width:148px;border:1px solid #e2e8f0;border-radius:8px;padding:9px 11px;cursor:pointer;background:#f8fafc}
+  .rstep:hover{background:#ecfeff;border-color:#99d5d0}
+  .rstep.auto{cursor:default;background:#f1f5f9;opacity:.9}.rstep.auto:hover{background:#f1f5f9;border-color:#e2e8f0}
+  .rtop{display:flex;align-items:center;gap:7px}
+  .rn{width:18px;height:18px;border-radius:50%;background:#0e7490;color:#fff;font-size:11px;display:flex;align-items:center;justify-content:center;flex:none}
+  .rstep.auto .rn{background:#94a3b8}
+  .rlab{font-size:13.5px;font-weight:600}
+  .rdesc{font-size:11.5px;color:#6b7280;margin:5px 0 7px;line-height:1.5}
+  .rbtn{font-size:11.5px;color:#0e7490}.rstep.auto .rbtn{color:#94a3b8}
+  .rarrow{display:flex;align-items:center;color:#cbd5e1;font-size:18px;padding:0 4px;flex:none}
+  .pmwhy{font-size:12.5px;color:#92400e;background:#fffbeb;border:1px solid #fde68a;border-radius:6px;padding:8px 11px;margin-bottom:12px;line-height:1.6}
+  .pmwhy b{color:#78350f}
+  .lbtn{padding:3px 9px;border:1px solid #cbd5e1;border-radius:5px;background:#fff;cursor:pointer;font-size:11.5px;color:#334155;font-family:inherit}
+  .lbtn:hover{background:#f1f5f9}.lbtn.on{background:#fef3c7;border-color:#d97706;color:#92400e;font-weight:600}
+  /* 颗卡 */
+  .kcard{margin:12px 18px 0;background:#fff;border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}
+  .khead{display:flex;align-items:center;gap:8px;padding:9px 14px;border-bottom:1px solid #eef2f7;flex-wrap:wrap}
+  .kno{font-size:11px;font-weight:700;color:#fff;background:#475569;border-radius:4px;padding:1px 7px}
+  .ktype{font-size:11px;font-weight:700;border-radius:4px;padding:1px 8px}
+  .ty-how{background:#cffafe;color:#155e75}.ty-what{background:#fae8ff;color:#86198f}.ty-why{background:#fef9c3;color:#854d0e}
+  .ktitle{font-size:14px;font-weight:600}
+  .krole{font-size:10.5px;padding:1px 6px;border-radius:3px;background:#f1f5f9;color:#64748b}
+  .kref{font-size:11px;color:#0e7490;cursor:pointer}.kref:hover{text-decoration:underline}
+  .srcbtn{cursor:pointer;color:#0e7490;margin-left:3px;user-select:none}.srcbtn:hover{color:#155e75}
+  .srccard{border:1px solid #e2e8f0;border-radius:6px;padding:8px 10px;margin:8px 0;background:#f8fafc}
+  .srccard .ci{font-size:11.5px;color:#6b7280;font-weight:600;margin-bottom:5px}
+  .srccard img{max-width:100%;max-height:360px;border-radius:5px;border:1px solid #e2e8f0;cursor:zoom-in}
+  .srccard video{max-width:100%;max-height:300px;border-radius:5px}
+  .srcread{font-size:12.5px;color:#1f2937;line-height:1.6;margin-top:6px;background:#fff;border-left:3px solid #0e7490;padding:6px 9px}
+  .kbiz{font-size:11px;padding:1px 7px;border-radius:3px;background:#fef3c7;color:#92400e}
+  .kacts{margin-left:auto;display:flex;gap:6px}
+  .kbody{padding:6px 14px 13px}
+  /* how 工序表 */
+  .twrap{overflow:auto;border:1px solid #e5e7eb;border-radius:6px;margin-top:8px}
+  table.proc{width:max-content;min-width:100%;border-collapse:collapse;font-size:12px}
+  table.proc th,table.proc td{border:1px solid #e5e7eb;padding:6px 8px;vertical-align:top;line-height:1.5}
+  table.proc thead th{font-weight:600;text-align:center;font-size:12px;position:sticky;top:0;z-index:3}
+  table.proc thead tr:nth-child(2) th{top:30px}
+  td.idx{width:30px;text-align:center;color:#6b7280;background:#f8fafc}
+  th.c-intent,td.intent{width:210px;min-width:210px;max-width:210px;white-space:pre-wrap}
+  th.c-cstage,td.cstage{width:54px;text-align:center;background:#ecfeff}
+  th.c-act,td.act{min-width:110px;max-width:140px;word-break:break-word;background:#ecfeff}
+  th.c-dir,td.dir{min-width:230px;max-width:330px;white-space:pre-wrap;word-break:break-word;background:#ecfeff}
+  th.c-out,td.out{min-width:160px;max-width:240px;white-space:pre-wrap;background:#ecfeff}
+  th.c-scope,td.scope{width:92px;min-width:92px;max-width:92px;word-break:break-word}
+  th.g-frame{background:#0e7490;color:#fff;cursor:pointer}th.g-frame:hover{background:#155e75}
+  th.g-scope{background:#7c3aed;color:#fff;cursor:pointer}th.g-scope:hover{background:#6d28d9}
+  th.c-idx{background:#475569;color:#fff;vertical-align:middle}
+  thead tr:nth-child(2) th.c-intent,thead tr:nth-child(2) th.c-cstage,thead tr:nth-child(2) th.c-act,thead tr:nth-child(2) th.c-dir,thead tr:nth-child(2) th.c-out{background:#0891b2;color:#fff}
+  thead tr:nth-child(2) th.s-substance{background:#dc2626;color:#fff}thead tr:nth-child(2) th.s-form{background:#2563eb;color:#fff}
+  thead tr:nth-child(2) th.s-feeling{background:#db2777;color:#fff}thead tr:nth-child(2) th.s-effect{background:#16a34a;color:#fff}thead tr:nth-child(2) th.s-intent{background:#d97706;color:#fff}
+  td.scope.s-substance{background:#fef2f2}td.scope.s-form{background:#eff6ff}td.scope.s-feeling{background:#fdf2f8}td.scope.s-effect{background:#f0fdf4}td.scope.s-intent{background:#fffbeb}
+  tr.step>td{border-top:1.5px solid #cbd5e1}
+  .cstage-chip{display:inline-block;font-size:11px;padding:1px 6px;border-radius:10px;background:#ede9fe;color:#5b21b6}
+  .act-chip{display:inline-block;font-size:11.5px;padding:1px 7px;border-radius:4px;background:#fff7ed;color:#9a3412;border:1px solid #fed7aa}
+  .dir-txt{font-size:11.5px;color:#33312c;line-height:1.65}.out-txt{font-size:11.5px;color:#166534}
+  .in-txt{font-size:11.5px;color:#1e40af;line-height:1.6}
+  .cue{font-size:11px;color:#7c2d12;background:#fff7ed;border-left:2px solid #fb923c;padding:3px 7px;margin-top:4px;border-radius:0 4px 4px 0}
+  .cue b{color:#9a3412}
+  .kindb{font-size:10.5px;font-weight:700;padding:1px 8px;border-radius:9px;margin-right:8px;vertical-align:middle;cursor:help}
+  .kind-选项{background:#dbeafe;color:#1e40af}.kind-构成{background:#dcfce7;color:#166534}
+  .ksec-f.key{background:#fde68a;color:#92400e;font-weight:700}
+  .glossbtn{background:#ede9fe!important;color:#6d28d9!important;border-color:#ddd6fe!important}
+  .v2tag{font-size:11px;font-weight:500;color:#fff;background:#7c3aed;padding:2px 9px;border-radius:10px;margin-left:8px;vertical-align:middle}
+  .from{font-size:11px;color:#9ca3af}
+  /* what/why 自由小节 */
+  .def{font-size:13px;background:#fdf4ff;border-left:3px solid #a21caf;border-radius:0 6px 6px 0;padding:8px 12px;margin:6px 0 10px}
+  .ksec{margin:9px 0;padding-left:11px;border-left:3px solid #e2e8f0}
+  .ksec-h{display:flex;align-items:center;gap:7px;margin-bottom:4px}
+  .ksec-t{font-size:13px;font-weight:600;color:#334155}
+  .ksec-f{font-size:10.5px;padding:1px 7px;border-radius:9px;background:#f1f5f9;color:#64748b}
+  .ksec-c{font-size:12.5px;line-height:1.65;color:#1f2937;margin-bottom:4px}
+  table.elem{border-collapse:collapse;width:100%;font-size:12.5px}
+  table.elem td{border:1px solid #f0e6f5;padding:6px 10px;text-align:left;vertical-align:top}
+  table.elem td.el{font-weight:600;color:#86198f;background:#fdf4ff;width:130px}
+  /* why 论点卡 */
+  .why-row{display:flex;gap:10px;margin:7px 0}
+  .why-lab{font-size:11px;font-weight:700;border-radius:4px;padding:2px 8px;flex:none;height:20px}
+  .wl-claim{background:#fef9c3;color:#854d0e}.wl-basis{background:#e0e7ff;color:#3730a3}.wl-impact{background:#dcfce7;color:#166534}
+  .why-txt{font-size:12.5px;line-height:1.65;color:#1f2937}
+  /* 颗级作用域 */
+  .kscopes{margin-top:9px;display:flex;gap:5px;flex-wrap:wrap;align-items:center}
+  .kscopes .lab{font-size:11px;color:#9ca3af}
+  .sv{display:inline-block;cursor:pointer;font-size:11.5px;padding:1px 5px;border-radius:3px;border:1px solid rgba(0,0,0,.08);background:rgba(255,255,255,.7);margin:1px 0}
+  .sv:hover{box-shadow:0 0 0 1px #1e293b}
+  .sv .k{font-size:11.5px;opacity:.85;font-weight:700;margin-right:4px}
+  table.proc th.c-scope{font-size:13.5px}
+  .sv .mk{font-size:9px;padding:0 3px;border-radius:2px;margin-left:3px;vertical-align:top}
+  .mk-new{background:#fde68a;color:#92400e}.mk-reuse{background:#bbf7d0;color:#166534}
+  .sv.s-substance{background:#fef2f2}.sv.s-form{background:#eff6ff}.sv.s-feeling{background:#fdf2f8}.sv.s-effect{background:#f0fdf4}.sv.s-intent{background:#fffbeb}
+  body.hl .sv .mk-new{outline:2px solid #d97706}
+  /* drawer + modal */
+  .ov{position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:100}
+  .drawer{position:fixed;right:0;top:0;bottom:0;width:440px;max-width:92vw;background:#fff;box-shadow:-4px 0 16px rgba(0,0,0,.15);z-index:101;overflow-y:auto}
+  .drawer h2{margin:0;padding:13px 16px;background:#1e293b;color:#fff;font-size:14px;display:flex;align-items:center}
+  .drawer h2 .x{margin-left:auto;cursor:pointer;font-size:18px}
+  .dc{padding:14px 16px;font-size:12.5px;line-height:1.6}.dc .row{margin:6px 0}.dc b{color:#374151}
+  .verdict{display:inline-block;padding:2px 9px;border-radius:5px;font-weight:600;font-size:12px}
+  .v-new{background:#fef3c7;color:#92400e}.v-reuse{background:#dcfce7;color:#166534}
+  .nn{margin:5px 0;padding:7px 10px;border:1px solid #e5e7eb;border-radius:5px;background:#f8fafc}
+  .nn .nm{font-weight:600}.nn .sc{float:right;color:#6b7280;font-family:ui-monospace,monospace}
+  .nn .pth{color:#9ca3af;font-size:11px;font-family:ui-monospace,monospace;word-break:break-all}
+  .modal{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:110;display:flex;align-items:center;justify-content:center;padding:20px}
+  .mbox{background:#fff;width:760px;max-width:94vw;max-height:86vh;border-radius:10px;overflow:hidden;display:flex;flex-direction:column}
+  .mbox h2{margin:0;padding:13px 18px;background:#0f766e;color:#fff;font-size:14px;display:flex;align-items:center}
+  .mbox h2 .x{margin-left:auto;cursor:pointer;font-size:18px}
+  .mbox .body{padding:15px 18px;overflow:auto}.mbox pre{margin:0;font:12.5px/1.7 ui-monospace,Menlo,monospace;white-space:pre-wrap;color:#1f2937}
+  /* 提示词 Markdown 渲染 */
+  .md{font-size:13px;line-height:1.7;color:#1f2937}
+  .md h3{font-size:16px;margin:18px 0 8px;padding-bottom:5px;border-bottom:2px solid #0f766e;color:#0f766e}
+  .md h4{font-size:14px;margin:15px 0 6px;color:#0f766e}
+  .md h5,.md h6{font-size:13px;margin:12px 0 5px;color:#115e59}
+  .md p{margin:8px 0}
+  .md strong{color:#9a3412;font-weight:700}
+  .md code{background:#f1f5f9;color:#be123c;padding:1px 5px;border-radius:4px;font:12px ui-monospace,Menlo,monospace}
+  .md pre{background:#0f172a;border-radius:8px;padding:12px 14px;overflow-x:auto;margin:10px 0}
+  .md pre code{background:none;color:#e2e8f0;padding:0;font-size:12px;line-height:1.6}
+  .md blockquote{margin:10px 0;padding:8px 12px;background:#f0fdfa;border-left:3px solid #14b8a6;border-radius:0 6px 6px 0;color:#134e4a}
+  .md ul,.md ol{margin:8px 0;padding-left:22px}.md li{margin:4px 0}
+  .md hr{border:none;border-top:1px dashed #cbd5e1;margin:14px 0}
+  .md table{border-collapse:collapse;width:100%;margin:10px 0;font-size:12.5px}
+  .md th,.md td{border:1px solid #cbd5e1;padding:6px 9px;text-align:left;vertical-align:top}
+  .md th{background:#0f766e;color:#fff;font-weight:600;white-space:nowrap}
+  .md tbody tr:nth-child(even){background:#f8fafc}
+  .md a{color:#0e7490;text-decoration:underline}
+  .md .ptag{font-size:14px;font-weight:700;color:#0f766e;margin:16px 0 7px;padding:4px 10px;background:#ccfbf1;border-radius:6px;display:inline-block}
+  .md .ptag-ex{font-size:12px;font-weight:600;color:#92400e;background:#fef3c7;margin:11px 0 5px;padding:2px 9px}
+  .md .ptag-sub{font-weight:400;font-size:11.5px;opacity:.8;margin-left:7px}
+  .lb{position:fixed;inset:0;background:rgba(0,0,0,.85);display:flex;align-items:center;justify-content:center;z-index:120;cursor:zoom-out}.lb img{max-width:92vw;max-height:92vh;border-radius:6px}
+  .empty{color:#9ca3af;padding:50px;text-align:center}
+</style>
+</head>
+<body>
+<div id="root"></div>
+<script type="text/x-jsx" id="app-src">
+const {useState,useEffect}=React;
+const j=u=>fetch(u,{cache:"no-store"}).then(r=>r.json());
+const SCOPES=[["substance","实质"],["form","形式"],["feeling","感受"],["effect","作用"],["intent","意图"]];
+const SC_CN={substance:"实质",form:"形式",feeling:"感受",effect:"作用",intent:"意图"};
+const TYPECN={how:"How 工序",what:"What 构成",why:"Why 原理"};
+// 把提示词里的"黑话"形式标签换成大白话(找不到就原样显示)
+const FORM_PLAIN={"取舍":"怎么用","依据":"为什么对","机制":"怎么起作用","平台逻辑":"平台规则","读者心理":"读者心理","例证":"例子","反例":"反例","判据":"判断标准","对照":"对比","清单":"清单","分类":"分类","定义":"定义","维度":"方面"};
+const plainForm=f=>FORM_PLAIN[f]||f;
+const GLOSSARY=`## 一篇帖子能拆出三种知识(平级的)
+这三种各帮你做一个不同的决定,没有谁更重要。
+
+| 标签 | 大白话 | 它帮你决定 |
+|---|---|---|
+| **怎么做** (How) | 一步步把东西做出来的流程 | 按什么**顺序**做 |
+| **是什么** (What) | 某东西由什么组成 / 有哪些种类 | 用**哪些料** |
+| **为什么** (Why) | 背后的道理、标准、平台规则 | 该**留什么、砍什么** |
+
+## 「是什么」分两种
+- **组成·都要用**(构成型):像配方,列出的几样要**全用上**(例:人物 = 生理+社会+心理)。
+- **可选·挑着用**(选项型):像菜单,列出几种**选一种**用(例:7 种叙事结构挑一种)。
+  - 每个选项后面那句 **👉 什么时候用** 就是「**选择线索**」——告诉你哪种情况该挑它。没有它,就只能背、不会选。
+
+## 「为什么」里每条道理的小标签
+说明这条是哪种支撑:
+- **怎么用**(原"取舍"):这条道理落到创作上——该多写什么、砍什么。**最重要,每条「为什么」都有**。
+- **为什么对**(原"依据"):这条说法凭什么成立。
+- **怎么起作用**(原"机制"):它是怎么运转、起效果的。
+- **平台规则 / 读者心理**:从平台算法、或读者角度的解释。
+- 例子 / 反例 / …:举例支撑(这些标签是开放的,可能还有别的)。`;
+
+const STEPS=[
+  {key:"read",label:"读懂帖子",desc:"把图、视频读成文字",
+   why:"创作知识常在图里、不在正文;这一步只忠实转写、不判断,避免一步干两件事。",
+   src:["/prompt-read/extract.txt"]},
+  {key:"frame",label:"拆出知识",desc:"从文字里拆出一条条知识,理清每条是 怎么做 / 是什么 / 为什么",
+   why:"先判类型再拆——三类成形不同,默认 how 会把纯 what 硬掰成假 how;how 先吸进步骤里的 what/why,吸不进的才独立成一条。",
+   src:["/prompt-skill/phase1-frame.md"]},
+  {key:"scope",label:"给知识归类",desc:"标好 讲什么 / 起什么作用 / 哪个创作环节,再和已有分类库对上号",
+   why:"这 5 类标签最容易串味,又要中途调向量回扣工具;单独一步写厚,避免塞进一个提示词复杂到死循环。",
+   src:["/prompt-skill/phase2-scope.md"]},
+  {key:"store",label:"存进知识库",desc:"整理成统一格式存起来,供以后调用",
+   why:"纯拼接 + 校验的确定性活,程序自动做——没有提示词,让 AI 来干只会帮倒忙。",
+   src:null}
+];
+const STEPMAP={}; STEPS.forEach(s=>STEPMAP[s.key]=s);
+
+// 极简 Markdown 渲染(自带、无外部依赖):标题/表格/代码/引用/列表/加粗/行内码/链接
+function mdToHtml(src){
+  var escc=function(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");};
+  var inline=function(t){
+    t=escc(t);
+    t=t.replace(/`([^`]+)`/g,'<code>$1</code>');
+    t=t.replace(/\*\*([^*]+)\*\*/g,'<strong>$1</strong>');
+    t=t.replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2" target="_blank">$1</a>');
+    return t;
+  };
+  var L=(src||"").split("\n"), out=[], i=0;
+  var isStruct=function(s){return /^```/.test(s)||/^\s*#{1,6}\s/.test(s)||/^\s*>\s?/.test(s)||/^\s*[-*]\s+/.test(s)||/^\s*\d+\.\s+/.test(s)||/^\s*([-*_])(\s*\1){2,}\s*$/.test(s)||/^\s*\|/.test(s)||/^\s*<\/?[^<>]+>/.test(s);};
+  while(i<L.length){
+    var ln=L[i];
+    if(/^```/.test(ln)){ var b=[]; i++; while(i<L.length&&!/^```/.test(L[i])){b.push(L[i]);i++;} i++; out.push("<pre><code>"+escc(b.join("\n"))+"</code></pre>"); continue; }
+    if(/^\s*\|/.test(ln)&&i+1<L.length&&/^\s*\|?[\s:|-]*-[\s:|-]*\|?\s*$/.test(L[i+1])){
+      var head=ln, rows=[]; i+=2;
+      while(i<L.length&&/^\s*\|/.test(L[i])&&L[i].trim()!==""){rows.push(L[i]);i++;}
+      var cells=function(r){r=r.trim().replace(/^\|/,"").replace(/\|$/,"");return r.split("|").map(function(c){return c.trim();});};
+      var th=cells(head).map(function(c){return "<th>"+inline(c)+"</th>";}).join("");
+      var tb=rows.map(function(r){return "<tr>"+cells(r).map(function(c){return "<td>"+inline(c)+"</td>";}).join("")+"</tr>";}).join("");
+      out.push("<table><thead><tr>"+th+"</tr></thead><tbody>"+tb+"</tbody></table>"); continue;
+    }
+    if(/^\s*([-*_])(\s*\1){2,}\s*$/.test(ln)){ out.push("<hr/>"); i++; continue; }
+    var tag=ln.match(/^\s*<(\/?)([^<>\/][^<>]*)>\s*(.*)$/);  // 行首伪标签(如 <工作要点> / <example> 描述)→ 当小节标题
+    if(tag){ if(tag[1]){i++;continue;} var nm=tag[2], rest=tag[3].trim(), ex=/^example$/i.test(nm);
+      out.push('<div class="ptag'+(ex?' ptag-ex':'')+'">'+inline(ex?'示例':nm)+(rest?'<span class="ptag-sub">'+inline(rest)+'</span>':'')+"</div>"); i++; continue; }
+    var h=ln.match(/^\s*(#{1,6})\s+(.*)$/);
+    if(h){ var lv=Math.min(h[1].length+2,6); out.push("<h"+lv+">"+inline(h[2])+"</h"+lv+">"); i++; continue; }
+    if(/^\s*>\s?/.test(ln)){ var q=[]; while(i<L.length&&/^\s*>\s?/.test(L[i])){q.push(inline(L[i].replace(/^\s*>\s?/,"")));i++;} out.push("<blockquote>"+q.join("<br/>")+"</blockquote>"); continue; }
+    if(/^\s*[-*]\s+/.test(ln)){ var ul=[]; while(i<L.length&&/^\s*[-*]\s+/.test(L[i])){ul.push("<li>"+inline(L[i].replace(/^\s*[-*]\s+/,""))+"</li>");i++;} out.push("<ul>"+ul.join("")+"</ul>"); continue; }
+    if(/^\s*\d+\.\s+/.test(ln)){ var ol=[]; while(i<L.length&&/^\s*\d+\.\s+/.test(L[i])){ol.push("<li>"+inline(L[i].replace(/^\s*\d+\.\s+/,""))+"</li>");i++;} out.push("<ol>"+ol.join("")+"</ol>"); continue; }
+    if(ln.trim()===""){ i++; continue; }
+    var p=[]; while(i<L.length&&L[i].trim()!==""&&!isStruct(L[i])){p.push(inline(L[i]));i++;} out.push("<p>"+p.join("<br/>")+"</p>");
+  }
+  return out.join("\n");
+}
+
+function Ribbon({onOpen}){
+  return <div className="ribbon">
+    <div className="rcap">这套系统怎么「从帖子拆解知识」——点任一步看它的提示词</div>
+    <div className="rsteps">{STEPS.map((s,i)=><React.Fragment key={s.key}>
+      {i>0&&<span className="rarrow">→</span>}
+      <div className={"rstep"+(s.src?"":" auto")} onClick={()=>onOpen(s.key)}>
+        <div className="rtop"><span className="rn">{i+1}</span><span className="rlab">{s.label}</span></div>
+        <div className="rdesc">{s.desc}</div>
+        <div className="rbtn">{s.src?"📄 看提示词":"⚙️ 程序自动"}</div>
+      </div></React.Fragment>)}</div>
+  </div>;
+}
+
+function ScopeChip({x,onScope,showType}){
+  return <span className={"sv s-"+x.scope_type} onClick={()=>onScope(x)}>{showType&&<span className="k">{SC_CN[x.scope_type]||x.scope_type}</span>}{x.value}<span className={"mk "+(x.link==="复用"?"mk-reuse":"mk-new")}>{x.link==="复用"?"复":"新"}</span></span>;
+}
+function KScopes({list,onScope}){
+  if(!list||!list.length) return null;
+  return <div className="kscopes"><span className="lab">作用域(5 棵树):</span>
+    {list.map((x,i)=><ScopeChip key={i} x={{...x}} onScope={onScope} showType={true}/>)}</div>;
+}
+
+function HowTable({k,onScope,onPrompt,onSource}){
+  const steps=k.steps||[];
+  const scOf=(s,t)=>(s.作用域||[]).filter(x=>x.scope_type===t);
+  return <div className="twrap"><table className="proc">
+    <thead>
+      <tr><th className="c-idx" rowSpan="2">#</th>
+        <th className="g-frame" colSpan="5" onClick={()=>onPrompt("frame")}>② 拆框架 + 轻标签 ▸ 提示词</th>
+        <th className="g-scope" colSpan="5" onClick={()=>onPrompt("scope")}>③ 作用域 ▸ 提示词</th></tr>
+      <tr><th className="c-intent">输入</th><th className="c-cstage">创作<br/>阶段</th><th className="c-act">动作</th><th className="c-dir">方法</th><th className="c-out">产出</th>
+        {SCOPES.map(([kk,cn])=><th key={kk} className={"c-scope s-"+kk}>{cn}</th>)}</tr>
+    </thead>
+    <tbody>{steps.map((s,i)=><tr className="step" key={i}>
+      <td className="idx">{i+1}</td>
+      <td className="intent"><span className="in-txt">{s.input}</span>{s.出处&&s.出处.length>0&&<span className="srcbtn" title={"看原文出处 "+s.出处.join(" ")} onClick={()=>onSource(s.出处)}>🔍</span>}</td>
+      <td className="cstage">{s.创作阶段&&<span className="cstage-chip">{s.创作阶段}</span>}</td>
+      <td className="act">{s.动作&&<span className="act-chip">{s.动作}</span>}</td>
+      <td className="dir"><span className="dir-txt">{s.directive}</span></td>
+      <td className="out"><span className="out-txt">{s.output}</span></td>
+      {SCOPES.map(([kk])=><td key={kk} className={"scope s-"+kk}>{scOf(s,kk).map((x,j)=><ScopeChip key={j} x={x} onScope={onScope}/>)}</td>)}
+    </tr>)}</tbody>
+  </table></div>;
+}
+function KSection({b}){
+  const items=b.条目||[];
+  const isKey=b.形式==="取舍";
+  return <div className="ksec">
+    <div className="ksec-h">{b.小标题&&<span className="ksec-t">{b.小标题}</span>}{b.形式&&<span className={"ksec-f"+(isKey?" key":"")} title={"原标签:"+b.形式}>{isKey?"💡 ":""}{plainForm(b.形式)}</span>}</div>
+    {b.内容&&<div className="ksec-c">{b.内容}</div>}
+    {items.length>0&&<table className="elem"><tbody>{items.map((c,i)=><tr key={i}>
+      <td className="el">{c.词||c.要素}</td><td>{c.说明}{c.选择线索&&<div className="cue"><b>👉 什么时候用:</b>{c.选择线索}</div>}</td></tr>)}</tbody></table>}
+  </div>;
+}
+function WhatCard({k,onScope,onGloss}){
+  return <div>
+    {k.界定&&<div className="def">{k.kind&&<span className={"kindb kind-"+k.kind} title="点开「名词说明」看区别" onClick={()=>onGloss&&onGloss()}>{k.kind==="选项"?"🎯 可选·挑着用":"🧩 组成·都要用"}</span>}界定:{k.界定}</div>}
+    {(k.主体||[]).map((b,i)=><KSection key={i} b={b}/>)}
+    <KScopes list={k.作用域} onScope={onScope}/>
+  </div>;
+}
+function WhyCard({k,onScope}){
+  return <div>
+    {k.主张&&<div className="why-row"><span className="why-lab wl-claim">主张</span><span className="why-txt">{k.主张}</span></div>}
+    {(k.支撑||[]).map((b,i)=><KSection key={i} b={b}/>)}
+    <KScopes list={k.作用域} onScope={onScope}/>
+  </div>;
+}
+
+function KnowledgeCard({k,idx,onScope,onPrompt,onJson,onSource,payload,how_titles,onGloss}){
+  const par=k.parent;
+  return <div className="kcard" id={"k-"+k.id}>
+    <div className="khead">
+      <span className="kno">第{idx+1}颗</span>
+      <span className={"ktype ty-"+k.type}>{TYPECN[k.type]}</span>
+      <span className="ktitle">{k.title}</span>
+      {k.出处&&k.出处.length>0&&<span className="kref" title={"看原文出处 "+k.出处.join(" ")} onClick={()=>onSource(k.出处)}>🔍 出处 {k.出处.join(" ")}</span>}
+      {par&&<span className="kref" onClick={()=>{var e=document.getElementById("k-"+par.how_id);if(e)e.scrollIntoView({behavior:"smooth",block:"center"});}}>↑ 出自「{how_titles[par.how_id]||par.how_id}」第{par.step}步</span>}
+      {(k.业务阶段||[]).map((b,i)=><span key={i} className="kbiz">业务阶段:{b}</span>)}
+      <span className="kacts">{payload&&<button className="lbtn" onClick={()=>onJson(payload)}>⚙️ 入库 payload</button>}</span>
+    </div>
+    <div className="kbody">
+      {k.type==="how"&&<HowTable k={k} onScope={onScope} onPrompt={onPrompt} onSource={onSource}/>}
+      {k.type==="what"&&<WhatCard k={k} onScope={onScope} onGloss={onGloss}/>}
+      {k.type==="why"&&<WhyCard k={k} onScope={onScope}/>}
+    </div>
+  </div>;
+}
+
+function App(){
+  const [items,setItems]=useState([]);
+  const [sel,setSel]=useState(0);
+  const [scope,setScope]=useState(null);
+  const [pm,setPm]=useState(null);
+  const [json,setJson]=useState(null);
+  const [zoom,setZoom]=useState(null);
+  const [src,setSrc]=useState(null);
+  const [hl,setHl]=useState(false);
+  const [gloss,setGloss]=useState(false);
+  useEffect(()=>{Promise.all([j("/frameworks_v2.json"),j("/payloads_v2.json").catch(()=>[])]).then(([f,pl])=>{
+    setItems((f.posts||[]).map(p=>({...p,payloads:(pl||[]).filter(x=>(x.source||{}).id===(p.source_id||("xhs_"+p.post_id)))})));});},[]);
+  useEffect(()=>{document.body.classList.toggle("hl",hl);},[hl]);
+  function openPrompt(key){
+    const st=STEPMAP[key]; if(!st) return;
+    if(!st.src){ setPm({label:st.label,why:st.why,text:"(这一步是程序自动完成的,没有提示词。)"}); return; }
+    setPm({label:st.label,why:st.why,text:"加载中…"});
+    Promise.all(st.src.map(u=>fetch(u,{cache:"no-store"}).then(r=>r.ok?r.text():"(未找到 "+u+")").catch(()=>"(加载失败 "+u+")")))
+      .then(txts=>setPm({label:st.label,why:st.why,text:txts.join("\n\n──────\n\n")}));
+  }
+  if(!items.length) return <div className="empty">加载中…</div>;
+  const it=items[sel];
+  const ks=it.knowledges||[];
+  const how_titles={}; ks.forEach(k=>{if(k.type==="how")how_titles[k.id]=k.title;});
+  const payloadOf=k=>(it.payloads||[]).find(p=>p.title===k.title);
+  const media=it.media||{}; const imgs=media.images||[]; const videoUrl=media.video_url;
+  const cardsById={}; (it.cards||[]).forEach(c=>cardsById[c.index]=c);
+  const openSource=list=>{var cs=(list||[]).map(s=>{var m=String(s).match(/\d+/);return m?cardsById[parseInt(m[0])]:null;}).filter(Boolean);if(cs.length)setSrc({cards:cs});};
+  const fmtT=s=>{s=Math.floor(s||0);return Math.floor(s/60)+":"+String(s%60).padStart(2,"0");};
+  return <div className="app">
+    <header className="top">
+      <h1>创作知识的解构 <span className="v2tag">v2 · 决策落点版(How 输入→方法→产出 / What 选项+选择线索 / Why 必带取舍)</span></h1>
+      <div className="picker"><span className="lab">帖子:</span>
+        {items.map((x,i)=><div key={i} className={"pill"+(sel===i?" on":"")} onClick={()=>{setSel(i);setScope(null);}}>{x.title.slice(0,16)}<span className="n">{(x.knowledges||[]).length}颗</span></div>)}
+      </div>
+    </header>
+    <div className="scroll">
+      <Ribbon onOpen={openPrompt}/>
+      <details className="src"><summary>原帖:{it.title}(这一帖的原料)· {it.platform}{videoUrl?" · 视频":""}</summary>
+        <div className="srcbody"><a href={it.url} target="_blank" rel="noreferrer">{it.url}</a>
+          {videoUrl
+            ? <div style={{marginTop:8}}><video src={videoUrl} controls style={{maxWidth:"380px",maxHeight:"320px",borderRadius:"6px",border:"1px solid #e2e8f0"}}/></div>
+            : <div className="srcimgs">{imgs.map((u,i)=><img key={i} src={u} onClick={()=>setZoom(u)} onError={e=>e.target.style.display='none'}/>)}</div>}
+        </div>
+      </details>
+      <div className="barhint" style={{display:"flex",gap:8,alignItems:"center"}}>
+        <span>这一帖拆出 <b>{ks.length}</b> 颗知识(how 工序表 / what 构成卡 / why 论点卡);组件颗标「出自某 how 第 N 步」可点跳。</span>
+        <button className="lbtn glossbtn" onClick={()=>setGloss(true)} style={{marginLeft:"auto"}}>❓ 名词说明</button>
+        <button className={"lbtn"+(hl?" on":"")} onClick={()=>setHl(!hl)}>高亮「新值」</button>
+      </div>
+      {ks.length===0 && <div className="kcard"><div className="kbody" style={{padding:"20px 16px",color:"#9ca3af",fontSize:"13px"}}>🚫 这帖<b style={{color:"#6b7280"}}>没有可提取的创作知识</b>(纯作品 / 展示 / 无关)——① 读懂时 <code>is_empty=true</code>,后面拆颗/归类/入库已自动跳过。</div></div>}
+      {ks.map((k,i)=><KnowledgeCard key={i} k={k} idx={i} onScope={setScope} onPrompt={openPrompt} onJson={setJson} onSource={openSource} payload={payloadOf(k)} how_titles={how_titles} onGloss={()=>setGloss(true)}/>)}
+    </div>
+    {scope&&<div><div className="ov" onClick={()=>setScope(null)}></div>
+      <div className="drawer"><h2>作用域回扣详情<span className="x" onClick={()=>setScope(null)}>×</span></h2>
+        <div className="dc">
+          <div className="row"><b>提取候选值</b>:{scope.candidate||scope.value}</div>
+          <div className="row"><b>判定</b>:<span className={"verdict "+(scope.link==="复用"?"v-reuse":"v-new")}>{scope.link==="复用"?"复用现有节点":"新建(树里没有)"}</span> = 最近邻 {scope.score}</div>
+          <div className="row"><b>最终入库值</b>:{scope.value}</div>
+          <h3 style={{margin:"12px 0 6px",fontSize:12.5,color:"#475569"}}>分类树最近邻 top-{(scope.top||[]).length}(火山余弦)</h3>
+          {(scope.top||[]).map((h,i)=><div className="nn" key={i}><span className="sc">{h.score}</span><span className="nm">{h.name}</span><div className="pth">{h.path}</div></div>)}
+          {(!scope.top||!scope.top.length)&&<div style={{color:"#9ca3af"}}>无最近邻</div>}
+        </div></div></div>}
+    {pm&&<div className="modal" onClick={()=>setPm(null)}><div className="mbox" onClick={e=>e.stopPropagation()}>
+      <h2>📄 {pm.label} · 这一步的提示词<span className="x" onClick={()=>setPm(null)}>×</span></h2>
+      <div className="body">
+        <div className="pmwhy"><b>为什么这么做:</b>{pm.why}</div>
+        {pm.text==="加载中…"?<pre>{pm.text}</pre>:<div className="md" dangerouslySetInnerHTML={{__html:mdToHtml(pm.text)}}/>}</div></div></div>}
+    {json&&<div className="modal" onClick={()=>setJson(null)}><div className="mbox" onClick={e=>e.stopPropagation()}>
+      <h2>⚙️ ingest payload(给机器看)<span className="x" onClick={()=>setJson(null)}>×</span></h2>
+      <div className="body"><pre>{JSON.stringify(json,null,2)}</pre></div></div></div>}
+    {src&&<div className="modal" onClick={()=>setSrc(null)}><div className="mbox" onClick={e=>e.stopPropagation()}>
+      <h2>🔍 原文出处(① 读到的卡片)<span className="x" onClick={()=>setSrc(null)}>×</span></h2>
+      <div className="body">{src.cards.map((c,i)=><div className="srccard" key={i}>
+        <div className="ci">卡片{c.index}{c.start!=null?(" · "+fmtT(c.start)+"–"+fmtT(c.end)):""}</div>
+        {c.image_url&&<img src={c.image_url} onClick={()=>setZoom(c.image_url)} onError={e=>e.target.style.display='none'}/>}
+        {c.video_url&&<video src={c.video_url+(c.start!=null?("#t="+Math.floor(c.start)+","+Math.floor(c.end)):"")} controls/>}
+        {c.content?<div className="srcread">① 在这张卡读到的:{c.content}</div>:<div style={{color:"#9ca3af",fontSize:"12px",marginTop:5}}>(这张卡没读到要点)</div>}
+      </div>)}</div></div></div>}
+    {gloss&&<div className="modal" onClick={()=>setGloss(false)}><div className="mbox" onClick={e=>e.stopPropagation()}>
+      <h2>❓ 名词说明 · 用大白话讲清楚<span className="x" onClick={()=>setGloss(false)}>×</span></h2>
+      <div className="body"><div className="md" dangerouslySetInnerHTML={{__html:mdToHtml(GLOSSARY)}}/></div></div></div>}
+    {zoom&&<div className="lb" onClick={()=>setZoom(null)}><img src={zoom}/></div>}
+  </div>;
+}
+ReactDOM.createRoot(document.getElementById("root")).render(<App/>);
+</script>
+<script>
+(function(){var src=document.getElementById("app-src").textContent;
+ var out=Babel.transform(src,{presets:[["react",{runtime:"classic"}]]}).code;(0,eval)(out);})();
+</script>
+</body>
+</html>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 269 - 277
web/payloads.json


+ 954 - 0
web/payloads_v2.json

@@ -0,0 +1,954 @@
+[
+  {
+    "source": {
+      "id": "xhs_699308fa0000000016009697",
+      "source_type": "post",
+      "title": "真正能爆的选题,往往是你写完后感觉羞耻的",
+      "author": "方圆的增长飞轮",
+      "source_metadata": {
+        "platform": "xiaohongshu",
+        "url": "https://www.xiaohongshu.com/explore/699308fa0000000016009697"
+      }
+    },
+    "title": "爆款选题的羞耻感/冒犯感原理",
+    "content": "主张:真正能爆的内容通常伴随‘羞耻感’或‘冒犯感’,是对‘正确共识’的触碰与撕裂。\n【羞耻感作为质量信号】(机制)\n  羞耻感是指写完后担心‘别人觉得我在装’或‘太直白’。这种感觉证明触碰到了真实但平时由社交礼仪包裹、大家不敢公开说的内容。相比追求‘满意’或‘专业’,‘犹豫’才是好选题的防伪标签。\n【对正确共识的冒犯】(机制)\n  爆款不是靠脏话,而是通过冒犯某种‘正确共识’。观众需要的不是正确答案(如:自律即自由),而是有人帮他们说出‘这个正确答案在你身上根本不好使’,从而戳中公共痛点并产生穿透力。\n【对创作的取舍】(取舍)\n  应当摒弃‘太正确、太专业、安全但无感’的选题方向(如:提升执行力的五个方法);转向寻找并表达那些让自己感到‘写完后不敢发’、‘担心被评价太极端’的内容,以此作为情绪触发和转发的动力。",
+    "dim_creations": [
+      "创作"
+    ],
+    "dim_attributes": [
+      "why原理"
+    ],
+    "scopes": [
+      {
+        "scope_type": "substance",
+        "value": "爆款选题"
+      },
+      {
+        "scope_type": "feeling",
+        "value": "羞耻感"
+      },
+      {
+        "scope_type": "feeling",
+        "value": "冒犯感"
+      },
+      {
+        "scope_type": "effect",
+        "value": "共识撕裂"
+      },
+      {
+        "scope_type": "intent",
+        "value": "流量爆发"
+      }
+    ],
+    "custom_ext": [
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "选题"
+      },
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "灵感"
+      }
+    ]
+  },
+  {
+    "source": {
+      "id": "xhs_699308fa0000000016009697",
+      "source_type": "post",
+      "title": "真正能爆的选题,往往是你写完后感觉羞耻的",
+      "author": "方圆的增长飞轮",
+      "source_metadata": {
+        "platform": "xiaohongshu",
+        "url": "https://www.xiaohongshu.com/explore/699308fa0000000016009697"
+      }
+    },
+    "title": "行业圣经句(正确共识)",
+    "content": "界定:每个赛道中那些‘人人点头但没人真信’、反复被提及的正确话。(选项型)\n【常见圣经句示例】(清单)\n  - 内容为王:行业内公认的真理,但实际应用中往往存在分发缺失的陷阱。(选用:作为寻找‘理念裂缝’的基础,用于后续撕裂信念。)\n  - 自律即自由:强调个人意志力的共识。(选用:当目标人群对该观点由于无法达成而产生焦虑或厌倦时选用。)",
+    "dim_creations": [
+      "创作"
+    ],
+    "dim_attributes": [
+      "what构成"
+    ],
+    "scopes": [
+      {
+        "scope_type": "substance",
+        "value": "正确共识"
+      },
+      {
+        "scope_type": "substance",
+        "value": "行业圣经句"
+      },
+      {
+        "scope_type": "form",
+        "value": "清单列举"
+      },
+      {
+        "scope_type": "effect",
+        "value": "逻辑对照"
+      }
+    ],
+    "custom_ext": [
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "选题"
+      },
+      {
+        "key": "出自",
+        "type": "str",
+        "value": "撕裂共识的爆款选题寻找法 第s1步"
+      }
+    ]
+  },
+  {
+    "source": {
+      "id": "xhs_699308fa0000000016009697",
+      "source_type": "post",
+      "title": "真正能爆的选题,往往是你写完后感觉羞耻的",
+      "author": "方圆的增长飞轮",
+      "source_metadata": {
+        "platform": "xiaohongshu",
+        "url": "https://www.xiaohongshu.com/explore/699308fa0000000016009697"
+      }
+    },
+    "title": "撕裂共识的爆款选题寻找法",
+    "content": "目标:通过定位共识裂缝产出一个具有情绪穿透力的选题\n步骤1\n  输入:行业赛道\n  方法:列出赛道大号反复讲的‘正确共识’或‘圣经句’。例:『内容为王』、『自律即自由』。\n  产出:待撕裂的正确共识清单\n步骤2\n  输入:← s1产出\n  方法:寻找裂缝。方式 A:逻辑自问‘什么情况下,一个人严格按照这句话做,反而越做越差?’;方式 B:评论区挖掘法,在竞品爆款下找‘道理我都懂,但是……’的反馈。\n  产出:共识失灵瞬间 / 道理裂缝\n步骤3\n  输入:← s2产出\n  方法:将裂缝转化为冒犯性选题模板。例:『内容越好,死得越快』。并根据核心逻辑确认写完是否具有‘羞耻感’,进行情绪审核。\n  产出:具有情绪穿透力的选题",
+    "dim_creations": [
+      "创作"
+    ],
+    "dim_attributes": [
+      "how工序"
+    ],
+    "scopes": [
+      {
+        "scope_type": "substance",
+        "value": "圣经句"
+      },
+      {
+        "scope_type": "form",
+        "value": "穷举归纳"
+      },
+      {
+        "scope_type": "effect",
+        "value": "选题池构建"
+      },
+      {
+        "scope_type": "substance",
+        "value": "逻辑裂缝"
+      },
+      {
+        "scope_type": "form",
+        "value": "逆向思考"
+      },
+      {
+        "scope_type": "effect",
+        "value": "选题切入点"
+      },
+      {
+        "scope_type": "substance",
+        "value": "选题模板"
+      },
+      {
+        "scope_type": "feeling",
+        "value": "情绪穿透力"
+      },
+      {
+        "scope_type": "effect",
+        "value": "情绪审核"
+      },
+      {
+        "scope_type": "intent",
+        "value": "转发动力"
+      }
+    ],
+    "custom_ext": [
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "选题"
+      },
+      {
+        "key": "创作阶段",
+        "type": "str",
+        "value": "定向"
+      },
+      {
+        "key": "创作阶段",
+        "type": "str",
+        "value": "构思"
+      },
+      {
+        "key": "创作阶段",
+        "type": "str",
+        "value": "结构"
+      },
+      {
+        "key": "动作",
+        "type": "str",
+        "value": "定位调研"
+      },
+      {
+        "key": "动作",
+        "type": "str",
+        "value": "反向建模"
+      },
+      {
+        "key": "动作",
+        "type": "str",
+        "value": "选题定稿"
+      }
+    ]
+  },
+  {
+    "source": {
+      "id": "xhs_698481e1000000000a02a7c1",
+      "source_type": "post",
+      "title": "7种编剧常用的叙事结构,写剧不用愁!",
+      "author": "Irvin是个编剧(接稿版)",
+      "source_metadata": {
+        "platform": "xiaohongshu",
+        "url": "https://www.xiaohongshu.com/explore/698481e1000000000a02a7c1"
+      }
+    },
+    "title": "7种常用叙事结构清单",
+    "content": "界定:编剧常用的七种叙事逻辑框架,涵盖了从传统线性到现代非线性的不同处理方式。(选项型)\n【叙事结构选项】(清单)\n  - 三幕式结构:起承转合的线性叙事逻辑。第一幕(开端):交代背景人设与核心冲突触发;第二幕(发展):故事主体,冲突升级与人物成长;第三幕(高潮与结局):矛盾集中爆发并解决核心问题。(选用:追求标准线性逻辑、结构稳健的故事时使用。)\n  - 英雄之旅结构:围绕主角从平凡人到英雄的蜕变弧光。包含启程(开启冒险)、考验(挑战、对抗、认知提升)、归来(战胜危机并获得收获)。(选用:侧重人物成长弧线、经典成长型/冒险型题材时使用。)\n  - 非线性结构:通过闪回、插叙、倒叙或多视角切换打破时间先后逻辑。(选用:需要制造悬念、增强戏剧张力或重构时间线时使用。)\n  - 环形结构:首尾呼应形成闭环。分为非循环类(结尾与开端在场景/台词/状态上呼应产生宿命感)和带循环类(重复某段事件直到达成目标)。(选用:强调宿命感、循环感或特定主题的完整闭环时使用。)\n  - 多线叙事结构:多条独立故事线并行推进并在特定节点汇合,暗藏因果联系或共同主题。(选用:需要提升剧情密度、丰富叙事维度或通过多个视角切换叙事时使用。)\n  - 嵌套式结构:套层结构(如戏中戏、梦中梦)。一层故事包裹另一层,虚实交织,内外层在情节和结局上相互影响。(选用:需要拓展想象空间、建立层层递进的虚实关系时使用。)\n  - 反结构:又称无结构或碎片化结构。打破传统框架,不追求完整逻辑或结局,没有传统意义的主角成长。(选用:侧重氛围营造、情绪表达或人物碎片化状态描写时使用。)",
+    "dim_creations": [
+      "创作"
+    ],
+    "dim_attributes": [
+      "what构成"
+    ],
+    "scopes": [
+      {
+        "scope_type": "substance",
+        "value": "叙事结构"
+      },
+      {
+        "scope_type": "substance",
+        "value": "叙事逻辑"
+      },
+      {
+        "scope_type": "form",
+        "value": "结构框架"
+      },
+      {
+        "scope_type": "form",
+        "value": "清单"
+      },
+      {
+        "scope_type": "effect",
+        "value": "悬念"
+      },
+      {
+        "scope_type": "effect",
+        "value": "戏剧张力"
+      },
+      {
+        "scope_type": "effect",
+        "value": "氛围营造"
+      },
+      {
+        "scope_type": "feeling",
+        "value": "宿命感"
+      },
+      {
+        "scope_type": "intent",
+        "value": "叙事维度"
+      }
+    ],
+    "custom_ext": [
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "脚本"
+      }
+    ]
+  },
+  {
+    "source": {
+      "id": "xhs_67e2e39b0000000003028ff0",
+      "source_type": "post",
+      "title": "剧本创作:理解前提、人物、冲突",
+      "author": "拾意",
+      "source_metadata": {
+        "platform": "xiaohongshu",
+        "url": "https://www.xiaohongshu.com/explore/67e2e39b0000000003028ff0"
+      }
+    },
+    "title": "剧本创作的“前提”构成公式",
+    "content": "界定:前提是剧本的目标和简明概括,是决定故事走向的基础。(构成型)\n【前提构成要素】(清单)\n  - 作者立场:作者对故事核心观点的态度或立场。\n  - 人物:故事中的核心行动者。\n  - 冲突:驱动故事发展的对抗力量。\n  - 结论:由以上要素推导出的最终结局。",
+    "dim_creations": [
+      "创作"
+    ],
+    "dim_attributes": [
+      "what构成"
+    ],
+    "scopes": [
+      {
+        "scope_type": "substance",
+        "value": "剧本前提"
+      },
+      {
+        "scope_type": "form",
+        "value": "结构公式"
+      },
+      {
+        "scope_type": "effect",
+        "value": "逻辑自洽"
+      },
+      {
+        "scope_type": "intent",
+        "value": "创作方向"
+      }
+    ],
+    "custom_ext": [
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "选题"
+      },
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "脚本"
+      }
+    ]
+  },
+  {
+    "source": {
+      "id": "xhs_67e2e39b0000000003028ff0",
+      "source_type": "post",
+      "title": "剧本创作:理解前提、人物、冲突",
+      "author": "拾意",
+      "source_metadata": {
+        "platform": "xiaohongshu",
+        "url": "https://www.xiaohongshu.com/explore/67e2e39b0000000003028ff0"
+      }
+    },
+    "title": "人物的三维度维度结构",
+    "content": "界定:剧本人物应由生理、社会、心理三个维度构成的立体存在。(构成型)\n【人物维度细分】(清单)\n  - 生理维度:包括性别、年龄、外表等身体特征。\n  - 社会维度:包括阶层、职业、家庭、教育及爱好等背景资料。\n  - 心理维度:包括道德标准、性格、志向及经历过的挫折等。",
+    "dim_creations": [
+      "创作"
+    ],
+    "dim_attributes": [
+      "what构成"
+    ],
+    "scopes": [
+      {
+        "scope_type": "substance",
+        "value": "人物刻画"
+      },
+      {
+        "scope_type": "form",
+        "value": "三维结构"
+      },
+      {
+        "scope_type": "effect",
+        "value": "立体感"
+      }
+    ],
+    "custom_ext": [
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "脚本"
+      }
+    ]
+  },
+  {
+    "source": {
+      "id": "xhs_67e2e39b0000000003028ff0",
+      "source_type": "post",
+      "title": "剧本创作:理解前提、人物、冲突",
+      "author": "拾意",
+      "source_metadata": {
+        "platform": "xiaohongshu",
+        "url": "https://www.xiaohongshu.com/explore/67e2e39b0000000003028ff0"
+      }
+    },
+    "title": "冲突的四种类型清单",
+    "content": "界定:冲突是行动的源泉,根据其演化逻辑可分为四种形态。(选项型)\n【冲突形态分类】(分类)\n  - 静态冲突:局面原地踏步,原封不动。(选用:通常用于表现僵局或沉闷的环境背景。)\n  - 跳跃冲突:不服从现实或逻辑常理的突然跳跃。(选用:用于超现实或逻辑断裂的情景。)\n  - 缓慢升级:逻辑联系紧密,压力步步紧缩。(选用:最优秀的冲突形式,用于构建严密的逻辑剧作。)\n  - 预示(张力):坚定对手间的对抗承诺。(选用:用于在爆发前建立期待和危机感。)",
+    "dim_creations": [
+      "创作"
+    ],
+    "dim_attributes": [
+      "what构成"
+    ],
+    "scopes": [
+      {
+        "scope_type": "substance",
+        "value": "戏剧冲突"
+      },
+      {
+        "scope_type": "effect",
+        "value": "叙事节奏"
+      },
+      {
+        "scope_type": "feeling",
+        "value": "期待感"
+      }
+    ],
+    "custom_ext": [
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "脚本"
+      }
+    ]
+  },
+  {
+    "source": {
+      "id": "xhs_67e2e39b0000000003028ff0",
+      "source_type": "post",
+      "title": "剧本创作:理解前提、人物、冲突",
+      "author": "拾意",
+      "source_metadata": {
+        "platform": "xiaohongshu",
+        "url": "https://www.xiaohongshu.com/explore/67e2e39b0000000003028ff0"
+      }
+    },
+    "title": "故事构造的核心要素",
+    "content": "界定:构成优秀冲突和场景转折的必备结构要素。(构成型)\n【构造五要素】(清单)\n  - 过渡:人物状态转变时的小冲突。\n  - 切入点:决定性的瞬间或关键转折点。\n  - 危机:即将到来的决定性改变。\n  - 高潮:冲突爆发至顶峰。\n  - 结局:冲突解决后的最终收尾。",
+    "dim_creations": [
+      "创作"
+    ],
+    "dim_attributes": [
+      "what构成"
+    ],
+    "scopes": [
+      {
+        "scope_type": "substance",
+        "value": "情节构造"
+      },
+      {
+        "scope_type": "form",
+        "value": "结构要素"
+      },
+      {
+        "scope_type": "effect",
+        "value": "场景转折"
+      }
+    ],
+    "custom_ext": [
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "脚本"
+      }
+    ]
+  },
+  {
+    "source": {
+      "id": "xhs_67e2e39b0000000003028ff0",
+      "source_type": "post",
+      "title": "剧本创作:理解前提、人物、冲突",
+      "author": "拾意",
+      "source_metadata": {
+        "platform": "xiaohongshu",
+        "url": "https://www.xiaohongshu.com/explore/67e2e39b0000000003028ff0"
+      }
+    },
+    "title": "人物意志力原理",
+    "content": "主张:故事应源自人物,人物必须具有意志力,通过与对立人物的对抗获得发展。\n【作用机制】(机制)\n  优秀的冲突源于“攻击与反击”。这就要求驱使人物(主角)与对立人物(对手)之间必须实力相当,且双方都有坚定的意志力不愿妥协。\n【创作取舍含义】(取舍)\n  所以在设定人物时应当侧重于赋予其明确的目标和意志,避免设定软弱或无行动力的主角,否则会导致冲突过早消失或走向静态。",
+    "dim_creations": [
+      "创作"
+    ],
+    "dim_attributes": [
+      "why原理"
+    ],
+    "scopes": [
+      {
+        "scope_type": "substance",
+        "value": "人物意志"
+      },
+      {
+        "scope_type": "effect",
+        "value": "对手对抗"
+      },
+      {
+        "scope_type": "intent",
+        "value": "冲突驱动"
+      }
+    ],
+    "custom_ext": [
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "脚本"
+      }
+    ]
+  },
+  {
+    "source": {
+      "id": "xhs_680659e8000000001a007a11",
+      "source_type": "post",
+      "title": "故事设计原理拆解学习",
+      "author": "拾意",
+      "source_metadata": {
+        "platform": "xiaohongshu",
+        "url": "https://www.xiaohongshu.com/explore/680659e8000000001a007a11"
+      }
+    },
+    "title": "场景分析五步法",
+    "content": "目标:通过五个步骤对已有场景进行结构化拆解与分析\n步骤1\n  输入:原始场景素材\n  方法:确定冲突对象及目的,明确双方欲望目的的对立点。\n  产出:场景冲突描述\n步骤2\n  输入:← s1产出\n  方法:标注开篇价值,识别场景开始时的情感或价值状态。\n  产出:场景初始价值位\n步骤3\n  输入:← s2产出\n  方法:将场景分解为节拍,记录人物行为动作与反应的具体交流过程。\n  产出:场景节拍清单\n步骤4\n  输入:← s3产出\n  方法:标注结尾价值,并将其与开篇价值进行比较,观察是否发生了正负转化。\n  产出:价值变化结论\n步骤5\n  输入:← s4产出\n  方法:概述节拍并准确定位转折点的位置。\n  产出:场景结构分析总结",
+    "dim_creations": [
+      "创作"
+    ],
+    "dim_attributes": [
+      "how工序"
+    ],
+    "scopes": [
+      {
+        "scope_type": "substance",
+        "value": "场景冲突"
+      },
+      {
+        "scope_type": "effect",
+        "value": "冲突确立"
+      },
+      {
+        "scope_type": "substance",
+        "value": "初始价值位"
+      },
+      {
+        "scope_type": "effect",
+        "value": "基准建立"
+      },
+      {
+        "scope_type": "form",
+        "value": "节拍清单"
+      },
+      {
+        "scope_type": "substance",
+        "value": "行为反应"
+      },
+      {
+        "scope_type": "substance",
+        "value": "价值转化"
+      },
+      {
+        "scope_type": "effect",
+        "value": "弧度验证"
+      },
+      {
+        "scope_type": "form",
+        "value": "结构总结"
+      },
+      {
+        "scope_type": "effect",
+        "value": "转折点定位"
+      }
+    ],
+    "custom_ext": [
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "脚本"
+      },
+      {
+        "key": "创作阶段",
+        "type": "str",
+        "value": "打磨"
+      },
+      {
+        "key": "动作",
+        "type": "str",
+        "value": "确定冲突"
+      },
+      {
+        "key": "动作",
+        "type": "str",
+        "value": "标注价值"
+      },
+      {
+        "key": "动作",
+        "type": "str",
+        "value": "分解节拍"
+      },
+      {
+        "key": "动作",
+        "type": "str",
+        "value": "对比价值"
+      },
+      {
+        "key": "动作",
+        "type": "str",
+        "value": "定位转折"
+      }
+    ]
+  },
+  {
+    "source": {
+      "id": "xhs_680659e8000000001a007a11",
+      "source_type": "post",
+      "title": "故事设计原理拆解学习",
+      "author": "拾意",
+      "source_metadata": {
+        "platform": "xiaohongshu",
+        "url": "https://www.xiaohongshu.com/explore/680659e8000000001a007a11"
+      }
+    },
+    "title": "经典故事五部分构成",
+    "content": "界定:经典叙事结构中的五个核心组成部分及其层级关系。(构成型)\n【故事要素】(清单)\n  - 激励事件:打破生活平衡的决定性事件,作为‘大钩子’触发故事。分随机和有因(抉择)两种方式。\n  - 进展纠葛:通过内心、个人、社会环境三个层面的渐进式冲突引导人物走向不归点。\n  - 危机:终极决定下的危险机会,必须在两难之境中做出决定以揭示性格。\n  - 高潮:由正负价值剧变产生的意义感,满足观众情感预期。\n  - 结局:用于完成次情节逻辑、展示高潮影响及给予观众情感满足。\n【结构层级】(清单)\n  - 节拍:构成场景的最小单位,表现为动作/反应的交流。\n  - 场景:在连续时空中通过冲突表现的价值情境。\n  - 序列:由数个场景构成。\n  - 幕:由序列构成,主情节通常需要三幕结构。",
+    "dim_creations": [
+      "创作"
+    ],
+    "dim_attributes": [
+      "what构成"
+    ],
+    "scopes": [
+      {
+        "scope_type": "substance",
+        "value": "叙事演进"
+      },
+      {
+        "scope_type": "form",
+        "value": "层级结构"
+      },
+      {
+        "scope_type": "effect",
+        "value": "节奏控制"
+      },
+      {
+        "scope_type": "intent",
+        "value": "观众预期"
+      }
+    ],
+    "custom_ext": [
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "脚本"
+      }
+    ]
+  },
+  {
+    "source": {
+      "id": "xhs_680659e8000000001a007a11",
+      "source_type": "post",
+      "title": "故事设计原理拆解学习",
+      "author": "拾意",
+      "source_metadata": {
+        "platform": "xiaohongshu",
+        "url": "https://www.xiaohongshu.com/explore/680659e8000000001a007a11"
+      }
+    },
+    "title": "两难之选原理",
+    "content": "主张:真正的选择必须是不可调和的选择,而非简单的对错之分。\n【抉择性质】(定义)\n  真正的选择是‘两难之选’:在不可调和的两善中取其一,或在两恶中取其轻。\n【创作取舍】(取舍)\n  设计人物困境时,应避免设置显而易见的正确选项,必须强制人物在两个具有同等分量的价值间做痛苦抉择,以此揭示人物深层性格并产生戏剧压力。",
+    "dim_creations": [
+      "创作"
+    ],
+    "dim_attributes": [
+      "why原理"
+    ],
+    "scopes": [
+      {
+        "scope_type": "substance",
+        "value": "两难抉择"
+      },
+      {
+        "scope_type": "effect",
+        "value": "人物刻画"
+      },
+      {
+        "scope_type": "feeling",
+        "value": "两难煎熬感"
+      },
+      {
+        "scope_type": "effect",
+        "value": "戏剧压力"
+      }
+    ],
+    "custom_ext": [
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "脚本"
+      }
+    ]
+  },
+  {
+    "source": {
+      "id": "xhs_680659e8000000001a007a11",
+      "source_type": "post",
+      "title": "故事设计原理拆解学习",
+      "author": "拾意",
+      "source_metadata": {
+        "platform": "xiaohongshu",
+        "url": "https://www.xiaohongshu.com/explore/680659e8000000001a007a11"
+      }
+    },
+    "title": "情感回报递减与动态转化原理",
+    "content": "主张:情感必须通过正负价值的动态交替转化来维持观众的兴趣。\n【驱动机制】(机制)\n  根据回报递减定理,持续的快感或痛感会导致观众麻木。核心情感(快感与痛感)必须交替出现。\n【创作取舍】(取舍)\n  在剧本编写过程中,不能让人物一直处于顺利或一直处于低谷,必须刻意设计价值转折(从负到正,或从正到负),通过正负交替转化来牵引观众移情并维持情感强度。",
+    "dim_creations": [
+      "创作"
+    ],
+    "dim_attributes": [
+      "why原理"
+    ],
+    "scopes": [
+      {
+        "scope_type": "substance",
+        "value": "价值转折"
+      },
+      {
+        "scope_type": "effect",
+        "value": "情感驱动"
+      },
+      {
+        "scope_type": "feeling",
+        "value": "移情效应"
+      },
+      {
+        "scope_type": "intent",
+        "value": "兴趣维持"
+      }
+    ],
+    "custom_ext": [
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "脚本"
+      }
+    ]
+  },
+  {
+    "source": {
+      "id": "xhs_67e4bdf50000000006028a59",
+      "source_type": "post",
+      "title": "只要学会这几样,写短视频脚本真的不难❗️",
+      "author": "海狸教自媒体运营",
+      "source_metadata": {
+        "platform": "xiaohongshu",
+        "url": "https://www.xiaohongshu.com/explore/67e4bdf50000000006028a59"
+      }
+    },
+    "title": "短视频脚本编写三步法",
+    "content": "目标:从确定主题出发完成一份包含视听细节的短视频脚本\n步骤1\n  输入:创作意图\n  方法:确定选题,明确拍摄主题\n  产出:拍摄主题\n步骤2\n  输入:← s1产出\n  方法:搭建框架。确定出镜人员/形象、室内外场景、故事内容。\n  产出:脚本框架(人物/场景/事件)\n步骤3\n  输入:← s2产出\n  方法:细节完善。进行镜号排序,细化画面感构思、拍摄技巧、字幕、音乐音效及控制时长。注意:长视频15秒左右注意力维持,短视频3秒左右。\n  产出:分镜头脚本成品",
+    "dim_creations": [
+      "创作"
+    ],
+    "dim_attributes": [
+      "how工序"
+    ],
+    "scopes": [
+      {
+        "scope_type": "substance",
+        "value": "选题确定"
+      },
+      {
+        "scope_type": "intent",
+        "value": "创作方向"
+      },
+      {
+        "scope_type": "substance",
+        "value": "脚本框架"
+      },
+      {
+        "scope_type": "form",
+        "value": "叙事结构"
+      },
+      {
+        "scope_type": "effect",
+        "value": "逻辑支撑"
+      },
+      {
+        "scope_type": "substance",
+        "value": "分镜头脚本"
+      },
+      {
+        "scope_type": "form",
+        "value": "细节排布"
+      },
+      {
+        "scope_type": "effect",
+        "value": "注意力维持"
+      }
+    ],
+    "custom_ext": [
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "脚本"
+      },
+      {
+        "key": "创作阶段",
+        "type": "str",
+        "value": "定向"
+      },
+      {
+        "key": "创作阶段",
+        "type": "str",
+        "value": "构思"
+      },
+      {
+        "key": "创作阶段",
+        "type": "str",
+        "value": "打磨"
+      },
+      {
+        "key": "动作",
+        "type": "str",
+        "value": "确定选题"
+      },
+      {
+        "key": "动作",
+        "type": "str",
+        "value": "定框架"
+      },
+      {
+        "key": "动作",
+        "type": "str",
+        "value": "细化细节"
+      }
+    ]
+  },
+  {
+    "source": {
+      "id": "xhs_67e4bdf50000000006028a59",
+      "source_type": "post",
+      "title": "只要学会这几样,写短视频脚本真的不难❗️",
+      "author": "海狸教自媒体运营",
+      "source_metadata": {
+        "platform": "xiaohongshu",
+        "url": "https://www.xiaohongshu.com/explore/67e4bdf50000000006028a59"
+      }
+    },
+    "title": "短视频内容黄金结构",
+    "content": "界定:一种通用的短视频叙事与节奏排布方式(构成型)\n【结构组成】(清单)\n  - 引子:开头噱头(黄金3秒)。要求视觉冲击或独特开场。\n  - 内容主题:中间论述。条理清晰,有起伏的故事线且把握节奏。\n  - 结尾:总结得出印象点、情感共鸣或行动指令。",
+    "dim_creations": [
+      "创作"
+    ],
+    "dim_attributes": [
+      "what构成"
+    ],
+    "scopes": [
+      {
+        "scope_type": "substance",
+        "value": "短视频结构"
+      },
+      {
+        "scope_type": "form",
+        "value": "三段式叙事"
+      },
+      {
+        "scope_type": "effect",
+        "value": "黄金3秒"
+      },
+      {
+        "scope_type": "feeling",
+        "value": "情感共鸣"
+      }
+    ],
+    "custom_ext": [
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "脚本"
+      },
+      {
+        "key": "出自",
+        "type": "str",
+        "value": "短视频脚本编写三步法 第2步"
+      }
+    ]
+  },
+  {
+    "source": {
+      "id": "xhs_67e4bdf50000000006028a59",
+      "source_type": "post",
+      "title": "只要学会这几样,写短视频脚本真的不难❗️",
+      "author": "海狸教自媒体运营",
+      "source_metadata": {
+        "platform": "xiaohongshu",
+        "url": "https://www.xiaohongshu.com/explore/67e4bdf50000000006028a59"
+      }
+    },
+    "title": "常用拍摄构图方法清单",
+    "content": "界定:在脚本规划画面感时可选用的视觉组织方式(选项型)\n【构图库】(清单)\n  - 水平线构图:稳定宽广(选用:追求画面稳定与开阔感时使用)\n  - 对角线构图:动感/吸引注意力(选用:需要增加画面张力或引导视觉焦点时使用)\n  - 中心构图:主体突出(选用:强调单一核心主体时使用)\n  - 框式构图:窥视感/神秘感(选用:需要利用前景营造空间层次或神秘氛围时使用)\n  - 九宫格构图:均衡醒目(选用:追求符合大众审美的平衡感时使用)\n  - 三分法构图:化繁为简(选用:画面元素较多需要留白或梳理主次时使用)",
+    "dim_creations": [
+      "创作"
+    ],
+    "dim_attributes": [
+      "what构成"
+    ],
+    "scopes": [
+      {
+        "scope_type": "substance",
+        "value": "拍摄构图"
+      },
+      {
+        "scope_type": "form",
+        "value": "视觉组织"
+      },
+      {
+        "scope_type": "effect",
+        "value": "空间层次"
+      },
+      {
+        "scope_type": "feeling",
+        "value": "神秘感"
+      }
+    ],
+    "custom_ext": [
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "脚本"
+      }
+    ]
+  },
+  {
+    "source": {
+      "id": "xhs_67e4bdf50000000006028a59",
+      "source_type": "post",
+      "title": "只要学会这几样,写短视频脚本真的不难❗️",
+      "author": "海狸教自媒体运营",
+      "source_metadata": {
+        "platform": "xiaohongshu",
+        "url": "https://www.xiaohongshu.com/explore/67e4bdf50000000006028a59"
+      }
+    },
+    "title": "Vlog脚本创作公式集",
+    "content": "界定:针对不同情绪和目的的Vlog叙事要素组合(选项型)\n【分类公式】(清单)\n  - 共鸣公式:人物+状态+情感(选用:旨在引发观众情绪上的认同)\n  - 好奇公式:描述时间/观点+悬念等(选用:旨在提高视频完播率和抓人眼球)\n  - 其余公式:引发互动型、干货输出型、综合热点型(选用:根据视频具体目的(涨粉、教学或蹭热度)选择)",
+    "dim_creations": [
+      "创作"
+    ],
+    "dim_attributes": [
+      "what构成"
+    ],
+    "scopes": [
+      {
+        "scope_type": "substance",
+        "value": "Vlog公式"
+      },
+      {
+        "scope_type": "effect",
+        "value": "悬念设置"
+      },
+      {
+        "scope_type": "intent",
+        "value": "完播率"
+      },
+      {
+        "scope_type": "feeling",
+        "value": "情绪认同"
+      }
+    ],
+    "custom_ext": [
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "灵感"
+      },
+      {
+        "key": "业务阶段",
+        "type": "str",
+        "value": "脚本"
+      }
+    ]
+  }
+]

+ 6 - 1
创作知识拆解框架.md

@@ -44,7 +44,12 @@
 
 **铁律**:
 - 没工序就**别硬造假 how**(把"7 种叙事结构"硬掰成 how 选型框架就是这个病)。
-- 一颗 = 一个完整东西,绝不拆成碎片。
+- 一颗 = 一个完整东西,绝不拆成碎片,也别把半截工序吹成完整方法论。
+
+**how 资格闸(封 how 前两道硬闸,任一不过就不是 how)**:
+- **闸① 有序性**:后步必须消费前步 output、换序就崩;若各步并列可换序、互不依赖(信号:相邻 step 的 output 近义/重复)→ 是「并列招式」,改成一颗 **What 方法清单**,别套假顺序。
+- **闸② 走到交付物**:最后一步 output = purpose 收尾名词;若步骤只产"原料/草图/分析"没收口 → **半截 how**,要么补收尾步、要么把 purpose 降到与实际 output 对齐。
+- **整颗 drop**:纯软件 UI 操作流程(打开 App→点按钮→设参数→导出)、或非内容创作题材(游戏设计/产品/运营/投流)→ 不入库;自检:`业务阶段`(灵感/选题/脚本)一个都贴不上 = 跑偏内容创作的强信号。
 
 ---
 

+ 95 - 37
创作知识提取-skill/extraction/phase1-frame.md

@@ -8,57 +8,105 @@
 
 ---
 
-## A. 拆颗顺序 —— how 先抽,what/why 都单列(含组件)
+## A. 拆颗顺序 —— 类型中立:先切单元,逐元按「驱动哪个决策」判类型
+
+**三类是对等的**(what/how/why 各驱动一个不同决策),**不预设谁是主角、不先找 how**。
 
 ```
-这帖有没有"不可跳步的工序(how)"?
-├─ 有 → 抽 how 骨架(可能 1-2 个)→ 出 How 颗(主颗,role=主)
-│        ① how 步骤里嵌的 what/why → 既写在步骤里,又【各单列成一颗组件颗】
-│           (role=组件,parent={how_id, step})。如某步产出一份"要素清单/构成表"、本身可单独复用 = 一颗 what 组件。
-│        ② how 没覆盖到的、独立的 what/why → 单列成颗(role=主,parent=null)
-└─ 没有 → 它本来就是一颗 What(界定/清单) 或 Why(原理)(role=主)
+1. 切单元:把帖里能独立检索复用的知识,切成一个个「单元」(先不贴类型)。
+2. 逐元判类型——问这个单元「驱动哪个创作决策」(用官方定义):
+   · 影响【元素选择】(是什么 / 由什么构成 / 有哪些可选)        → What
+   · 影响【脉络与结构】(怎么一步步把某输入做成成品)            → How
+   · 影响【取舍判断】(背后的原理 / 标准 / 平台逻辑)            → Why
+3. How 凭「序列为真」上位(§A2 两道闸):只有「后步吃前步 + 走到成品」才算 How;
+   并列招式/选项清单 → 其实是 What;单讲道理/取舍 → Why。别因为「看着像步骤」就判 How。
+4. 组件链接(分类之后才做,不是抽取入口):某 What/Why 若【恰好】是某 How 某步的
+   产出(what)或判断依据(why) → 标 role=组件、parent={how_id,step}(既单列成颗、又连回 how);
+   其余 What/Why 是 role=主、parent=null。
 ```
 
-**判 step(压进 how,不单列为 step)**:①产出半成品 ②被同帖另一块当输入 ③拿走则成品残缺。
-**判组件颗(step 里的 what/why 该不该单列)**:见 §C 判据。
-**铁律**:没工序**别硬造假 how**(一组「N 选 1」的并列清单当选型菜单,就压进所属 step,别硬掰成 how 框架);一颗 = 一个完整东西,不拆碎。
+> 每个单元都是**独立一颗**;组件只是"分类后顺手连了一条到 how 的链接",**不改变它是独立知识**这件事。三类谁多谁少都正常——一帖可能全 What、也可能 how+what+why 混。
+
+**判 step(某动作压进 how 当一步,不单拎)**:①产出半成品 ②被同帖另一块当输入 ③拿走则成品残缺。
+**判组件颗(连回 how 的那条链接该不该建)**:见 §C 判据。
+
+### A2. how 资格闸 —— 两道硬闸,任一过不了就别当 how
+
+把一组动作封成 how 之前,必须同时过这两闸;否则它不是 how。
+
+**闸① 有序性(步骤之间真有数据依赖吗?)**
+> 后一步是否**消费前一步的 output**、换了顺序就跑不通?
+> - 是 → 真有序,可成 how。
+> - **否(各步并列、可换序、互不依赖,甚至只做其中一个也成立)→ 这是一组「并列招式/途径」,不是工序**。改成一颗 **What(方法清单)**,别套 step1→step2 的假顺序(有序语义会骗下游 AI 以为必须按序、后步吃前步)。
+> 识别信号:相邻 step 的 output **近义或重复**(都产出"同一种东西")= 八成是并列,不是链条。
+
+**闸② 走到交付物(最后一步的 output = purpose 承诺的成品吗?)**
+> purpose 用什么名词收尾("一篇成稿"/"一个选题"/"一条脚本"),**最后一步的 output 就必须是那个东西**。
+> - 是 → 工序完整。
+> - **否(步骤只产出"原料/半成品/草图/一堆分析",没有把它们收口成成品的那一步)→ 半截 how**。两条出路选一:**(a) 补上收尾步**(整合/筛选/定稿那一步,原帖若真有就补);**(b) 把 purpose 降到与实际 output 对齐**(别用"…法/…矩阵/…框架"把半成品吹成成品)。purpose 的抽象层不能比 steps 高一截、中间断链。
+
+**铁律**:没工序**别硬造假 how**;一颗 = 一个完整东西,不拆碎,也不把半截工序包装成完整方法论。
+
+> 🌰 跨题材示例(只示意判法,**别套用这里的题材/词**):
+> - 假 how(应改 What 清单):「找选题灵感的 3 个途径:①翻同行评论区 ②看搜索下拉词 ③问目标读者」——三者并列、可换序、做一个就行 → 是一颗 What(途径清单),不是 step1→2→3。
+> - 真 how:「腌制 → 下锅 → 收汁」——收汁吃下锅的产出,换序就崩,最后一步出成品 → 合格 how。
+> - 半截 how(应补收尾或降 purpose):purpose 写「写出一篇成稿」,但步骤只到「列大纲、攒素材」就停了 → 缺"把大纲素材写成稿"的收尾步;要么补上,要么把 purpose 降为「成稿前的备料法」。
 
 ---
 
 ## B. 三类成形模板(三条对等 lane)
 
-### How(工序)— role 主
-`purpose`(把某输入一路做成成品)+ 有序 `steps`,每步:
-- `intent` 目的(≤25字,动作+对象)
-- `directive` 怎么做(含判断标准;**原帖示例必须原文保留** `例:『…』`;不编原文没有的例子)
-- `output` 产出
+> **核心原则:每类知识都要落在它的「决策落点」上**——这是这条知识对下游 AI 的真正价值。
+> - **How**(影响脉络/结构)→ 落点 = **输入→方法→产出 的链**(每步吃什么、吐什么)。
+> - **What**(影响元素选择)→ 落点 = **可选元素 + 选择线索**(选项型每个选项"何时/为何选它")。
+> - **Why**(影响取舍判断)→ 落点 = **对创作的取舍**(所以该多写/砍/侧重什么)。
+> 描述部分尽管自由,但**决策落点必须落到**——只描述不落点 = 半成品知识。
+
+### How(工序)— role 主(必须先过 §A2 两道闸)
+`purpose`(把某输入一路做成成品;**它的收尾名词 = 最后一步 output**,见闸②)+ 有序 `steps`(**后步消费前步 output**,见闸①),每步是一次**变换 输入→方法→产出**:
+- `input` 输入(这步**吃什么**:来自 `工序输入` 或上一步的产出,如 `← s1产出`;**首步**写工序总输入)
+- `directive` 方法(怎么做,含判断标准;**原帖示例必须原文保留** `例:『…』`;不编原文没有的例子)
+- `output` 产出(这步**吐什么**;会成为下一步的 `input`)
 - `出处`(图N / 视频时间)
 
+> **为什么用 输入→方法→产出 而不是"目的"**:旧的"目的"和产出重复("找X"≈产出"X"),是冗余。改成显式的 input 让"后步吃前步"(闸①)变成结构可验证,也让 AI 真能把状态一步步串下去。整条工序的总目标只在颗级 `purpose` 说一次,不在每步重复。
+
 > **每颗都带 `出处`(溯源用)**:How 颗的 `出处` 在每个 step 上(这步来自哪些卡);What/Why 颗在颗级给 `出处`(这颗来自哪些卡,如 ["图3","卡片2"])。出处填卡片号(图N=第N张图,卡片N=视频第N段),让前端能点回原图/原视频段。
 
 ### What(是什么)— role 主 或 组件
-`界定`(**唯一必填**,一句话这是什么,做检索/预览锚点)+ `主体`:**0..N 个自由小节**,每节 `{小标题, 形式?, 内容?, 条目?}`。无 steps。+ 颗级 `出处`。
-- `形式`(可选·开放提示):这节是什么形态——清单 / 分类 / 判据 / 对照 / 定义 / 步骤要点…(从内容判,没把握就省,别硬塞)。
-- `内容`(散文)与 `条目`(`[{词, 说明}]` 结构化列表)**二选一或并存**;有就写、没有不写。
-- **别套模板**:一个 what 可能只有「界定 + 一节清单」,也可能「界定 + 三节(清单 + 对照 + 判据)」。节数/形态由本帖内容决定。
-> 组件 what:它是某 how 某步的产出类型,但本身可独立复用(如某步产出的一份「X 要素」清单)。
+`界定`(**唯一必填**,一句话这是什么,做锚点)+ `kind`(**必填**:`构成` 或 `选项`)+ `主体`:**0..N 个自由小节**,每节 `{小标题, 形式?, 内容?, 条目?}`。无 steps。+ 颗级 `出处`。
+
+**先判这颗 What 是哪种(决定要不要选择线索):**
+- **`构成`型**(用**全部**):「X 由 A+B+C 组成」,要素是拼齐的,不是挑的(如 人物三维度=生理+社会+心理、故事五部分)。落点 = 完备性,**条目不需要选择线索**。
+- **`选项`型**(**选其一/几**):「有 A/B/C 几种可选」,要从中挑(如 7 种叙事结构、几种开场公式、几种构图手法)。落点 = **元素选择**——**每个条目必带 `选择线索`:何时/为何选它**(没有选择线索,AI 只能背不能选 = 这颗废了一半)。
+
+每节:
+- `形式`(可选·开放提示):清单 / 分类 / 判据 / 对照 / 定义…(从内容判,没把握就省)。
+- `内容`(散文)与 `条目` **二选一或并存**。**选项型**的 `条目` 是 `[{词, 说明, 选择线索}]`;**构成型**的 `条目` 是 `[{词, 说明}]`。
+- ⚠️ **保留原文、不转译不脑补(What 的命根)**:`界定 / 说明 / 构成`**尽量照搬原帖原话**——能引原文就引,少改写、少换词;**原帖给了几句就留几句,别压成一句**(这是知识本体,删了就废)。**严禁补原帖没有的内容**:原帖写"生理(性别、年龄、外表)"就只写这些,不许擅自加"遗传";原帖只给公式"作者立场+人物+冲突+结论"就照写,不许替作者给每个词编定义。**宁可保留原帖的口语/不完美措辞,也不要 AI 润色后的"漂亮转译"。**
+- 若某项有**子结构**(如"三幕式"含一幕/二幕/三幕),把**每个子点的原文描述都带进 `说明`**(可分行)。例:三幕式说明应含"一幕交代背景人设、二幕是主体冲突升级、三幕高潮爆发并解决",而不是只写"分一二三幕"。
+- **别套模板**:节数/形态由本帖内容决定。
+> 组件 what:它是某 how 某步的产出类型,但本身可独立复用。
+> ⚠️ 选择线索必须**从原帖抽**,原帖只列了选项没说何时用 → `选择线索` 留空(别编),但仍要标 `kind:选项`。
 
 ### Why(为什么)— role 主 或 组件
-`主张`(**唯一必填**,核心观点,做锚点)+ `支撑`:**0..N 个自由小节**,每节 `{小标题, 形式?, 内容?, 条目?}`。无 steps。+ 颗级 `出处`。
-- `形式`(可选·开放提示):依据 / 机制 / 影响 / 例证 / 前提 / 反例…(从内容判)。
-- **不再强制「依据 + 影响」三件套**:有的 why 只有主张 + 一条依据;有的还带平台机制、读者心理、对创作取舍的影响——**有几条写几条**。
+`主张`(**唯一必填**,核心观点/原理,做锚点)+ `支撑`:**1..N 个自由小节**,每节 `{小标题, 形式?, 内容?, 条目?}`。无 steps。+ 颗级 `出处`。
+- **决策落点必填**:`支撑` 里**必须有一节 `形式:取舍`**——写「**这条原理对创作的取舍含义**:所以该多写什么 / 砍什么 / 侧重什么 / 何时适用」。这是 Why 的命根(官方:why 影响取舍判断);只讲原理不落取舍 = 半成品
+- 其余 `形式` 自由:依据 / 机制 / 平台逻辑 / 读者心理 / 例证 / 反例…(有几条写几条)
 > 组件 why:它是某 how 某步 directive 里"为什么这样选"的判断依据,但本身可独立复用。
+> ⚠️ 取舍必须从原帖逻辑推得、忠实;原帖只给原理没明说取舍 → 据原理写出**最直接**的一条创作含义,别过度发挥。
 
 ---
 
-## C. 组件颗判据(最难一刀
+## C. 组件链接判据(分类之后才问
 
-对每块(step 里嵌的、或 how 之外的)what/why 问
+每颗 What/Why 都已是独立一颗(§A)。再问一句它**要不要连回某个 how**
 
-> **脱离这个 how,它还独立成立、能被单独检索复用吗?**
-> - **是 → 单列成一颗**(step 里嵌的→组件颗带 parent;how 之外的→主颗 parent=null)。
-> - **否(只是这一步一次性指令、无复用价值)→ 只留在步骤里**,不单列。
-> - **N 选 1 并列清单**:清单整体若是可复用知识(如某帖列的一组「X 种结构 / X 种手法 / X 个要素」)→ 单列一颗 What;否则压进 step 菜单。
+> **这颗 What/Why 是不是某 how 某步的产出(what)或判断依据(why)?**
+> - **是 → 标 `role=组件, parent={how_id,step}`**(仍是独立一颗,只多一条到 how 的链接)。
+> - **否 → `role=主, parent=null`**(独立,不连)。
+> - **反向提醒**:如果某"指令"只是某步一次性的话、脱离那步就不成立、无复用价值 → 它**不该单独成颗**,留在 step 的 directive 里即可。
+> - **N 选 1 并列清单**:一组「X 种结构 / X 种手法 / X 个要素」整体可复用 → 它就是一颗 **What(选项型)**,不是 how 的步骤。
 
 > ⚠️ 本文示例(含下方模板里的词)都只是示意结构,**值一律从本帖内容抽,别套用示例里的任何具体词**。
 
@@ -68,6 +116,11 @@
 剔:纯工艺执行(器材/打光/剪辑软件/调色/导出)、具体素材、太空泛。
 边界看「设计决策 vs 工艺执行」:景别/构图/字幕/结构=设计决策→保留为 step;操作设备软件那层→剔。
 
+**整颗级 drop(兜底——①若已判越界整帖 is_empty 就不会到这;这里拦"混在 in-scope 里的越界颗")。按两轴判,任一不过即 drop:**
+1. **轴A 不过·产出物不是内容**:这颗教你做出来的是"题材本身"而非"关于它的内容"——游戏玩法/关卡设计、产品开发、电商/运营/选品、行业分析等 → drop(同样讲游戏:做游戏=drop,做游戏视频=收)。
+2. **轴B 不过·是制作不是创作**:一整颗全是「打开某 App/小程序 → 粘贴/点按钮 → 设参数 → 生成/导出」的工具操作路径,没有可迁移的创作决策 → drop。判据:把平台名一换这套就失效 = 不可迁移 = 制作不是创作。
+> ⚠️ **别靠硬标业务阶段蒙混过关**:业务阶段(灵感/选题/脚本)是给 in-scope 颗用的;一颗越界(游戏/工具操作)却被硬塞个"脚本/选题"来过关 = 错。**贴不上三值本身就是越界信号**——该 drop,不是改标签。
+
 ---
 
 ## E. 轻标签(顺手打,按类型分流)
@@ -75,11 +128,13 @@
 | 标签 | how | what | why | 取值 |
 |---|:--:|:--:|:--:|---|
 | 知识类型 | ✓ | ✓ | ✓ | how/what/why(已在 type 字段) |
-| 业务阶段(颗级多值) | ✓ | ✓ | ✓ | 灵感/选题/脚本 |
+| 业务阶段(颗级多值,**必填≥1**) | ✓ | ✓ | ✓ | 灵感/选题/脚本 |
 | 创作阶段(**每步1个**) | ✓ | ✗ | ✗ | 定向/构思/结构/成文/打磨 |
 | 动作(**每步1个**,开放) | ✓ | ✗ | ✗ | 具体手法,帖子语言 |
 
 > 创作阶段/动作只有 how 有(要有步骤)。what/why 只给业务阶段。
+> **业务阶段每颗至少 1 个、不许空**:按"这条知识用在内容创作的哪个环节"判——找方向/找题材前的认知=灵感;定具体选题/角度=选题;写脚本/正文/结构=脚本(可多选)。**拿不准就选最贴近的,但只能在这三个里选**;三个都贴不上 → 见 §D,这颗多半不是内容创作知识,回头看是否该 drop(而不是硬塞一个或留空)。
+> 含义对齐:灵感/选题/脚本是**内容创作的业务环节**,不是泛义的"阶段";别把游戏设计/产品改造这类硬塞进"脚本"。
 
 ---
 
@@ -94,7 +149,7 @@
       "id": "k1", "type": "how", "role": "主", "parent": null,
       "title": "<框架名,从本帖抽>", "purpose": "<一句话目标>", "业务阶段": ["<灵感/选题/脚本,可多选>"],
       "steps": [
-        {"id":"s1","intent":"<目的>","directive":"<怎么做,原帖示例用 例:『…』 原文保留>","output":"<产出>",
+        {"id":"s1","input":"<这步吃什么:工序总输入 / ← s?产出>","directive":"<方法,含判断标准,原帖示例用 例:『…』 原文保留>","output":"<这步吐什么,会成下一步 input>",
          "出处":["<图N/视频时间>"],"创作阶段":"<定向/构思/结构/成文/打磨>","动作":"<这步的具体手法,从内容抽>","作用域":[]}
       ],
       "dropped": ["<剔除项 — 理由>"]
@@ -103,10 +158,10 @@
       "id": "k2", "type": "what", "role": "组件", "parent": {"how_id":"k1","step":2},
       "title": "<某 how 步骤产出的、可独立复用的清单/构成名>", "业务阶段": ["<…>"],
       "出处": ["<这颗来自哪些卡片,如 图3 / 卡片2>"],
-      "界定": "<一句话这是什么(必填)>",
+      "界定": "<一句话这是什么(必填)>", "kind": "<构成 或 选项(必填)>",
       "主体": [
         {"小标题":"<这节讲什么>","形式":"<清单/分类/判据/对照/定义,可省>",
-         "条目":[{"词":"<要点名>","说明":"<一句话>"}]},
+         "条目":[{"词":"<要点名>","说明":"<忠实保留原帖描述,几句留几句;有子结构就把各子点描述都带上>","选择线索":"<选项型必填:何时/为何选它;构成型省略>"}]},
         {"小标题":"<另一节,可省>","形式":"对照","内容":"<散文式说明,没有结构化条目时用>"}
       ],
       "作用域": []
@@ -114,10 +169,10 @@
     {
       "id": "k3", "type": "why", "role": "主", "parent": null,
       "title": "<原理名>", "业务阶段": ["<…>"], "出处": ["<这颗来自哪些卡片>"],
-      "主张": "<核心观点(必填)>",
+      "主张": "<核心观点/原理(必填)>",
       "支撑": [
         {"小标题":"<为什么成立>","形式":"依据","内容":"<原理/平台逻辑/读者心理>"},
-        {"小标题":"<对创作的取舍,可省>","形式":"影响","内容":"<取舍含义>"}
+        {"小标题":"<对创作的取舍(必填,命根)>","形式":"取舍","内容":"<所以创作时该多写/砍/侧重什么、何时适用>"}
       ],
       "作用域": []
     }
@@ -127,6 +182,9 @@
 
 ## 过关条件 → 进 ③
 - 颗数合理(how 主颗 + 组件颗 + orphan,可混);每颗有 type/role/parent。
-- how 颗:每步 intent/directive/output/出处 + 创作阶段 + 动作;what 颗:界定(必填)+ 主体小节(0..N);why 颗:主张(必填)+ 支撑小节(0..N)。
-- 组件颗有 parent cross-ref;颗级业务阶段都填了。
+- **每颗 how 都过了 §A2 两道闸**:步骤真有序(后步吃前步)+ 最后一步 output = purpose 收尾名词。并列招式已改 What;半截工序已补收尾或已降 purpose。
+- **决策落点都落到了**:how 每步有 `input`(首步=工序输入,后步指向前步产出);what `kind` 已填,**选项型每条目带 `选择线索`**(原帖没说才留空);why `支撑` 里**有一节 `形式:取舍`**。
+- how 颗:每步 input/directive/output/出处 + 创作阶段 + 动作;what 颗:界定 + kind + 主体小节;why 颗:主张 + 支撑小节(含取舍)。
+- 组件颗有 parent cross-ref;**每颗业务阶段非空(≥1,∈灵感/选题/脚本)**;贴不上三值的非内容创作颗已 drop。
+- 纯软件操作流程 / 非内容创作题材已整颗 drop(§D)。
 - 所有颗的 `作用域` 留空(含 how 的每步),③ 来填。

+ 21 - 12
创作知识提取-skill/extraction/phase2-scope.md

@@ -20,10 +20,15 @@
 | scope_type | 中文 | 管什么(一句话) | 跨题材示例(仅示意各类长什么样,**勿照搬**) |
 |---|---|---|---|
 | `substance` | 实质 | **讲什么**——题材 / 对象 / 内容实质 | 食材搭配(做菜)、通勤穿搭(穿搭)、增肌动作(健身)、选题方向(自媒体) |
-| `form` | 形式 | **怎么呈现**——结构 / 体裁 / 表现手法 | 三段式结构、对比清单、步骤分解、九宫格排版 |
+| `form` | 形式 | **怎么呈现**——结构 / 体裁 / 表现手法 | 三段式结构、对比清单、分步结构、九宫格排版 |
 | `feeling` | 感受 | **勾什么情绪**——读者/观众的情感反应 | 治愈感、紧张感、信任感、惊喜 |
-| `effect` | 作用 | **起什么表达功能**——在内容里干的那个"活" | 制造悬念、降低门槛、强化记忆、引导收藏 |
-| `intent` | 意图 | **创作者图什么**——最终目的 | 涨粉、提升完播、促进下单、建立人设 |
+| `effect` | 作用 | **起什么表达功能**——在内容里起的那类功能 | 悬念、记忆点、氛围营造、推进节奏、行动引导 |
+| `intent` | 意图 | **创作者图什么**——最终目的 | 涨粉、完播、转化、人设、引流 |
+
+> ⚠️ **值一律起「名词」,不起「动宾」**——所有 5 类(尤其 作用 / 意图)写成"它属于哪一类"的名词,**不要**写成"在干嘛"的动宾。**动词无论在开头还是结尾都不行**,砍掉动词只留名词核心:
+> ❌ 动词**开头**:定位认知裂缝 / 建立观众预期 / 揭示人物性格 / 制造悬念 → ✅ 认知裂缝 / 观众预期 / 人物刻画 / 悬念
+> ❌ 动词**结尾**:完播率提升 / 爆款打造 / 叙事逻辑构建 / 创作方向确定 / 逻辑验证 → ✅ 完播率 / 爆款 / 叙事逻辑 / 创作方向 / 逻辑自洽
+> 自检:值里若含 定位/建立/揭示/制造/寻找/确立 或 提升/打造/构建/确定/验证/优化 等动词 → 删掉它。粒度对齐分类树叶子(多为 2-6 字具体名词,如 氛围营造 / 推进节奏 / 友情 / 科普)。
 
 **一步不必 5 类都给**——只给这步真正涉及的。多数步 2-3 类。
 
@@ -37,30 +42,34 @@
   - ✅ 「增肌动作」=实质(对象);「步骤分解」=形式(呈现方式)
   - ❌ 把"步骤分解"塞进实质(它是怎么排,不是讲什么)
 
-- **实质 ↔ 作用**:实质=内容对象本身;作用=这步在内容里**干的功能动作**
-  - ✅ 「通勤穿搭」=实质;「降低门槛」=作用(它干的活)
-  - ❌ 把"降低门槛"当实质(它是功能不是对象)
+- **实质 ↔ 作用**:实质=内容对象本身;作用=这步在内容里起的**功能类别**(名词)
+  - ✅ 「通勤穿搭」=实质;「易读性」=作用
+  - ❌ 把"易读性"当实质(它是功能不是对象)
 
 - **作用 ↔ 意图**:作用=**段内**表达功能(手段层);意图=**最终**目的(目的层)。
-  - ✅ 「制造悬念」=作用(手段);「提升完播」=意图(图的最终结果)
-  - ❌ 把"提升完播"当作用(它是图什么,不是这步干的活
+  - ✅ 「悬念」=作用(手段);「完播」=意图(图的最终结果)
+  - ❌ 把"完播"当作用(它是图什么,不是这步起的功能
 
 - **感受 ↔ 意图**:感受=**观众**的情绪体验;意图=**创作者**的目的。
-  - ✅ 「治愈感」=感受(观众的感觉);「促进收藏」=意图(作者想要的)
+  - ✅ 「治愈感」=感受(观众的感觉);「收藏」=意图(作者想要的)
   - ❌ 把"治愈感"当意图(那是观众感受,不是作者目的)
 
 - **形式 ↔ 作用**:形式=呈现的**结构形态**;作用=起的**功能**。
-  - ✅ 「对比清单」=形式;「强化记忆」=作用
+  - ✅ 「对比清单」=形式;「记忆点」=作用
+
+- **层级对齐(意图别跳层)**:值要贴合**这颗本身的层级**。一个**具体工具/手法颗**的 `intent`,标它自己那层的创作意图(如某叙事工具→「勾住注意力/驱动情节」);**别跳到整条内容的运营终极目标**(涨粉/完播/下单)——那是更上游、更大颗的意图,贴到小工具颗上就串味了。
+- **自洽(值别和这颗自相矛盾)**:值不能跟这颗的实质打架。一颗讲「打破/反某结构」的知识,`substance` 不能标那个"被打破的结构"本身(如"反结构"的实质不是"结构框架");先想清这颗到底在讲什么,再起词。
 
 ---
 
 ## 3. 值的格式约束(原子化)
 
-1. **短词/短词组**,非整句、非动宾长句。尽量 ≤6 字(专有名/约定俗成可略长)。
+1. **名词/名词短语**,尽量 ≤6 字(专有名/约定俗成可略长)。**禁动宾**(见 §1 ⚠️):动词在开头或结尾一律名词化,砍掉动词留名词核心(揭示人物性格→人物刻画;完播率提升→完播率)。
 2. **原子**:不许用"和/与/、/,"拼接多义。复合就拆成多个值(同一类可多值)。
 3. **不跨类重复**:一个值只进它该进的那一列;别在实质和作用都塞同一个词。
 4. **去重**:同一步同一类不重复同义值。
 5. 用**本帖语境里的具体词**,不要泛词("内容"、"主题"、"信息"这种放之四海皆准的不要),更不要照搬本文示例里的词。
+6. **感受要具体到"这颗真正勾的那种感受"**:别用可套万物的宽泛情绪词("紧张/紧迫/震撼"这类)——能更准就更准(如观众面对两难抉择那种 → "两难煎熬感",比"紧迫感"贴)。回扣分偏低(<0.75)只说明树里还没有,正常新建即可,但前提是这个词本身已经够具体。
 
 ---
 
@@ -76,7 +85,7 @@
 ## 5. 执行三阶段
 
 ### 阶段一 · 提候选值
-逐步读这颗(how 读 `intent/directive/output`;what/why 读其 界定+主体 / 主张+支撑 各小节)的真实内容,按 §1-§4 标相关的几类,每类一个**从本帖抽的**候选具体值。
+逐步读这颗(how 读 `input/directive/output`;what/why 读其 界定+主体 / 主张+支撑 各小节)的真实内容,按 §1-§4 标相关的几类,每类一个**从本帖抽的**候选具体值。
 
 ### 阶段二 · 回扣对齐(调工具)
 对每个候选值跑:

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.