瀏覽代碼

feat(query):创作Demo 重构——「阶段意图」升为脊柱,每族必带

依据三处本地证据(拆解框架把"阶段贴不上=非创作"当判定闸门、原query构造设计把阶段意图轴
定为创作核心轴、真实挖出的知识点选题/标题/封面/钩子/开头各几十次而形式标签近乎0)+行业流程
(创作=选题+脚本),将创作阶段从第5家族升为所有家族的脊柱。阶段用"创作者真会搜的展开词"
(找素材/选题/爆款选题/开头/钩子/结构/标题/封面/文案…15个),而非灵感/选题/脚本三个干词。
新5家族:实质×阶段 / 形式×阶段 / 实质×形式×阶段 / 目的池×阶段 / 纯阶段;阶段意图+模态+
知识类型固定收尾。保留率 16-20/20。前端加阶段意图列。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
SamLee 2 周之前
父節點
當前提交
e8351c3142

File diff suppressed because it is too large
+ 0 - 0
acquisition/web/app/dist/assets/index-zBoyjJ5B.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-DVogz9-e.js"></script>
+    <script type="module" crossorigin src="/app/assets/index-zBoyjJ5B.js"></script>
     <link rel="stylesheet" crossorigin href="/app/assets/index-C_LZCGg-.css">
   </head>
   <body>

+ 2 - 2
acquisition/web/app/src/pages/CreationDemo.jsx

@@ -3,8 +3,8 @@ import React, { useEffect, useState } from 'react'
 // 创作Query正交 Demo:仿"制作query"的多列 UI——左侧若干「轴列」(实质/形式/目的池/阶段/知识类型),
 // 右侧「Query 词」列出该家族机械正交出的原串(过 query_filter 后标 留/扔)。顶部 5 家族切换。
 const AXIS_KEY = {        // 家族里写的轴名 → axis_values 里的键
-  '实质': '实质', '模态': '模态', '形式': '形式', '作用/感受/意图': '目的池',
-  '创作阶段': '创作阶段', '知识类型': '知识类型',
+  '实质': '实质', '形式': '形式', '作用/感受/意图': '目的池',
+  '阶段意图': '阶段意图', '模态': '模态', '知识类型': '知识类型',
 }
 
 export default function CreationDemo() {

+ 28 - 18
scripts/build_creation_demo.py

@@ -3,8 +3,10 @@
 不真实搜,只产 query 供前端看。轴严格取分类树的"创作支":
   实质 = 实质树·理念支(排除表象)   形式 = 形式树·架构支(排除呈现)
   目的池 = 作用树 + 感受树 + 意图树 全部合一(随机取)
-  创作阶段 = 灵感/选题/脚本(不补)  知识类型 = 怎么做/有哪些/为什么
-5 家族:① 实质×形式 ② 实质×目的池 ③ 纯形式 ④ 形式×目的池 ⑤ 创作阶段×实质,各 20 条。
+  阶段意图 = 灵感/选题/脚本 展开成创作者真会搜的词(选题/开头/钩子/标题/封面/文案…)——脊柱,每族必带
+  模态 = 视频/图片   知识类型 = 怎么做/有哪些/为什么
+脊柱(每条都带):… 阶段意图 + 模态 + 知识类型;前面配 实质/形式/目的 之一或组合。
+5 家族:① 实质×阶段 ② 形式×阶段 ③ 实质×形式×阶段 ④ 目的池×阶段 ⑤ 纯阶段,各 20 条。
 每条原串过 query_filter.txt(keep/排除),存 keep+reason 供前端展示。
 用法:PYTHONPATH=. CK_ENV_FILE=.env python scripts/build_creation_demo.py
 """
@@ -23,9 +25,16 @@ TREES = ROOT / "scope_trees" / "trees_index.json"
 FILTER_PROMPT = ROOT / "acquisition" / "query_filter.txt"   # 筛选词在 acquisition/
 OUT = ROOT / "data" / "queries" / "creation_demo.json"
 PER = 20
-STAGES = ["灵感", "选题", "脚本"]
 KTYPE = ["怎么做", "有哪些", "为什么"]
-MODALITY = ["视频", "图文"]   # 被创作内容的形态(与教学帖本身格式无关),正交进所有家族
+MODALITY = ["视频", "图片"]   # 被创作内容的形态(与教学帖本身格式无关),正交进所有家族
+# 创作阶段意图轴(脊柱):灵感/选题/脚本 展开成创作者真会搜的词(query构造.md)。真实数据里
+# "脚本"0次、但 开头/钩子/标题/封面/选题 各几十次——故用展开词,不用三个干阶段词。
+STAGE_INTENT = {
+    "灵感": ["找素材", "内容方向", "案例拆解", "灵感"],
+    "选题": ["选题", "爆款选题", "选题方向"],
+    "脚本": ["脚本", "文案", "开头", "钩子", "结构", "标题", "封面", "结尾"],
+}
+INTENT = [w for ws in STAGE_INTENT.values() for w in ws]   # 扁平成一个池,随机取
 
 
 def _segs(p):
@@ -100,28 +109,29 @@ 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(STAGES)}")
+    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(MODALITY), "形式": pick(XING), "知识类型": pick(KTYPE)}}},
-        {"key": "f2", "name": "实质 × (作用/感受/意图)", "axes": ["实质", "模态", "作用/感受/意图", "知识类型"],
-         "gen": lambda: {"parts": {"实质": pick(SHI), "模态": pick(MODALITY), "目的": pick(POOL), "知识类型": pick(KTYPE)}}},
-        {"key": "f3", "name": "纯形式", "axes": ["模态", "形式", "知识类型"],
-         "gen": lambda: {"parts": {"模态": pick(MODALITY), "形式": pick(XING), "知识类型": pick(KTYPE)}}},
-        {"key": "f4", "name": "形式 × (作用/感受/意图)", "axes": ["模态", "形式", "作用/感受/意图", "知识类型"],
-         "gen": lambda: {"parts": {"模态": pick(MODALITY), "形式": pick(XING), "目的": pick(POOL), "知识类型": pick(KTYPE)}}},
-        {"key": "f5", "name": "创作阶段 × 实质", "axes": ["实质", "模态", "创作阶段", "知识类型"],
-         "gen": lambda: {"parts": {"实质": pick(SHI), "模态": pick(MODALITY), "创作阶段": pick(STAGES), "知识类型": 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 = ["实质", "形式", "目的", "阶段意图", "模态", "知识类型"]
 
-    out = {"axis_values": {"实质": SHI, "模态": MODALITY, "形式": XING, "目的池": POOL, "创作阶段": STAGES, "知识类型": KTYPE},
+    out = {"axis_values": {"实质": SHI, "形式": XING, "目的池": POOL, "阶段意图": INTENT, "模态": MODALITY, "知识类型": KTYPE},
            "families": []}
     for fam in families:
         seen, items = set(), []

Some files were not shown because too many files changed in this diff