Переглянути джерело

feat(query):阶段→改名「业务阶段」+灵感组加回"灵感"本身+实质/形式列头标注(3-4层)

① 轴名/家族名 阶段→业务阶段;② 灵感组 找素材/内容方向/案例拆解 + 加回"灵感"本身=4个;
③ 实质/形式 确认取 depth 3-4 非叶子,列头标注「实质(3-4层)」「形式(3-4层)」。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
SamLee 2 тижнів тому
батько
коміт
590757e230

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
acquisition/web/app/dist/assets/index-C2LJfRpb.js


+ 1 - 1
acquisition/web/app/dist/index.html

@@ -4,7 +4,7 @@
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <title>创作知识 · 找帖子</title>
-    <script type="module" crossorigin src="/app/assets/index-BN2PAPaC.js"></script>
+    <script type="module" crossorigin src="/app/assets/index-C2LJfRpb.js"></script>
     <link rel="stylesheet" crossorigin href="/app/assets/index-BweFrMrP.css">
   </head>
   <body>

+ 7 - 4
acquisition/web/app/src/pages/CreationDemo.jsx

@@ -5,7 +5,10 @@ import React, { useEffect, useState } from 'react'
 // 阶段列按 灵感/选题/脚本 分组缩进,只显示用到的子词。
 const PARTS_KEY = {       // 家族 axes 里的轴名 → 每条 query 的 parts 里的键
   '实质': '实质', '形式': '形式', '作用/感受/意图': '目的',
-  '阶段': '阶段', '模态': '模态', '知识类型': '知识类型',
+  '业务阶段': '业务阶段', '模态': '模态', '知识类型': '知识类型',
+}
+const AXIS_LABEL = {      // 列头显示用的标注(取值层级)
+  '实质': '实质(3-4层)', '形式': '形式(3-4层)',
 }
 
 // 该家族 query 在某轴上实际用过的去重值(按首次出现顺序)
@@ -21,9 +24,9 @@ function usedValues(items, pk) {
 function AxisCol({ ax, fam, axisValues }) {
   const used = usedValues(fam.items, PARTS_KEY[ax])
   const usedSet = new Set(used)
-  const grouping = axisValues['阶段']            // {灵感:[...],选题:[...],脚本:[...]}
+  const grouping = axisValues['业务阶段']         // {灵感:[...],选题:[...],脚本:[...]}
   let body
-  if (ax === '阶段' && grouping && !Array.isArray(grouping)) {
+  if (ax === '业务阶段' && grouping && !Array.isArray(grouping)) {
     const groups = Object.entries(grouping)
       .map(([grp, words]) => [grp, words.filter(w => usedSet.has(w))])
       .filter(([, words]) => words.length)
@@ -38,7 +41,7 @@ function AxisCol({ ax, fam, axisValues }) {
   }
   return (
     <div className="axcol">
-      <div className="axhd">{ax}<span className="gn">{used.length}</span></div>
+      <div className="axhd">{AXIS_LABEL[ax] || ax}<span className="gn">{used.length}</span></div>
       <div className="axlist">{body}</div>
     </div>
   )

+ 17 - 17
scripts/build_creation_demo.py

@@ -30,7 +30,7 @@ MODALITY = ["视频", "图片"]   # 被创作内容的形态(与教学帖本身
 # 创作阶段意图轴(脊柱):灵感/选题/脚本 展开成创作者真会搜的词(query构造.md)。真实数据里
 # "脚本"0次、但 开头/钩子/标题/封面/选题 各几十次——故用展开词,不用三个干阶段词。
 STAGE_INTENT = {
-    "灵感": ["找素材", "内容方向", "案例拆解"],
+    "灵感": ["找素材", "内容方向", "案例拆解", "灵感"],
     "选题": ["选题", "爆款选题", "选题方向"],
     "脚本": ["脚本", "文案", "开头", "钩子", "结构", "标题", "封面", "结尾"],
 }
@@ -109,30 +109,30 @@ def main():
     SHI = _nonleaf(idx, "实质", depths=(3, 4), under="理念")   # 类目层,非元素
     XING = _nonleaf(idx, "形式", depths=(3, 4), under="架构")  # 类目层,非元素
     POOL = _leaves(idx, "作用") + _leaves(idx, "感受") + _leaves(idx, "意图")
-    print(f"实质 {len(SHI)} / 形式 {len(XING)} / 目的池 {len(POOL)} / 阶段 {len(INTENT)}")
+    print(f"实质 {len(SHI)} / 形式 {len(XING)} / 目的池 {len(POOL)} / 业务阶段 {len(INTENT)}")
 
     def pick(seq):
         return rng.choice(seq)
 
     # 每家族:生成器 + 用到的轴(给前端标列)
-    # 阶段=脊柱,每族必带;模态+知识类型固定收尾;前面配 实质/形式/目的 之一或组合
+    # 业务阶段=脊柱,每族必带;模态+知识类型固定收尾;前面配 实质/形式/目的 之一或组合
     families = [
-        {"key": "f1", "name": "实质 × 阶段", "axes": ["实质", "阶段", "模态", "知识类型"],
-         "gen": lambda: {"parts": {"实质": pick(SHI), "阶段": pick(INTENT), "模态": pick(MODALITY), "知识类型": pick(KTYPE)}}},
-        {"key": "f2", "name": "形式 × 阶段", "axes": ["形式", "阶段", "模态", "知识类型"],
-         "gen": lambda: {"parts": {"形式": pick(XING), "阶段": pick(INTENT), "模态": pick(MODALITY), "知识类型": pick(KTYPE)}}},
-        {"key": "f3", "name": "实质 × 形式 × 阶段", "axes": ["实质", "形式", "阶段", "模态", "知识类型"],
-         "gen": lambda: {"parts": {"实质": pick(SHI), "形式": pick(XING), "阶段": pick(INTENT), "模态": pick(MODALITY), "知识类型": pick(KTYPE)}}},
-        {"key": "f4", "name": "(作用/感受/意图) × 阶段", "axes": ["作用/感受/意图", "阶段", "模态", "知识类型"],
-         "gen": lambda: {"parts": {"目的": pick(POOL), "阶段": pick(INTENT), "模态": pick(MODALITY), "知识类型": pick(KTYPE)}}},
-        {"key": "f5", "name": "纯阶段", "axes": ["阶段", "模态", "知识类型"],
-         "gen": lambda: {"parts": {"阶段": pick(INTENT), "模态": pick(MODALITY), "知识类型": pick(KTYPE)}}},
+        {"key": "f1", "name": "实质 × 业务阶段", "axes": ["实质", "业务阶段", "模态", "知识类型"],
+         "gen": lambda: {"parts": {"实质": pick(SHI), "业务阶段": pick(INTENT), "模态": pick(MODALITY), "知识类型": pick(KTYPE)}}},
+        {"key": "f2", "name": "形式 × 业务阶段", "axes": ["形式", "业务阶段", "模态", "知识类型"],
+         "gen": lambda: {"parts": {"形式": pick(XING), "业务阶段": pick(INTENT), "模态": pick(MODALITY), "知识类型": pick(KTYPE)}}},
+        {"key": "f3", "name": "实质 × 形式 × 业务阶段", "axes": ["实质", "形式", "业务阶段", "模态", "知识类型"],
+         "gen": lambda: {"parts": {"实质": pick(SHI), "形式": pick(XING), "业务阶段": pick(INTENT), "模态": pick(MODALITY), "知识类型": pick(KTYPE)}}},
+        {"key": "f4", "name": "(作用/感受/意图) × 业务阶段", "axes": ["作用/感受/意图", "业务阶段", "模态", "知识类型"],
+         "gen": lambda: {"parts": {"目的": pick(POOL), "业务阶段": pick(INTENT), "模态": pick(MODALITY), "知识类型": pick(KTYPE)}}},
+        {"key": "f5", "name": "纯业务阶段", "axes": ["业务阶段", "模态", "知识类型"],
+         "gen": lambda: {"parts": {"业务阶段": pick(INTENT), "模态": pick(MODALITY), "知识类型": pick(KTYPE)}}},
     ]
-    # 各部件按固定顺序拼成原串(内容维度在前,阶段+模态+知识类型固定收尾)
-    order = ["实质", "形式", "目的", "阶段", "模态", "知识类型"]
+    # 各部件按固定顺序拼成原串(内容维度在前,业务阶段+模态+知识类型固定收尾)
+    order = ["实质", "形式", "目的", "业务阶段", "模态", "知识类型"]
 
-    # 阶段值存「分组结构」(STAGE_INTENT),前端按 灵感/选题/脚本 分组+缩进展示;其余轴是扁平数组
-    out = {"axis_values": {"实质": SHI, "形式": XING, "目的池": POOL, "阶段": STAGE_INTENT, "模态": MODALITY, "知识类型": KTYPE},
+    # 业务阶段值存「分组结构」(STAGE_INTENT),前端按 灵感/选题/脚本 分组+缩进展示;其余轴是扁平数组
+    out = {"axis_values": {"实质": SHI, "形式": XING, "目的池": POOL, "业务阶段": STAGE_INTENT, "模态": MODALITY, "知识类型": KTYPE},
            "families": []}
     for fam in families:
         seen, items = set(), []

Деякі файли не було показано, через те що забагато файлів було змінено