Explorar el Código

kind 受控值守卫:LLM 偶发"多维度关系"等变体归一到 子集/多维关系/序列

- decompose.py / rebuild_payloads.py 加 KIND_FIX 守卫(仿业务阶段/创作阶段)
- phase1-frame.md kind 必填项补注"勿写变体如多维度关系"

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
SamLee hace 3 semanas
padre
commit
ac0d1122a1

+ 4 - 0
scripts/decompose.py

@@ -57,6 +57,8 @@ SOURCES = [
 SRC2CN = {"substance": "实质", "form": "形式", "feeling": "感受", "effect": "作用", "intent": "意图"}
 TYPE2ATTR = {"how": "how工序", "what": "what构成", "why": "why原理"}
 CSTAGE = {"定向", "构思", "结构", "成文", "打磨"}  # 创作阶段受控 5 值
+KINDS = {"子集", "多维关系", "序列"}               # what.kind 受控 3 值
+KIND_FIX = {"多维度关系": "多维关系", "多维": "多维关系", "集合": "子集", "序列型": "序列"}  # LLM 偶发变体归一
 REUSE_THRESHOLD = 0.90
 
 
@@ -421,6 +423,8 @@ def main() -> None:
         how_titles = {k.get("id"): k.get("title") for k in knowledges if k.get("type") == "how"}
         for k in knowledges:
             k["业务阶段"] = [b for b in (k.get("业务阶段") or []) if b in ("灵感", "选题", "脚本")]  # 守卫:只留合法业务阶段
+            if k.get("type") == "what" and k.get("kind") not in KINDS:  # 守卫:what.kind 受控值,LLM 偶发变体归一
+                k["kind"] = KIND_FIX.get((k.get("kind") or "").strip(), k.get("kind"))
             for s in k.get("steps", []):  # 守卫:创作阶段只留合法 5 值,非法(如"定稿/输出")丢弃
                 if s.get("创作阶段") not in CSTAGE:
                     s["创作阶段"] = None

+ 4 - 0
scripts/rebuild_payloads.py

@@ -14,6 +14,8 @@ ROOT = Path(__file__).resolve().parent.parent
 FW = ROOT / "web/frameworks.json"
 PL = ROOT / "web/payloads.json"
 TYPE2ATTR = {"how": "how工序", "what": "what构成", "why": "why原理"}
+KINDS = {"子集", "多维关系", "序列"}
+KIND_FIX = {"多维度关系": "多维关系", "多维": "多维关系", "集合": "子集", "序列型": "序列"}  # LLM 偶发变体归一
 
 
 def _sections(blocks) -> list:
@@ -61,6 +63,8 @@ def main() -> None:
         how_titles = {k["id"]: k.get("title") for k in ks if k["type"] == "how"}
         for k in ks:
             k["业务阶段"] = [b for b in (k.get("业务阶段") or []) if b in ("灵感", "选题", "脚本")]
+            if k.get("type") == "what" and k.get("kind") not in KINDS:  # what.kind 受控值归一
+                k["kind"] = KIND_FIX.get((k.get("kind") or "").strip(), k.get("kind"))
             for s in k.get("steps", []):
                 if s.get("创作阶段") not in ("定向", "构思", "结构", "成文", "打磨"):
                     s["创作阶段"] = None

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

@@ -76,7 +76,7 @@
 > **每颗都带 `出处`(溯源用)**:How 颗的 `出处` 在每个 step 上(这步来自哪些卡);What/Why 颗在颗级给 `出处`(这颗来自哪些卡,如 ["图3","卡片2"])。出处填卡片号(图N=第N张图,卡片N=视频第N段),让前端能点回原图/原视频段。
 
 ### What(是什么)— role 主 或 组件
-`概要`(**唯一必填**,一句话这是什么,做锚点)+ `kind`(**必填**:`子集` / `多维关系` / `序列`)+ `维度拆分规则`(**仅子集填**:这组选项是按什么维度划分出来的,如「冲突形态」「叙事结构类型」;多维关系/序列填 null)+ `body`:**1..N 个扁平条目**,每条 `{item_name, item_desc, 作用域:[]}`(无小节、无形式标)。无 steps。+ 颗级 `出处`。
+`概要`(**唯一必填**,一句话这是什么,做锚点)+ `kind`(**必填**:恰好取 `子集` / `多维关系` / `序列` 之一,**勿写变体**如"多维度关系")+ `维度拆分规则`(**仅子集填**:这组选项是按什么维度划分出来的,如「冲突形态」「叙事结构类型」;多维关系/序列填 null)+ `body`:**1..N 个扁平条目**,每条 `{item_name, item_desc, 作用域:[]}`(无小节、无形式标)。无 steps。+ 颗级 `出处`。
 
 **先判这颗 What 是哪种(决定 item_desc 要不要带"何时选"):**
 按"部件之间什么关系"分三种(两步判:①部件是**可挑着用的选项/清单(挑一个或多个都行)**?→ `子集`;②否则**多个维度/要素并陈、不是挑出来的**——有前后顺序?有→`序列`,无→`多维关系`):