Преглед изворни кода

作用轴改创作者视角 + 前端 ribbon 补全判定闸/名词化

- phase2-scope:作用栏定义从"成品内部功能"改为"对创作的作用"(创作者视角)——定义+3处边界示例(实质↔作用 / 作用↔意图 / 形式↔作用),值仍为名词形态(情节组织/节奏控制/看点),不破禁动宾、不碰分类树(对不上即新建)
- web/index.html:ribbon 4→5 步,新增「判断是否是创作知识」(gate_admit/refute/tiebreak)、「给知识归类」补 normalize_scope;多提示词弹窗按文件名分节;卡片压窄保持一行

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
SamLee пре 4 недеља
родитељ
комит
8ebed833f2
2 измењених фајлова са 20 додато и 15 уклоњено
  1. 11 6
      web/index.html
  2. 9 9
      创作知识提取-skill/extraction/phase2-scope.md

+ 11 - 6
web/index.html

@@ -33,7 +33,7 @@
   .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{flex:1;min-width:118px;border:1px solid #e2e8f0;border-radius:8px;padding:8px 9px;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}
@@ -201,12 +201,15 @@ const STEPS=[
   {key:"read",label:"读懂帖子",desc:"把图、视频读成文字",
    why:"创作知识常在图里、不在正文;这一步只忠实转写、不判断,避免一步干两件事。",
    src:["/prompt-read/extract.txt"]},
+  {key:"gate",label:"判断是否是创作知识",desc:"判这帖是不是『图文/视频创作』知识:两次判断+分歧裁决,不是就整帖跳过",
+   why:"靠模型语义理解判、不靠关键词(换措辞就绕过);两视角(一个判'是创作'、一个专挑'是制作/越界'的茬)+ 边界倾向排除,把『用工具做视频/游戏设计』挡在门外,省下后面整条拆解。",
+   src:["/prompt-read/gate_admit.txt","/prompt-read/gate_refute.txt","/prompt-read/gate_tiebreak.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:"scope",label:"给知识归类",desc:"标好 讲什么 / 起什么作用 / 哪个创作环节 → 标签收成规范名词 → 和已有分类库对上号",
+   why:"这 5 类标签最容易串味,单独写厚;标签先名词化(动宾→名词)再做向量回扣,既规范又能挂上分类库。",
+   src:["/prompt-skill/phase2-scope.md","/prompt-read/normalize_scope.txt"]},
   {key:"store",label:"存进知识库",desc:"整理成统一格式存起来,供以后调用",
    why:"纯拼接 + 校验的确定性活,程序自动做——没有提示词,让 AI 来干只会帮倒忙。",
    src:null}
@@ -357,8 +360,10 @@ function App(){
     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")}));
+    const multi=st.src.length>1;
+    Promise.all(st.src.map(u=>fetch(u,{cache:"no-store"}).then(r=>r.ok?r.text():"(未找到 "+u+")").catch(()=>"(加载失败 "+u+")")
+      .then(t=>multi?("## 〔"+u.split("/").pop()+"〕\n\n"+t):t)))
+      .then(txts=>setPm({label:st.label,why:st.why,text:txts.join("\n\n")}));
   }
   if(!items.length) return <div className="empty">加载中…</div>;
   const it=items[sel];

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

@@ -22,7 +22,7 @@
 | `substance` | 实质 | **讲什么**——题材 / 对象 / 内容实质 | 食材搭配(做菜)、通勤穿搭(穿搭)、增肌动作(健身)、选题方向(自媒体) |
 | `form` | 形式 | **怎么呈现**——结构 / 体裁 / 表现手法 | 三段式结构、对比清单、分步结构、九宫格排版 |
 | `feeling` | 感受 | **勾什么情绪**——读者/观众的情感反应 | 治愈感、紧张感、信任感、惊喜 |
-| `effect` | 作用 | **起什么表达功能**——在内容里起的那类功能 | 悬念、记忆点、氛围营造、推进节奏、行动引导 |
+| `effect` | 作用 | **对创作起什么用**——这条知识帮创作者达成的创作效果(名词) | 情节组织、节奏控制、冲突、看点、选题切入、逻辑自洽 |
 | `intent` | 意图 | **创作者图什么**——最终目的 | 涨粉、完播、转化、人设、引流 |
 
 > ⚠️ **值一律起「名词」,不起「动宾」**——所有 5 类(尤其 作用 / 意图)写成"它属于哪一类"的名词,**不要**写成"在干嘛"的动宾。**动词无论在开头还是结尾都不行**,砍掉动词只留名词核心:
@@ -42,20 +42,20 @@
   - ✅ 「增肌动作」=实质(对象);「步骤分解」=形式(呈现方式)
   - ❌ 把"步骤分解"塞进实质(它是怎么排,不是讲什么)
 
-- **实质 ↔ 作用**:实质=内容对象本身;作用=这步在内容里起的**功能类别**(名词)。
-  - ✅ 「通勤穿搭」=实质;「易读性」=作用
-  - ❌ 把"易读性"当实质(它是功能不是对象
+- **实质 ↔ 作用**:实质=讲的对象本身;作用=这条知识帮创作者做成的**创作效果**(名词)。
+  - ✅ 「通勤穿搭」=实质;「节奏控制」=作用
+  - ❌ 把"节奏控制"当实质(它是创作效果不是题材
 
-- **作用 ↔ 意图**:作用=**段内**表达功能(手段层);意图=**最终**目的(目的层)。
-  - ✅ 「悬念」=作用(手段);「完播」=意图(图的最终结果)
-  - ❌ 把"完播"当作用(它是图什么,不是这步起的功能
+- **作用 ↔ 意图**:作用=帮创作者做的**创作动作/效果**(手段层);意图=**最终**想要的结果(目的层)。
+  - ✅ 「看点」=作用(创作效果);「完播」=意图(最终想要的结果)
+  - ❌ 把"完播"当作用(它是最终图什么,不是创作效果
 
 - **感受 ↔ 意图**:感受=**观众**的情绪体验;意图=**创作者**的目的。
   - ✅ 「治愈感」=感受(观众的感觉);「收藏」=意图(作者想要的)
   - ❌ 把"治愈感"当意图(那是观众感受,不是作者目的)
 
-- **形式 ↔ 作用**:形式=呈现的**结构形态**;作用=起的**功能**。
-  - ✅ 「对比清单」=形式;「记忆点」=作用
+- **形式 ↔ 作用**:形式=呈现的**结构形态**;作用=帮创作者达成的**创作效果**。
+  - ✅ 「对比清单」=形式;「节奏控制」=作用
 
 - **层级对齐(意图别跳层)**:值要贴合**这颗本身的层级**。一个**具体工具/手法颗**的 `intent`,标它自己那层的创作意图(如某叙事工具→「勾住注意力/驱动情节」);**别跳到整条内容的运营终极目标**(涨粉/完播/下单)——那是更上游、更大颗的意图,贴到小工具颗上就串味了。
 - **自洽(值别和这颗自相矛盾)**:值不能跟这颗的实质打架。一颗讲「打破/反某结构」的知识,`substance` 不能标那个"被打破的结构"本身(如"反结构"的实质不是"结构框架");先想清这颗到底在讲什么,再起词。