Explorar el Código

Why 重构:主张+支撑[依据/取舍] → 单段「阐述」,忠实整合不加工"怎么用"

- 解构阶段 Why 只还原原理本身(是什么+为什么),不再合成取舍/操作指令
- 阐述=忠实整合原帖几张卡(可缝接:串接/调序/连接词/删冗余;禁改实质/补/润色/转祈使)
- phase1 提示词 4 处、decompose(build_content/drop_fake_whys/_slim)、why schema 全同步
- 去掉强制取舍 + 依据/取舍 形式分段

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

+ 3 - 5
scripts/decompose.py

@@ -233,9 +233,7 @@ def drop_fake_whys(knowledges: list[dict]) -> list[dict]:
     out = []
     for k in knowledges:
         if k.get("type") == "why":
-            payload = json.dumps({"主张": k.get("主张"),
-                                  "支撑": [{"小标题": b.get("小标题"), "内容": b.get("内容")}
-                                          for b in k.get("支撑", [])]}, ensure_ascii=False)
+            payload = json.dumps({"阐述": k.get("阐述")}, ensure_ascii=False)
             try:
                 r = chat_json(GATE_WHY_REFUTE, payload, timeout=90)
                 not_why, verdict, reason = bool(r.get("not_why")), r.get("verdict", ""), r.get("reason", "")
@@ -264,7 +262,7 @@ def _slim(knowledges: list[dict]) -> list[dict]:
                            "directive": (s.get("directive") or "")[:500], "output": s.get("output")}
                           for s in k.get("steps", [])]
         else:
-            e["内容"] = {x: k.get(x) for x in ("概要", "维度拆分规则", "body", "主张", "支撑") if k.get(x)}
+            e["内容"] = {x: k.get(x) for x in ("概要", "维度拆分规则", "body", "阐述") if k.get(x)}
         slim.append(e)
     return slim
 
@@ -375,7 +373,7 @@ def build_content(k: dict):
                 "维度拆分规则": k.get("维度拆分规则") if k.get("kind") == "子集" else None,
                 "body": [{"item_name": it.get("item_name", ""), "item_desc": it.get("item_desc", ""),
                           "作用域": it.get("作用域") or []} for it in (k.get("body") or [])]}
-    return "\n".join([f"主张:{k.get('主张','')}"] + _sections(k.get("支撑")))
+    return k.get("阐述", "")
 
 
 def _sections(blocks) -> list[str]:

+ 1 - 1
scripts/rebuild_payloads.py

@@ -50,7 +50,7 @@ def content(k: dict):
                 "维度拆分规则": k.get("维度拆分规则") if k.get("kind") == "子集" else None,
                 "body": [{"item_name": it.get("item_name", ""), "item_desc": it.get("item_desc", ""),
                           "作用域": it.get("作用域") or []} for it in (k.get("body") or [])]}
-    return "\n".join([f"主张:{k.get('主张','')}"] + _sections(k.get("支撑")))
+    return k.get("阐述", "")
 
 
 def main() -> None:

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

@@ -61,7 +61,7 @@
 > **核心原则:每类知识都要落在它的「决策落点」上**——这是这条知识对下游 AI 的真正价值。
 > - **How**(影响脉络/结构)→ 落点 = **输入→方法→产出 的链**(每步吃什么、吐什么)。
 > - **What**(影响元素选择)→ 落点 = **可选元素 + 选用判断**(子集型把每个选项"何时/为何选它"并入其 item_desc)。
-> - **Why**(影响取舍判断)→ 落点 = **对创作的取舍**(所以该多写/砍/侧重什么)
+> - **Why**(解释为什么)→ 落点 = **把原理本身(是什么+为什么)忠实整合说清**;"怎么用/取舍"是下游应用的事,解构不做
 > 描述部分尽管自由,但**决策落点必须落到**——只描述不落点 = 半成品知识。
 
 ### How(工序)— role 主(必须先过 A2节 两道闸)
@@ -98,10 +98,11 @@
 > ⚠️ 子集型即使原帖只列了选项没说何时用 → `item_desc` 只写是什么(别编"何时选"),但仍要标 `kind:子集` 并给 `维度拆分规则`。
 
 ### Why(为什么)— role 主 或 组件
-`主张`(**唯一必填**,核心观点/原理,做锚点)+ `支撑`:**1..N 个自由小节**,每节 `{小标题, 形式?, 内容?, 条目?}`。无 steps。+ 颗级 `出处`。
-- **形式只有两类**(对应 主张/依据/取舍 三件套的后两件):`依据`(这条原理**凭什么成立 / 怎么起作用**——机制、平台逻辑、读者心理、例证/反例**全归这一类,不再细分**);`取舍`(对创作的取舍含义)。
-- **决策落点必填**:`支撑` 里**必须有一节 `形式:取舍`**——写「**这条原理对创作的取舍含义**:所以该多写什么 / 砍什么 / 侧重什么 / 何时适用」。这是 Why 的命根(why 影响取舍判断);只讲原理不落取舍 = 半成品。
-- ⚠️ **取舍 ↔ how 边界**:取舍写的是**原则层的"该往哪偏 / 何时适用"(决策倾向)**,**不是手把手操作步骤**。一旦写成"第一步…第二步…"的可执行流程,那就是 how 不是 why——回去拆 how,或只留原则性的取舍判断。
+`阐述`(**唯一必填**,一段连贯文字:这条原理**是什么 + 为什么成立/起作用**)。无 steps、无小节、无形式标。+ 颗级 `出处`。
+- **忠实整合(命根)**:把原帖讲这条原理的几张卡,缝成一段**读得通的话**。
+  - ✅ 允许(为通顺):串接、调顺序、加连接词、删重复。
+  - ❌ 禁止(守忠实):改实质、补原帖没有的观点、润色成"漂亮转译"、把描述改成祈使("应/必须/严禁")。
+- **只说"是什么+为什么",不延伸"怎么用"**:原帖即便给了创作建议,也按原话留在阐述里、不单独加工成取舍/操作指令——"怎么用"是下游的事。一句话:**AI 只做缝,不做编,不教怎么用。**
 > 组件 why:对应某 how 的某一步(那步的依据/原理),但本身是独立一颗、可单独复用。不对应任何步 → 就是单独的一条(role=主)。
 > ⚠️ 取舍必须从原帖逻辑推得、忠实;原帖只给原理没明说取舍 → 据原理写出**最直接**的一条创作含义,别过度发挥。
 
@@ -178,11 +179,7 @@
     {
       "id": "k3", "type": "why", "role": "主", "parent": null,
       "title": "<原理名>", "业务阶段": ["<…>"], "出处": ["<这颗来自哪些卡片>"],
-      "主张": "<核心观点/原理(必填)>",
-      "支撑": [
-        {"小标题":"<为什么成立/起作用>","形式":"依据","内容":"<机制/平台逻辑/读者心理/例证>"},
-        {"小标题":"<对创作的取舍(必填,命根)>","形式":"取舍","内容":"<所以创作时该多写/砍/侧重什么、何时适用>"}
-      ],
+      "阐述": "<一段:这条原理是什么+为什么成立。忠实整合原帖几张卡原话——可缝接,不可改实质/补/润色/转祈使>",
       "作用域": []
     }
   ]
@@ -192,8 +189,8 @@
 ## 过关条件 → 进 ③
 - 颗数合理(how 主颗 + 组件颗 + orphan,可混);每颗有 type/role/parent。
 - **每颗 how 都过了 A2节 两道闸**:步骤真有序(后步吃前步)+ 最后一步 output = purpose 收尾名词。并列招式已改 What;半截工序已补收尾或已降 purpose。
-- **决策落点都落到了**:how 每步有 `input`(首步=工序输入,后步指向前步产出);what `kind` 已填、子集型 `维度拆分规则` 已填且每条 `item_desc` 含「何时/为何选」(原帖没说才只写是什么);why `支撑` 里**有一节 `形式:取舍`**
-- how 颗:每步 input/directive/output/出处 + 创作阶段 + 动作;what 颗:概要 + kind + 维度拆分规则(子集) + body 条目(item_name/item_desc);why 颗:主张 + 支撑小节(含取舍)。
+- **决策落点都落到了**:how 每步有 `input`(首步=工序输入,后步指向前步产出);what `kind` 已填、子集型 `维度拆分规则` 已填且每条 `item_desc` 含「何时/为何选」(原帖没说才只写是什么);why `阐述` 已忠实整合(无改实质/补/润色/转祈使)
+- how 颗:每步 input/directive/output/出处 + 创作阶段 + 动作;what 颗:概要 + kind + 维度拆分规则(子集) + body 条目(item_name/item_desc);why 颗:title + 阐述(忠实整合"是什么+为什么")。
 - 组件颗有 parent cross-ref;**每颗业务阶段非空(≥1,∈灵感/选题/脚本)**;贴不上三值的非内容创作颗已 drop。
 - 纯软件操作流程 / 非内容创作题材已整颗 drop(D节)。
 - 所有颗的 `作用域` 留空(含 how 的每步),③ 来填。

+ 2 - 2
创作知识提取-skill/format/ingest-payload-why.schema.json

@@ -2,7 +2,7 @@
   "$schema": "http://json-schema.org/draft-07/schema#",
   "$id": "ingest-payload-why.schema.json",
   "title": "创作知识 Ingest Payload · Why(原理)",
-  "$comment": "Why 颗 = 解释某做法/判断背后的道理。content 为拍平字符串:主张 + 各支撑小节(含必填的「取舍」节)。一颗知识 = 一个 payload;同帖多颗共享 source.id。",
+  "$comment": "Why 颗 = 解释某做法/判断背后的道理。content 为一段文字:阐述(这条原理是什么+为什么成立,忠实整合原帖;不含'怎么用')。一颗知识 = 一个 payload;同帖多颗共享 source.id。",
   "type": "object",
   "required": ["source", "title", "content", "dim_creations", "dim_attributes", "scopes"],
   "additionalProperties": false,
@@ -31,7 +31,7 @@
     "content": {
       "type": "string",
       "minLength": 1,
-      "$comment": "拍平字符串:主张 + 各支撑小节(机制/依据/取舍…,取舍必有)"
+      "$comment": "一段文字:阐述(是什么+为什么,忠实整合原帖,不含'怎么用')"
     },
     "dim_creations": {
       "type": "array",